{
"version": 3,
"sources": ["../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/adapters.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/logger.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/connection_monitor.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/internal.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/connection.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/subscription.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/subscription_guarantor.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/subscriptions.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/consumer.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/index.js", "../../../node_modules/lodash.debounce/index.js", "../../../node_modules/debounce/index.js", "../../../node_modules/fontawesome/index.js", "../../../node_modules/sweetalert2/dist/sweetalert2.js", "../../../node_modules/moment/moment.js", "../../javascript/slimselect.min.js", "../../../node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/snakeize.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable_stream_source_element.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/fetch_requests.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/index.js", "../../../node_modules/@hotwired/stimulus/dist/stimulus.js", "../../../node_modules/stimulus-clipboard/dist/stimulus-clipboard.mjs", "../../../node_modules/hotkeys-js/dist/hotkeys.esm.js", "../../../node_modules/stimulus-use/dist/index.js", "../../../node_modules/stimulus-notification/dist/stimulus-notification.mjs", "../../../node_modules/stimulus-password-visibility/dist/stimulus-password-visibility.mjs", "../../../node_modules/stimulus-dropdown/dist/stimulus-dropdown.mjs", "../../../node_modules/stimulus-rails-nested-form/dist/stimulus-rails-nested-form.mjs", "../../../node_modules/stimulus-textarea-autogrow/dist/stimulus-textarea-autogrow.mjs", "../../../node_modules/stimulus-rails-autosave/dist/stimulus-rails-autosave.es.js", "../../../node_modules/flatpickr/dist/esm/types/options.js", "../../../node_modules/flatpickr/dist/esm/l10n/default.js", "../../../node_modules/flatpickr/dist/esm/utils/index.js", "../../../node_modules/flatpickr/dist/esm/utils/dom.js", "../../../node_modules/flatpickr/dist/esm/utils/formatting.js", "../../../node_modules/flatpickr/dist/esm/utils/dates.js", "../../../node_modules/flatpickr/dist/esm/utils/polyfills.js", "../../../node_modules/flatpickr/dist/esm/index.js", "../../javascript/controllers/application.js", "../../components/actions_button_component_controller.js", "../../components/avatar_component_controller.js", "../../components/back_to_top_component_controller.js", "../../components/combobox_with_search_component_controller.js", "../../components/form_field_component_controller.js", "../../components/landing_header_component_controller.js", "../../components/manager/sidebar_component_controller.js", "../../components/tabs_component_controller.js", "../../../node_modules/@rails/actioncable/app/assets/javascripts/actioncable.esm.js", "../../javascript/channels/consumer.js", "../../javascript/controllers/action_cable_controller.js", "../../javascript/controllers/ai_chatbot_controller.js", "../../javascript/controllers/calendar_event_form_controller.js", "../../javascript/controllers/calendar_picker_controller.js", "../../javascript/controllers/carrousel_on_truncate_controller.js", "../../javascript/controllers/chat_controller.js", "../../javascript/controllers/chat_permissions_controller.js", "../../javascript/controllers/check_all_controller.js", "../../javascript/controllers/claim_form_controller.js", "../../javascript/controllers/clipboard_controller.js", "../../javascript/controllers/cookie_banner_controller.js", "../../javascript/controllers/countdown_and_refresh_controller.js", "../../javascript/controllers/dashboards_controller.js", "../../javascript/controllers/date_range_picker_controller.js", "../../javascript/controllers/datetimepicker_controller.js", "../../javascript/controllers/dynamic_list_controller.js", "../../../node_modules/@rails/ujs/app/assets/javascripts/rails-ujs.esm.js", "../../javascript/controllers/editable_input_controller.js", "../../javascript/controllers/file_preview_controller.js", "../../javascript/controllers/flex_simulator_controller.js", "../../javascript/controllers/form_submit_controller.js", "../../javascript/controllers/global_loader_controller.js", "../../javascript/controllers/global_turbo_loader_controller.js", "../../javascript/controllers/hello_controller.js", "../../javascript/controllers/impersonation_banner_controller.js", "../../javascript/controllers/imports_status_controller.js", "../../javascript/controllers/info_box_controller.js", "../../javascript/controllers/landing_slider_controller.js", "../../javascript/controllers/landing_tabs_controller.js", "../../javascript/controllers/loader_launcher_controller.js", "../../javascript/controllers/manage_subscriber_configurations_controller.js", "../../javascript/controllers/modal_controller.js", "../../javascript/controllers/multiquotes_status_controller.js", "../../javascript/controllers/pdf_import_status_controller.js", "../../javascript/controllers/pdf_upload_controller.js", "../../javascript/controllers/periodicity_selector_controller.js", "../../javascript/controllers/policyholder_kind_controller.js", "../../javascript/controllers/postal_lookup_controller.js", "../../javascript/controllers/quote_card_selector_controller.js", "../../javascript/controllers/quote_details_modal_controller.js", "../../javascript/controllers/row_link_controller.js", "../../javascript/controllers/salud_form_controller.js", "../../javascript/controllers/scheduled_messages_controller.js", "../../javascript/controllers/scroll_reveal_controller.js", "../../javascript/controllers/search_controller.js", "../../javascript/controllers/show_four_only_controller.js", "../../javascript/controllers/sidebar_section_controller.js", "../../javascript/controllers/signature_pad_controller.js", "../../javascript/controllers/slim_select_controller.js", "../../javascript/controllers/summary_toggles_controller.js", "../../javascript/controllers/switch_controller.js", "../../javascript/controllers/telegram_users_controller.js", "../../javascript/controllers/template_preview_controller.js", "../../javascript/controllers/testimonials_editor_controller.js", "../../javascript/controllers/time_entry_location_controller.js", "../../javascript/controllers/toggle_fields_controller.js", "../../javascript/controllers/toggle_list_controller.js", "../../javascript/controllers/upload_file_component_controller.js", "../../javascript/controllers/user_multi_select_controller.js", "../../javascript/controllers/vehicle_select_controller.js", "../../javascript/controllers/whatsapp_composer_controller.js", "../../javascript/controllers/whatsapp_mine_controller.js", "../../javascript/controllers/whatsapp_thread_controller.js", "../../javascript/controllers/index.js", "../../javascript/application.js", "../../javascript/add_sweetalert2.js", "../../javascript/turbo_set_confirm_method.js", "../../javascript/add_moment.js", "../../javascript/vanilla_datetimerange_picker.js", "../../javascript/add_vanilla_datetimerange_picker.js", "../../javascript/add_slimselect.js", "../../../node_modules/chartkick/dist/chartkick.esm.js", "../../../node_modules/@kurkle/color/dist/color.esm.js", "../../../node_modules/chart.js/src/helpers/helpers.core.ts", "../../../node_modules/chart.js/src/helpers/helpers.math.ts", "../../../node_modules/chart.js/src/helpers/helpers.collection.ts", "../../../node_modules/chart.js/src/helpers/helpers.extras.ts", "../../../node_modules/chart.js/src/helpers/helpers.easing.ts", "../../../node_modules/chart.js/src/helpers/helpers.color.ts", "../../../node_modules/chart.js/src/core/core.animations.defaults.js", "../../../node_modules/chart.js/src/core/core.layouts.defaults.js", "../../../node_modules/chart.js/src/helpers/helpers.intl.ts", "../../../node_modules/chart.js/src/core/core.ticks.js", "../../../node_modules/chart.js/src/core/core.scale.defaults.js", "../../../node_modules/chart.js/src/core/core.defaults.js", "../../../node_modules/chart.js/src/helpers/helpers.canvas.ts", "../../../node_modules/chart.js/src/helpers/helpers.options.ts", "../../../node_modules/chart.js/src/helpers/helpers.config.ts", "../../../node_modules/chart.js/src/helpers/helpers.curve.ts", "../../../node_modules/chart.js/src/helpers/helpers.dom.ts", "../../../node_modules/chart.js/src/helpers/helpers.interpolation.ts", "../../../node_modules/chart.js/src/helpers/helpers.rtl.ts", "../../../node_modules/chart.js/src/helpers/helpers.segment.js", "../../../node_modules/chart.js/src/core/core.animator.js", "../../../node_modules/chart.js/src/core/core.animation.js", "../../../node_modules/chart.js/src/core/core.animations.js", "../../../node_modules/chart.js/src/core/core.datasetController.js", "../../../node_modules/chart.js/src/controllers/controller.bar.js", "../../../node_modules/chart.js/src/controllers/controller.bubble.js", "../../../node_modules/chart.js/src/controllers/controller.doughnut.js", "../../../node_modules/chart.js/src/controllers/controller.line.js", "../../../node_modules/chart.js/src/controllers/controller.polarArea.js", "../../../node_modules/chart.js/src/controllers/controller.pie.js", "../../../node_modules/chart.js/src/controllers/controller.radar.js", "../../../node_modules/chart.js/src/controllers/controller.scatter.js", "../../../node_modules/chart.js/src/core/core.adapters.ts", "../../../node_modules/chart.js/src/core/core.interaction.js", "../../../node_modules/chart.js/src/core/core.layouts.js", "../../../node_modules/chart.js/src/platform/platform.base.js", "../../../node_modules/chart.js/src/platform/platform.basic.js", "../../../node_modules/chart.js/src/platform/platform.dom.js", "../../../node_modules/chart.js/src/platform/index.js", "../../../node_modules/chart.js/src/core/core.element.ts", "../../../node_modules/chart.js/src/core/core.scale.autoskip.js", "../../../node_modules/chart.js/src/core/core.scale.js", "../../../node_modules/chart.js/src/core/core.typedRegistry.js", "../../../node_modules/chart.js/src/core/core.registry.js", "../../../node_modules/chart.js/src/core/core.plugins.js", "../../../node_modules/chart.js/src/core/core.config.js", "../../../node_modules/chart.js/src/core/core.controller.js", "../../../node_modules/chart.js/src/elements/element.arc.ts", "../../../node_modules/chart.js/src/elements/element.line.js", "../../../node_modules/chart.js/src/elements/element.point.ts", "../../../node_modules/chart.js/src/elements/element.bar.js", "../../../node_modules/chart.js/src/plugins/plugin.colors.ts", "../../../node_modules/chart.js/src/plugins/plugin.decimation.js", "../../../node_modules/chart.js/src/plugins/plugin.filler/filler.segment.js", "../../../node_modules/chart.js/src/plugins/plugin.filler/filler.helper.js", "../../../node_modules/chart.js/src/plugins/plugin.filler/filler.options.js", "../../../node_modules/chart.js/src/plugins/plugin.filler/filler.target.stack.js", "../../../node_modules/chart.js/src/plugins/plugin.filler/simpleArc.js", "../../../node_modules/chart.js/src/plugins/plugin.filler/filler.target.js", "../../../node_modules/chart.js/src/plugins/plugin.filler/filler.drawing.js", "../../../node_modules/chart.js/src/plugins/plugin.filler/index.js", "../../../node_modules/chart.js/src/plugins/plugin.legend.js", "../../../node_modules/chart.js/src/plugins/plugin.title.js", "../../../node_modules/chart.js/src/plugins/plugin.subtitle.js", "../../../node_modules/chart.js/src/plugins/plugin.tooltip.js", "../../../node_modules/chart.js/src/scales/scale.category.js", "../../../node_modules/chart.js/src/scales/scale.linearbase.js", "../../../node_modules/chart.js/src/scales/scale.linear.js", "../../../node_modules/chart.js/src/scales/scale.logarithmic.js", "../../../node_modules/chart.js/src/scales/scale.radialLinear.js", "../../../node_modules/chart.js/src/scales/scale.time.js", "../../../node_modules/chart.js/src/scales/scale.timeseries.js", "../../../node_modules/chart.js/src/index.ts", "../../../node_modules/chart.js/auto/auto.js", "../../../node_modules/date-fns/constants.js", "../../../node_modules/date-fns/constructFrom.js", "../../../node_modules/date-fns/toDate.js", "../../../node_modules/date-fns/addDays.js", "../../../node_modules/date-fns/addMonths.js", "../../../node_modules/date-fns/addMilliseconds.js", "../../../node_modules/date-fns/addHours.js", "../../../node_modules/date-fns/_lib/defaultOptions.js", "../../../node_modules/date-fns/startOfWeek.js", "../../../node_modules/date-fns/startOfISOWeek.js", "../../../node_modules/date-fns/getISOWeekYear.js", "../../../node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js", "../../../node_modules/date-fns/_lib/normalizeDates.js", "../../../node_modules/date-fns/startOfDay.js", "../../../node_modules/date-fns/differenceInCalendarDays.js", "../../../node_modules/date-fns/startOfISOWeekYear.js", "../../../node_modules/date-fns/addMinutes.js", "../../../node_modules/date-fns/addQuarters.js", "../../../node_modules/date-fns/addSeconds.js", "../../../node_modules/date-fns/addWeeks.js", "../../../node_modules/date-fns/addYears.js", "../../../node_modules/date-fns/compareAsc.js", "../../../node_modules/date-fns/isDate.js", "../../../node_modules/date-fns/isValid.js", "../../../node_modules/date-fns/differenceInCalendarMonths.js", "../../../node_modules/date-fns/differenceInCalendarYears.js", "../../../node_modules/date-fns/differenceInDays.js", "../../../node_modules/date-fns/_lib/getRoundingMethod.js", "../../../node_modules/date-fns/differenceInHours.js", "../../../node_modules/date-fns/differenceInMilliseconds.js", "../../../node_modules/date-fns/differenceInMinutes.js", "../../../node_modules/date-fns/endOfDay.js", "../../../node_modules/date-fns/endOfMonth.js", "../../../node_modules/date-fns/isLastDayOfMonth.js", "../../../node_modules/date-fns/differenceInMonths.js", "../../../node_modules/date-fns/differenceInQuarters.js", "../../../node_modules/date-fns/differenceInSeconds.js", "../../../node_modules/date-fns/differenceInWeeks.js", "../../../node_modules/date-fns/differenceInYears.js", "../../../node_modules/date-fns/startOfQuarter.js", "../../../node_modules/date-fns/startOfMonth.js", "../../../node_modules/date-fns/endOfYear.js", "../../../node_modules/date-fns/startOfYear.js", "../../../node_modules/date-fns/endOfHour.js", "../../../node_modules/date-fns/endOfWeek.js", "../../../node_modules/date-fns/endOfMinute.js", "../../../node_modules/date-fns/endOfQuarter.js", "../../../node_modules/date-fns/endOfSecond.js", "../../../node_modules/date-fns/locale/en-US/_lib/formatDistance.js", "../../../node_modules/date-fns/locale/_lib/buildFormatLongFn.js", "../../../node_modules/date-fns/locale/en-US/_lib/formatLong.js", "../../../node_modules/date-fns/locale/en-US/_lib/formatRelative.js", "../../../node_modules/date-fns/locale/_lib/buildLocalizeFn.js", "../../../node_modules/date-fns/locale/en-US/_lib/localize.js", "../../../node_modules/date-fns/locale/_lib/buildMatchFn.js", "../../../node_modules/date-fns/locale/_lib/buildMatchPatternFn.js", "../../../node_modules/date-fns/locale/en-US/_lib/match.js", "../../../node_modules/date-fns/locale/en-US.js", "../../../node_modules/date-fns/getDayOfYear.js", "../../../node_modules/date-fns/getISOWeek.js", "../../../node_modules/date-fns/getWeekYear.js", "../../../node_modules/date-fns/startOfWeekYear.js", "../../../node_modules/date-fns/getWeek.js", "../../../node_modules/date-fns/_lib/addLeadingZeros.js", "../../../node_modules/date-fns/_lib/format/lightFormatters.js", "../../../node_modules/date-fns/_lib/format/formatters.js", "../../../node_modules/date-fns/_lib/format/longFormatters.js", "../../../node_modules/date-fns/_lib/protectedTokens.js", "../../../node_modules/date-fns/format.js", "../../../node_modules/date-fns/getDefaultOptions.js", "../../../node_modules/date-fns/getISODay.js", "../../../node_modules/date-fns/transpose.js", "../../../node_modules/date-fns/parse/_lib/Setter.js", "../../../node_modules/date-fns/parse/_lib/Parser.js", "../../../node_modules/date-fns/parse/_lib/parsers/EraParser.js", "../../../node_modules/date-fns/parse/_lib/constants.js", "../../../node_modules/date-fns/parse/_lib/utils.js", "../../../node_modules/date-fns/parse/_lib/parsers/YearParser.js", "../../../node_modules/date-fns/parse/_lib/parsers/LocalWeekYearParser.js", "../../../node_modules/date-fns/parse/_lib/parsers/ISOWeekYearParser.js", "../../../node_modules/date-fns/parse/_lib/parsers/ExtendedYearParser.js", "../../../node_modules/date-fns/parse/_lib/parsers/QuarterParser.js", "../../../node_modules/date-fns/parse/_lib/parsers/StandAloneQuarterParser.js", "../../../node_modules/date-fns/parse/_lib/parsers/MonthParser.js", "../../../node_modules/date-fns/parse/_lib/parsers/StandAloneMonthParser.js", "../../../node_modules/date-fns/setWeek.js", "../../../node_modules/date-fns/parse/_lib/parsers/LocalWeekParser.js", "../../../node_modules/date-fns/setISOWeek.js", "../../../node_modules/date-fns/parse/_lib/parsers/ISOWeekParser.js", "../../../node_modules/date-fns/parse/_lib/parsers/DateParser.js", "../../../node_modules/date-fns/parse/_lib/parsers/DayOfYearParser.js", "../../../node_modules/date-fns/setDay.js", "../../../node_modules/date-fns/parse/_lib/parsers/DayParser.js", "../../../node_modules/date-fns/parse/_lib/parsers/LocalDayParser.js", "../../../node_modules/date-fns/parse/_lib/parsers/StandAloneLocalDayParser.js", "../../../node_modules/date-fns/setISODay.js", "../../../node_modules/date-fns/parse/_lib/parsers/ISODayParser.js", "../../../node_modules/date-fns/parse/_lib/parsers/AMPMParser.js", "../../../node_modules/date-fns/parse/_lib/parsers/AMPMMidnightParser.js", "../../../node_modules/date-fns/parse/_lib/parsers/DayPeriodParser.js", "../../../node_modules/date-fns/parse/_lib/parsers/Hour1to12Parser.js", "../../../node_modules/date-fns/parse/_lib/parsers/Hour0to23Parser.js", "../../../node_modules/date-fns/parse/_lib/parsers/Hour0To11Parser.js", "../../../node_modules/date-fns/parse/_lib/parsers/Hour1To24Parser.js", "../../../node_modules/date-fns/parse/_lib/parsers/MinuteParser.js", "../../../node_modules/date-fns/parse/_lib/parsers/SecondParser.js", "../../../node_modules/date-fns/parse/_lib/parsers/FractionOfSecondParser.js", "../../../node_modules/date-fns/parse/_lib/parsers/ISOTimezoneWithZParser.js", "../../../node_modules/date-fns/parse/_lib/parsers/ISOTimezoneParser.js", "../../../node_modules/date-fns/parse/_lib/parsers/TimestampSecondsParser.js", "../../../node_modules/date-fns/parse/_lib/parsers/TimestampMillisecondsParser.js", "../../../node_modules/date-fns/parse/_lib/parsers.js", "../../../node_modules/date-fns/parse.js", "../../../node_modules/date-fns/startOfHour.js", "../../../node_modules/date-fns/startOfMinute.js", "../../../node_modules/date-fns/startOfSecond.js", "../../../node_modules/date-fns/parseISO.js", "../../../node_modules/chartjs-adapter-date-fns/dist/chartjs-adapter-date-fns.esm.js", "../../../node_modules/chartkick/chart.js/chart.esm.js", "../../../node_modules/trix/src/trix/config/attachments.js", "../../../node_modules/trix/src/trix/config/block_attributes.js", "../../../node_modules/trix/src/trix/config/browser.js", "../../../node_modules/trix/src/trix/config/dompurify.js", "../../../node_modules/trix/src/trix/config/lang.js", "../../../node_modules/trix/src/trix/config/file_size_formatting.js", "../../../node_modules/trix/src/trix/constants.js", "../../../node_modules/trix/src/trix/core/helpers/extend.js", "../../../node_modules/trix/src/trix/core/helpers/dom.js", "../../../node_modules/trix/src/trix/config/input.js", "../../../node_modules/trix/src/trix/config/key_names.js", "../../../node_modules/trix/src/trix/config/parser.js", "../../../node_modules/trix/src/trix/config/text_attributes.js", "../../../node_modules/trix/src/trix/config/toolbar.js", "../../../node_modules/trix/src/trix/config/undo.js", "../../../node_modules/trix/src/trix/config/css.js", "../../../node_modules/trix/src/trix/core/basic_object.js", "../../../node_modules/trix/src/trix/core/utilities/utf16_string.js", "../../../node_modules/trix/src/trix/core/object.js", "../../../node_modules/trix/src/trix/core/helpers/arrays.js", "../../../node_modules/trix/src/trix/core/helpers/bidi.js", "../../../node_modules/trix/src/trix/core/helpers/config.js", "../../../node_modules/trix/src/trix/core/helpers/custom_elements.js", "../../../node_modules/trix/src/trix/core/helpers/events.js", "../../../node_modules/trix/src/trix/core/helpers/functions.js", "../../../node_modules/trix/src/trix/core/helpers/objects.js", "../../../node_modules/trix/src/trix/core/helpers/ranges.js", "../../../node_modules/trix/src/trix/observers/selection_change_observer.js", "../../../node_modules/trix/src/trix/core/helpers/strings.js", "../../../node_modules/trix/src/trix/core/collections/hash.js", "../../../node_modules/trix/src/trix/core/collections/object_group.js", "../../../node_modules/trix/src/trix/core/collections/object_map.js", "../../../node_modules/trix/src/trix/core/collections/element_store.js", "../../../node_modules/trix/src/trix/core/utilities/operation.js", "../../../node_modules/trix/src/trix/views/object_view.js", "../../../node_modules/trix/node_modules/dompurify/dist/purify.es.mjs", "../../../node_modules/trix/src/trix/models/html_sanitizer.js", "../../../node_modules/trix/src/trix/views/attachment_view.js", "../../../node_modules/trix/src/trix/views/previewable_attachment_view.js", "../../../node_modules/trix/src/trix/views/piece_view.js", "../../../node_modules/trix/src/trix/views/text_view.js", "../../../node_modules/trix/src/trix/views/block_view.js", "../../../node_modules/trix/src/trix/views/document_view.js", "../../../node_modules/trix/src/trix/models/piece.js", "../../../node_modules/trix/src/trix/operations/image_preload_operation.js", "../../../node_modules/trix/src/trix/models/attachment.js", "../../../node_modules/trix/src/trix/models/attachment_piece.js", "../../../node_modules/trix/src/trix/models/string_piece.js", "../../../node_modules/trix/src/trix/models/splittable_list.js", "../../../node_modules/trix/src/trix/models/text.js", "../../../node_modules/trix/src/trix/models/block.js", "../../../node_modules/trix/src/trix/models/document.js", "../../../node_modules/trix/src/trix/models/html_parser.js", "../../../node_modules/trix/src/trix/core/serialization.js", "../../../node_modules/trix/src/trix/models/managed_attachment.js", "../../../node_modules/trix/src/trix/models/attachment_manager.js", "../../../node_modules/trix/src/trix/models/line_break_insertion.js", "../../../node_modules/trix/src/trix/models/composition.js", "../../../node_modules/trix/src/trix/models/undo_manager.js", "../../../node_modules/trix/src/trix/filters/filter.js", "../../../node_modules/trix/src/trix/filters/attachment_gallery_filter.js", "../../../node_modules/trix/src/trix/models/editor.js", "../../../node_modules/trix/src/trix/models/location_mapper.js", "../../../node_modules/trix/src/trix/models/point_mapper.js", "../../../node_modules/trix/src/trix/models/selection_manager.js", "../../../node_modules/trix/src/trix/controllers/attachment_editor_controller.js", "../../../node_modules/trix/src/trix/controllers/composition_controller.js", "../../../node_modules/trix/src/trix/controllers/controller.js", "../../../node_modules/trix/src/trix/observers/mutation_observer.js", "../../../node_modules/trix/src/trix/operations/file_verification_operation.js", "../../../node_modules/trix/src/trix/models/flaky_android_keyboard_detector.js", "../../../node_modules/trix/src/trix/controllers/input_controller.js", "../../../node_modules/trix/src/trix/controllers/level_0_input_controller.js", "../../../node_modules/trix/src/trix/controllers/level_2_input_controller.js", "../../../node_modules/trix/src/trix/controllers/toolbar_controller.js", "../../../node_modules/trix/src/trix/controllers/editor_controller.js", "../../../node_modules/trix/src/trix/elements/trix_toolbar_element.js", "../../../node_modules/trix/src/trix/elements/trix_editor_element.js", "../../../node_modules/trix/src/trix/trix.js"],
"sourcesContent": ["export default {\n logger: typeof console !== \"undefined\" ? console : undefined,\n WebSocket: typeof WebSocket !== \"undefined\" ? WebSocket : undefined,\n}\n", "import adapters from \"./adapters\"\n\n// The logger is disabled by default. You can enable it with:\n//\n// ActionCable.logger.enabled = true\n//\n// Example:\n//\n// import * as ActionCable from '@rails/actioncable'\n//\n// ActionCable.logger.enabled = true\n// ActionCable.logger.log('Connection Established.')\n//\n\nexport default {\n log(...messages) {\n if (this.enabled) {\n messages.push(Date.now())\n adapters.logger.log(\"[ActionCable]\", ...messages)\n }\n },\n}\n", "import logger from \"./logger\"\n\n// Responsible for ensuring the cable connection is in good health by validating the heartbeat pings sent from the server, and attempting\n// revival reconnections if things go astray. Internal class, not intended for direct user manipulation.\n\nconst now = () => new Date().getTime()\n\nconst secondsSince = time => (now() - time) / 1000\n\nclass ConnectionMonitor {\n constructor(connection) {\n this.visibilityDidChange = this.visibilityDidChange.bind(this)\n this.connection = connection\n this.reconnectAttempts = 0\n }\n\n start() {\n if (!this.isRunning()) {\n this.startedAt = now()\n delete this.stoppedAt\n this.startPolling()\n addEventListener(\"visibilitychange\", this.visibilityDidChange)\n logger.log(`ConnectionMonitor started. stale threshold = ${this.constructor.staleThreshold} s`)\n }\n }\n\n stop() {\n if (this.isRunning()) {\n this.stoppedAt = now()\n this.stopPolling()\n removeEventListener(\"visibilitychange\", this.visibilityDidChange)\n logger.log(\"ConnectionMonitor stopped\")\n }\n }\n\n isRunning() {\n return this.startedAt && !this.stoppedAt\n }\n\n recordPing() {\n this.pingedAt = now()\n }\n\n recordConnect() {\n this.reconnectAttempts = 0\n this.recordPing()\n delete this.disconnectedAt\n logger.log(\"ConnectionMonitor recorded connect\")\n }\n\n recordDisconnect() {\n this.disconnectedAt = now()\n logger.log(\"ConnectionMonitor recorded disconnect\")\n }\n\n // Private\n\n startPolling() {\n this.stopPolling()\n this.poll()\n }\n\n stopPolling() {\n clearTimeout(this.pollTimeout)\n }\n\n poll() {\n this.pollTimeout = setTimeout(() => {\n this.reconnectIfStale()\n this.poll()\n }\n , this.getPollInterval())\n }\n\n getPollInterval() {\n const { staleThreshold, reconnectionBackoffRate } = this.constructor\n const backoff = Math.pow(1 + reconnectionBackoffRate, Math.min(this.reconnectAttempts, 10))\n const jitterMax = this.reconnectAttempts === 0 ? 1.0 : reconnectionBackoffRate\n const jitter = jitterMax * Math.random()\n return staleThreshold * 1000 * backoff * (1 + jitter)\n }\n\n reconnectIfStale() {\n if (this.connectionIsStale()) {\n logger.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, time stale = ${secondsSince(this.refreshedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`)\n this.reconnectAttempts++\n if (this.disconnectedRecently()) {\n logger.log(`ConnectionMonitor skipping reopening recent disconnect. time disconnected = ${secondsSince(this.disconnectedAt)} s`)\n } else {\n logger.log(\"ConnectionMonitor reopening\")\n this.connection.reopen()\n }\n }\n }\n\n get refreshedAt() {\n return this.pingedAt ? this.pingedAt : this.startedAt\n }\n\n connectionIsStale() {\n return secondsSince(this.refreshedAt) > this.constructor.staleThreshold\n }\n\n disconnectedRecently() {\n return this.disconnectedAt && (secondsSince(this.disconnectedAt) < this.constructor.staleThreshold)\n }\n\n visibilityDidChange() {\n if (document.visibilityState === \"visible\") {\n setTimeout(() => {\n if (this.connectionIsStale() || !this.connection.isOpen()) {\n logger.log(`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`)\n this.connection.reopen()\n }\n }\n , 200)\n }\n }\n\n}\n\nConnectionMonitor.staleThreshold = 6 // Server::Connections::BEAT_INTERVAL * 2 (missed two pings)\nConnectionMonitor.reconnectionBackoffRate = 0.15\n\nexport default ConnectionMonitor\n", "export default {\n \"message_types\": {\n \"welcome\": \"welcome\",\n \"disconnect\": \"disconnect\",\n \"ping\": \"ping\",\n \"confirmation\": \"confirm_subscription\",\n \"rejection\": \"reject_subscription\"\n },\n \"disconnect_reasons\": {\n \"unauthorized\": \"unauthorized\",\n \"invalid_request\": \"invalid_request\",\n \"server_restart\": \"server_restart\",\n \"remote\": \"remote\"\n },\n \"default_mount_path\": \"/cable\",\n \"protocols\": [\n \"actioncable-v1-json\",\n \"actioncable-unsupported\"\n ]\n}\n", "import adapters from \"./adapters\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport INTERNAL from \"./internal\"\nimport logger from \"./logger\"\n\n// Encapsulate the cable connection held by the consumer. This is an internal class not intended for direct user manipulation.\n\nconst {message_types, protocols} = INTERNAL\nconst supportedProtocols = protocols.slice(0, protocols.length - 1)\n\nconst indexOf = [].indexOf\n\nclass Connection {\n constructor(consumer) {\n this.open = this.open.bind(this)\n this.consumer = consumer\n this.subscriptions = this.consumer.subscriptions\n this.monitor = new ConnectionMonitor(this)\n this.disconnected = true\n }\n\n send(data) {\n if (this.isOpen()) {\n this.webSocket.send(JSON.stringify(data))\n return true\n } else {\n return false\n }\n }\n\n open() {\n if (this.isActive()) {\n logger.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`)\n return false\n } else {\n const socketProtocols = [...protocols, ...this.consumer.subprotocols || []]\n logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${socketProtocols}`)\n if (this.webSocket) { this.uninstallEventHandlers() }\n this.webSocket = new adapters.WebSocket(this.consumer.url, socketProtocols)\n this.installEventHandlers()\n this.monitor.start()\n return true\n }\n }\n\n close({allowReconnect} = {allowReconnect: true}) {\n if (!allowReconnect) { this.monitor.stop() }\n // Avoid closing websockets in a \"connecting\" state due to Safari 15.1+ bug. See: https://github.com/rails/rails/issues/43835#issuecomment-1002288478\n if (this.isOpen()) {\n return this.webSocket.close()\n }\n }\n\n reopen() {\n logger.log(`Reopening WebSocket, current state is ${this.getState()}`)\n if (this.isActive()) {\n try {\n return this.close()\n } catch (error) {\n logger.log(\"Failed to reopen WebSocket\", error)\n }\n finally {\n logger.log(`Reopening WebSocket in ${this.constructor.reopenDelay}ms`)\n setTimeout(this.open, this.constructor.reopenDelay)\n }\n } else {\n return this.open()\n }\n }\n\n getProtocol() {\n if (this.webSocket) {\n return this.webSocket.protocol\n }\n }\n\n isOpen() {\n return this.isState(\"open\")\n }\n\n isActive() {\n return this.isState(\"open\", \"connecting\")\n }\n\n triedToReconnect() {\n return this.monitor.reconnectAttempts > 0\n }\n\n // Private\n\n isProtocolSupported() {\n return indexOf.call(supportedProtocols, this.getProtocol()) >= 0\n }\n\n isState(...states) {\n return indexOf.call(states, this.getState()) >= 0\n }\n\n getState() {\n if (this.webSocket) {\n for (let state in adapters.WebSocket) {\n if (adapters.WebSocket[state] === this.webSocket.readyState) {\n return state.toLowerCase()\n }\n }\n }\n return null\n }\n\n installEventHandlers() {\n for (let eventName in this.events) {\n const handler = this.events[eventName].bind(this)\n this.webSocket[`on${eventName}`] = handler\n }\n }\n\n uninstallEventHandlers() {\n for (let eventName in this.events) {\n this.webSocket[`on${eventName}`] = function() {}\n }\n }\n\n}\n\nConnection.reopenDelay = 500\n\nConnection.prototype.events = {\n message(event) {\n if (!this.isProtocolSupported()) { return }\n const {identifier, message, reason, reconnect, type} = JSON.parse(event.data)\n switch (type) {\n case message_types.welcome:\n if (this.triedToReconnect()) {\n this.reconnectAttempted = true\n }\n this.monitor.recordConnect()\n return this.subscriptions.reload()\n case message_types.disconnect:\n logger.log(`Disconnecting. Reason: ${reason}`)\n return this.close({allowReconnect: reconnect})\n case message_types.ping:\n return this.monitor.recordPing()\n case message_types.confirmation:\n this.subscriptions.confirmSubscription(identifier)\n if (this.reconnectAttempted) {\n this.reconnectAttempted = false\n return this.subscriptions.notify(identifier, \"connected\", {reconnected: true})\n } else {\n return this.subscriptions.notify(identifier, \"connected\", {reconnected: false})\n }\n case message_types.rejection:\n return this.subscriptions.reject(identifier)\n default:\n return this.subscriptions.notify(identifier, \"received\", message)\n }\n },\n\n open() {\n logger.log(`WebSocket onopen event, using '${this.getProtocol()}' subprotocol`)\n this.disconnected = false\n if (!this.isProtocolSupported()) {\n logger.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\")\n return this.close({allowReconnect: false})\n }\n },\n\n close(event) {\n logger.log(\"WebSocket onclose event\")\n if (this.disconnected) { return }\n this.disconnected = true\n this.monitor.recordDisconnect()\n return this.subscriptions.notifyAll(\"disconnected\", {willAttemptReconnect: this.monitor.isRunning()})\n },\n\n error() {\n logger.log(\"WebSocket onerror event\")\n }\n}\n\nexport default Connection\n", "// A new subscription is created through the ActionCable.Subscriptions instance available on the consumer.\n// It provides a number of callbacks and a method for calling remote procedure calls on the corresponding\n// Channel instance on the server side.\n//\n// An example demonstrates the basic functionality:\n//\n// App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\", {\n// connected() {\n// // Called once the subscription has been successfully completed\n// },\n//\n// disconnected({ willAttemptReconnect: boolean }) {\n// // Called when the client has disconnected with the server.\n// // The object will have an `willAttemptReconnect` property which\n// // says whether the client has the intention of attempting\n// // to reconnect.\n// },\n//\n// appear() {\n// this.perform('appear', {appearing_on: this.appearingOn()})\n// },\n//\n// away() {\n// this.perform('away')\n// },\n//\n// appearingOn() {\n// $('main').data('appearing-on')\n// }\n// })\n//\n// The methods #appear and #away forward their intent to the remote AppearanceChannel instance on the server\n// by calling the `perform` method with the first parameter being the action (which maps to AppearanceChannel#appear/away).\n// The second parameter is a hash that'll get JSON encoded and made available on the server in the data parameter.\n//\n// This is how the server component would look:\n//\n// class AppearanceChannel < ApplicationActionCable::Channel\n// def subscribed\n// current_user.appear\n// end\n//\n// def unsubscribed\n// current_user.disappear\n// end\n//\n// def appear(data)\n// current_user.appear on: data['appearing_on']\n// end\n//\n// def away\n// current_user.away\n// end\n// end\n//\n// The \"AppearanceChannel\" name is automatically mapped between the client-side subscription creation and the server-side Ruby class name.\n// The AppearanceChannel#appear/away public methods are exposed automatically to client-side invocation through the perform method.\n\nconst extend = function(object, properties) {\n if (properties != null) {\n for (let key in properties) {\n const value = properties[key]\n object[key] = value\n }\n }\n return object\n}\n\nexport default class Subscription {\n constructor(consumer, params = {}, mixin) {\n this.consumer = consumer\n this.identifier = JSON.stringify(params)\n extend(this, mixin)\n }\n\n // Perform a channel action with the optional data passed as an attribute\n perform(action, data = {}) {\n data.action = action\n return this.send(data)\n }\n\n send(data) {\n return this.consumer.send({command: \"message\", identifier: this.identifier, data: JSON.stringify(data)})\n }\n\n unsubscribe() {\n return this.consumer.subscriptions.remove(this)\n }\n}\n", "import logger from \"./logger\"\n\n// Responsible for ensuring channel subscribe command is confirmed, retrying until confirmation is received.\n// Internal class, not intended for direct user manipulation.\n\nclass SubscriptionGuarantor {\n constructor(subscriptions) {\n this.subscriptions = subscriptions\n this.pendingSubscriptions = []\n }\n\n guarantee(subscription) {\n if(this.pendingSubscriptions.indexOf(subscription) == -1){ \n logger.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`)\n this.pendingSubscriptions.push(subscription) \n }\n else {\n logger.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`)\n }\n this.startGuaranteeing()\n }\n\n forget(subscription) {\n logger.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`)\n this.pendingSubscriptions = (this.pendingSubscriptions.filter((s) => s !== subscription))\n }\n\n startGuaranteeing() {\n this.stopGuaranteeing()\n this.retrySubscribing()\n }\n \n stopGuaranteeing() {\n clearTimeout(this.retryTimeout)\n }\n\n retrySubscribing() {\n this.retryTimeout = setTimeout(() => {\n if (this.subscriptions && typeof(this.subscriptions.subscribe) === \"function\") {\n this.pendingSubscriptions.map((subscription) => {\n logger.log(`SubscriptionGuarantor resubscribing ${subscription.identifier}`)\n this.subscriptions.subscribe(subscription)\n })\n }\n }\n , 500)\n }\n}\n\nexport default SubscriptionGuarantor", "import Subscription from \"./subscription\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport logger from \"./logger\"\n\n// Collection class for creating (and internally managing) channel subscriptions.\n// The only method intended to be triggered by the user is ActionCable.Subscriptions#create,\n// and it should be called through the consumer like so:\n//\n// App = {}\n// App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n// App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n\nexport default class Subscriptions {\n constructor(consumer) {\n this.consumer = consumer\n this.guarantor = new SubscriptionGuarantor(this)\n this.subscriptions = []\n }\n\n create(channelName, mixin) {\n const channel = channelName\n const params = typeof channel === \"object\" ? channel : {channel}\n const subscription = new Subscription(this.consumer, params, mixin)\n return this.add(subscription)\n }\n\n // Private\n\n add(subscription) {\n this.subscriptions.push(subscription)\n this.consumer.ensureActiveConnection()\n this.notify(subscription, \"initialized\")\n this.subscribe(subscription)\n return subscription\n }\n\n remove(subscription) {\n this.forget(subscription)\n if (!this.findAll(subscription.identifier).length) {\n this.sendCommand(subscription, \"unsubscribe\")\n }\n return subscription\n }\n\n reject(identifier) {\n return this.findAll(identifier).map((subscription) => {\n this.forget(subscription)\n this.notify(subscription, \"rejected\")\n return subscription\n })\n }\n\n forget(subscription) {\n this.guarantor.forget(subscription)\n this.subscriptions = (this.subscriptions.filter((s) => s !== subscription))\n return subscription\n }\n\n findAll(identifier) {\n return this.subscriptions.filter((s) => s.identifier === identifier)\n }\n\n reload() {\n return this.subscriptions.map((subscription) =>\n this.subscribe(subscription))\n }\n\n notifyAll(callbackName, ...args) {\n return this.subscriptions.map((subscription) =>\n this.notify(subscription, callbackName, ...args))\n }\n\n notify(subscription, callbackName, ...args) {\n let subscriptions\n if (typeof subscription === \"string\") {\n subscriptions = this.findAll(subscription)\n } else {\n subscriptions = [subscription]\n }\n\n return subscriptions.map((subscription) =>\n (typeof subscription[callbackName] === \"function\" ? subscription[callbackName](...args) : undefined))\n }\n\n subscribe(subscription) {\n if (this.sendCommand(subscription, \"subscribe\")) {\n this.guarantor.guarantee(subscription)\n }\n }\n\n confirmSubscription(identifier) {\n logger.log(`Subscription confirmed ${identifier}`)\n this.findAll(identifier).map((subscription) =>\n this.guarantor.forget(subscription))\n }\n\n sendCommand(subscription, command) {\n const {identifier} = subscription\n return this.consumer.send({command, identifier})\n }\n}\n", "import Connection from \"./connection\"\nimport Subscriptions from \"./subscriptions\"\n\n// The ActionCable.Consumer establishes the connection to a server-side Ruby Connection object. Once established,\n// the ActionCable.ConnectionMonitor will ensure that its properly maintained through heartbeats and checking for stale updates.\n// The Consumer instance is also the gateway to establishing subscriptions to desired channels through the #createSubscription\n// method.\n//\n// The following example shows how this can be set up:\n//\n// App = {}\n// App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n// App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n//\n// When a consumer is created, it automatically connects with the server.\n//\n// To disconnect from the server, call\n//\n// App.cable.disconnect()\n//\n// and to restart the connection:\n//\n// App.cable.connect()\n//\n// Any channel subscriptions which existed prior to disconnecting will\n// automatically resubscribe.\n\nexport default class Consumer {\n constructor(url) {\n this._url = url\n this.subscriptions = new Subscriptions(this)\n this.connection = new Connection(this)\n this.subprotocols = []\n }\n\n get url() {\n return createWebSocketURL(this._url)\n }\n\n send(data) {\n return this.connection.send(data)\n }\n\n connect() {\n return this.connection.open()\n }\n\n disconnect() {\n return this.connection.close({allowReconnect: false})\n }\n\n ensureActiveConnection() {\n if (!this.connection.isActive()) {\n return this.connection.open()\n }\n }\n\n addSubProtocol(subprotocol) {\n this.subprotocols = [...this.subprotocols, subprotocol]\n }\n}\n\nexport function createWebSocketURL(url) {\n if (typeof url === \"function\") {\n url = url()\n }\n\n if (url && !/^wss?:/i.test(url)) {\n const a = document.createElement(\"a\")\n a.href = url\n // Fix populating Location properties in IE. Otherwise, protocol will be blank.\n a.href = a.href\n a.protocol = a.protocol.replace(\"http\", \"ws\")\n return a.href\n } else {\n return url\n }\n}\n", "import Connection from \"./connection\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport Consumer, { createWebSocketURL } from \"./consumer\"\nimport INTERNAL from \"./internal\"\nimport Subscription from \"./subscription\"\nimport Subscriptions from \"./subscriptions\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport adapters from \"./adapters\"\nimport logger from \"./logger\"\n\nexport {\n Connection,\n ConnectionMonitor,\n Consumer,\n INTERNAL,\n Subscription,\n Subscriptions,\n SubscriptionGuarantor,\n adapters,\n createWebSocketURL,\n logger,\n}\n\nexport function createConsumer(url = getConfig(\"url\") || INTERNAL.default_mount_path) {\n return new Consumer(url)\n}\n\nexport function getConfig(name) {\n const element = document.head.querySelector(`meta[name='action-cable-${name}']`)\n if (element) {\n return element.getAttribute(\"content\")\n }\n}\n", "/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n", "function debounce(function_, wait = 100, options = {}) {\n\tif (typeof function_ !== 'function') {\n\t\tthrow new TypeError(`Expected the first parameter to be a function, got \\`${typeof function_}\\`.`);\n\t}\n\n\tif (wait < 0) {\n\t\tthrow new RangeError('`wait` must not be negative.');\n\t}\n\n\t// TODO: Deprecate the boolean parameter at some point.\n\tconst {immediate} = typeof options === 'boolean' ? {immediate: options} : options;\n\n\tlet storedContext;\n\tlet storedArguments;\n\tlet timeoutId;\n\tlet timestamp;\n\tlet result;\n\n\tfunction later() {\n\t\tconst last = Date.now() - timestamp;\n\n\t\tif (last < wait && last >= 0) {\n\t\t\ttimeoutId = setTimeout(later, wait - last);\n\t\t} else {\n\t\t\ttimeoutId = undefined;\n\n\t\t\tif (!immediate) {\n\t\t\t\tconst callContext = storedContext;\n\t\t\t\tconst callArguments = storedArguments;\n\t\t\t\tstoredContext = undefined;\n\t\t\t\tstoredArguments = undefined;\n\t\t\t\tresult = function_.apply(callContext, callArguments);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst debounced = function (...arguments_) {\n\t\tif (storedContext && this !== storedContext) {\n\t\t\tthrow new Error('Debounced method called with different contexts.');\n\t\t}\n\n\t\tstoredContext = this; // eslint-disable-line unicorn/no-this-assignment\n\t\tstoredArguments = arguments_;\n\t\ttimestamp = Date.now();\n\n\t\tconst callNow = immediate && !timeoutId;\n\n\t\tif (!timeoutId) {\n\t\t\ttimeoutId = setTimeout(later, wait);\n\t\t}\n\n\t\tif (callNow) {\n\t\t\tconst callContext = storedContext;\n\t\t\tconst callArguments = storedArguments;\n\t\t\tstoredContext = undefined;\n\t\t\tstoredArguments = undefined;\n\t\t\tresult = function_.apply(callContext, callArguments);\n\t\t}\n\n\t\treturn result;\n\t};\n\n\tdebounced.clear = () => {\n\t\tif (!timeoutId) {\n\t\t\treturn;\n\t\t}\n\n\t\tclearTimeout(timeoutId);\n\t\ttimeoutId = undefined;\n\t};\n\n\tdebounced.flush = () => {\n\t\tif (!timeoutId) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst callContext = storedContext;\n\t\tconst callArguments = storedArguments;\n\t\tstoredContext = undefined;\n\t\tstoredArguments = undefined;\n\t\tresult = function_.apply(callContext, callArguments);\n\n\t\tclearTimeout(timeoutId);\n\t\ttimeoutId = undefined;\n\t};\n\n\treturn debounced;\n}\n\n// Adds compatibility for ES modules\nmodule.exports.debounce = debounce;\n\nmodule.exports = debounce;\n", "/* Unicode mappings for FontAwesome Pro v5.6.3 */\nvar fa=function(i){return fa[i.replace(/-./g,function(x){return x.substr(1).toUpperCase()})]};fa[\"500px\"]=\"\\uf26e\";fa.abacus=\"\\uf640\";fa.accessibleIcon=\"\\uf368\";fa.accusoft=\"\\uf369\";fa.acorn=\"\\uf6ae\";fa.acquisitionsIncorporated=\"\\uf6af\";fa.ad=\"\\uf641\";fa.addressBook=\"\\uf2b9\";fa.addressCard=\"\\uf2bb\";fa.adjust=\"\\uf042\";fa.adn=\"\\uf170\";fa.adobe=\"\\uf778\";fa.adversal=\"\\uf36a\";fa.affiliatetheme=\"\\uf36b\";fa.airFreshener=\"\\uf5d0\";fa.alarmClock=\"\\uf34e\";fa.algolia=\"\\uf36c\";fa.alicorn=\"\\uf6b0\";fa.alignCenter=\"\\uf037\";fa.alignJustify=\"\\uf039\";fa.alignLeft=\"\\uf036\";fa.alignRight=\"\\uf038\";fa.alipay=\"\\uf642\";fa.allergies=\"\\uf461\";fa.amazon=\"\\uf270\";fa.amazonPay=\"\\uf42c\";fa.ambulance=\"\\uf0f9\";fa.americanSignLanguageInterpreting=\"\\uf2a3\";fa.amilia=\"\\uf36d\";fa.analytics=\"\\uf643\";fa.anchor=\"\\uf13d\";fa.android=\"\\uf17b\";fa.angel=\"\\uf779\";fa.angellist=\"\\uf209\";fa.angleDoubleDown=\"\\uf103\";fa.angleDoubleLeft=\"\\uf100\";fa.angleDoubleRight=\"\\uf101\";fa.angleDoubleUp=\"\\uf102\";fa.angleDown=\"\\uf107\";fa.angleLeft=\"\\uf104\";fa.angleRight=\"\\uf105\";fa.angleUp=\"\\uf106\";fa.angry=\"\\uf556\";fa.angrycreative=\"\\uf36e\";fa.angular=\"\\uf420\";fa.ankh=\"\\uf644\";fa.appStore=\"\\uf36f\";fa.appStoreIos=\"\\uf370\";fa.apper=\"\\uf371\";fa.apple=\"\\uf179\";fa.appleAlt=\"\\uf5d1\";fa.appleCrate=\"\\uf6b1\";fa.applePay=\"\\uf415\";fa.archive=\"\\uf187\";fa.archway=\"\\uf557\";fa.arrowAltCircleDown=\"\\uf358\";fa.arrowAltCircleLeft=\"\\uf359\";fa.arrowAltCircleRight=\"\\uf35a\";fa.arrowAltCircleUp=\"\\uf35b\";fa.arrowAltDown=\"\\uf354\";fa.arrowAltFromBottom=\"\\uf346\";fa.arrowAltFromLeft=\"\\uf347\";fa.arrowAltFromRight=\"\\uf348\";fa.arrowAltFromTop=\"\\uf349\";fa.arrowAltLeft=\"\\uf355\";fa.arrowAltRight=\"\\uf356\";fa.arrowAltSquareDown=\"\\uf350\";fa.arrowAltSquareLeft=\"\\uf351\";fa.arrowAltSquareRight=\"\\uf352\";fa.arrowAltSquareUp=\"\\uf353\";fa.arrowAltToBottom=\"\\uf34a\";fa.arrowAltToLeft=\"\\uf34b\";fa.arrowAltToRight=\"\\uf34c\";fa.arrowAltToTop=\"\\uf34d\";fa.arrowAltUp=\"\\uf357\";fa.arrowCircleDown=\"\\uf0ab\";fa.arrowCircleLeft=\"\\uf0a8\";fa.arrowCircleRight=\"\\uf0a9\";fa.arrowCircleUp=\"\\uf0aa\";fa.arrowDown=\"\\uf063\";fa.arrowFromBottom=\"\\uf342\";fa.arrowFromLeft=\"\\uf343\";fa.arrowFromRight=\"\\uf344\";fa.arrowFromTop=\"\\uf345\";fa.arrowLeft=\"\\uf060\";fa.arrowRight=\"\\uf061\";fa.arrowSquareDown=\"\\uf339\";fa.arrowSquareLeft=\"\\uf33a\";fa.arrowSquareRight=\"\\uf33b\";fa.arrowSquareUp=\"\\uf33c\";fa.arrowToBottom=\"\\uf33d\";fa.arrowToLeft=\"\\uf33e\";fa.arrowToRight=\"\\uf340\";fa.arrowToTop=\"\\uf341\";fa.arrowUp=\"\\uf062\";fa.arrows=\"\\uf047\";fa.arrowsAlt=\"\\uf0b2\";fa.arrowsAltH=\"\\uf337\";fa.arrowsAltV=\"\\uf338\";fa.arrowsH=\"\\uf07e\";fa.arrowsV=\"\\uf07d\";fa.artstation=\"\\uf77a\";fa.assistiveListeningSystems=\"\\uf2a2\";fa.asterisk=\"\\uf069\";fa.asymmetrik=\"\\uf372\";fa.at=\"\\uf1fa\";fa.atlas=\"\\uf558\";fa.atlassian=\"\\uf77b\";fa.atom=\"\\uf5d2\";fa.atomAlt=\"\\uf5d3\";fa.audible=\"\\uf373\";fa.audioDescription=\"\\uf29e\";fa.autoprefixer=\"\\uf41c\";fa.avianex=\"\\uf374\";fa.aviato=\"\\uf421\";fa.award=\"\\uf559\";fa.aws=\"\\uf375\";fa.axe=\"\\uf6b2\";fa.axeBattle=\"\\uf6b3\";fa.baby=\"\\uf77c\";fa.babyCarriage=\"\\uf77d\";fa.backpack=\"\\uf5d4\";fa.backspace=\"\\uf55a\";fa.backward=\"\\uf04a\";fa.badge=\"\\uf335\";fa.badgeCheck=\"\\uf336\";fa.badgeDollar=\"\\uf645\";fa.badgePercent=\"\\uf646\";fa.badgerHoney=\"\\uf6b4\";fa.balanceScale=\"\\uf24e\";fa.balanceScaleLeft=\"\\uf515\";fa.balanceScaleRight=\"\\uf516\";fa.ballPile=\"\\uf77e\";fa.ballot=\"\\uf732\";fa.ballotCheck=\"\\uf733\";fa.ban=\"\\uf05e\";fa.bandAid=\"\\uf462\";fa.bandcamp=\"\\uf2d5\";fa.barcode=\"\\uf02a\";fa.barcodeAlt=\"\\uf463\";fa.barcodeRead=\"\\uf464\";fa.barcodeScan=\"\\uf465\";fa.bars=\"\\uf0c9\";fa.baseball=\"\\uf432\";fa.baseballBall=\"\\uf433\";fa.basketballBall=\"\\uf434\";fa.basketballHoop=\"\\uf435\";fa.bat=\"\\uf6b5\";fa.bath=\"\\uf2cd\";fa.batteryBolt=\"\\uf376\";fa.batteryEmpty=\"\\uf244\";fa.batteryFull=\"\\uf240\";fa.batteryHalf=\"\\uf242\";fa.batteryQuarter=\"\\uf243\";fa.batterySlash=\"\\uf377\";fa.batteryThreeQuarters=\"\\uf241\";fa.bed=\"\\uf236\";fa.beer=\"\\uf0fc\";fa.behance=\"\\uf1b4\";fa.behanceSquare=\"\\uf1b5\";fa.bell=\"\\uf0f3\";fa.bellSchool=\"\\uf5d5\";fa.bellSchoolSlash=\"\\uf5d6\";fa.bellSlash=\"\\uf1f6\";fa.bells=\"\\uf77f\";fa.bezierCurve=\"\\uf55b\";fa.bible=\"\\uf647\";fa.bicycle=\"\\uf206\";fa.bimobject=\"\\uf378\";fa.binoculars=\"\\uf1e5\";fa.biohazard=\"\\uf780\";fa.birthdayCake=\"\\uf1fd\";fa.bitbucket=\"\\uf171\";fa.bitcoin=\"\\uf379\";fa.bity=\"\\uf37a\";fa.blackTie=\"\\uf27e\";fa.blackberry=\"\\uf37b\";fa.blanket=\"\\uf498\";fa.blender=\"\\uf517\";fa.blenderPhone=\"\\uf6b6\";fa.blind=\"\\uf29d\";fa.blog=\"\\uf781\";fa.blogger=\"\\uf37c\";fa.bloggerB=\"\\uf37d\";fa.bluetooth=\"\\uf293\";fa.bluetoothB=\"\\uf294\";fa.bold=\"\\uf032\";fa.bolt=\"\\uf0e7\";fa.bomb=\"\\uf1e2\";fa.bone=\"\\uf5d7\";fa.boneBreak=\"\\uf5d8\";fa.bong=\"\\uf55c\";fa.book=\"\\uf02d\";fa.bookAlt=\"\\uf5d9\";fa.bookDead=\"\\uf6b7\";fa.bookHeart=\"\\uf499\";fa.bookOpen=\"\\uf518\";fa.bookReader=\"\\uf5da\";fa.bookSpells=\"\\uf6b8\";fa.bookmark=\"\\uf02e\";fa.books=\"\\uf5db\";fa.boot=\"\\uf782\";fa.boothCurtain=\"\\uf734\";fa.bowArrow=\"\\uf6b9\";fa.bowlingBall=\"\\uf436\";fa.bowlingPins=\"\\uf437\";fa.box=\"\\uf466\";fa.boxAlt=\"\\uf49a\";fa.boxBallot=\"\\uf735\";fa.boxCheck=\"\\uf467\";fa.boxFragile=\"\\uf49b\";fa.boxFull=\"\\uf49c\";fa.boxHeart=\"\\uf49d\";fa.boxOpen=\"\\uf49e\";fa.boxUp=\"\\uf49f\";fa.boxUsd=\"\\uf4a0\";fa.boxes=\"\\uf468\";fa.boxesAlt=\"\\uf4a1\";fa.boxingGlove=\"\\uf438\";fa.braille=\"\\uf2a1\";fa.brain=\"\\uf5dc\";fa.briefcase=\"\\uf0b1\";fa.briefcaseMedical=\"\\uf469\";fa.broadcastTower=\"\\uf519\";fa.broom=\"\\uf51a\";fa.browser=\"\\uf37e\";fa.brush=\"\\uf55d\";fa.btc=\"\\uf15a\";fa.bug=\"\\uf188\";fa.building=\"\\uf1ad\";fa.bullhorn=\"\\uf0a1\";fa.bullseye=\"\\uf140\";fa.bullseyeArrow=\"\\uf648\";fa.bullseyePointer=\"\\uf649\";fa.burn=\"\\uf46a\";fa.buromobelexperte=\"\\uf37f\";fa.bus=\"\\uf207\";fa.busAlt=\"\\uf55e\";fa.busSchool=\"\\uf5dd\";fa.businessTime=\"\\uf64a\";fa.buysellads=\"\\uf20d\";fa.cabinetFiling=\"\\uf64b\";fa.calculator=\"\\uf1ec\";fa.calculatorAlt=\"\\uf64c\";fa.calendar=\"\\uf133\";fa.calendarAlt=\"\\uf073\";fa.calendarCheck=\"\\uf274\";fa.calendarDay=\"\\uf783\";fa.calendarEdit=\"\\uf333\";fa.calendarExclamation=\"\\uf334\";fa.calendarMinus=\"\\uf272\";fa.calendarPlus=\"\\uf271\";fa.calendarStar=\"\\uf736\";fa.calendarTimes=\"\\uf273\";fa.calendarWeek=\"\\uf784\";fa.camera=\"\\uf030\";fa.cameraAlt=\"\\uf332\";fa.cameraRetro=\"\\uf083\";fa.campfire=\"\\uf6ba\";fa.campground=\"\\uf6bb\";fa.canadianMapleLeaf=\"\\uf785\";fa.candleHolder=\"\\uf6bc\";fa.candyCane=\"\\uf786\";fa.candyCorn=\"\\uf6bd\";fa.cannabis=\"\\uf55f\";fa.capsules=\"\\uf46b\";fa.car=\"\\uf1b9\";fa.carAlt=\"\\uf5de\";fa.carBattery=\"\\uf5df\";fa.carBump=\"\\uf5e0\";fa.carCrash=\"\\uf5e1\";fa.carGarage=\"\\uf5e2\";fa.carMechanic=\"\\uf5e3\";fa.carSide=\"\\uf5e4\";fa.carTilt=\"\\uf5e5\";fa.carWash=\"\\uf5e6\";fa.caretCircleDown=\"\\uf32d\";fa.caretCircleLeft=\"\\uf32e\";fa.caretCircleRight=\"\\uf330\";fa.caretCircleUp=\"\\uf331\";fa.caretDown=\"\\uf0d7\";fa.caretLeft=\"\\uf0d9\";fa.caretRight=\"\\uf0da\";fa.caretSquareDown=\"\\uf150\";fa.caretSquareLeft=\"\\uf191\";fa.caretSquareRight=\"\\uf152\";fa.caretSquareUp=\"\\uf151\";fa.caretUp=\"\\uf0d8\";fa.carrot=\"\\uf787\";fa.cartArrowDown=\"\\uf218\";fa.cartPlus=\"\\uf217\";fa.cashRegister=\"\\uf788\";fa.cat=\"\\uf6be\";fa.cauldron=\"\\uf6bf\";fa.ccAmazonPay=\"\\uf42d\";fa.ccAmex=\"\\uf1f3\";fa.ccApplePay=\"\\uf416\";fa.ccDinersClub=\"\\uf24c\";fa.ccDiscover=\"\\uf1f2\";fa.ccJcb=\"\\uf24b\";fa.ccMastercard=\"\\uf1f1\";fa.ccPaypal=\"\\uf1f4\";fa.ccStripe=\"\\uf1f5\";fa.ccVisa=\"\\uf1f0\";fa.centercode=\"\\uf380\";fa.centos=\"\\uf789\";fa.certificate=\"\\uf0a3\";fa.chair=\"\\uf6c0\";fa.chairOffice=\"\\uf6c1\";fa.chalkboard=\"\\uf51b\";fa.chalkboardTeacher=\"\\uf51c\";fa.chargingStation=\"\\uf5e7\";fa.chartArea=\"\\uf1fe\";fa.chartBar=\"\\uf080\";fa.chartLine=\"\\uf201\";fa.chartLineDown=\"\\uf64d\";fa.chartNetwork=\"\\uf78a\";fa.chartPie=\"\\uf200\";fa.chartPieAlt=\"\\uf64e\";fa.check=\"\\uf00c\";fa.checkCircle=\"\\uf058\";fa.checkDouble=\"\\uf560\";fa.checkSquare=\"\\uf14a\";fa.chess=\"\\uf439\";fa.chessBishop=\"\\uf43a\";fa.chessBishopAlt=\"\\uf43b\";fa.chessBoard=\"\\uf43c\";fa.chessClock=\"\\uf43d\";fa.chessClockAlt=\"\\uf43e\";fa.chessKing=\"\\uf43f\";fa.chessKingAlt=\"\\uf440\";fa.chessKnight=\"\\uf441\";fa.chessKnightAlt=\"\\uf442\";fa.chessPawn=\"\\uf443\";fa.chessPawnAlt=\"\\uf444\";fa.chessQueen=\"\\uf445\";fa.chessQueenAlt=\"\\uf446\";fa.chessRook=\"\\uf447\";fa.chessRookAlt=\"\\uf448\";fa.chevronCircleDown=\"\\uf13a\";fa.chevronCircleLeft=\"\\uf137\";fa.chevronCircleRight=\"\\uf138\";fa.chevronCircleUp=\"\\uf139\";fa.chevronDoubleDown=\"\\uf322\";fa.chevronDoubleLeft=\"\\uf323\";fa.chevronDoubleRight=\"\\uf324\";fa.chevronDoubleUp=\"\\uf325\";fa.chevronDown=\"\\uf078\";fa.chevronLeft=\"\\uf053\";fa.chevronRight=\"\\uf054\";fa.chevronSquareDown=\"\\uf329\";fa.chevronSquareLeft=\"\\uf32a\";fa.chevronSquareRight=\"\\uf32b\";fa.chevronSquareUp=\"\\uf32c\";fa.chevronUp=\"\\uf077\";fa.child=\"\\uf1ae\";fa.chimney=\"\\uf78b\";fa.chrome=\"\\uf268\";fa.church=\"\\uf51d\";fa.circle=\"\\uf111\";fa.circleNotch=\"\\uf1ce\";fa.city=\"\\uf64f\";fa.clawMarks=\"\\uf6c2\";fa.clipboard=\"\\uf328\";fa.clipboardCheck=\"\\uf46c\";fa.clipboardList=\"\\uf46d\";fa.clipboardListCheck=\"\\uf737\";fa.clipboardPrescription=\"\\uf5e8\";fa.clock=\"\\uf017\";fa.clone=\"\\uf24d\";fa.closedCaptioning=\"\\uf20a\";fa.cloud=\"\\uf0c2\";fa.cloudDownload=\"\\uf0ed\";fa.cloudDownloadAlt=\"\\uf381\";fa.cloudDrizzle=\"\\uf738\";fa.cloudHail=\"\\uf739\";fa.cloudHailMixed=\"\\uf73a\";fa.cloudMeatball=\"\\uf73b\";fa.cloudMoon=\"\\uf6c3\";fa.cloudMoonRain=\"\\uf73c\";fa.cloudRain=\"\\uf73d\";fa.cloudRainbow=\"\\uf73e\";fa.cloudShowers=\"\\uf73f\";fa.cloudShowersHeavy=\"\\uf740\";fa.cloudSleet=\"\\uf741\";fa.cloudSnow=\"\\uf742\";fa.cloudSun=\"\\uf6c4\";fa.cloudSunRain=\"\\uf743\";fa.cloudUpload=\"\\uf0ee\";fa.cloudUploadAlt=\"\\uf382\";fa.clouds=\"\\uf744\";fa.cloudsMoon=\"\\uf745\";fa.cloudsSun=\"\\uf746\";fa.cloudscale=\"\\uf383\";fa.cloudsmith=\"\\uf384\";fa.cloudversify=\"\\uf385\";fa.club=\"\\uf327\";fa.cocktail=\"\\uf561\";fa.code=\"\\uf121\";fa.codeBranch=\"\\uf126\";fa.codeCommit=\"\\uf386\";fa.codeMerge=\"\\uf387\";fa.codepen=\"\\uf1cb\";fa.codiepie=\"\\uf284\";fa.coffee=\"\\uf0f4\";fa.coffeeTogo=\"\\uf6c5\";fa.coffin=\"\\uf6c6\";fa.cog=\"\\uf013\";fa.cogs=\"\\uf085\";fa.coins=\"\\uf51e\";fa.columns=\"\\uf0db\";fa.comment=\"\\uf075\";fa.commentAlt=\"\\uf27a\";fa.commentAltCheck=\"\\uf4a2\";fa.commentAltDollar=\"\\uf650\";fa.commentAltDots=\"\\uf4a3\";fa.commentAltEdit=\"\\uf4a4\";fa.commentAltExclamation=\"\\uf4a5\";fa.commentAltLines=\"\\uf4a6\";fa.commentAltMinus=\"\\uf4a7\";fa.commentAltPlus=\"\\uf4a8\";fa.commentAltSlash=\"\\uf4a9\";fa.commentAltSmile=\"\\uf4aa\";fa.commentAltTimes=\"\\uf4ab\";fa.commentCheck=\"\\uf4ac\";fa.commentDollar=\"\\uf651\";fa.commentDots=\"\\uf4ad\";fa.commentEdit=\"\\uf4ae\";fa.commentExclamation=\"\\uf4af\";fa.commentLines=\"\\uf4b0\";fa.commentMinus=\"\\uf4b1\";fa.commentPlus=\"\\uf4b2\";fa.commentSlash=\"\\uf4b3\";fa.commentSmile=\"\\uf4b4\";fa.commentTimes=\"\\uf4b5\";fa.comments=\"\\uf086\";fa.commentsAlt=\"\\uf4b6\";fa.commentsAltDollar=\"\\uf652\";fa.commentsDollar=\"\\uf653\";fa.compactDisc=\"\\uf51f\";fa.compass=\"\\uf14e\";fa.compassSlash=\"\\uf5e9\";fa.compress=\"\\uf066\";fa.compressAlt=\"\\uf422\";fa.compressArrowsAlt=\"\\uf78c\";fa.compressWide=\"\\uf326\";fa.conciergeBell=\"\\uf562\";fa.confluence=\"\\uf78d\";fa.connectdevelop=\"\\uf20e\";fa.containerStorage=\"\\uf4b7\";fa.contao=\"\\uf26d\";fa.conveyorBelt=\"\\uf46e\";fa.conveyorBeltAlt=\"\\uf46f\";fa.cookie=\"\\uf563\";fa.cookieBite=\"\\uf564\";fa.copy=\"\\uf0c5\";fa.copyright=\"\\uf1f9\";fa.corn=\"\\uf6c7\";fa.couch=\"\\uf4b8\";fa.cow=\"\\uf6c8\";fa.cpanel=\"\\uf388\";fa.creativeCommons=\"\\uf25e\";fa.creativeCommonsBy=\"\\uf4e7\";fa.creativeCommonsNc=\"\\uf4e8\";fa.creativeCommonsNcEu=\"\\uf4e9\";fa.creativeCommonsNcJp=\"\\uf4ea\";fa.creativeCommonsNd=\"\\uf4eb\";fa.creativeCommonsPd=\"\\uf4ec\";fa.creativeCommonsPdAlt=\"\\uf4ed\";fa.creativeCommonsRemix=\"\\uf4ee\";fa.creativeCommonsSa=\"\\uf4ef\";fa.creativeCommonsSampling=\"\\uf4f0\";fa.creativeCommonsSamplingPlus=\"\\uf4f1\";fa.creativeCommonsShare=\"\\uf4f2\";fa.creativeCommonsZero=\"\\uf4f3\";fa.creditCard=\"\\uf09d\";fa.creditCardBlank=\"\\uf389\";fa.creditCardFront=\"\\uf38a\";fa.cricket=\"\\uf449\";fa.criticalRole=\"\\uf6c9\";fa.crop=\"\\uf125\";fa.cropAlt=\"\\uf565\";fa.cross=\"\\uf654\";fa.crosshairs=\"\\uf05b\";fa.crow=\"\\uf520\";fa.crown=\"\\uf521\";fa.css3=\"\\uf13c\";fa.css3Alt=\"\\uf38b\";fa.cube=\"\\uf1b2\";fa.cubes=\"\\uf1b3\";fa.curling=\"\\uf44a\";fa.cut=\"\\uf0c4\";fa.cuttlefish=\"\\uf38c\";fa.dAndD=\"\\uf38d\";fa.dAndDBeyond=\"\\uf6ca\";fa.dagger=\"\\uf6cb\";fa.dashcube=\"\\uf210\";fa.database=\"\\uf1c0\";fa.deaf=\"\\uf2a4\";fa.deer=\"\\uf78e\";fa.deerRudolph=\"\\uf78f\";fa.delicious=\"\\uf1a5\";fa.democrat=\"\\uf747\";fa.deploydog=\"\\uf38e\";fa.deskpro=\"\\uf38f\";fa.desktop=\"\\uf108\";fa.desktopAlt=\"\\uf390\";fa.dev=\"\\uf6cc\";fa.deviantart=\"\\uf1bd\";fa.dewpoint=\"\\uf748\";fa.dharmachakra=\"\\uf655\";fa.dhl=\"\\uf790\";fa.diagnoses=\"\\uf470\";fa.diamond=\"\\uf219\";fa.diaspora=\"\\uf791\";fa.dice=\"\\uf522\";fa.diceD10=\"\\uf6cd\";fa.diceD12=\"\\uf6ce\";fa.diceD20=\"\\uf6cf\";fa.diceD4=\"\\uf6d0\";fa.diceD6=\"\\uf6d1\";fa.diceD8=\"\\uf6d2\";fa.diceFive=\"\\uf523\";fa.diceFour=\"\\uf524\";fa.diceOne=\"\\uf525\";fa.diceSix=\"\\uf526\";fa.diceThree=\"\\uf527\";fa.diceTwo=\"\\uf528\";fa.digg=\"\\uf1a6\";fa.digitalOcean=\"\\uf391\";fa.digitalTachograph=\"\\uf566\";fa.diploma=\"\\uf5ea\";fa.directions=\"\\uf5eb\";fa.discord=\"\\uf392\";fa.discourse=\"\\uf393\";fa.divide=\"\\uf529\";fa.dizzy=\"\\uf567\";fa.dna=\"\\uf471\";fa.doNotEnter=\"\\uf5ec\";fa.dochub=\"\\uf394\";fa.docker=\"\\uf395\";fa.dog=\"\\uf6d3\";fa.dogLeashed=\"\\uf6d4\";fa.dollarSign=\"\\uf155\";fa.dolly=\"\\uf472\";fa.dollyEmpty=\"\\uf473\";fa.dollyFlatbed=\"\\uf474\";fa.dollyFlatbedAlt=\"\\uf475\";fa.dollyFlatbedEmpty=\"\\uf476\";fa.donate=\"\\uf4b9\";fa.doorClosed=\"\\uf52a\";fa.doorOpen=\"\\uf52b\";fa.dotCircle=\"\\uf192\";fa.dove=\"\\uf4ba\";fa.download=\"\\uf019\";fa.draft2digital=\"\\uf396\";fa.draftingCompass=\"\\uf568\";fa.dragon=\"\\uf6d5\";fa.drawCircle=\"\\uf5ed\";fa.drawPolygon=\"\\uf5ee\";fa.drawSquare=\"\\uf5ef\";fa.dreidel=\"\\uf792\";fa.dribbble=\"\\uf17d\";fa.dribbbleSquare=\"\\uf397\";fa.dropbox=\"\\uf16b\";fa.drum=\"\\uf569\";fa.drumSteelpan=\"\\uf56a\";fa.drumstick=\"\\uf6d6\";fa.drumstickBite=\"\\uf6d7\";fa.drupal=\"\\uf1a9\";fa.duck=\"\\uf6d8\";fa.dumbbell=\"\\uf44b\";fa.dumpster=\"\\uf793\";fa.dumpsterFire=\"\\uf794\";fa.dungeon=\"\\uf6d9\";fa.dyalog=\"\\uf399\";fa.ear=\"\\uf5f0\";fa.earMuffs=\"\\uf795\";fa.earlybirds=\"\\uf39a\";fa.ebay=\"\\uf4f4\";fa.eclipse=\"\\uf749\";fa.eclipseAlt=\"\\uf74a\";fa.edge=\"\\uf282\";fa.edit=\"\\uf044\";fa.eject=\"\\uf052\";fa.elementor=\"\\uf430\";fa.elephant=\"\\uf6da\";fa.ellipsisH=\"\\uf141\";fa.ellipsisHAlt=\"\\uf39b\";fa.ellipsisV=\"\\uf142\";fa.ellipsisVAlt=\"\\uf39c\";fa.ello=\"\\uf5f1\";fa.ember=\"\\uf423\";fa.empire=\"\\uf1d1\";fa.emptySet=\"\\uf656\";fa.engineWarning=\"\\uf5f2\";fa.envelope=\"\\uf0e0\";fa.envelopeOpen=\"\\uf2b6\";fa.envelopeOpenDollar=\"\\uf657\";fa.envelopeOpenText=\"\\uf658\";fa.envelopeSquare=\"\\uf199\";fa.envira=\"\\uf299\";fa.equals=\"\\uf52c\";fa.eraser=\"\\uf12d\";fa.erlang=\"\\uf39d\";fa.ethereum=\"\\uf42e\";fa.ethernet=\"\\uf796\";fa.etsy=\"\\uf2d7\";fa.euroSign=\"\\uf153\";fa.exchange=\"\\uf0ec\";fa.exchangeAlt=\"\\uf362\";fa.exclamation=\"\\uf12a\";fa.exclamationCircle=\"\\uf06a\";fa.exclamationSquare=\"\\uf321\";fa.exclamationTriangle=\"\\uf071\";fa.expand=\"\\uf065\";fa.expandAlt=\"\\uf424\";fa.expandArrows=\"\\uf31d\";fa.expandArrowsAlt=\"\\uf31e\";fa.expandWide=\"\\uf320\";fa.expeditedssl=\"\\uf23e\";fa.externalLink=\"\\uf08e\";fa.externalLinkAlt=\"\\uf35d\";fa.externalLinkSquare=\"\\uf14c\";fa.externalLinkSquareAlt=\"\\uf360\";fa.eye=\"\\uf06e\";fa.eyeDropper=\"\\uf1fb\";fa.eyeEvil=\"\\uf6db\";fa.eyeSlash=\"\\uf070\";fa.facebook=\"\\uf09a\";fa.facebookF=\"\\uf39e\";fa.facebookMessenger=\"\\uf39f\";fa.facebookSquare=\"\\uf082\";fa.fantasyFlightGames=\"\\uf6dc\";fa.fastBackward=\"\\uf049\";fa.fastForward=\"\\uf050\";fa.fax=\"\\uf1ac\";fa.feather=\"\\uf52d\";fa.featherAlt=\"\\uf56b\";fa.fedex=\"\\uf797\";fa.fedora=\"\\uf798\";fa.female=\"\\uf182\";fa.fieldHockey=\"\\uf44c\";fa.fighterJet=\"\\uf0fb\";fa.figma=\"\\uf799\";fa.file=\"\\uf15b\";fa.fileAlt=\"\\uf15c\";fa.fileArchive=\"\\uf1c6\";fa.fileAudio=\"\\uf1c7\";fa.fileCertificate=\"\\uf5f3\";fa.fileChartLine=\"\\uf659\";fa.fileChartPie=\"\\uf65a\";fa.fileCheck=\"\\uf316\";fa.fileCode=\"\\uf1c9\";fa.fileContract=\"\\uf56c\";fa.fileCsv=\"\\uf6dd\";fa.fileDownload=\"\\uf56d\";fa.fileEdit=\"\\uf31c\";fa.fileExcel=\"\\uf1c3\";fa.fileExclamation=\"\\uf31a\";fa.fileExport=\"\\uf56e\";fa.fileImage=\"\\uf1c5\";fa.fileImport=\"\\uf56f\";fa.fileInvoice=\"\\uf570\";fa.fileInvoiceDollar=\"\\uf571\";fa.fileMedical=\"\\uf477\";fa.fileMedicalAlt=\"\\uf478\";fa.fileMinus=\"\\uf318\";fa.filePdf=\"\\uf1c1\";fa.filePlus=\"\\uf319\";fa.filePowerpoint=\"\\uf1c4\";fa.filePrescription=\"\\uf572\";fa.fileSignature=\"\\uf573\";fa.fileSpreadsheet=\"\\uf65b\";fa.fileTimes=\"\\uf317\";fa.fileUpload=\"\\uf574\";fa.fileUser=\"\\uf65c\";fa.fileVideo=\"\\uf1c8\";fa.fileWord=\"\\uf1c2\";fa.fill=\"\\uf575\";fa.fillDrip=\"\\uf576\";fa.film=\"\\uf008\";fa.filmAlt=\"\\uf3a0\";fa.filter=\"\\uf0b0\";fa.fingerprint=\"\\uf577\";fa.fire=\"\\uf06d\";fa.fireAlt=\"\\uf7e4\";fa.fireExtinguisher=\"\\uf134\";fa.fireSmoke=\"\\uf74b\";fa.firefox=\"\\uf269\";fa.fireplace=\"\\uf79a\";fa.firstAid=\"\\uf479\";fa.firstOrder=\"\\uf2b0\";fa.firstOrderAlt=\"\\uf50a\";fa.firstdraft=\"\\uf3a1\";fa.fish=\"\\uf578\";fa.fistRaised=\"\\uf6de\";fa.flag=\"\\uf024\";fa.flagAlt=\"\\uf74c\";fa.flagCheckered=\"\\uf11e\";fa.flagUsa=\"\\uf74d\";fa.flame=\"\\uf6df\";fa.flask=\"\\uf0c3\";fa.flaskPoison=\"\\uf6e0\";fa.flaskPotion=\"\\uf6e1\";fa.flickr=\"\\uf16e\";fa.flipboard=\"\\uf44d\";fa.flushed=\"\\uf579\";fa.fly=\"\\uf417\";fa.fog=\"\\uf74e\";fa.folder=\"\\uf07b\";fa.folderMinus=\"\\uf65d\";fa.folderOpen=\"\\uf07c\";fa.folderPlus=\"\\uf65e\";fa.folderTimes=\"\\uf65f\";fa.folders=\"\\uf660\";fa.font=\"\\uf031\";fa.fontAwesome=\"\\uf2b4\";fa.fontAwesomeAlt=\"\\uf35c\";fa.fontAwesomeFlag=\"\\uf425\";fa.fontAwesomeLogoFull=\"\\uf4e6\";fa.fonticons=\"\\uf280\";fa.fonticonsFi=\"\\uf3a2\";fa.footballBall=\"\\uf44e\";fa.footballHelmet=\"\\uf44f\";fa.forklift=\"\\uf47a\";fa.fortAwesome=\"\\uf286\";fa.fortAwesomeAlt=\"\\uf3a3\";fa.forumbee=\"\\uf211\";fa.forward=\"\\uf04e\";fa.foursquare=\"\\uf180\";fa.fragile=\"\\uf4bb\";fa.freeCodeCamp=\"\\uf2c5\";fa.freebsd=\"\\uf3a4\";fa.frog=\"\\uf52e\";fa.frostyHead=\"\\uf79b\";fa.frown=\"\\uf119\";fa.frownOpen=\"\\uf57a\";fa.fulcrum=\"\\uf50b\";fa.function=\"\\uf661\";fa.funnelDollar=\"\\uf662\";fa.futbol=\"\\uf1e3\";fa.galacticRepublic=\"\\uf50c\";fa.galacticSenate=\"\\uf50d\";fa.gamepad=\"\\uf11b\";fa.gasPump=\"\\uf52f\";fa.gasPumpSlash=\"\\uf5f4\";fa.gavel=\"\\uf0e3\";fa.gem=\"\\uf3a5\";fa.genderless=\"\\uf22d\";fa.getPocket=\"\\uf265\";fa.gg=\"\\uf260\";fa.ggCircle=\"\\uf261\";fa.ghost=\"\\uf6e2\";fa.gift=\"\\uf06b\";fa.giftCard=\"\\uf663\";fa.gifts=\"\\uf79c\";fa.gingerbreadMan=\"\\uf79d\";fa.git=\"\\uf1d3\";fa.gitSquare=\"\\uf1d2\";fa.github=\"\\uf09b\";fa.githubAlt=\"\\uf113\";fa.githubSquare=\"\\uf092\";fa.gitkraken=\"\\uf3a6\";fa.gitlab=\"\\uf296\";fa.gitter=\"\\uf426\";fa.glassChampagne=\"\\uf79e\";fa.glassCheers=\"\\uf79f\";fa.glassMartini=\"\\uf000\";fa.glassMartiniAlt=\"\\uf57b\";fa.glassWhiskey=\"\\uf7a0\";fa.glassWhiskeyRocks=\"\\uf7a1\";fa.glasses=\"\\uf530\";fa.glassesAlt=\"\\uf5f5\";fa.glide=\"\\uf2a5\";fa.glideG=\"\\uf2a6\";fa.globe=\"\\uf0ac\";fa.globeAfrica=\"\\uf57c\";fa.globeAmericas=\"\\uf57d\";fa.globeAsia=\"\\uf57e\";fa.globeEurope=\"\\uf7a2\";fa.globeSnow=\"\\uf7a3\";fa.globeStand=\"\\uf5f6\";fa.gofore=\"\\uf3a7\";fa.golfBall=\"\\uf450\";fa.golfClub=\"\\uf451\";fa.goodreads=\"\\uf3a8\";fa.goodreadsG=\"\\uf3a9\";fa.google=\"\\uf1a0\";fa.googleDrive=\"\\uf3aa\";fa.googlePlay=\"\\uf3ab\";fa.googlePlus=\"\\uf2b3\";fa.googlePlusG=\"\\uf0d5\";fa.googlePlusSquare=\"\\uf0d4\";fa.googleWallet=\"\\uf1ee\";fa.gopuram=\"\\uf664\";fa.graduationCap=\"\\uf19d\";fa.gratipay=\"\\uf184\";fa.grav=\"\\uf2d6\";fa.greaterThan=\"\\uf531\";fa.greaterThanEqual=\"\\uf532\";fa.grimace=\"\\uf57f\";fa.grin=\"\\uf580\";fa.grinAlt=\"\\uf581\";fa.grinBeam=\"\\uf582\";fa.grinBeamSweat=\"\\uf583\";fa.grinHearts=\"\\uf584\";fa.grinSquint=\"\\uf585\";fa.grinSquintTears=\"\\uf586\";fa.grinStars=\"\\uf587\";fa.grinTears=\"\\uf588\";fa.grinTongue=\"\\uf589\";fa.grinTongueSquint=\"\\uf58a\";fa.grinTongueWink=\"\\uf58b\";fa.grinWink=\"\\uf58c\";fa.gripHorizontal=\"\\uf58d\";fa.gripLines=\"\\uf7a4\";fa.gripLinesVertical=\"\\uf7a5\";fa.gripVertical=\"\\uf58e\";fa.gripfire=\"\\uf3ac\";fa.grunt=\"\\uf3ad\";fa.guitar=\"\\uf7a6\";fa.gulp=\"\\uf3ae\";fa.hSquare=\"\\uf0fd\";fa.h1=\"\\uf313\";fa.h2=\"\\uf314\";fa.h3=\"\\uf315\";fa.hackerNews=\"\\uf1d4\";fa.hackerNewsSquare=\"\\uf3af\";fa.hackerrank=\"\\uf5f7\";fa.hammer=\"\\uf6e3\";fa.hammerWar=\"\\uf6e4\";fa.hamsa=\"\\uf665\";fa.handHeart=\"\\uf4bc\";fa.handHolding=\"\\uf4bd\";fa.handHoldingBox=\"\\uf47b\";fa.handHoldingHeart=\"\\uf4be\";fa.handHoldingMagic=\"\\uf6e5\";fa.handHoldingSeedling=\"\\uf4bf\";fa.handHoldingUsd=\"\\uf4c0\";fa.handHoldingWater=\"\\uf4c1\";fa.handLizard=\"\\uf258\";fa.handPaper=\"\\uf256\";fa.handPeace=\"\\uf25b\";fa.handPointDown=\"\\uf0a7\";fa.handPointLeft=\"\\uf0a5\";fa.handPointRight=\"\\uf0a4\";fa.handPointUp=\"\\uf0a6\";fa.handPointer=\"\\uf25a\";fa.handReceiving=\"\\uf47c\";fa.handRock=\"\\uf255\";fa.handScissors=\"\\uf257\";fa.handSpock=\"\\uf259\";fa.hands=\"\\uf4c2\";fa.handsHeart=\"\\uf4c3\";fa.handsHelping=\"\\uf4c4\";fa.handsUsd=\"\\uf4c5\";fa.handshake=\"\\uf2b5\";fa.handshakeAlt=\"\\uf4c6\";fa.hanukiah=\"\\uf6e6\";fa.hashtag=\"\\uf292\";fa.hatSanta=\"\\uf7a7\";fa.hatWinter=\"\\uf7a8\";fa.hatWitch=\"\\uf6e7\";fa.hatWizard=\"\\uf6e8\";fa.haykal=\"\\uf666\";fa.hdd=\"\\uf0a0\";fa.headSide=\"\\uf6e9\";fa.headVr=\"\\uf6ea\";fa.heading=\"\\uf1dc\";fa.headphones=\"\\uf025\";fa.headphonesAlt=\"\\uf58f\";fa.headset=\"\\uf590\";fa.heart=\"\\uf004\";fa.heartBroken=\"\\uf7a9\";fa.heartCircle=\"\\uf4c7\";fa.heartRate=\"\\uf5f8\";fa.heartSquare=\"\\uf4c8\";fa.heartbeat=\"\\uf21e\";fa.helicopter=\"\\uf533\";fa.helmetBattle=\"\\uf6eb\";fa.hexagon=\"\\uf312\";fa.highlighter=\"\\uf591\";fa.hiking=\"\\uf6ec\";fa.hippo=\"\\uf6ed\";fa.hips=\"\\uf452\";fa.hireAHelper=\"\\uf3b0\";fa.history=\"\\uf1da\";fa.hockeyMask=\"\\uf6ee\";fa.hockeyPuck=\"\\uf453\";fa.hockeySticks=\"\\uf454\";fa.hollyBerry=\"\\uf7aa\";fa.home=\"\\uf015\";fa.homeHeart=\"\\uf4c9\";fa.hoodCloak=\"\\uf6ef\";fa.hooli=\"\\uf427\";fa.hornbill=\"\\uf592\";fa.horse=\"\\uf6f0\";fa.horseHead=\"\\uf7ab\";fa.hospital=\"\\uf0f8\";fa.hospitalAlt=\"\\uf47d\";fa.hospitalSymbol=\"\\uf47e\";fa.hotTub=\"\\uf593\";fa.hotel=\"\\uf594\";fa.hotjar=\"\\uf3b1\";fa.hourglass=\"\\uf254\";fa.hourglassEnd=\"\\uf253\";fa.hourglassHalf=\"\\uf252\";fa.hourglassStart=\"\\uf251\";fa.houseDamage=\"\\uf6f1\";fa.houseFlood=\"\\uf74f\";fa.houzz=\"\\uf27c\";fa.hryvnia=\"\\uf6f2\";fa.html5=\"\\uf13b\";fa.hubspot=\"\\uf3b2\";fa.humidity=\"\\uf750\";fa.hurricane=\"\\uf751\";fa.iCursor=\"\\uf246\";fa.iceSkate=\"\\uf7ac\";fa.icicles=\"\\uf7ad\";fa.idBadge=\"\\uf2c1\";fa.idCard=\"\\uf2c2\";fa.idCardAlt=\"\\uf47f\";fa.igloo=\"\\uf7ae\";fa.image=\"\\uf03e\";fa.images=\"\\uf302\";fa.imdb=\"\\uf2d8\";fa.inbox=\"\\uf01c\";fa.inboxIn=\"\\uf310\";fa.inboxOut=\"\\uf311\";fa.indent=\"\\uf03c\";fa.industry=\"\\uf275\";fa.industryAlt=\"\\uf3b3\";fa.infinity=\"\\uf534\";fa.info=\"\\uf129\";fa.infoCircle=\"\\uf05a\";fa.infoSquare=\"\\uf30f\";fa.inhaler=\"\\uf5f9\";fa.instagram=\"\\uf16d\";fa.integral=\"\\uf667\";fa.intercom=\"\\uf7af\";fa.internetExplorer=\"\\uf26b\";fa.intersection=\"\\uf668\";fa.inventory=\"\\uf480\";fa.invision=\"\\uf7b0\";fa.ioxhost=\"\\uf208\";fa.italic=\"\\uf033\";fa.itunes=\"\\uf3b4\";fa.itunesNote=\"\\uf3b5\";fa.jackOLantern=\"\\uf30e\";fa.java=\"\\uf4e4\";fa.jedi=\"\\uf669\";fa.jediOrder=\"\\uf50e\";fa.jenkins=\"\\uf3b6\";fa.jira=\"\\uf7b1\";fa.joget=\"\\uf3b7\";fa.joint=\"\\uf595\";fa.joomla=\"\\uf1aa\";fa.journalWhills=\"\\uf66a\";fa.js=\"\\uf3b8\";fa.jsSquare=\"\\uf3b9\";fa.jsfiddle=\"\\uf1cc\";fa.kaaba=\"\\uf66b\";fa.kaggle=\"\\uf5fa\";fa.key=\"\\uf084\";fa.keySkeleton=\"\\uf6f3\";fa.keybase=\"\\uf4f5\";fa.keyboard=\"\\uf11c\";fa.keycdn=\"\\uf3ba\";fa.keynote=\"\\uf66c\";fa.khanda=\"\\uf66d\";fa.kickstarter=\"\\uf3bb\";fa.kickstarterK=\"\\uf3bc\";fa.kidneys=\"\\uf5fb\";fa.kiss=\"\\uf596\";fa.kissBeam=\"\\uf597\";fa.kissWinkHeart=\"\\uf598\";fa.kite=\"\\uf6f4\";fa.kiwiBird=\"\\uf535\";fa.knifeKitchen=\"\\uf6f5\";fa.korvue=\"\\uf42f\";fa.lambda=\"\\uf66e\";fa.lamp=\"\\uf4ca\";fa.landmark=\"\\uf66f\";fa.landmarkAlt=\"\\uf752\";fa.language=\"\\uf1ab\";fa.laptop=\"\\uf109\";fa.laptopCode=\"\\uf5fc\";fa.laravel=\"\\uf3bd\";fa.lastfm=\"\\uf202\";fa.lastfmSquare=\"\\uf203\";fa.laugh=\"\\uf599\";fa.laughBeam=\"\\uf59a\";fa.laughSquint=\"\\uf59b\";fa.laughWink=\"\\uf59c\";fa.layerGroup=\"\\uf5fd\";fa.layerMinus=\"\\uf5fe\";fa.layerPlus=\"\\uf5ff\";fa.leaf=\"\\uf06c\";fa.leafHeart=\"\\uf4cb\";fa.leafMaple=\"\\uf6f6\";fa.leafOak=\"\\uf6f7\";fa.leanpub=\"\\uf212\";fa.lemon=\"\\uf094\";fa.less=\"\\uf41d\";fa.lessThan=\"\\uf536\";fa.lessThanEqual=\"\\uf537\";fa.levelDown=\"\\uf149\";fa.levelDownAlt=\"\\uf3be\";fa.levelUp=\"\\uf148\";fa.levelUpAlt=\"\\uf3bf\";fa.lifeRing=\"\\uf1cd\";fa.lightbulb=\"\\uf0eb\";fa.lightbulbDollar=\"\\uf670\";fa.lightbulbExclamation=\"\\uf671\";fa.lightbulbOn=\"\\uf672\";fa.lightbulbSlash=\"\\uf673\";fa.lightsHoliday=\"\\uf7b2\";fa.line=\"\\uf3c0\";fa.link=\"\\uf0c1\";fa.linkedin=\"\\uf08c\";fa.linkedinIn=\"\\uf0e1\";fa.linode=\"\\uf2b8\";fa.linux=\"\\uf17c\";fa.lips=\"\\uf600\";fa.liraSign=\"\\uf195\";fa.list=\"\\uf03a\";fa.listAlt=\"\\uf022\";fa.listOl=\"\\uf0cb\";fa.listUl=\"\\uf0ca\";fa.location=\"\\uf601\";fa.locationArrow=\"\\uf124\";fa.locationCircle=\"\\uf602\";fa.locationSlash=\"\\uf603\";fa.lock=\"\\uf023\";fa.lockAlt=\"\\uf30d\";fa.lockOpen=\"\\uf3c1\";fa.lockOpenAlt=\"\\uf3c2\";fa.longArrowAltDown=\"\\uf309\";fa.longArrowAltLeft=\"\\uf30a\";fa.longArrowAltRight=\"\\uf30b\";fa.longArrowAltUp=\"\\uf30c\";fa.longArrowDown=\"\\uf175\";fa.longArrowLeft=\"\\uf177\";fa.longArrowRight=\"\\uf178\";fa.longArrowUp=\"\\uf176\";fa.loveseat=\"\\uf4cc\";fa.lowVision=\"\\uf2a8\";fa.luchador=\"\\uf455\";fa.luggageCart=\"\\uf59d\";fa.lungs=\"\\uf604\";fa.lyft=\"\\uf3c3\";fa.mace=\"\\uf6f8\";fa.magento=\"\\uf3c4\";fa.magic=\"\\uf0d0\";fa.magnet=\"\\uf076\";fa.mailBulk=\"\\uf674\";fa.mailchimp=\"\\uf59e\";fa.male=\"\\uf183\";fa.mandalorian=\"\\uf50f\";fa.mandolin=\"\\uf6f9\";fa.map=\"\\uf279\";fa.mapMarked=\"\\uf59f\";fa.mapMarkedAlt=\"\\uf5a0\";fa.mapMarker=\"\\uf041\";fa.mapMarkerAlt=\"\\uf3c5\";fa.mapMarkerAltSlash=\"\\uf605\";fa.mapMarkerCheck=\"\\uf606\";fa.mapMarkerEdit=\"\\uf607\";fa.mapMarkerExclamation=\"\\uf608\";fa.mapMarkerMinus=\"\\uf609\";fa.mapMarkerPlus=\"\\uf60a\";fa.mapMarkerQuestion=\"\\uf60b\";fa.mapMarkerSlash=\"\\uf60c\";fa.mapMarkerSmile=\"\\uf60d\";fa.mapMarkerTimes=\"\\uf60e\";fa.mapPin=\"\\uf276\";fa.mapSigns=\"\\uf277\";fa.markdown=\"\\uf60f\";fa.marker=\"\\uf5a1\";fa.mars=\"\\uf222\";fa.marsDouble=\"\\uf227\";fa.marsStroke=\"\\uf229\";fa.marsStrokeH=\"\\uf22b\";fa.marsStrokeV=\"\\uf22a\";fa.mask=\"\\uf6fa\";fa.mastodon=\"\\uf4f6\";fa.maxcdn=\"\\uf136\";fa.medal=\"\\uf5a2\";fa.medapps=\"\\uf3c6\";fa.medium=\"\\uf23a\";fa.mediumM=\"\\uf3c7\";fa.medkit=\"\\uf0fa\";fa.medrt=\"\\uf3c8\";fa.meetup=\"\\uf2e0\";fa.megaphone=\"\\uf675\";fa.megaport=\"\\uf5a3\";fa.meh=\"\\uf11a\";fa.mehBlank=\"\\uf5a4\";fa.mehRollingEyes=\"\\uf5a5\";fa.memory=\"\\uf538\";fa.mendeley=\"\\uf7b3\";fa.menorah=\"\\uf676\";fa.mercury=\"\\uf223\";fa.meteor=\"\\uf753\";fa.microchip=\"\\uf2db\";fa.microphone=\"\\uf130\";fa.microphoneAlt=\"\\uf3c9\";fa.microphoneAltSlash=\"\\uf539\";fa.microphoneSlash=\"\\uf131\";fa.microscope=\"\\uf610\";fa.microsoft=\"\\uf3ca\";fa.mindShare=\"\\uf677\";fa.minus=\"\\uf068\";fa.minusCircle=\"\\uf056\";fa.minusHexagon=\"\\uf307\";fa.minusOctagon=\"\\uf308\";fa.minusSquare=\"\\uf146\";fa.mistletoe=\"\\uf7b4\";fa.mitten=\"\\uf7b5\";fa.mix=\"\\uf3cb\";fa.mixcloud=\"\\uf289\";fa.mizuni=\"\\uf3cc\";fa.mobile=\"\\uf10b\";fa.mobileAlt=\"\\uf3cd\";fa.mobileAndroid=\"\\uf3ce\";fa.mobileAndroidAlt=\"\\uf3cf\";fa.modx=\"\\uf285\";fa.monero=\"\\uf3d0\";fa.moneyBill=\"\\uf0d6\";fa.moneyBillAlt=\"\\uf3d1\";fa.moneyBillWave=\"\\uf53a\";fa.moneyBillWaveAlt=\"\\uf53b\";fa.moneyCheck=\"\\uf53c\";fa.moneyCheckAlt=\"\\uf53d\";fa.monitorHeartRate=\"\\uf611\";fa.monkey=\"\\uf6fb\";fa.monument=\"\\uf5a6\";fa.moon=\"\\uf186\";fa.moonCloud=\"\\uf754\";fa.moonStars=\"\\uf755\";fa.mortarPestle=\"\\uf5a7\";fa.mosque=\"\\uf678\";fa.motorcycle=\"\\uf21c\";fa.mountain=\"\\uf6fc\";fa.mountains=\"\\uf6fd\";fa.mousePointer=\"\\uf245\";fa.mugHot=\"\\uf7b6\";fa.mugMarshmallows=\"\\uf7b7\";fa.music=\"\\uf001\";fa.napster=\"\\uf3d2\";fa.narwhal=\"\\uf6fe\";fa.neos=\"\\uf612\";fa.networkWired=\"\\uf6ff\";fa.neuter=\"\\uf22c\";fa.newspaper=\"\\uf1ea\";fa.nimblr=\"\\uf5a8\";fa.nintendoSwitch=\"\\uf418\";fa.node=\"\\uf419\";fa.nodeJs=\"\\uf3d3\";fa.notEqual=\"\\uf53e\";fa.notesMedical=\"\\uf481\";fa.npm=\"\\uf3d4\";fa.ns8=\"\\uf3d5\";fa.nutritionix=\"\\uf3d6\";fa.objectGroup=\"\\uf247\";fa.objectUngroup=\"\\uf248\";fa.octagon=\"\\uf306\";fa.odnoklassniki=\"\\uf263\";fa.odnoklassnikiSquare=\"\\uf264\";fa.oilCan=\"\\uf613\";fa.oilTemp=\"\\uf614\";fa.oldRepublic=\"\\uf510\";fa.om=\"\\uf679\";fa.omega=\"\\uf67a\";fa.opencart=\"\\uf23d\";fa.openid=\"\\uf19b\";fa.opera=\"\\uf26a\";fa.optinMonster=\"\\uf23c\";fa.ornament=\"\\uf7b8\";fa.osi=\"\\uf41a\";fa.otter=\"\\uf700\";fa.outdent=\"\\uf03b\";fa.page4=\"\\uf3d7\";fa.pagelines=\"\\uf18c\";fa.paintBrush=\"\\uf1fc\";fa.paintBrushAlt=\"\\uf5a9\";fa.paintRoller=\"\\uf5aa\";fa.palette=\"\\uf53f\";fa.palfed=\"\\uf3d8\";fa.pallet=\"\\uf482\";fa.palletAlt=\"\\uf483\";fa.paperPlane=\"\\uf1d8\";fa.paperclip=\"\\uf0c6\";fa.parachuteBox=\"\\uf4cd\";fa.paragraph=\"\\uf1dd\";fa.parking=\"\\uf540\";fa.parkingCircle=\"\\uf615\";fa.parkingCircleSlash=\"\\uf616\";fa.parkingSlash=\"\\uf617\";fa.passport=\"\\uf5ab\";fa.pastafarianism=\"\\uf67b\";fa.paste=\"\\uf0ea\";fa.patreon=\"\\uf3d9\";fa.pause=\"\\uf04c\";fa.pauseCircle=\"\\uf28b\";fa.paw=\"\\uf1b0\";fa.pawAlt=\"\\uf701\";fa.pawClaws=\"\\uf702\";fa.paypal=\"\\uf1ed\";fa.peace=\"\\uf67c\";fa.pegasus=\"\\uf703\";fa.pen=\"\\uf304\";fa.penAlt=\"\\uf305\";fa.penFancy=\"\\uf5ac\";fa.penNib=\"\\uf5ad\";fa.penSquare=\"\\uf14b\";fa.pencil=\"\\uf040\";fa.pencilAlt=\"\\uf303\";fa.pencilPaintbrush=\"\\uf618\";fa.pencilRuler=\"\\uf5ae\";fa.pennant=\"\\uf456\";fa.pennyArcade=\"\\uf704\";fa.peopleCarry=\"\\uf4ce\";fa.percent=\"\\uf295\";fa.percentage=\"\\uf541\";fa.periscope=\"\\uf3da\";fa.personBooth=\"\\uf756\";fa.personCarry=\"\\uf4cf\";fa.personDolly=\"\\uf4d0\";fa.personDollyEmpty=\"\\uf4d1\";fa.personSign=\"\\uf757\";fa.phabricator=\"\\uf3db\";fa.phoenixFramework=\"\\uf3dc\";fa.phoenixSquadron=\"\\uf511\";fa.phone=\"\\uf095\";fa.phoneOffice=\"\\uf67d\";fa.phonePlus=\"\\uf4d2\";fa.phoneSlash=\"\\uf3dd\";fa.phoneSquare=\"\\uf098\";fa.phoneVolume=\"\\uf2a0\";fa.php=\"\\uf457\";fa.pi=\"\\uf67e\";fa.pie=\"\\uf705\";fa.piedPiper=\"\\uf2ae\";fa.piedPiperAlt=\"\\uf1a8\";fa.piedPiperHat=\"\\uf4e5\";fa.piedPiperPp=\"\\uf1a7\";fa.pig=\"\\uf706\";fa.piggyBank=\"\\uf4d3\";fa.pills=\"\\uf484\";fa.pinterest=\"\\uf0d2\";fa.pinterestP=\"\\uf231\";fa.pinterestSquare=\"\\uf0d3\";fa.placeOfWorship=\"\\uf67f\";fa.plane=\"\\uf072\";fa.planeAlt=\"\\uf3de\";fa.planeArrival=\"\\uf5af\";fa.planeDeparture=\"\\uf5b0\";fa.play=\"\\uf04b\";fa.playCircle=\"\\uf144\";fa.playstation=\"\\uf3df\";fa.plug=\"\\uf1e6\";fa.plus=\"\\uf067\";fa.plusCircle=\"\\uf055\";fa.plusHexagon=\"\\uf300\";fa.plusOctagon=\"\\uf301\";fa.plusSquare=\"\\uf0fe\";fa.podcast=\"\\uf2ce\";fa.podium=\"\\uf680\";fa.podiumStar=\"\\uf758\";fa.poll=\"\\uf681\";fa.pollH=\"\\uf682\";fa.pollPeople=\"\\uf759\";fa.poo=\"\\uf2fe\";fa.pooStorm=\"\\uf75a\";fa.poop=\"\\uf619\";fa.portrait=\"\\uf3e0\";fa.poundSign=\"\\uf154\";fa.powerOff=\"\\uf011\";fa.pray=\"\\uf683\";fa.prayingHands=\"\\uf684\";fa.prescription=\"\\uf5b1\";fa.prescriptionBottle=\"\\uf485\";fa.prescriptionBottleAlt=\"\\uf486\";fa.presentation=\"\\uf685\";fa.print=\"\\uf02f\";fa.printSlash=\"\\uf686\";fa.procedures=\"\\uf487\";fa.productHunt=\"\\uf288\";fa.projectDiagram=\"\\uf542\";fa.pumpkin=\"\\uf707\";fa.pushed=\"\\uf3e1\";fa.puzzlePiece=\"\\uf12e\";fa.python=\"\\uf3e2\";fa.qq=\"\\uf1d6\";fa.qrcode=\"\\uf029\";fa.question=\"\\uf128\";fa.questionCircle=\"\\uf059\";fa.questionSquare=\"\\uf2fd\";fa.quidditch=\"\\uf458\";fa.quinscape=\"\\uf459\";fa.quora=\"\\uf2c4\";fa.quoteLeft=\"\\uf10d\";fa.quoteRight=\"\\uf10e\";fa.quran=\"\\uf687\";fa.rProject=\"\\uf4f7\";fa.rabbit=\"\\uf708\";fa.rabbitFast=\"\\uf709\";fa.racquet=\"\\uf45a\";fa.radiation=\"\\uf7b9\";fa.radiationAlt=\"\\uf7ba\";fa.rainbow=\"\\uf75b\";fa.raindrops=\"\\uf75c\";fa.ram=\"\\uf70a\";fa.rampLoading=\"\\uf4d4\";fa.random=\"\\uf074\";fa.raspberryPi=\"\\uf7bb\";fa.ravelry=\"\\uf2d9\";fa.react=\"\\uf41b\";fa.reacteurope=\"\\uf75d\";fa.readme=\"\\uf4d5\";fa.rebel=\"\\uf1d0\";fa.receipt=\"\\uf543\";fa.rectangleLandscape=\"\\uf2fa\";fa.rectanglePortrait=\"\\uf2fb\";fa.rectangleWide=\"\\uf2fc\";fa.recycle=\"\\uf1b8\";fa.redRiver=\"\\uf3e3\";fa.reddit=\"\\uf1a1\";fa.redditAlien=\"\\uf281\";fa.redditSquare=\"\\uf1a2\";fa.redhat=\"\\uf7bc\";fa.redo=\"\\uf01e\";fa.redoAlt=\"\\uf2f9\";fa.registered=\"\\uf25d\";fa.renren=\"\\uf18b\";fa.repeat=\"\\uf363\";fa.repeat1=\"\\uf365\";fa.repeat1Alt=\"\\uf366\";fa.repeatAlt=\"\\uf364\";fa.reply=\"\\uf3e5\";fa.replyAll=\"\\uf122\";fa.replyd=\"\\uf3e6\";fa.republican=\"\\uf75e\";fa.researchgate=\"\\uf4f8\";fa.resolving=\"\\uf3e7\";fa.restroom=\"\\uf7bd\";fa.retweet=\"\\uf079\";fa.retweetAlt=\"\\uf361\";fa.rev=\"\\uf5b2\";fa.ribbon=\"\\uf4d6\";fa.ring=\"\\uf70b\";fa.road=\"\\uf018\";fa.robot=\"\\uf544\";fa.rocket=\"\\uf135\";fa.rocketchat=\"\\uf3e8\";fa.rockrms=\"\\uf3e9\";fa.route=\"\\uf4d7\";fa.routeHighway=\"\\uf61a\";fa.routeInterstate=\"\\uf61b\";fa.rss=\"\\uf09e\";fa.rssSquare=\"\\uf143\";fa.rubleSign=\"\\uf158\";fa.ruler=\"\\uf545\";fa.rulerCombined=\"\\uf546\";fa.rulerHorizontal=\"\\uf547\";fa.rulerTriangle=\"\\uf61c\";fa.rulerVertical=\"\\uf548\";fa.running=\"\\uf70c\";fa.rupeeSign=\"\\uf156\";fa.rv=\"\\uf7be\";fa.sadCry=\"\\uf5b3\";fa.sadTear=\"\\uf5b4\";fa.safari=\"\\uf267\";fa.sass=\"\\uf41e\";fa.satellite=\"\\uf7bf\";fa.satelliteDish=\"\\uf7c0\";fa.save=\"\\uf0c7\";fa.scalpel=\"\\uf61d\";fa.scalpelPath=\"\\uf61e\";fa.scanner=\"\\uf488\";fa.scannerKeyboard=\"\\uf489\";fa.scannerTouchscreen=\"\\uf48a\";fa.scarecrow=\"\\uf70d\";fa.scarf=\"\\uf7c1\";fa.schlix=\"\\uf3ea\";fa.school=\"\\uf549\";fa.screwdriver=\"\\uf54a\";fa.scribd=\"\\uf28a\";fa.scroll=\"\\uf70e\";fa.scrollOld=\"\\uf70f\";fa.scrubber=\"\\uf2f8\";fa.scythe=\"\\uf710\";fa.sdCard=\"\\uf7c2\";fa.search=\"\\uf002\";fa.searchDollar=\"\\uf688\";fa.searchLocation=\"\\uf689\";fa.searchMinus=\"\\uf010\";fa.searchPlus=\"\\uf00e\";fa.searchengin=\"\\uf3eb\";fa.seedling=\"\\uf4d8\";fa.sellcast=\"\\uf2da\";fa.sellsy=\"\\uf213\";fa.server=\"\\uf233\";fa.servicestack=\"\\uf3ec\";fa.shapes=\"\\uf61f\";fa.share=\"\\uf064\";fa.shareAll=\"\\uf367\";fa.shareAlt=\"\\uf1e0\";fa.shareAltSquare=\"\\uf1e1\";fa.shareSquare=\"\\uf14d\";fa.sheep=\"\\uf711\";fa.shekelSign=\"\\uf20b\";fa.shield=\"\\uf132\";fa.shieldAlt=\"\\uf3ed\";fa.shieldCheck=\"\\uf2f7\";fa.shieldCross=\"\\uf712\";fa.ship=\"\\uf21a\";fa.shippingFast=\"\\uf48b\";fa.shippingTimed=\"\\uf48c\";fa.shirtsinbulk=\"\\uf214\";fa.shoePrints=\"\\uf54b\";fa.shoppingBag=\"\\uf290\";fa.shoppingBasket=\"\\uf291\";fa.shoppingCart=\"\\uf07a\";fa.shopware=\"\\uf5b5\";fa.shovel=\"\\uf713\";fa.shovelSnow=\"\\uf7c3\";fa.shower=\"\\uf2cc\";fa.shredder=\"\\uf68a\";fa.shuttleVan=\"\\uf5b6\";fa.shuttlecock=\"\\uf45b\";fa.sigma=\"\\uf68b\";fa.sign=\"\\uf4d9\";fa.signIn=\"\\uf090\";fa.signInAlt=\"\\uf2f6\";fa.signLanguage=\"\\uf2a7\";fa.signOut=\"\\uf08b\";fa.signOutAlt=\"\\uf2f5\";fa.signal=\"\\uf012\";fa.signal1=\"\\uf68c\";fa.signal2=\"\\uf68d\";fa.signal3=\"\\uf68e\";fa.signal4=\"\\uf68f\";fa.signalAlt=\"\\uf690\";fa.signalAlt1=\"\\uf691\";fa.signalAlt2=\"\\uf692\";fa.signalAlt3=\"\\uf693\";fa.signalAltSlash=\"\\uf694\";fa.signalSlash=\"\\uf695\";fa.signature=\"\\uf5b7\";fa.simCard=\"\\uf7c4\";fa.simplybuilt=\"\\uf215\";fa.sistrix=\"\\uf3ee\";fa.sitemap=\"\\uf0e8\";fa.sith=\"\\uf512\";fa.skating=\"\\uf7c5\";fa.skeleton=\"\\uf620\";fa.sketch=\"\\uf7c6\";fa.skiJump=\"\\uf7c7\";fa.skiLift=\"\\uf7c8\";fa.skiing=\"\\uf7c9\";fa.skiingNordic=\"\\uf7ca\";fa.skull=\"\\uf54c\";fa.skullCrossbones=\"\\uf714\";fa.skyatlas=\"\\uf216\";fa.skype=\"\\uf17e\";fa.slack=\"\\uf198\";fa.slackHash=\"\\uf3ef\";fa.slash=\"\\uf715\";fa.sledding=\"\\uf7cb\";fa.sleigh=\"\\uf7cc\";fa.slidersH=\"\\uf1de\";fa.slidersHSquare=\"\\uf3f0\";fa.slidersV=\"\\uf3f1\";fa.slidersVSquare=\"\\uf3f2\";fa.slideshare=\"\\uf1e7\";fa.smile=\"\\uf118\";fa.smileBeam=\"\\uf5b8\";fa.smilePlus=\"\\uf5b9\";fa.smileWink=\"\\uf4da\";fa.smog=\"\\uf75f\";fa.smoke=\"\\uf760\";fa.smoking=\"\\uf48d\";fa.smokingBan=\"\\uf54d\";fa.sms=\"\\uf7cd\";fa.snake=\"\\uf716\";fa.snapchat=\"\\uf2ab\";fa.snapchatGhost=\"\\uf2ac\";fa.snapchatSquare=\"\\uf2ad\";fa.snowBlowing=\"\\uf761\";fa.snowboarding=\"\\uf7ce\";fa.snowflake=\"\\uf2dc\";fa.snowflakes=\"\\uf7cf\";fa.snowman=\"\\uf7d0\";fa.snowmobile=\"\\uf7d1\";fa.snowplow=\"\\uf7d2\";fa.socks=\"\\uf696\";fa.solarPanel=\"\\uf5ba\";fa.sort=\"\\uf0dc\";fa.sortAlphaDown=\"\\uf15d\";fa.sortAlphaUp=\"\\uf15e\";fa.sortAmountDown=\"\\uf160\";fa.sortAmountUp=\"\\uf161\";fa.sortDown=\"\\uf0dd\";fa.sortNumericDown=\"\\uf162\";fa.sortNumericUp=\"\\uf163\";fa.sortUp=\"\\uf0de\";fa.soundcloud=\"\\uf1be\";fa.sourcetree=\"\\uf7d3\";fa.spa=\"\\uf5bb\";fa.spaceShuttle=\"\\uf197\";fa.spade=\"\\uf2f4\";fa.speakap=\"\\uf3f3\";fa.spider=\"\\uf717\";fa.spiderBlackWidow=\"\\uf718\";fa.spiderWeb=\"\\uf719\";fa.spinner=\"\\uf110\";fa.spinnerThird=\"\\uf3f4\";fa.splotch=\"\\uf5bc\";fa.spotify=\"\\uf1bc\";fa.sprayCan=\"\\uf5bd\";fa.square=\"\\uf0c8\";fa.squareFull=\"\\uf45c\";fa.squareRoot=\"\\uf697\";fa.squareRootAlt=\"\\uf698\";fa.squarespace=\"\\uf5be\";fa.squirrel=\"\\uf71a\";fa.stackExchange=\"\\uf18d\";fa.stackOverflow=\"\\uf16c\";fa.staff=\"\\uf71b\";fa.stamp=\"\\uf5bf\";fa.star=\"\\uf005\";fa.starAndCrescent=\"\\uf699\";fa.starChristmas=\"\\uf7d4\";fa.starExclamation=\"\\uf2f3\";fa.starHalf=\"\\uf089\";fa.starHalfAlt=\"\\uf5c0\";fa.starOfDavid=\"\\uf69a\";fa.starOfLife=\"\\uf621\";fa.stars=\"\\uf762\";fa.staylinked=\"\\uf3f5\";fa.steam=\"\\uf1b6\";fa.steamSquare=\"\\uf1b7\";fa.steamSymbol=\"\\uf3f6\";fa.steeringWheel=\"\\uf622\";fa.stepBackward=\"\\uf048\";fa.stepForward=\"\\uf051\";fa.stethoscope=\"\\uf0f1\";fa.stickerMule=\"\\uf3f7\";fa.stickyNote=\"\\uf249\";fa.stocking=\"\\uf7d5\";fa.stomach=\"\\uf623\";fa.stop=\"\\uf04d\";fa.stopCircle=\"\\uf28d\";fa.stopwatch=\"\\uf2f2\";fa.store=\"\\uf54e\";fa.storeAlt=\"\\uf54f\";fa.strava=\"\\uf428\";fa.stream=\"\\uf550\";fa.streetView=\"\\uf21d\";fa.strikethrough=\"\\uf0cc\";fa.stripe=\"\\uf429\";fa.stripeS=\"\\uf42a\";fa.stroopwafel=\"\\uf551\";fa.studiovinari=\"\\uf3f8\";fa.stumbleupon=\"\\uf1a4\";fa.stumbleuponCircle=\"\\uf1a3\";fa.subscript=\"\\uf12c\";fa.subway=\"\\uf239\";fa.suitcase=\"\\uf0f2\";fa.suitcaseRolling=\"\\uf5c1\";fa.sun=\"\\uf185\";fa.sunCloud=\"\\uf763\";fa.sunDust=\"\\uf764\";fa.sunHaze=\"\\uf765\";fa.sunrise=\"\\uf766\";fa.sunset=\"\\uf767\";fa.superpowers=\"\\uf2dd\";fa.superscript=\"\\uf12b\";fa.supple=\"\\uf3f9\";fa.surprise=\"\\uf5c2\";fa.suse=\"\\uf7d6\";fa.swatchbook=\"\\uf5c3\";fa.swimmer=\"\\uf5c4\";fa.swimmingPool=\"\\uf5c5\";fa.sword=\"\\uf71c\";fa.swords=\"\\uf71d\";fa.synagogue=\"\\uf69b\";fa.sync=\"\\uf021\";fa.syncAlt=\"\\uf2f1\";fa.syringe=\"\\uf48e\";fa.table=\"\\uf0ce\";fa.tableTennis=\"\\uf45d\";fa.tablet=\"\\uf10a\";fa.tabletAlt=\"\\uf3fa\";fa.tabletAndroid=\"\\uf3fb\";fa.tabletAndroidAlt=\"\\uf3fc\";fa.tabletRugged=\"\\uf48f\";fa.tablets=\"\\uf490\";fa.tachometer=\"\\uf0e4\";fa.tachometerAlt=\"\\uf3fd\";fa.tachometerAltAverage=\"\\uf624\";fa.tachometerAltFast=\"\\uf625\";fa.tachometerAltFastest=\"\\uf626\";fa.tachometerAltSlow=\"\\uf627\";fa.tachometerAltSlowest=\"\\uf628\";fa.tachometerAverage=\"\\uf629\";fa.tachometerFast=\"\\uf62a\";fa.tachometerFastest=\"\\uf62b\";fa.tachometerSlow=\"\\uf62c\";fa.tachometerSlowest=\"\\uf62d\";fa.tag=\"\\uf02b\";fa.tags=\"\\uf02c\";fa.tally=\"\\uf69c\";fa.tape=\"\\uf4db\";fa.tasks=\"\\uf0ae\";fa.taxi=\"\\uf1ba\";fa.teamspeak=\"\\uf4f9\";fa.teeth=\"\\uf62e\";fa.teethOpen=\"\\uf62f\";fa.telegram=\"\\uf2c6\";fa.telegramPlane=\"\\uf3fe\";fa.temperatureFrigid=\"\\uf768\";fa.temperatureHigh=\"\\uf769\";fa.temperatureHot=\"\\uf76a\";fa.temperatureLow=\"\\uf76b\";fa.tencentWeibo=\"\\uf1d5\";fa.tenge=\"\\uf7d7\";fa.tennisBall=\"\\uf45e\";fa.terminal=\"\\uf120\";fa.textHeight=\"\\uf034\";fa.textWidth=\"\\uf035\";fa.th=\"\\uf00a\";fa.thLarge=\"\\uf009\";fa.thList=\"\\uf00b\";fa.theRedYeti=\"\\uf69d\";fa.theaterMasks=\"\\uf630\";fa.themeco=\"\\uf5c6\";fa.themeisle=\"\\uf2b2\";fa.thermometer=\"\\uf491\";fa.thermometerEmpty=\"\\uf2cb\";fa.thermometerFull=\"\\uf2c7\";fa.thermometerHalf=\"\\uf2c9\";fa.thermometerQuarter=\"\\uf2ca\";fa.thermometerThreeQuarters=\"\\uf2c8\";fa.theta=\"\\uf69e\";fa.thinkPeaks=\"\\uf731\";fa.thumbsDown=\"\\uf165\";fa.thumbsUp=\"\\uf164\";fa.thumbtack=\"\\uf08d\";fa.thunderstorm=\"\\uf76c\";fa.thunderstormMoon=\"\\uf76d\";fa.thunderstormSun=\"\\uf76e\";fa.ticket=\"\\uf145\";fa.ticketAlt=\"\\uf3ff\";fa.tilde=\"\\uf69f\";fa.times=\"\\uf00d\";fa.timesCircle=\"\\uf057\";fa.timesHexagon=\"\\uf2ee\";fa.timesOctagon=\"\\uf2f0\";fa.timesSquare=\"\\uf2d3\";fa.tint=\"\\uf043\";fa.tintSlash=\"\\uf5c7\";fa.tire=\"\\uf631\";fa.tireFlat=\"\\uf632\";fa.tirePressureWarning=\"\\uf633\";fa.tireRugged=\"\\uf634\";fa.tired=\"\\uf5c8\";fa.toggleOff=\"\\uf204\";fa.toggleOn=\"\\uf205\";fa.toilet=\"\\uf7d8\";fa.toiletPaper=\"\\uf71e\";fa.toiletPaperAlt=\"\\uf71f\";fa.tombstone=\"\\uf720\";fa.tombstoneAlt=\"\\uf721\";fa.toolbox=\"\\uf552\";fa.tools=\"\\uf7d9\";fa.tooth=\"\\uf5c9\";fa.toothbrush=\"\\uf635\";fa.torah=\"\\uf6a0\";fa.toriiGate=\"\\uf6a1\";fa.tornado=\"\\uf76f\";fa.tractor=\"\\uf722\";fa.tradeFederation=\"\\uf513\";fa.trademark=\"\\uf25c\";fa.trafficCone=\"\\uf636\";fa.trafficLight=\"\\uf637\";fa.trafficLightGo=\"\\uf638\";fa.trafficLightSlow=\"\\uf639\";fa.trafficLightStop=\"\\uf63a\";fa.train=\"\\uf238\";fa.tram=\"\\uf7da\";fa.transgender=\"\\uf224\";fa.transgenderAlt=\"\\uf225\";fa.trash=\"\\uf1f8\";fa.trashAlt=\"\\uf2ed\";fa.treasureChest=\"\\uf723\";fa.tree=\"\\uf1bb\";fa.treeAlt=\"\\uf400\";fa.treeChristmas=\"\\uf7db\";fa.treeDecorated=\"\\uf7dc\";fa.treeLarge=\"\\uf7dd\";fa.trees=\"\\uf724\";fa.trello=\"\\uf181\";fa.triangle=\"\\uf2ec\";fa.tripadvisor=\"\\uf262\";fa.trophy=\"\\uf091\";fa.trophyAlt=\"\\uf2eb\";fa.truck=\"\\uf0d1\";fa.truckContainer=\"\\uf4dc\";fa.truckCouch=\"\\uf4dd\";fa.truckLoading=\"\\uf4de\";fa.truckMonster=\"\\uf63b\";fa.truckMoving=\"\\uf4df\";fa.truckPickup=\"\\uf63c\";fa.truckPlow=\"\\uf7de\";fa.truckRamp=\"\\uf4e0\";fa.tshirt=\"\\uf553\";fa.tty=\"\\uf1e4\";fa.tumblr=\"\\uf173\";fa.tumblrSquare=\"\\uf174\";fa.turkey=\"\\uf725\";fa.turtle=\"\\uf726\";fa.tv=\"\\uf26c\";fa.tvRetro=\"\\uf401\";fa.twitch=\"\\uf1e8\";fa.twitter=\"\\uf099\";fa.twitterSquare=\"\\uf081\";fa.typo3=\"\\uf42b\";fa.uber=\"\\uf402\";fa.ubuntu=\"\\uf7df\";fa.uikit=\"\\uf403\";fa.umbrella=\"\\uf0e9\";fa.umbrellaBeach=\"\\uf5ca\";fa.underline=\"\\uf0cd\";fa.undo=\"\\uf0e2\";fa.undoAlt=\"\\uf2ea\";fa.unicorn=\"\\uf727\";fa.union=\"\\uf6a2\";fa.uniregistry=\"\\uf404\";fa.universalAccess=\"\\uf29a\";fa.university=\"\\uf19c\";fa.unlink=\"\\uf127\";fa.unlock=\"\\uf09c\";fa.unlockAlt=\"\\uf13e\";fa.untappd=\"\\uf405\";fa.upload=\"\\uf093\";fa.ups=\"\\uf7e0\";fa.usb=\"\\uf287\";fa.usdCircle=\"\\uf2e8\";fa.usdSquare=\"\\uf2e9\";fa.user=\"\\uf007\";fa.userAlt=\"\\uf406\";fa.userAltSlash=\"\\uf4fa\";fa.userAstronaut=\"\\uf4fb\";fa.userChart=\"\\uf6a3\";fa.userCheck=\"\\uf4fc\";fa.userCircle=\"\\uf2bd\";fa.userClock=\"\\uf4fd\";fa.userCog=\"\\uf4fe\";fa.userCrown=\"\\uf6a4\";fa.userEdit=\"\\uf4ff\";fa.userFriends=\"\\uf500\";fa.userGraduate=\"\\uf501\";fa.userInjured=\"\\uf728\";fa.userLock=\"\\uf502\";fa.userMd=\"\\uf0f0\";fa.userMinus=\"\\uf503\";fa.userNinja=\"\\uf504\";fa.userPlus=\"\\uf234\";fa.userSecret=\"\\uf21b\";fa.userShield=\"\\uf505\";fa.userSlash=\"\\uf506\";fa.userTag=\"\\uf507\";fa.userTie=\"\\uf508\";fa.userTimes=\"\\uf235\";fa.users=\"\\uf0c0\";fa.usersClass=\"\\uf63d\";fa.usersCog=\"\\uf509\";fa.usersCrown=\"\\uf6a5\";fa.usps=\"\\uf7e1\";fa.ussunnah=\"\\uf407\";fa.utensilFork=\"\\uf2e3\";fa.utensilKnife=\"\\uf2e4\";fa.utensilSpoon=\"\\uf2e5\";fa.utensils=\"\\uf2e7\";fa.utensilsAlt=\"\\uf2e6\";fa.vaadin=\"\\uf408\";fa.valueAbsolute=\"\\uf6a6\";fa.vectorSquare=\"\\uf5cb\";fa.venus=\"\\uf221\";fa.venusDouble=\"\\uf226\";fa.venusMars=\"\\uf228\";fa.viacoin=\"\\uf237\";fa.viadeo=\"\\uf2a9\";fa.viadeoSquare=\"\\uf2aa\";fa.vial=\"\\uf492\";fa.vials=\"\\uf493\";fa.viber=\"\\uf409\";fa.video=\"\\uf03d\";fa.videoPlus=\"\\uf4e1\";fa.videoSlash=\"\\uf4e2\";fa.vihara=\"\\uf6a7\";fa.vimeo=\"\\uf40a\";fa.vimeoSquare=\"\\uf194\";fa.vimeoV=\"\\uf27d\";fa.vine=\"\\uf1ca\";fa.vk=\"\\uf189\";fa.vnv=\"\\uf40b\";fa.volcano=\"\\uf770\";fa.volleyballBall=\"\\uf45f\";fa.volume=\"\\uf6a8\";fa.volumeDown=\"\\uf027\";fa.volumeMute=\"\\uf6a9\";fa.volumeOff=\"\\uf026\";fa.volumeSlash=\"\\uf2e2\";fa.volumeUp=\"\\uf028\";fa.voteNay=\"\\uf771\";fa.voteYea=\"\\uf772\";fa.vrCardboard=\"\\uf729\";fa.vuejs=\"\\uf41f\";fa.walking=\"\\uf554\";fa.wallet=\"\\uf555\";fa.wand=\"\\uf72a\";fa.wandMagic=\"\\uf72b\";fa.warehouse=\"\\uf494\";fa.warehouseAlt=\"\\uf495\";fa.watch=\"\\uf2e1\";fa.watchFitness=\"\\uf63e\";fa.water=\"\\uf773\";fa.waterLower=\"\\uf774\";fa.waterRise=\"\\uf775\";fa.weebly=\"\\uf5cc\";fa.weibo=\"\\uf18a\";fa.weight=\"\\uf496\";fa.weightHanging=\"\\uf5cd\";fa.weixin=\"\\uf1d7\";fa.whale=\"\\uf72c\";fa.whatsapp=\"\\uf232\";fa.whatsappSquare=\"\\uf40c\";fa.wheat=\"\\uf72d\";fa.wheelchair=\"\\uf193\";fa.whistle=\"\\uf460\";fa.whmcs=\"\\uf40d\";fa.wifi=\"\\uf1eb\";fa.wifi1=\"\\uf6aa\";fa.wifi2=\"\\uf6ab\";fa.wifiSlash=\"\\uf6ac\";fa.wikipediaW=\"\\uf266\";fa.wind=\"\\uf72e\";fa.windWarning=\"\\uf776\";fa.window=\"\\uf40e\";fa.windowAlt=\"\\uf40f\";fa.windowClose=\"\\uf410\";fa.windowMaximize=\"\\uf2d0\";fa.windowMinimize=\"\\uf2d1\";fa.windowRestore=\"\\uf2d2\";fa.windows=\"\\uf17a\";fa.windsock=\"\\uf777\";fa.wineBottle=\"\\uf72f\";fa.wineGlass=\"\\uf4e3\";fa.wineGlassAlt=\"\\uf5ce\";fa.wix=\"\\uf5cf\";fa.wizardsOfTheCoast=\"\\uf730\";fa.wolfPackBattalion=\"\\uf514\";fa.wonSign=\"\\uf159\";fa.wordpress=\"\\uf19a\";fa.wordpressSimple=\"\\uf411\";fa.wpbeginner=\"\\uf297\";fa.wpexplorer=\"\\uf2de\";fa.wpforms=\"\\uf298\";fa.wpressr=\"\\uf3e4\";fa.wreath=\"\\uf7e2\";fa.wrench=\"\\uf0ad\";fa.xRay=\"\\uf497\";fa.xbox=\"\\uf412\";fa.xing=\"\\uf168\";fa.xingSquare=\"\\uf169\";fa.yCombinator=\"\\uf23b\";fa.yahoo=\"\\uf19e\";fa.yandex=\"\\uf413\";fa.yandexInternational=\"\\uf414\";fa.yarn=\"\\uf7e3\";fa.yelp=\"\\uf1e9\";fa.yenSign=\"\\uf157\";fa.yinYang=\"\\uf6ad\";fa.yoast=\"\\uf2b1\";fa.youtube=\"\\uf167\";fa.youtubeSquare=\"\\uf431\";fa.zhihu=\"\\uf63f\";module.exports=fa;", "/*!\n* sweetalert2 v11.26.24\n* Released under the MIT License.\n*/\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Sweetalert2 = factory());\n})(this, (function () { 'use strict';\n\n function _assertClassBrand(e, t, n) {\n if (\"function\" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n;\n throw new TypeError(\"Private element is not present on this object\");\n }\n function _checkPrivateRedeclaration(e, t) {\n if (t.has(e)) throw new TypeError(\"Cannot initialize the same private elements twice on an object\");\n }\n function _classPrivateFieldGet2(s, a) {\n return s.get(_assertClassBrand(s, a));\n }\n function _classPrivateFieldInitSpec(e, t, a) {\n _checkPrivateRedeclaration(e, t), t.set(e, a);\n }\n function _classPrivateFieldSet2(s, a, r) {\n return s.set(_assertClassBrand(s, a), r), r;\n }\n\n const RESTORE_FOCUS_TIMEOUT = 100;\n\n /** @type {GlobalState} */\n const globalState = {};\n const focusPreviousActiveElement = () => {\n if (globalState.previousActiveElement instanceof HTMLElement) {\n globalState.previousActiveElement.focus();\n globalState.previousActiveElement = null;\n } else if (document.body) {\n document.body.focus();\n }\n };\n\n /**\n * Restore previous active (focused) element\n *\n * @param {boolean} returnFocus\n * @returns {Promise}\n */\n const restoreActiveElement = returnFocus => {\n return new Promise(resolve => {\n if (!returnFocus) {\n return resolve();\n }\n const x = window.scrollX;\n const y = window.scrollY;\n globalState.restoreFocusTimeout = setTimeout(() => {\n focusPreviousActiveElement();\n resolve();\n }, RESTORE_FOCUS_TIMEOUT); // issues/900\n\n window.scrollTo(x, y);\n });\n };\n\n const swalPrefix = 'swal2-';\n\n /**\n * @typedef {Record} SwalClasses\n */\n\n /**\n * @typedef {'success' | 'warning' | 'info' | 'question' | 'error'} SwalIcon\n * @typedef {Record} SwalIcons\n */\n\n /** @type {SwalClass[]} */\n const classNames = ['container', 'shown', 'height-auto', 'iosfix', 'popup', 'modal', 'no-backdrop', 'no-transition', 'toast', 'toast-shown', 'show', 'hide', 'close', 'title', 'html-container', 'actions', 'confirm', 'deny', 'cancel', 'footer', 'icon', 'icon-content', 'image', 'input', 'file', 'range', 'select', 'radio', 'checkbox', 'label', 'textarea', 'inputerror', 'input-label', 'validation-message', 'progress-steps', 'active-progress-step', 'progress-step', 'progress-step-line', 'loader', 'loading', 'styled', 'top', 'top-start', 'top-end', 'top-left', 'top-right', 'center', 'center-start', 'center-end', 'center-left', 'center-right', 'bottom', 'bottom-start', 'bottom-end', 'bottom-left', 'bottom-right', 'grow-row', 'grow-column', 'grow-fullscreen', 'rtl', 'timer-progress-bar', 'timer-progress-bar-container', 'scrollbar-measure', 'icon-success', 'icon-warning', 'icon-info', 'icon-question', 'icon-error', 'draggable', 'dragging'];\n const swalClasses = classNames.reduce((acc, className) => {\n acc[className] = swalPrefix + className;\n return acc;\n }, /** @type {SwalClasses} */{});\n\n /** @type {SwalIcon[]} */\n const icons = ['success', 'warning', 'info', 'question', 'error'];\n const iconTypes = icons.reduce((acc, icon) => {\n acc[icon] = swalPrefix + icon;\n return acc;\n }, /** @type {SwalIcons} */{});\n\n const consolePrefix = 'SweetAlert2:';\n\n /**\n * Capitalize the first letter of a string\n *\n * @param {string} str\n * @returns {string}\n */\n const capitalizeFirstLetter = str => str.charAt(0).toUpperCase() + str.slice(1);\n\n /**\n * Standardize console warnings\n *\n * @param {string | string[]} message\n */\n const warn = message => {\n console.warn(`${consolePrefix} ${typeof message === 'object' ? message.join(' ') : message}`);\n };\n\n /**\n * Standardize console errors\n *\n * @param {string} message\n */\n const error = message => {\n console.error(`${consolePrefix} ${message}`);\n };\n\n /**\n * Private global state for `warnOnce`\n *\n * @type {string[]}\n * @private\n */\n const previousWarnOnceMessages = [];\n\n /**\n * Show a console warning, but only if it hasn't already been shown\n *\n * @param {string} message\n */\n const warnOnce = message => {\n if (!previousWarnOnceMessages.includes(message)) {\n previousWarnOnceMessages.push(message);\n warn(message);\n }\n };\n\n /**\n * Show a one-time console warning about deprecated params/methods\n *\n * @param {string} deprecatedParam\n * @param {string?} useInstead\n */\n const warnAboutDeprecation = (deprecatedParam, useInstead = null) => {\n warnOnce(`\"${deprecatedParam}\" is deprecated and will be removed in the next major release.${useInstead ? ` Use \"${useInstead}\" instead.` : ''}`);\n };\n\n /**\n * If `arg` is a function, call it (with no arguments or context) and return the result.\n * Otherwise, just pass the value through\n *\n * @param {(() => *) | *} arg\n * @returns {*}\n */\n const callIfFunction = arg => typeof arg === 'function' ? arg() : arg;\n\n /**\n * @param {*} arg\n * @returns {boolean}\n */\n const hasToPromiseFn = arg => arg && typeof arg.toPromise === 'function';\n\n /**\n * @param {*} arg\n * @returns {Promise<*>}\n */\n const asPromise = arg => hasToPromiseFn(arg) ? arg.toPromise() : Promise.resolve(arg);\n\n /**\n * @param {*} arg\n * @returns {boolean}\n */\n const isPromise = arg => arg && Promise.resolve(arg) === arg;\n\n /**\n * @returns {boolean}\n */\n const isFirefox = () => navigator.userAgent.includes('Firefox');\n\n /**\n * Gets the popup container which contains the backdrop and the popup itself.\n *\n * @returns {HTMLElement | null}\n */\n const getContainer = () => document.body.querySelector(`.${swalClasses.container}`);\n\n /**\n * @param {string} selectorString\n * @returns {HTMLElement | null}\n */\n const elementBySelector = selectorString => {\n const container = getContainer();\n return container ? container.querySelector(selectorString) : null;\n };\n\n /**\n * @param {string} className\n * @returns {HTMLElement | null}\n */\n const elementByClass = className => {\n return elementBySelector(`.${className}`);\n };\n\n /**\n * @returns {HTMLElement | null}\n */\n const getPopup = () => elementByClass(swalClasses.popup);\n\n /**\n * @returns {HTMLElement | null}\n */\n const getIcon = () => elementByClass(swalClasses.icon);\n\n /**\n * @returns {HTMLElement | null}\n */\n const getIconContent = () => elementByClass(swalClasses['icon-content']);\n\n /**\n * @returns {HTMLElement | null}\n */\n const getTitle = () => elementByClass(swalClasses.title);\n\n /**\n * @returns {HTMLElement | null}\n */\n const getHtmlContainer = () => elementByClass(swalClasses['html-container']);\n\n /**\n * @returns {HTMLElement | null}\n */\n const getImage = () => elementByClass(swalClasses.image);\n\n /**\n * @returns {HTMLElement | null}\n */\n const getProgressSteps = () => elementByClass(swalClasses['progress-steps']);\n\n /**\n * @returns {HTMLElement | null}\n */\n const getValidationMessage = () => elementByClass(swalClasses['validation-message']);\n\n /**\n * @returns {HTMLButtonElement | null}\n */\n const getConfirmButton = () => (/** @type {HTMLButtonElement} */elementBySelector(`.${swalClasses.actions} .${swalClasses.confirm}`));\n\n /**\n * @returns {HTMLButtonElement | null}\n */\n const getCancelButton = () => (/** @type {HTMLButtonElement} */elementBySelector(`.${swalClasses.actions} .${swalClasses.cancel}`));\n\n /**\n * @returns {HTMLButtonElement | null}\n */\n const getDenyButton = () => (/** @type {HTMLButtonElement} */elementBySelector(`.${swalClasses.actions} .${swalClasses.deny}`));\n\n /**\n * @returns {HTMLElement | null}\n */\n const getInputLabel = () => elementByClass(swalClasses['input-label']);\n\n /**\n * @returns {HTMLElement | null}\n */\n const getLoader = () => elementBySelector(`.${swalClasses.loader}`);\n\n /**\n * @returns {HTMLElement | null}\n */\n const getActions = () => elementByClass(swalClasses.actions);\n\n /**\n * @returns {HTMLElement | null}\n */\n const getFooter = () => elementByClass(swalClasses.footer);\n\n /**\n * @returns {HTMLElement | null}\n */\n const getTimerProgressBar = () => elementByClass(swalClasses['timer-progress-bar']);\n\n /**\n * @returns {HTMLElement | null}\n */\n const getCloseButton = () => elementByClass(swalClasses.close);\n\n // https://github.com/jkup/focusable/blob/master/index.js\n const focusable = `\n a[href],\n area[href],\n input:not([disabled]),\n select:not([disabled]),\n textarea:not([disabled]),\n button:not([disabled]),\n iframe,\n object,\n embed,\n [tabindex=\"0\"],\n [contenteditable],\n audio[controls],\n video[controls],\n summary\n`;\n /**\n * @returns {HTMLElement[]}\n */\n const getFocusableElements = () => {\n const popup = getPopup();\n if (!popup) {\n return [];\n }\n /** @type {NodeListOf} */\n const focusableElementsWithTabindex = popup.querySelectorAll('[tabindex]:not([tabindex=\"-1\"]):not([tabindex=\"0\"])');\n const focusableElementsWithTabindexSorted = Array.from(focusableElementsWithTabindex)\n // sort according to tabindex\n .sort((a, b) => {\n const tabindexA = parseInt(a.getAttribute('tabindex') || '0');\n const tabindexB = parseInt(b.getAttribute('tabindex') || '0');\n if (tabindexA > tabindexB) {\n return 1;\n } else if (tabindexA < tabindexB) {\n return -1;\n }\n return 0;\n });\n\n /** @type {NodeListOf} */\n const otherFocusableElements = popup.querySelectorAll(focusable);\n const otherFocusableElementsFiltered = Array.from(otherFocusableElements).filter(el => el.getAttribute('tabindex') !== '-1');\n return [...new Set(focusableElementsWithTabindexSorted.concat(otherFocusableElementsFiltered))].filter(el => isVisible$1(el));\n };\n\n /**\n * @returns {boolean}\n */\n const isModal = () => {\n return hasClass(document.body, swalClasses.shown) && !hasClass(document.body, swalClasses['toast-shown']) && !hasClass(document.body, swalClasses['no-backdrop']);\n };\n\n /**\n * @returns {boolean}\n */\n const isToast = () => {\n const popup = getPopup();\n if (!popup) {\n return false;\n }\n return hasClass(popup, swalClasses.toast);\n };\n\n /**\n * @returns {boolean}\n */\n const isLoading = () => {\n const popup = getPopup();\n if (!popup) {\n return false;\n }\n return popup.hasAttribute('data-loading');\n };\n\n /**\n * Securely set innerHTML of an element\n * https://github.com/sweetalert2/sweetalert2/issues/1926\n *\n * @param {HTMLElement} elem\n * @param {string} html\n */\n const setInnerHtml = (elem, html) => {\n elem.textContent = '';\n if (html) {\n const parser = new DOMParser();\n const parsed = parser.parseFromString(html, `text/html`);\n const head = parsed.querySelector('head');\n if (head) {\n Array.from(head.childNodes).forEach(child => {\n elem.appendChild(child);\n });\n }\n const body = parsed.querySelector('body');\n if (body) {\n Array.from(body.childNodes).forEach(child => {\n if (child instanceof HTMLVideoElement || child instanceof HTMLAudioElement) {\n elem.appendChild(child.cloneNode(true)); // https://github.com/sweetalert2/sweetalert2/issues/2507\n } else {\n elem.appendChild(child);\n }\n });\n }\n }\n };\n\n /**\n * @param {HTMLElement} elem\n * @param {string} className\n * @returns {boolean}\n */\n const hasClass = (elem, className) => {\n if (!className) {\n return false;\n }\n const classList = className.split(/\\s+/);\n for (let i = 0; i < classList.length; i++) {\n if (!elem.classList.contains(classList[i])) {\n return false;\n }\n }\n return true;\n };\n\n /**\n * @param {HTMLElement} elem\n * @param {SweetAlertOptions} params\n */\n const removeCustomClasses = (elem, params) => {\n Array.from(elem.classList).forEach(className => {\n if (!Object.values(swalClasses).includes(className) && !Object.values(iconTypes).includes(className) && !Object.values(params.showClass || {}).includes(className)) {\n elem.classList.remove(className);\n }\n });\n };\n\n /**\n * @param {HTMLElement} elem\n * @param {SweetAlertOptions} params\n * @param {string} className\n */\n const applyCustomClass = (elem, params, className) => {\n removeCustomClasses(elem, params);\n if (!params.customClass) {\n return;\n }\n const customClass = params.customClass[(/** @type {keyof SweetAlertCustomClass} */className)];\n if (!customClass) {\n return;\n }\n if (typeof customClass !== 'string' && !customClass.forEach) {\n warn(`Invalid type of customClass.${className}! Expected string or iterable object, got \"${typeof customClass}\"`);\n return;\n }\n addClass(elem, customClass);\n };\n\n /**\n * @param {HTMLElement} popup\n * @param {import('./renderers/renderInput').InputClass | SweetAlertInput} inputClass\n * @returns {HTMLInputElement | null}\n */\n const getInput$1 = (popup, inputClass) => {\n if (!inputClass) {\n return null;\n }\n switch (inputClass) {\n case 'select':\n case 'textarea':\n case 'file':\n return popup.querySelector(`.${swalClasses.popup} > .${swalClasses[inputClass]}`);\n case 'checkbox':\n return popup.querySelector(`.${swalClasses.popup} > .${swalClasses.checkbox} input`);\n case 'radio':\n return popup.querySelector(`.${swalClasses.popup} > .${swalClasses.radio} input:checked`) || popup.querySelector(`.${swalClasses.popup} > .${swalClasses.radio} input:first-child`);\n case 'range':\n return popup.querySelector(`.${swalClasses.popup} > .${swalClasses.range} input`);\n default:\n return popup.querySelector(`.${swalClasses.popup} > .${swalClasses.input}`);\n }\n };\n\n /**\n * @param {HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement} input\n */\n const focusInput = input => {\n input.focus();\n\n // place cursor at end of text in text input\n if (input.type !== 'file') {\n // http://stackoverflow.com/a/2345915\n const val = input.value;\n input.value = '';\n input.value = val;\n }\n };\n\n /**\n * @param {HTMLElement | HTMLElement[] | null} target\n * @param {string | string[] | readonly string[] | undefined} classList\n * @param {boolean} condition\n */\n const toggleClass = (target, classList, condition) => {\n if (!target || !classList) {\n return;\n }\n const classes = typeof classList === 'string' ? classList.split(/\\s+/).filter(Boolean) : classList;\n const targets = Array.isArray(target) ? target : [target];\n targets.forEach(elem => {\n classes.forEach(className => {\n if (condition) {\n elem.classList.add(className);\n } else {\n elem.classList.remove(className);\n }\n });\n });\n };\n\n /**\n * @param {HTMLElement | HTMLElement[] | null} target\n * @param {string | string[] | readonly string[] | undefined} classList\n */\n const addClass = (target, classList) => {\n toggleClass(target, classList, true);\n };\n\n /**\n * @param {HTMLElement | HTMLElement[] | null} target\n * @param {string | string[] | readonly string[] | undefined} classList\n */\n const removeClass = (target, classList) => {\n toggleClass(target, classList, false);\n };\n\n /**\n * Get direct child of an element by class name\n *\n * @param {HTMLElement} elem\n * @param {string} className\n * @returns {HTMLElement | undefined}\n */\n const getDirectChildByClass = (elem, className) => {\n const children = Array.from(elem.children);\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (child instanceof HTMLElement && hasClass(child, className)) {\n return child;\n }\n }\n };\n\n /**\n * @param {HTMLElement} elem\n * @param {string} property\n * @param {string | number | null | undefined} value\n */\n const applyNumericalStyle = (elem, property, value) => {\n if (value === `${parseInt(`${value}`)}`) {\n value = parseInt(value);\n }\n if (value || value === 0) {\n elem.style.setProperty(property, typeof value === 'number' ? `${value}px` : (/** @type {string} */value));\n } else {\n elem.style.removeProperty(property);\n }\n };\n\n /**\n * @param {HTMLElement | null} elem\n * @param {string} display\n */\n const show = (elem, display = 'flex') => {\n if (!elem) {\n return;\n }\n elem.style.display = display;\n };\n\n /**\n * @param {HTMLElement | null} elem\n */\n const hide = elem => {\n if (!elem) {\n return;\n }\n elem.style.display = 'none';\n };\n\n /**\n * @param {HTMLElement | null} elem\n * @param {string} display\n */\n const showWhenInnerHtmlPresent = (elem, display = 'block') => {\n if (!elem) {\n return;\n }\n new MutationObserver(() => {\n toggle(elem, elem.innerHTML, display);\n }).observe(elem, {\n childList: true,\n subtree: true\n });\n };\n\n /**\n * @param {HTMLElement} parent\n * @param {string} selector\n * @param {string} property\n * @param {string} value\n */\n const setStyle = (parent, selector, property, value) => {\n /** @type {HTMLElement | null} */\n const el = parent.querySelector(selector);\n if (el) {\n el.style.setProperty(property, value);\n }\n };\n\n /**\n * @param {HTMLElement} elem\n * @param {boolean | string | null | undefined} condition\n * @param {string} display\n */\n const toggle = (elem, condition, display = 'flex') => {\n if (condition) {\n show(elem, display);\n } else {\n hide(elem);\n }\n };\n\n /**\n * borrowed from jquery $(elem).is(':visible') implementation\n *\n * @param {HTMLElement | null} elem\n * @returns {boolean}\n */\n const isVisible$1 = elem => Boolean(elem && (elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length));\n\n /**\n * @returns {boolean}\n */\n const allButtonsAreHidden = () => !isVisible$1(getConfirmButton()) && !isVisible$1(getDenyButton()) && !isVisible$1(getCancelButton());\n\n /**\n * @param {HTMLElement} elem\n * @returns {boolean}\n */\n const isScrollable = elem => Boolean(elem.scrollHeight > elem.clientHeight);\n\n /**\n * @param {HTMLElement} element\n * @param {HTMLElement} stopElement\n * @returns {boolean}\n */\n const selfOrParentIsScrollable = (element, stopElement) => {\n let parent = /** @type {HTMLElement | null} */element;\n while (parent && parent !== stopElement) {\n if (isScrollable(parent)) {\n return true;\n }\n parent = parent.parentElement;\n }\n return false;\n };\n\n /**\n * borrowed from https://stackoverflow.com/a/46352119\n *\n * @param {HTMLElement} elem\n * @returns {boolean}\n */\n const hasCssAnimation = elem => {\n const style = window.getComputedStyle(elem);\n const animDuration = parseFloat(style.getPropertyValue('animation-duration') || '0');\n const transDuration = parseFloat(style.getPropertyValue('transition-duration') || '0');\n return animDuration > 0 || transDuration > 0;\n };\n\n /**\n * @param {number} timer\n * @param {boolean} reset\n */\n const animateTimerProgressBar = (timer, reset = false) => {\n const timerProgressBar = getTimerProgressBar();\n if (!timerProgressBar) {\n return;\n }\n if (isVisible$1(timerProgressBar)) {\n if (reset) {\n timerProgressBar.style.transition = 'none';\n timerProgressBar.style.width = '100%';\n }\n setTimeout(() => {\n timerProgressBar.style.transition = `width ${timer / 1000}s linear`;\n timerProgressBar.style.width = '0%';\n }, 10);\n }\n };\n const stopTimerProgressBar = () => {\n const timerProgressBar = getTimerProgressBar();\n if (!timerProgressBar) {\n return;\n }\n const timerProgressBarWidth = parseInt(window.getComputedStyle(timerProgressBar).width);\n timerProgressBar.style.removeProperty('transition');\n timerProgressBar.style.width = '100%';\n const timerProgressBarFullWidth = parseInt(window.getComputedStyle(timerProgressBar).width);\n const timerProgressBarPercent = timerProgressBarWidth / timerProgressBarFullWidth * 100;\n timerProgressBar.style.width = `${timerProgressBarPercent}%`;\n };\n\n /**\n * Detect Node env\n *\n * @returns {boolean}\n */\n const isNodeEnv = () => typeof window === 'undefined' || typeof document === 'undefined';\n\n const sweetHTML = `\n \n`.replace(/(^|\\n)\\s*/g, '');\n\n /**\n * @returns {boolean}\n */\n const resetOldContainer = () => {\n const oldContainer = getContainer();\n if (!oldContainer) {\n return false;\n }\n oldContainer.remove();\n removeClass([document.documentElement, document.body], [swalClasses['no-backdrop'], swalClasses['toast-shown'],\n // @ts-ignore: 'has-column' is not defined in swalClasses but may be set dynamically\n swalClasses['has-column']]);\n return true;\n };\n const resetValidationMessage$1 = () => {\n if (globalState.currentInstance) {\n globalState.currentInstance.resetValidationMessage();\n }\n };\n const addInputChangeListeners = () => {\n const popup = getPopup();\n if (!popup) {\n return;\n }\n const input = getDirectChildByClass(popup, swalClasses.input);\n const file = getDirectChildByClass(popup, swalClasses.file);\n /** @type {HTMLInputElement | null} */\n const range = popup.querySelector(`.${swalClasses.range} input`);\n /** @type {HTMLOutputElement | null} */\n const rangeOutput = popup.querySelector(`.${swalClasses.range} output`);\n const select = getDirectChildByClass(popup, swalClasses.select);\n /** @type {HTMLInputElement | null} */\n const checkbox = popup.querySelector(`.${swalClasses.checkbox} input`);\n const textarea = getDirectChildByClass(popup, swalClasses.textarea);\n if (input) {\n input.oninput = resetValidationMessage$1;\n }\n if (file) {\n file.onchange = resetValidationMessage$1;\n }\n if (select) {\n select.onchange = resetValidationMessage$1;\n }\n if (checkbox) {\n checkbox.onchange = resetValidationMessage$1;\n }\n if (textarea) {\n textarea.oninput = resetValidationMessage$1;\n }\n if (range && rangeOutput) {\n range.oninput = () => {\n resetValidationMessage$1();\n rangeOutput.value = range.value;\n };\n range.onchange = () => {\n resetValidationMessage$1();\n rangeOutput.value = range.value;\n };\n }\n };\n\n /**\n * @param {string | HTMLElement} target\n * @returns {HTMLElement}\n */\n const getTarget = target => {\n if (typeof target === 'string') {\n const element = document.querySelector(target);\n if (!element) {\n throw new Error(`Target element \"${target}\" not found`);\n }\n return /** @type {HTMLElement} */element;\n }\n return target;\n };\n\n /**\n * @param {SweetAlertOptions} params\n */\n const setupAccessibility = params => {\n const popup = getPopup();\n if (!popup) {\n return;\n }\n popup.setAttribute('role', params.toast ? 'alert' : 'dialog');\n popup.setAttribute('aria-live', params.toast ? 'polite' : 'assertive');\n if (!params.toast) {\n popup.setAttribute('aria-modal', 'true');\n }\n };\n\n /**\n * @param {HTMLElement} targetElement\n */\n const setupRTL = targetElement => {\n if (window.getComputedStyle(targetElement).direction === 'rtl') {\n addClass(getContainer(), swalClasses.rtl);\n globalState.isRTL = true;\n }\n };\n\n /**\n * Add modal + backdrop to DOM\n *\n * @param {SweetAlertOptions} params\n */\n const init = params => {\n // Clean up the old popup container if it exists\n const oldContainerExisted = resetOldContainer();\n if (isNodeEnv()) {\n error('SweetAlert2 requires document to initialize');\n return;\n }\n const container = document.createElement('div');\n container.className = swalClasses.container;\n if (oldContainerExisted) {\n addClass(container, swalClasses['no-transition']);\n }\n setInnerHtml(container, sweetHTML);\n container.dataset['swal2Theme'] = params.theme;\n const targetElement = getTarget(params.target || 'body');\n targetElement.appendChild(container);\n if (params.topLayer) {\n container.setAttribute('popover', '');\n container.showPopover();\n }\n setupAccessibility(params);\n setupRTL(targetElement);\n addInputChangeListeners();\n };\n\n /**\n * @param {HTMLElement | object | string} param\n * @param {HTMLElement} target\n */\n const parseHtmlToContainer = (param, target) => {\n // DOM element\n if (param instanceof HTMLElement) {\n target.appendChild(param);\n }\n\n // Object\n else if (typeof param === 'object') {\n handleObject(param, target);\n }\n\n // Plain string\n else if (param) {\n setInnerHtml(target, param);\n }\n };\n\n /**\n * @param {object} param\n * @param {HTMLElement} target\n */\n const handleObject = (param, target) => {\n // JQuery element(s)\n if ('jquery' in param) {\n handleJqueryElem(target, param);\n }\n\n // For other objects use their string representation\n else {\n setInnerHtml(target, param.toString());\n }\n };\n\n /**\n * @param {HTMLElement} target\n * @param {any} elem\n */\n const handleJqueryElem = (target, elem) => {\n target.textContent = '';\n if (0 in elem) {\n for (let i = 0; i in elem; i++) {\n target.appendChild(elem[i].cloneNode(true));\n }\n } else {\n target.appendChild(elem.cloneNode(true));\n }\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const renderActions = (instance, params) => {\n const actions = getActions();\n const loader = getLoader();\n if (!actions || !loader) {\n return;\n }\n\n // Actions (buttons) wrapper\n if (!params.showConfirmButton && !params.showDenyButton && !params.showCancelButton) {\n hide(actions);\n } else {\n show(actions);\n }\n\n // Custom class\n applyCustomClass(actions, params, 'actions');\n\n // Render all the buttons\n renderButtons(actions, loader, params);\n\n // Loader\n setInnerHtml(loader, params.loaderHtml || '');\n applyCustomClass(loader, params, 'loader');\n };\n\n /**\n * @param {HTMLElement} actions\n * @param {HTMLElement} loader\n * @param {SweetAlertOptions} params\n */\n function renderButtons(actions, loader, params) {\n const confirmButton = getConfirmButton();\n const denyButton = getDenyButton();\n const cancelButton = getCancelButton();\n if (!confirmButton || !denyButton || !cancelButton) {\n return;\n }\n\n // Render buttons\n renderButton(confirmButton, 'confirm', params);\n renderButton(denyButton, 'deny', params);\n renderButton(cancelButton, 'cancel', params);\n handleButtonsStyling(confirmButton, denyButton, cancelButton, params);\n if (params.reverseButtons) {\n if (params.toast) {\n actions.insertBefore(cancelButton, confirmButton);\n actions.insertBefore(denyButton, confirmButton);\n } else {\n actions.insertBefore(cancelButton, loader);\n actions.insertBefore(denyButton, loader);\n actions.insertBefore(confirmButton, loader);\n }\n }\n }\n\n /**\n * @param {HTMLElement} confirmButton\n * @param {HTMLElement} denyButton\n * @param {HTMLElement} cancelButton\n * @param {SweetAlertOptions} params\n */\n function handleButtonsStyling(confirmButton, denyButton, cancelButton, params) {\n if (!params.buttonsStyling) {\n removeClass([confirmButton, denyButton, cancelButton], swalClasses.styled);\n return;\n }\n addClass([confirmButton, denyButton, cancelButton], swalClasses.styled);\n\n // Apply custom background colors and outline colors to action buttons\n /** @type {[HTMLElement, string, string | undefined][]} */\n const buttons = [[confirmButton, 'confirm', params.confirmButtonColor], [denyButton, 'deny', params.denyButtonColor], [cancelButton, 'cancel', params.cancelButtonColor]];\n buttons.forEach(([button, type, color]) => {\n if (color) {\n button.style.setProperty(`--swal2-${type}-button-background-color`, color);\n }\n applyOutlineColor(button);\n });\n }\n\n /**\n * @param {HTMLElement} button\n */\n function applyOutlineColor(button) {\n const buttonStyle = window.getComputedStyle(button);\n if (buttonStyle.getPropertyValue('--swal2-action-button-focus-box-shadow')) {\n // If the button already has a custom outline color, no need to change it\n return;\n }\n const outlineColor = buttonStyle.backgroundColor.replace(/rgba?\\((\\d+), (\\d+), (\\d+).*/, 'rgba($1, $2, $3, 0.5)');\n button.style.setProperty('--swal2-action-button-focus-box-shadow', buttonStyle.getPropertyValue('--swal2-outline').replace(/ rgba\\(.*/, ` ${outlineColor}`));\n }\n\n /**\n * @param {HTMLElement} button\n * @param {'confirm' | 'deny' | 'cancel'} buttonType\n * @param {SweetAlertOptions} params\n */\n function renderButton(button, buttonType, params) {\n const buttonName = /** @type {'Confirm' | 'Deny' | 'Cancel'} */capitalizeFirstLetter(buttonType);\n toggle(button, params[`show${buttonName}Button`], 'inline-block');\n setInnerHtml(button, params[`${buttonType}ButtonText`] || ''); // Set caption text\n button.setAttribute('aria-label', params[`${buttonType}ButtonAriaLabel`] || ''); // ARIA label\n\n // Add buttons custom classes\n button.className = swalClasses[buttonType];\n applyCustomClass(button, params, `${buttonType}Button`);\n }\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const renderCloseButton = (instance, params) => {\n const closeButton = getCloseButton();\n if (!closeButton) {\n return;\n }\n setInnerHtml(closeButton, params.closeButtonHtml || '');\n\n // Custom class\n applyCustomClass(closeButton, params, 'closeButton');\n toggle(closeButton, params.showCloseButton);\n closeButton.setAttribute('aria-label', params.closeButtonAriaLabel || '');\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const renderContainer = (instance, params) => {\n const container = getContainer();\n if (!container) {\n return;\n }\n handleBackdropParam(container, params.backdrop);\n handlePositionParam(container, params.position);\n handleGrowParam(container, params.grow);\n\n // Custom class\n applyCustomClass(container, params, 'container');\n };\n\n /**\n * @param {HTMLElement} container\n * @param {SweetAlertOptions['backdrop']} backdrop\n */\n function handleBackdropParam(container, backdrop) {\n if (typeof backdrop === 'string') {\n container.style.background = backdrop;\n } else if (!backdrop) {\n addClass([document.documentElement, document.body], swalClasses['no-backdrop']);\n }\n }\n\n /**\n * @param {HTMLElement} container\n * @param {SweetAlertOptions['position']} position\n */\n function handlePositionParam(container, position) {\n if (!position) {\n return;\n }\n if (position in swalClasses) {\n addClass(container, swalClasses[position]);\n } else {\n warn('The \"position\" parameter is not valid, defaulting to \"center\"');\n addClass(container, swalClasses.center);\n }\n }\n\n /**\n * @param {HTMLElement} container\n * @param {SweetAlertOptions['grow']} grow\n */\n function handleGrowParam(container, grow) {\n if (!grow) {\n return;\n }\n addClass(container, swalClasses[`grow-${grow}`]);\n }\n\n /**\n * This module contains `WeakMap`s for each effectively-\"private property\" that a `Swal` has.\n * For example, to set the private property \"foo\" of `this` to \"bar\", you can `privateProps.foo.set(this, 'bar')`\n * This is the approach that Babel will probably take to implement private methods/fields\n * https://github.com/tc39/proposal-private-methods\n * https://github.com/babel/babel/pull/7555\n * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module*\n * then we can use that language feature.\n */\n\n var privateProps = {\n innerParams: new WeakMap(),\n domCache: new WeakMap(),\n focusedElement: new WeakMap()\n };\n\n /// \n\n\n /** @type {InputClass[]} */\n const inputClasses = ['input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea'];\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const renderInput = (instance, params) => {\n const popup = getPopup();\n if (!popup) {\n return;\n }\n const innerParams = privateProps.innerParams.get(instance);\n const rerender = !innerParams || params.input !== innerParams.input;\n inputClasses.forEach(inputClass => {\n const inputContainer = getDirectChildByClass(popup, swalClasses[inputClass]);\n if (!inputContainer) {\n return;\n }\n\n // set attributes\n setAttributes(inputClass, params.inputAttributes);\n\n // set class\n inputContainer.className = swalClasses[inputClass];\n if (rerender) {\n hide(inputContainer);\n }\n });\n if (params.input) {\n if (rerender) {\n showInput(params);\n }\n // set custom class\n setCustomClass(params);\n }\n };\n\n /**\n * @param {SweetAlertOptions} params\n */\n const showInput = params => {\n if (!params.input) {\n return;\n }\n if (!renderInputType[params.input]) {\n error(`Unexpected type of input! Expected ${Object.keys(renderInputType).join(' | ')}, got \"${params.input}\"`);\n return;\n }\n const inputContainer = getInputContainer(params.input);\n if (!inputContainer) {\n return;\n }\n const input = renderInputType[params.input](inputContainer, params);\n show(inputContainer);\n\n // input autofocus\n if (params.inputAutoFocus) {\n setTimeout(() => {\n focusInput(input);\n });\n }\n };\n\n /**\n * @param {HTMLInputElement} input\n */\n const removeAttributes = input => {\n for (let i = 0; i < input.attributes.length; i++) {\n const attrName = input.attributes[i].name;\n if (!['id', 'type', 'value', 'style'].includes(attrName)) {\n input.removeAttribute(attrName);\n }\n }\n };\n\n /**\n * @param {InputClass} inputClass\n * @param {SweetAlertOptions['inputAttributes']} inputAttributes\n */\n const setAttributes = (inputClass, inputAttributes) => {\n const popup = getPopup();\n if (!popup) {\n return;\n }\n const input = getInput$1(popup, inputClass);\n if (!input) {\n return;\n }\n removeAttributes(input);\n for (const attr in inputAttributes) {\n input.setAttribute(attr, inputAttributes[attr]);\n }\n };\n\n /**\n * @param {SweetAlertOptions} params\n */\n const setCustomClass = params => {\n if (!params.input) {\n return;\n }\n const inputContainer = getInputContainer(params.input);\n if (inputContainer) {\n applyCustomClass(inputContainer, params, 'input');\n }\n };\n\n /**\n * @param {HTMLInputElement | HTMLTextAreaElement} input\n * @param {SweetAlertOptions} params\n */\n const setInputPlaceholder = (input, params) => {\n if (!input.placeholder && params.inputPlaceholder) {\n input.placeholder = params.inputPlaceholder;\n }\n };\n\n /**\n * @param {Input} input\n * @param {Input} prependTo\n * @param {SweetAlertOptions} params\n */\n const setInputLabel = (input, prependTo, params) => {\n if (params.inputLabel) {\n const label = document.createElement('label');\n const labelClass = swalClasses['input-label'];\n label.setAttribute('for', input.id);\n label.className = labelClass;\n if (typeof params.customClass === 'object') {\n addClass(label, params.customClass.inputLabel);\n }\n label.innerText = params.inputLabel;\n prependTo.insertAdjacentElement('beforebegin', label);\n }\n };\n\n /**\n * @param {SweetAlertInput} inputType\n * @returns {HTMLElement | undefined}\n */\n const getInputContainer = inputType => {\n const popup = getPopup();\n if (!popup) {\n return;\n }\n return getDirectChildByClass(popup, swalClasses[(/** @type {SwalClass} */inputType)] || swalClasses.input);\n };\n\n /**\n * @param {HTMLInputElement | HTMLOutputElement | HTMLTextAreaElement} input\n * @param {SweetAlertOptions['inputValue']} inputValue\n */\n const checkAndSetInputValue = (input, inputValue) => {\n if (['string', 'number'].includes(typeof inputValue)) {\n input.value = `${inputValue}`;\n } else if (!isPromise(inputValue)) {\n warn(`Unexpected type of inputValue! Expected \"string\", \"number\" or \"Promise\", got \"${typeof inputValue}\"`);\n }\n };\n\n /** @type {Record Input>} */\n const renderInputType = {};\n\n /**\n * @param {Input | HTMLElement} input\n * @param {SweetAlertOptions} params\n * @returns {Input}\n */\n renderInputType.text = renderInputType.email = renderInputType.password = renderInputType.number = renderInputType.tel = renderInputType.url = renderInputType.search = renderInputType.date = renderInputType['datetime-local'] = renderInputType.time = renderInputType.week = renderInputType.month = /** @type {(input: Input | HTMLElement, params: SweetAlertOptions) => Input} */\n (input, params) => {\n // oxfmt-ignore\n const inputElement = /** @type {HTMLInputElement} */input;\n checkAndSetInputValue(inputElement, params.inputValue);\n setInputLabel(inputElement, inputElement, params);\n setInputPlaceholder(inputElement, params);\n // oxfmt-ignore\n inputElement.type = /** @type {string} */params.input;\n return inputElement;\n };\n\n /**\n * @param {Input | HTMLElement} input\n * @param {SweetAlertOptions} params\n * @returns {Input}\n */\n renderInputType.file = (input, params) => {\n const inputElement = /** @type {HTMLInputElement} */input;\n setInputLabel(inputElement, inputElement, params);\n setInputPlaceholder(inputElement, params);\n return inputElement;\n };\n\n /**\n * @param {Input | HTMLElement} range\n * @param {SweetAlertOptions} params\n * @returns {Input}\n */\n renderInputType.range = (range, params) => {\n const rangeContainer = /** @type {HTMLElement} */range;\n const rangeInput = rangeContainer.querySelector('input');\n const rangeOutput = rangeContainer.querySelector('output');\n if (rangeInput) {\n checkAndSetInputValue(rangeInput, params.inputValue);\n rangeInput.type = /** @type {string} */params.input;\n setInputLabel(rangeInput, /** @type {Input} */range, params);\n }\n if (rangeOutput) {\n checkAndSetInputValue(rangeOutput, params.inputValue);\n }\n return /** @type {Input} */range;\n };\n\n /**\n * @param {Input | HTMLElement} select\n * @param {SweetAlertOptions} params\n * @returns {Input}\n */\n renderInputType.select = (select, params) => {\n const selectElement = /** @type {HTMLSelectElement} */select;\n selectElement.textContent = '';\n if (params.inputPlaceholder) {\n const placeholder = document.createElement('option');\n setInnerHtml(placeholder, params.inputPlaceholder);\n placeholder.value = '';\n placeholder.disabled = true;\n placeholder.selected = true;\n selectElement.appendChild(placeholder);\n }\n setInputLabel(selectElement, selectElement, params);\n return selectElement;\n };\n\n /**\n * @param {Input | HTMLElement} radio\n * @returns {Input}\n */\n renderInputType.radio = radio => {\n const radioElement = /** @type {HTMLElement} */radio;\n radioElement.textContent = '';\n return /** @type {Input} */radio;\n };\n\n /**\n * @param {Input | HTMLElement} checkboxContainer\n * @param {SweetAlertOptions} params\n * @returns {Input}\n */\n renderInputType.checkbox = (checkboxContainer, params) => {\n const popup = getPopup();\n if (!popup) {\n throw new Error('Popup not found');\n }\n const checkbox = getInput$1(popup, 'checkbox');\n if (!checkbox) {\n throw new Error('Checkbox input not found');\n }\n checkbox.value = '1';\n checkbox.checked = Boolean(params.inputValue);\n const containerElement = /** @type {HTMLElement} */checkboxContainer;\n const label = containerElement.querySelector('span');\n if (label) {\n const placeholderOrLabel = params.inputPlaceholder || params.inputLabel;\n if (placeholderOrLabel) {\n setInnerHtml(label, placeholderOrLabel);\n }\n }\n return checkbox;\n };\n\n /**\n * @param {Input | HTMLElement} textarea\n * @param {SweetAlertOptions} params\n * @returns {Input}\n */\n renderInputType.textarea = (textarea, params) => {\n const textareaElement = /** @type {HTMLTextAreaElement} */textarea;\n checkAndSetInputValue(textareaElement, params.inputValue);\n setInputPlaceholder(textareaElement, params);\n setInputLabel(textareaElement, textareaElement, params);\n\n /**\n * @param {HTMLElement} el\n * @returns {number}\n */\n const getMargin = el => parseInt(window.getComputedStyle(el).marginLeft) + parseInt(window.getComputedStyle(el).marginRight);\n\n // https://github.com/sweetalert2/sweetalert2/issues/2291\n setTimeout(() => {\n // https://github.com/sweetalert2/sweetalert2/issues/1699\n if ('MutationObserver' in window) {\n const popup = getPopup();\n if (!popup) {\n return;\n }\n const initialPopupWidth = parseInt(window.getComputedStyle(popup).width);\n const textareaResizeHandler = () => {\n // check if texarea is still in document (i.e. popup wasn't closed in the meantime)\n if (!document.body.contains(textareaElement)) {\n return;\n }\n const textareaWidth = textareaElement.offsetWidth + getMargin(textareaElement);\n const popupElement = getPopup();\n if (popupElement) {\n if (textareaWidth > initialPopupWidth) {\n popupElement.style.width = `${textareaWidth}px`;\n } else {\n applyNumericalStyle(popupElement, 'width', params.width);\n }\n }\n };\n new MutationObserver(textareaResizeHandler).observe(textareaElement, {\n attributes: true,\n attributeFilter: ['style']\n });\n }\n });\n return textareaElement;\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const renderContent = (instance, params) => {\n const htmlContainer = getHtmlContainer();\n if (!htmlContainer) {\n return;\n }\n showWhenInnerHtmlPresent(htmlContainer);\n applyCustomClass(htmlContainer, params, 'htmlContainer');\n\n // Content as HTML\n if (params.html) {\n parseHtmlToContainer(params.html, htmlContainer);\n show(htmlContainer, 'block');\n }\n\n // Content as plain text\n else if (params.text) {\n htmlContainer.textContent = params.text;\n show(htmlContainer, 'block');\n }\n\n // No content\n else {\n hide(htmlContainer);\n }\n renderInput(instance, params);\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const renderFooter = (instance, params) => {\n const footer = getFooter();\n if (!footer) {\n return;\n }\n showWhenInnerHtmlPresent(footer);\n toggle(footer, Boolean(params.footer), 'block');\n if (params.footer) {\n parseHtmlToContainer(params.footer, footer);\n }\n\n // Custom class\n applyCustomClass(footer, params, 'footer');\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const renderIcon = (instance, params) => {\n const innerParams = privateProps.innerParams.get(instance);\n const icon = getIcon();\n if (!icon) {\n return;\n }\n\n // if the given icon already rendered, apply the styling without re-rendering the icon\n if (innerParams && params.icon === innerParams.icon) {\n // Custom or default content\n setContent(icon, params);\n applyStyles(icon, params);\n return;\n }\n if (!params.icon && !params.iconHtml) {\n hide(icon);\n return;\n }\n if (params.icon && Object.keys(iconTypes).indexOf(params.icon) === -1) {\n error(`Unknown icon! Expected \"success\", \"error\", \"warning\", \"info\" or \"question\", got \"${params.icon}\"`);\n hide(icon);\n return;\n }\n show(icon);\n\n // Custom or default content\n setContent(icon, params);\n applyStyles(icon, params);\n\n // Animate icon\n addClass(icon, params.showClass && params.showClass.icon);\n\n // Re-adjust the success icon on system theme change\n const colorSchemeQueryList = window.matchMedia('(prefers-color-scheme: dark)');\n colorSchemeQueryList.addEventListener('change', adjustSuccessIconBackgroundColor);\n };\n\n /**\n * @param {HTMLElement} icon\n * @param {SweetAlertOptions} params\n */\n const applyStyles = (icon, params) => {\n for (const [iconType, iconClassName] of Object.entries(iconTypes)) {\n if (params.icon !== iconType) {\n removeClass(icon, iconClassName);\n }\n }\n addClass(icon, params.icon && iconTypes[params.icon]);\n\n // Icon color\n setColor(icon, params);\n\n // Success icon background color\n adjustSuccessIconBackgroundColor();\n\n // Custom class\n applyCustomClass(icon, params, 'icon');\n };\n\n // Adjust success icon background color to match the popup background color\n const adjustSuccessIconBackgroundColor = () => {\n const popup = getPopup();\n if (!popup) {\n return;\n }\n const popupBackgroundColor = window.getComputedStyle(popup).getPropertyValue('background-color');\n /** @type {NodeListOf} */\n const successIconParts = popup.querySelectorAll('[class^=swal2-success-circular-line], .swal2-success-fix');\n for (let i = 0; i < successIconParts.length; i++) {\n successIconParts[i].style.backgroundColor = popupBackgroundColor;\n }\n };\n\n /**\n *\n * @param {SweetAlertOptions} params\n * @returns {string}\n */\n const successIconHtml = params => `\n ${params.animation ? '' : ''}\n \n \n ${params.animation ? '' : ''}\n ${params.animation ? '' : ''}\n`;\n const errorIconHtml = `\n \n \n \n \n`;\n\n /**\n * @param {HTMLElement} icon\n * @param {SweetAlertOptions} params\n */\n const setContent = (icon, params) => {\n if (!params.icon && !params.iconHtml) {\n return;\n }\n let oldContent = icon.innerHTML;\n let newContent = '';\n if (params.iconHtml) {\n newContent = iconContent(params.iconHtml);\n } else if (params.icon === 'success') {\n newContent = successIconHtml(params);\n oldContent = oldContent.replace(/ style=\".*?\"/g, ''); // undo adjustSuccessIconBackgroundColor()\n } else if (params.icon === 'error') {\n newContent = errorIconHtml;\n } else if (params.icon) {\n const defaultIconHtml = {\n question: '?',\n warning: '!',\n info: 'i'\n };\n newContent = iconContent(defaultIconHtml[params.icon]);\n }\n if (oldContent.trim() !== newContent.trim()) {\n setInnerHtml(icon, newContent);\n }\n };\n\n /**\n * @param {HTMLElement} icon\n * @param {SweetAlertOptions} params\n */\n const setColor = (icon, params) => {\n if (!params.iconColor) {\n return;\n }\n icon.style.color = params.iconColor;\n icon.style.borderColor = params.iconColor;\n for (const sel of ['.swal2-success-line-tip', '.swal2-success-line-long', '.swal2-x-mark-line-left', '.swal2-x-mark-line-right']) {\n setStyle(icon, sel, 'background-color', params.iconColor);\n }\n setStyle(icon, '.swal2-success-ring', 'border-color', params.iconColor);\n };\n\n /**\n * @param {string} content\n * @returns {string}\n */\n const iconContent = content => `${content}
`;\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const renderImage = (instance, params) => {\n const image = getImage();\n if (!image) {\n return;\n }\n if (!params.imageUrl) {\n hide(image);\n return;\n }\n show(image, '');\n\n // Src, alt\n image.setAttribute('src', params.imageUrl);\n image.setAttribute('alt', params.imageAlt || '');\n\n // Width, height\n applyNumericalStyle(image, 'width', params.imageWidth);\n applyNumericalStyle(image, 'height', params.imageHeight);\n\n // Class\n image.className = swalClasses.image;\n applyCustomClass(image, params, 'image');\n };\n\n let dragging = false;\n let mousedownX = 0;\n let mousedownY = 0;\n let initialX = 0;\n let initialY = 0;\n\n /**\n * @param {HTMLElement} popup\n */\n const addDraggableListeners = popup => {\n popup.addEventListener('mousedown', down);\n document.body.addEventListener('mousemove', move);\n popup.addEventListener('mouseup', up);\n popup.addEventListener('touchstart', down);\n document.body.addEventListener('touchmove', move);\n popup.addEventListener('touchend', up);\n };\n\n /**\n * @param {HTMLElement} popup\n */\n const removeDraggableListeners = popup => {\n popup.removeEventListener('mousedown', down);\n document.body.removeEventListener('mousemove', move);\n popup.removeEventListener('mouseup', up);\n popup.removeEventListener('touchstart', down);\n document.body.removeEventListener('touchmove', move);\n popup.removeEventListener('touchend', up);\n };\n\n /**\n * @param {MouseEvent | TouchEvent} event\n */\n const down = event => {\n const popup = getPopup();\n if (!popup) {\n return;\n }\n const icon = getIcon();\n if (event.target === popup || icon && icon.contains(/** @type {HTMLElement} */event.target)) {\n dragging = true;\n const clientXY = getClientXY(event);\n mousedownX = clientXY.clientX;\n mousedownY = clientXY.clientY;\n initialX = parseInt(popup.style.insetInlineStart) || 0;\n initialY = parseInt(popup.style.insetBlockStart) || 0;\n addClass(popup, 'swal2-dragging');\n }\n };\n\n /**\n * @param {MouseEvent | TouchEvent} event\n */\n const move = event => {\n const popup = getPopup();\n if (!popup) {\n return;\n }\n if (dragging) {\n let {\n clientX,\n clientY\n } = getClientXY(event);\n const deltaX = clientX - mousedownX;\n // In RTL mode, negate the horizontal delta since insetInlineStart refers to the right edge\n popup.style.insetInlineStart = `${initialX + (globalState.isRTL ? -deltaX : deltaX)}px`;\n popup.style.insetBlockStart = `${initialY + (clientY - mousedownY)}px`;\n }\n };\n const up = () => {\n const popup = getPopup();\n dragging = false;\n removeClass(popup, 'swal2-dragging');\n };\n\n /**\n * @param {MouseEvent | TouchEvent} event\n * @returns {{ clientX: number, clientY: number }}\n */\n const getClientXY = event => {\n const source = event.type.startsWith('touch') ? /** @type {TouchEvent} */event.touches[0] : (/** @type {MouseEvent} */event);\n return {\n clientX: source.clientX,\n clientY: source.clientY\n };\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const renderPopup = (instance, params) => {\n const container = getContainer();\n const popup = getPopup();\n if (!container || !popup) {\n return;\n }\n\n // Width\n // https://github.com/sweetalert2/sweetalert2/issues/2170\n if (params.toast) {\n applyNumericalStyle(container, 'width', params.width);\n popup.style.width = '100%';\n const loader = getLoader();\n if (loader) {\n popup.insertBefore(loader, getIcon());\n }\n } else {\n applyNumericalStyle(popup, 'width', params.width);\n }\n\n // Padding\n applyNumericalStyle(popup, 'padding', params.padding);\n\n // Color\n if (params.color) {\n popup.style.color = params.color;\n }\n\n // Background\n if (params.background) {\n popup.style.background = params.background;\n }\n hide(getValidationMessage());\n\n // Classes\n addClasses$1(popup, params);\n if (params.draggable && !params.toast) {\n addClass(popup, swalClasses.draggable);\n addDraggableListeners(popup);\n } else {\n removeClass(popup, swalClasses.draggable);\n removeDraggableListeners(popup);\n }\n };\n\n /**\n * @param {HTMLElement} popup\n * @param {SweetAlertOptions} params\n */\n const addClasses$1 = (popup, params) => {\n const showClass = params.showClass || {};\n // Default Class + showClass when updating Swal.update({})\n popup.className = `${swalClasses.popup} ${isVisible$1(popup) ? showClass.popup : ''}`;\n if (params.toast) {\n addClass([document.documentElement, document.body], swalClasses['toast-shown']);\n addClass(popup, swalClasses.toast);\n } else {\n addClass(popup, swalClasses.modal);\n }\n\n // Custom class\n applyCustomClass(popup, params, 'popup');\n // TODO: remove in the next major\n if (typeof params.customClass === 'string') {\n addClass(popup, params.customClass);\n }\n\n // Icon class (#1842)\n if (params.icon) {\n addClass(popup, swalClasses[`icon-${params.icon}`]);\n }\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const renderProgressSteps = (instance, params) => {\n const progressStepsContainer = getProgressSteps();\n if (!progressStepsContainer) {\n return;\n }\n const {\n progressSteps,\n currentProgressStep\n } = params;\n if (!progressSteps || progressSteps.length === 0 || currentProgressStep === undefined) {\n hide(progressStepsContainer);\n return;\n }\n show(progressStepsContainer);\n progressStepsContainer.textContent = '';\n if (currentProgressStep >= progressSteps.length) {\n warn('Invalid currentProgressStep parameter, it should be less than progressSteps.length ' + '(currentProgressStep like JS arrays starts from 0)');\n }\n progressSteps.forEach((step, index) => {\n const stepEl = createStepElement(step);\n progressStepsContainer.appendChild(stepEl);\n if (index === currentProgressStep) {\n addClass(stepEl, swalClasses['active-progress-step']);\n }\n if (index !== progressSteps.length - 1) {\n const lineEl = createLineElement(params);\n progressStepsContainer.appendChild(lineEl);\n }\n });\n };\n\n /**\n * @param {string} step\n * @returns {HTMLLIElement}\n */\n const createStepElement = step => {\n const stepEl = document.createElement('li');\n addClass(stepEl, swalClasses['progress-step']);\n setInnerHtml(stepEl, step);\n return stepEl;\n };\n\n /**\n * @param {SweetAlertOptions} params\n * @returns {HTMLLIElement}\n */\n const createLineElement = params => {\n const lineEl = document.createElement('li');\n addClass(lineEl, swalClasses['progress-step-line']);\n if (params.progressStepsDistance) {\n applyNumericalStyle(lineEl, 'width', params.progressStepsDistance);\n }\n return lineEl;\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const renderTitle = (instance, params) => {\n const title = getTitle();\n if (!title) {\n return;\n }\n showWhenInnerHtmlPresent(title);\n toggle(title, Boolean(params.title || params.titleText), 'block');\n if (params.title) {\n parseHtmlToContainer(params.title, title);\n }\n if (params.titleText) {\n title.innerText = params.titleText;\n }\n\n // Custom class\n applyCustomClass(title, params, 'title');\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const render = (instance, params) => {\n var _globalState$eventEmi;\n renderPopup(instance, params);\n renderContainer(instance, params);\n renderProgressSteps(instance, params);\n renderIcon(instance, params);\n renderImage(instance, params);\n renderTitle(instance, params);\n renderCloseButton(instance, params);\n renderContent(instance, params);\n renderActions(instance, params);\n renderFooter(instance, params);\n const popup = getPopup();\n if (typeof params.didRender === 'function' && popup) {\n params.didRender(popup);\n }\n (_globalState$eventEmi = globalState.eventEmitter) === null || _globalState$eventEmi === void 0 || _globalState$eventEmi.emit('didRender', popup);\n };\n\n /*\n * Global function to determine if SweetAlert2 popup is shown\n */\n const isVisible = () => {\n return isVisible$1(getPopup());\n };\n\n /*\n * Global function to click 'Confirm' button\n */\n const clickConfirm = () => {\n var _dom$getConfirmButton;\n return (_dom$getConfirmButton = getConfirmButton()) === null || _dom$getConfirmButton === void 0 ? void 0 : _dom$getConfirmButton.click();\n };\n\n /*\n * Global function to click 'Deny' button\n */\n const clickDeny = () => {\n var _dom$getDenyButton;\n return (_dom$getDenyButton = getDenyButton()) === null || _dom$getDenyButton === void 0 ? void 0 : _dom$getDenyButton.click();\n };\n\n /*\n * Global function to click 'Cancel' button\n */\n const clickCancel = () => {\n var _dom$getCancelButton;\n return (_dom$getCancelButton = getCancelButton()) === null || _dom$getCancelButton === void 0 ? void 0 : _dom$getCancelButton.click();\n };\n\n /** @type {Record} */\n const DismissReason = Object.freeze({\n cancel: 'cancel',\n backdrop: 'backdrop',\n close: 'close',\n esc: 'esc',\n timer: 'timer'\n });\n\n /**\n * @param {GlobalState} globalState\n */\n const removeKeydownHandler = globalState => {\n if (globalState.keydownTarget && globalState.keydownHandlerAdded && globalState.keydownHandler) {\n const handler = /** @type {EventListenerOrEventListenerObject} */\n /** @type {unknown} */globalState.keydownHandler;\n globalState.keydownTarget.removeEventListener('keydown', handler, {\n capture: globalState.keydownListenerCapture\n });\n globalState.keydownHandlerAdded = false;\n }\n };\n\n /**\n * @param {GlobalState} globalState\n * @param {SweetAlertOptions} innerParams\n * @param {(dismiss: DismissReason) => void} dismissWith\n */\n const addKeydownHandler = (globalState, innerParams, dismissWith) => {\n removeKeydownHandler(globalState);\n if (!innerParams.toast) {\n /** @type {(this: HTMLElement, event: KeyboardEvent) => void} */\n const handler = e => keydownHandler(innerParams, e, dismissWith);\n globalState.keydownHandler = handler;\n const target = innerParams.keydownListenerCapture ? window : getPopup();\n if (target) {\n globalState.keydownTarget = target;\n globalState.keydownListenerCapture = innerParams.keydownListenerCapture;\n const eventHandler = /** @type {EventListenerOrEventListenerObject} */ /** @type {unknown} */handler;\n globalState.keydownTarget.addEventListener('keydown', eventHandler, {\n capture: globalState.keydownListenerCapture\n });\n globalState.keydownHandlerAdded = true;\n }\n }\n };\n\n /**\n * @param {number} index\n * @param {number} increment\n * @returns {boolean} shouldPreventDefault\n */\n const setFocus = (index, increment) => {\n var _dom$getPopup;\n const focusableElements = getFocusableElements();\n // search for visible elements and select the next possible match\n if (focusableElements.length) {\n index = index + increment;\n\n // shift + tab when .swal2-popup is focused\n if (index === -2) {\n index = focusableElements.length - 1;\n }\n\n // rollover to first item\n if (index === focusableElements.length) {\n index = 0;\n\n // go to last item\n } else if (index === -1) {\n index = focusableElements.length - 1;\n }\n focusableElements[index].focus();\n\n // don't prevent default for iframes (Firefox fix)\n // https://github.com/sweetalert2/sweetalert2/issues/2931\n if (isFirefox() && focusableElements[index] instanceof HTMLIFrameElement) {\n return false;\n }\n return true;\n }\n // no visible focusable elements, focus the popup\n (_dom$getPopup = getPopup()) === null || _dom$getPopup === void 0 || _dom$getPopup.focus();\n return true;\n };\n const arrowKeysNextButton = ['ArrowRight', 'ArrowDown'];\n const arrowKeysPreviousButton = ['ArrowLeft', 'ArrowUp'];\n\n /**\n * @param {SweetAlertOptions} innerParams\n * @param {KeyboardEvent} event\n * @param {(dismiss: DismissReason) => void} dismissWith\n */\n const keydownHandler = (innerParams, event, dismissWith) => {\n if (!innerParams) {\n return; // This instance has already been destroyed\n }\n\n // Ignore keydown during IME composition\n // https://developer.mozilla.org/en-US/docs/Web/API/Document/keydown_event#ignoring_keydown_during_ime_composition\n // https://github.com/sweetalert2/sweetalert2/issues/720\n // https://github.com/sweetalert2/sweetalert2/issues/2406\n if (event.isComposing || event.keyCode === 229) {\n return;\n }\n if (innerParams.stopKeydownPropagation) {\n event.stopPropagation();\n }\n\n // ENTER\n if (event.key === 'Enter') {\n handleEnter(event, innerParams);\n }\n\n // TAB\n else if (event.key === 'Tab') {\n handleTab(event);\n }\n\n // ARROWS - switch focus between buttons\n else if ([...arrowKeysNextButton, ...arrowKeysPreviousButton].includes(event.key)) {\n handleArrows(event.key);\n }\n\n // ESC\n else if (event.key === 'Escape') {\n handleEsc(event, innerParams, dismissWith);\n }\n };\n\n /**\n * @param {KeyboardEvent} event\n * @param {SweetAlertOptions} innerParams\n */\n const handleEnter = (event, innerParams) => {\n // https://github.com/sweetalert2/sweetalert2/issues/2386\n if (!callIfFunction(innerParams.allowEnterKey)) {\n return;\n }\n const popup = getPopup();\n if (!popup || !innerParams.input) {\n return;\n }\n const input = getInput$1(popup, innerParams.input);\n if (event.target && input && event.target instanceof HTMLElement && event.target.outerHTML === input.outerHTML) {\n if (['textarea', 'file'].includes(innerParams.input)) {\n return; // do not submit\n }\n clickConfirm();\n event.preventDefault();\n }\n };\n\n /**\n * @param {KeyboardEvent} event\n */\n const handleTab = event => {\n const targetElement = event.target;\n const focusableElements = getFocusableElements();\n let btnIndex = -1;\n for (let i = 0; i < focusableElements.length; i++) {\n if (targetElement === focusableElements[i]) {\n btnIndex = i;\n break;\n }\n }\n\n // don't prevent default for iframes (Firefox fix)\n // https://github.com/sweetalert2/sweetalert2/issues/2931\n let shouldPreventDefault = true;\n\n // Cycle to the next button\n if (!event.shiftKey) {\n shouldPreventDefault = setFocus(btnIndex, 1);\n }\n\n // Cycle to the prev button\n else {\n shouldPreventDefault = setFocus(btnIndex, -1);\n }\n event.stopPropagation();\n if (shouldPreventDefault) {\n event.preventDefault();\n }\n };\n\n /**\n * @param {string} key\n */\n const handleArrows = key => {\n const actions = getActions();\n const confirmButton = getConfirmButton();\n const denyButton = getDenyButton();\n const cancelButton = getCancelButton();\n if (!actions || !confirmButton || !denyButton || !cancelButton) {\n return;\n }\n /** @type HTMLElement[] */\n const buttons = [confirmButton, denyButton, cancelButton];\n if (document.activeElement instanceof HTMLElement && !buttons.includes(document.activeElement)) {\n return;\n }\n const sibling = arrowKeysNextButton.includes(key) ? 'nextElementSibling' : 'previousElementSibling';\n let buttonToFocus = document.activeElement;\n if (!buttonToFocus) {\n return;\n }\n for (let i = 0; i < actions.children.length; i++) {\n buttonToFocus = buttonToFocus[sibling];\n if (!buttonToFocus) {\n return;\n }\n if (buttonToFocus instanceof HTMLButtonElement && isVisible$1(buttonToFocus)) {\n break;\n }\n }\n if (buttonToFocus instanceof HTMLButtonElement) {\n buttonToFocus.focus();\n }\n };\n\n /**\n * @param {KeyboardEvent} event\n * @param {SweetAlertOptions} innerParams\n * @param {(dismiss: DismissReason) => void} dismissWith\n */\n const handleEsc = (event, innerParams, dismissWith) => {\n event.preventDefault();\n if (callIfFunction(innerParams.allowEscapeKey)) {\n dismissWith(DismissReason.esc);\n }\n };\n\n /**\n * This module contains `WeakMap`s for each effectively-\"private property\" that a `Swal` has.\n * For example, to set the private property \"foo\" of `this` to \"bar\", you can `privateProps.foo.set(this, 'bar')`\n * This is the approach that Babel will probably take to implement private methods/fields\n * https://github.com/tc39/proposal-private-methods\n * https://github.com/babel/babel/pull/7555\n * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module*\n * then we can use that language feature.\n */\n\n var privateMethods = {\n swalPromiseResolve: new WeakMap(),\n swalPromiseReject: new WeakMap()\n };\n\n // From https://developer.paciellogroup.com/blog/2018/06/the-current-state-of-modal-dialog-accessibility/\n // Adding aria-hidden=\"true\" to elements outside of the active modal dialog ensures that\n // elements not within the active modal dialog will not be surfaced if a user opens a screen\n // reader\u2019s list of elements (headings, form controls, landmarks, etc.) in the document.\n\n const setAriaHidden = () => {\n const container = getContainer();\n const bodyChildren = Array.from(document.body.children);\n bodyChildren.forEach(el => {\n if (el.contains(container)) {\n return;\n }\n if (el.hasAttribute('aria-hidden')) {\n el.setAttribute('data-previous-aria-hidden', el.getAttribute('aria-hidden') || '');\n }\n el.setAttribute('aria-hidden', 'true');\n });\n };\n const unsetAriaHidden = () => {\n const bodyChildren = Array.from(document.body.children);\n bodyChildren.forEach(el => {\n if (el.hasAttribute('data-previous-aria-hidden')) {\n el.setAttribute('aria-hidden', el.getAttribute('data-previous-aria-hidden') || '');\n el.removeAttribute('data-previous-aria-hidden');\n } else {\n el.removeAttribute('aria-hidden');\n }\n });\n };\n\n // @ts-ignore\n const isSafariOrIOS = typeof window !== 'undefined' && Boolean(window.GestureEvent); // true for Safari desktop + all iOS browsers https://stackoverflow.com/a/70585394\n\n // @ts-ignore\n const isIOS = isSafariOrIOS && /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;\n\n /**\n * Fix iOS scrolling\n * http://stackoverflow.com/q/39626302\n */\n const iOSfix = () => {\n if (isSafariOrIOS && !hasClass(document.body, swalClasses.iosfix)) {\n const offset = document.body.scrollTop;\n document.body.style.top = `${offset * -1}px`;\n addClass(document.body, swalClasses.iosfix);\n lockBodyScroll();\n }\n };\n\n /**\n * https://github.com/sweetalert2/sweetalert2/issues/1246\n */\n const lockBodyScroll = () => {\n const container = getContainer();\n if (!container) {\n return;\n }\n /** @type {boolean} */\n let preventTouchMove;\n /**\n * @param {TouchEvent} event\n */\n container.ontouchstart = event => {\n preventTouchMove = shouldPreventTouchMove(event);\n };\n /**\n * @param {TouchEvent} event\n */\n container.ontouchmove = event => {\n if (preventTouchMove) {\n event.preventDefault();\n event.stopPropagation();\n }\n };\n };\n\n /**\n * @param {TouchEvent} event\n * @returns {boolean}\n */\n const shouldPreventTouchMove = event => {\n const target = event.target;\n const container = getContainer();\n const htmlContainer = getHtmlContainer();\n if (!container || !htmlContainer) {\n return false;\n }\n if (isStylus(event) || isZoom(event)) {\n return false;\n }\n if (target === container) {\n return true;\n }\n if (!isScrollable(container) && target instanceof HTMLElement && !selfOrParentIsScrollable(target, htmlContainer) &&\n // #2823\n target.tagName !== 'INPUT' &&\n // #1603\n target.tagName !== 'TEXTAREA' &&\n // #2266\n !(isScrollable(htmlContainer) &&\n // #1944\n htmlContainer.contains(target))) {\n return true;\n }\n return false;\n };\n\n /**\n * https://github.com/sweetalert2/sweetalert2/issues/1786\n *\n * @param {TouchEvent} event\n * @returns {boolean}\n */\n const isStylus = event => {\n return Boolean(event.touches && event.touches.length &&\n // @ts-ignore - touchType is not a standard property\n event.touches[0].touchType === 'stylus');\n };\n\n /**\n * https://github.com/sweetalert2/sweetalert2/issues/1891\n *\n * @param {TouchEvent} event\n * @returns {boolean}\n */\n const isZoom = event => {\n return event.touches && event.touches.length > 1;\n };\n const undoIOSfix = () => {\n if (hasClass(document.body, swalClasses.iosfix)) {\n const offset = parseInt(document.body.style.top, 10);\n removeClass(document.body, swalClasses.iosfix);\n document.body.style.top = '';\n document.body.scrollTop = offset * -1;\n }\n };\n\n /**\n * Measure scrollbar width for padding body during modal show/hide\n * https://github.com/twbs/bootstrap/blob/master/js/src/modal.js\n *\n * @returns {number}\n */\n const measureScrollbar = () => {\n const scrollDiv = document.createElement('div');\n scrollDiv.className = swalClasses['scrollbar-measure'];\n document.body.appendChild(scrollDiv);\n const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n document.body.removeChild(scrollDiv);\n return scrollbarWidth;\n };\n\n /**\n * Remember state in cases where opening and handling a modal will fiddle with it.\n * @type {number | null}\n */\n let previousBodyPadding = null;\n\n /**\n * @param {string} initialBodyOverflow\n */\n const replaceScrollbarWithPadding = initialBodyOverflow => {\n // for queues, do not do this more than once\n if (previousBodyPadding !== null) {\n return;\n }\n // if the body has overflow\n if (document.body.scrollHeight > window.innerHeight || initialBodyOverflow === 'scroll' // https://github.com/sweetalert2/sweetalert2/issues/2663\n ) {\n // add padding so the content doesn't shift after removal of scrollbar\n previousBodyPadding = parseInt(window.getComputedStyle(document.body).getPropertyValue('padding-right'));\n document.body.style.paddingRight = `${previousBodyPadding + measureScrollbar()}px`;\n }\n };\n const undoReplaceScrollbarWithPadding = () => {\n if (previousBodyPadding !== null) {\n document.body.style.paddingRight = `${previousBodyPadding}px`;\n previousBodyPadding = null;\n }\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {HTMLElement} container\n * @param {boolean} returnFocus\n * @param {(() => void) | undefined} didClose\n */\n function removePopupAndResetState(instance, container, returnFocus, didClose) {\n if (isToast()) {\n triggerDidCloseAndDispose(instance, didClose);\n } else {\n restoreActiveElement(returnFocus).then(() => triggerDidCloseAndDispose(instance, didClose));\n removeKeydownHandler(globalState);\n }\n\n // workaround for https://github.com/sweetalert2/sweetalert2/issues/2088\n // for some reason removing the container in Safari will scroll the document to bottom\n if (isSafariOrIOS) {\n container.setAttribute('style', 'display:none !important');\n container.removeAttribute('class');\n container.innerHTML = '';\n } else {\n container.remove();\n }\n if (isModal()) {\n undoReplaceScrollbarWithPadding();\n undoIOSfix();\n unsetAriaHidden();\n }\n removeBodyClasses();\n }\n\n /**\n * Remove SweetAlert2 classes from body\n */\n function removeBodyClasses() {\n removeClass([document.documentElement, document.body], [swalClasses.shown, swalClasses['height-auto'], swalClasses['no-backdrop'], swalClasses['toast-shown']]);\n }\n\n /**\n * Instance method to close sweetAlert\n *\n * @param {SweetAlertResult | undefined} resolveValue\n * @this {SweetAlert}\n */\n function close(resolveValue) {\n resolveValue = prepareResolveValue(resolveValue);\n const swalPromiseResolve = privateMethods.swalPromiseResolve.get(this);\n const didClose = triggerClosePopup(this);\n if (this.isAwaitingPromise) {\n // A swal awaiting for a promise (after a click on Confirm or Deny) cannot be dismissed anymore #2335\n if (!resolveValue.isDismissed) {\n handleAwaitingPromise(this);\n swalPromiseResolve(resolveValue);\n }\n } else if (didClose) {\n // Resolve Swal promise\n swalPromiseResolve(resolveValue);\n }\n }\n\n /**\n * @param {SweetAlert} instance\n * @returns {boolean}\n */\n const triggerClosePopup = instance => {\n const popup = getPopup();\n if (!popup) {\n return false;\n }\n const innerParams = privateProps.innerParams.get(instance);\n if (!innerParams || hasClass(popup, innerParams.hideClass.popup)) {\n return false;\n }\n removeClass(popup, innerParams.showClass.popup);\n addClass(popup, innerParams.hideClass.popup);\n const backdrop = getContainer();\n removeClass(backdrop, innerParams.showClass.backdrop);\n addClass(backdrop, innerParams.hideClass.backdrop);\n handlePopupAnimation(instance, popup, innerParams);\n return true;\n };\n\n /**\n * @param {Error | string} error\n * @this {SweetAlert}\n */\n function rejectPromise(error) {\n const rejectPromise = privateMethods.swalPromiseReject.get(this);\n handleAwaitingPromise(this);\n if (rejectPromise) {\n // Reject Swal promise\n rejectPromise(error);\n }\n }\n\n /**\n * @param {SweetAlert} instance\n */\n const handleAwaitingPromise = instance => {\n if (instance.isAwaitingPromise) {\n // @ts-ignore\n delete instance.isAwaitingPromise;\n // The instance might have been previously partly destroyed, we must resume the destroy process in this case #2335\n if (!privateProps.innerParams.get(instance)) {\n instance._destroy();\n }\n }\n };\n\n /**\n * @param {SweetAlertResult | undefined} resolveValue\n * @returns {SweetAlertResult}\n */\n const prepareResolveValue = resolveValue => {\n // When user calls Swal.close()\n if (typeof resolveValue === 'undefined') {\n return {\n isConfirmed: false,\n isDenied: false,\n isDismissed: true\n };\n }\n return Object.assign({\n isConfirmed: false,\n isDenied: false,\n isDismissed: false\n }, resolveValue);\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {HTMLElement} popup\n * @param {SweetAlertOptions} innerParams\n */\n const handlePopupAnimation = (instance, popup, innerParams) => {\n var _globalState$eventEmi;\n const container = getContainer();\n // If animation is supported, animate\n const animationIsSupported = hasCssAnimation(popup);\n if (typeof innerParams.willClose === 'function') {\n innerParams.willClose(popup);\n }\n (_globalState$eventEmi = globalState.eventEmitter) === null || _globalState$eventEmi === void 0 || _globalState$eventEmi.emit('willClose', popup);\n if (animationIsSupported && container) {\n animatePopup(instance, popup, container, Boolean(innerParams.returnFocus), innerParams.didClose);\n } else if (container) {\n // Otherwise, remove immediately\n removePopupAndResetState(instance, container, Boolean(innerParams.returnFocus), innerParams.didClose);\n }\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {HTMLElement} popup\n * @param {HTMLElement} container\n * @param {boolean} returnFocus\n * @param {(() => void) | undefined} didClose\n */\n const animatePopup = (instance, popup, container, returnFocus, didClose) => {\n globalState.swalCloseEventFinishedCallback = removePopupAndResetState.bind(null, instance, container, returnFocus, didClose);\n /**\n * @param {AnimationEvent | TransitionEvent} e\n */\n const swalCloseAnimationFinished = function (e) {\n if (e.target === popup) {\n var _globalState$swalClos;\n (_globalState$swalClos = globalState.swalCloseEventFinishedCallback) === null || _globalState$swalClos === void 0 || _globalState$swalClos.call(globalState);\n delete globalState.swalCloseEventFinishedCallback;\n popup.removeEventListener('animationend', swalCloseAnimationFinished);\n popup.removeEventListener('transitionend', swalCloseAnimationFinished);\n }\n };\n popup.addEventListener('animationend', swalCloseAnimationFinished);\n popup.addEventListener('transitionend', swalCloseAnimationFinished);\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {(() => void) | undefined} didClose\n */\n const triggerDidCloseAndDispose = (instance, didClose) => {\n setTimeout(() => {\n var _globalState$eventEmi2;\n if (typeof didClose === 'function') {\n didClose.bind(instance.params)();\n }\n (_globalState$eventEmi2 = globalState.eventEmitter) === null || _globalState$eventEmi2 === void 0 || _globalState$eventEmi2.emit('didClose');\n // instance might have been destroyed already\n if (instance._destroy) {\n instance._destroy();\n }\n });\n };\n\n /**\n * Shows loader (spinner), this is useful with AJAX requests.\n * By default the loader be shown instead of the \"Confirm\" button.\n *\n * @param {HTMLButtonElement | null} [buttonToReplace]\n */\n const showLoading = buttonToReplace => {\n let popup = getPopup();\n if (!popup) {\n new Swal();\n }\n popup = getPopup();\n if (!popup) {\n return;\n }\n const loader = getLoader();\n if (isToast()) {\n hide(getIcon());\n } else {\n replaceButton(popup, buttonToReplace);\n }\n show(loader);\n popup.setAttribute('data-loading', 'true');\n popup.setAttribute('aria-busy', 'true');\n popup.focus();\n };\n\n /**\n * @param {HTMLElement} popup\n * @param {HTMLButtonElement | null} [buttonToReplace]\n */\n const replaceButton = (popup, buttonToReplace) => {\n const actions = getActions();\n const loader = getLoader();\n if (!actions || !loader) {\n return;\n }\n if (!buttonToReplace && isVisible$1(getConfirmButton())) {\n buttonToReplace = getConfirmButton();\n }\n show(actions);\n if (buttonToReplace) {\n hide(buttonToReplace);\n loader.setAttribute('data-button-to-replace', buttonToReplace.className);\n actions.insertBefore(loader, buttonToReplace);\n }\n addClass([popup, actions], swalClasses.loading);\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const handleInputOptionsAndValue = (instance, params) => {\n if (params.input === 'select' || params.input === 'radio') {\n handleInputOptions(instance, params);\n } else if (['text', 'email', 'number', 'tel', 'textarea'].some(i => i === params.input) && (hasToPromiseFn(params.inputValue) || isPromise(params.inputValue))) {\n showLoading(getConfirmButton());\n handleInputValue(instance, params);\n }\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} innerParams\n * @returns {SweetAlertInputValue}\n */\n const getInputValue = (instance, innerParams) => {\n const input = instance.getInput();\n if (!input) {\n return null;\n }\n switch (innerParams.input) {\n case 'checkbox':\n return getCheckboxValue(input);\n case 'radio':\n return getRadioValue(input);\n case 'file':\n return getFileValue(input);\n default:\n return innerParams.inputAutoTrim ? input.value.trim() : input.value;\n }\n };\n\n /**\n * @param {HTMLInputElement} input\n * @returns {number}\n */\n const getCheckboxValue = input => input.checked ? 1 : 0;\n\n /**\n * @param {HTMLInputElement} input\n * @returns {string | null}\n */\n const getRadioValue = input => input.checked ? input.value : null;\n\n /**\n * @param {HTMLInputElement} input\n * @returns {FileList | File | null}\n */\n const getFileValue = input => input.files && input.files.length ? input.getAttribute('multiple') !== null ? input.files : input.files[0] : null;\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const handleInputOptions = (instance, params) => {\n const popup = getPopup();\n if (!popup) {\n return;\n }\n /**\n * @param {*} inputOptions\n */\n const processInputOptions = inputOptions => {\n if (params.input === 'select') {\n populateSelectOptions(popup, formatInputOptions(inputOptions), params);\n } else if (params.input === 'radio') {\n populateRadioOptions(popup, formatInputOptions(inputOptions), params);\n }\n };\n if (hasToPromiseFn(params.inputOptions) || isPromise(params.inputOptions)) {\n showLoading(getConfirmButton());\n asPromise(params.inputOptions).then(inputOptions => {\n instance.hideLoading();\n processInputOptions(inputOptions);\n });\n } else if (typeof params.inputOptions === 'object') {\n processInputOptions(params.inputOptions);\n } else {\n error(`Unexpected type of inputOptions! Expected object, Map or Promise, got ${typeof params.inputOptions}`);\n }\n };\n\n /**\n * @param {SweetAlert} instance\n * @param {SweetAlertOptions} params\n */\n const handleInputValue = (instance, params) => {\n const input = instance.getInput();\n if (!input) {\n return;\n }\n hide(input);\n asPromise(params.inputValue).then(inputValue => {\n input.value = params.input === 'number' ? `${parseFloat(inputValue) || 0}` : `${inputValue}`;\n show(input);\n input.focus();\n instance.hideLoading();\n }).catch(err => {\n error(`Error in inputValue promise: ${err}`);\n input.value = '';\n show(input);\n input.focus();\n instance.hideLoading();\n });\n };\n\n /**\n * @param {HTMLElement} popup\n * @param {InputOptionFlattened[]} inputOptions\n * @param {SweetAlertOptions} params\n */\n function populateSelectOptions(popup, inputOptions, params) {\n const select = getDirectChildByClass(popup, swalClasses.select);\n if (!select) {\n return;\n }\n /**\n * @param {HTMLElement} parent\n * @param {string} optionLabel\n * @param {string} optionValue\n */\n const renderOption = (parent, optionLabel, optionValue) => {\n const option = document.createElement('option');\n option.value = optionValue;\n setInnerHtml(option, optionLabel);\n option.selected = isSelected(optionValue, params.inputValue);\n parent.appendChild(option);\n };\n inputOptions.forEach(inputOption => {\n const optionValue = inputOption[0];\n const optionLabel = inputOption[1];\n //