diff --git a/.github/workflows/ci_ephemeral_authorization_handler.yml b/.github/workflows/ci_ephemeral_authorization_handler.yml
index 316c8d6..54f075f 100644
--- a/.github/workflows/ci_ephemeral_authorization_handler.yml
+++ b/.github/workflows/ci_ephemeral_authorization_handler.yml
@@ -60,6 +60,10 @@ jobs:
npm-
- run: bundle exec rake test_app
name: Create test app
+ - run: |
+ rm -f ./spec/decidim_dummy_app/app/services/dummy_signature_handler.rb
+ rm -f ./spec/decidim_dummy_app/app/services/dummy_sms_mobile_phone_validator.rb
+ name: Remove Initiative-dependent dummy files
- run: mkdir -p ./spec/decidim_dummy_app/tmp/screenshots
name: Create the screenshots folder
- uses: nanasess/setup-chromedriver@v2
diff --git a/Gemfile b/Gemfile
index babeaed..0a603c4 100644
--- a/Gemfile
+++ b/Gemfile
@@ -7,8 +7,8 @@ ruby RUBY_VERSION
gem "decidim", "~> 0.31.2"
gem "decidim-ephemeral_authorization_handler", path: "."
-gem "puma", ">= 6.3.1"
gem "bootsnap", "~> 1.4"
+gem "puma", ">= 6.3.1"
group :development, :test do
gem "byebug", "~> 11.0", platform: :mri
diff --git a/Gemfile.lock b/Gemfile.lock
index d8c952c..f75f1cc 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -2,6 +2,7 @@ PATH
remote: .
specs:
decidim-ephemeral_authorization_handler (1.0.0)
+ countries (~> 5.1, >= 5.1.2)
decidim-core (~> 0.31)
GEM
@@ -140,6 +141,8 @@ GEM
commonmarker (0.23.12)
concurrent-ruby (1.3.6)
connection_pool (2.5.5)
+ countries (5.7.2)
+ unaccent (~> 0.3)
crack (1.0.1)
bigdecimal
rexml
@@ -506,6 +509,7 @@ GEM
rails (>= 3.2.0)
io-console (0.8.2)
irb (1.17.0)
+ nokogiri (~> 1.11)
pp (>= 0.6.0)
prism (>= 1.3.0)
rdoc (>= 4.0.0)
@@ -906,6 +910,7 @@ GEM
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
uber (0.1.0)
+ unaccent (0.4.0)
unicode-display_width (3.2.0)
unicode-emoji (~> 4.1)
unicode-emoji (4.2.0)
diff --git a/app/commands/decidim/ephemeral_authorization_handler/verification/base_verification.rb b/app/commands/decidim/ephemeral_authorization_handler/verification/base_verification.rb
new file mode 100644
index 0000000..77a7da2
--- /dev/null
+++ b/app/commands/decidim/ephemeral_authorization_handler/verification/base_verification.rb
@@ -0,0 +1,38 @@
+# frozen_string_literal: true
+
+module Decidim
+ module EphemeralAuthorizationHandler
+ module Verification
+ class BaseVerification < Decidim::Command
+ def initialize(user)
+ @user = user
+ end
+
+ protected
+
+ def verification_code
+ @verification_code ||= generate_code
+ end
+
+ def generate_code
+ code = SecureRandom.random_number(10**auth_code_length).to_s
+ add_zeros(code)
+ end
+
+ def auth_code_length
+ ::Decidim::EphemeralAuthorizationHandler.auth_code_length
+ end
+
+ def add_zeros(code)
+ return code if code.length == auth_code_length
+
+ ("0" * (auth_code_length - code.length)) + code
+ end
+
+ def expires_at
+ @expires_at ||= Time.zone.now + Decidim::EphemeralAuthorizationHandler.code_ttl
+ end
+ end
+ end
+ end
+end
diff --git a/app/commands/decidim/ephemeral_authorization_handler/verification/send_sms_verification.rb b/app/commands/decidim/ephemeral_authorization_handler/verification/send_sms_verification.rb
new file mode 100644
index 0000000..0c5baad
--- /dev/null
+++ b/app/commands/decidim/ephemeral_authorization_handler/verification/send_sms_verification.rb
@@ -0,0 +1,59 @@
+# frozen_string_literal: true
+
+module Decidim
+ module EphemeralAuthorizationHandler
+ module Verification
+ class SendSmsVerification < BaseVerification
+ def initialize(form, user)
+ @form = form
+ @user = user
+ end
+
+ def call
+ result = send_sms_verification!
+
+ if result
+ broadcast(:ok, verification_code, expires_at, phone_number)
+ else
+ broadcast(:invalid)
+ end
+ end
+
+ private
+
+ attr_reader :form, :user
+
+ delegate :current_organization, to: :form
+
+ def send_sms_verification!
+ gateway.deliver_code
+
+ gateway.code
+ rescue StandardError => e
+ Rails.logger.error e.message
+
+ false
+ end
+
+ def gateway
+ @gateway ||=
+ if Decidim.config.sms_gateway_service == "Decidim::Sms::Twilio::Gateway"
+ Decidim.config.sms_gateway_service.constantize.new(phone_number, verification_code, organization: current_organization)
+ elsif Decidim.config.sms_gateway_service.nil?
+ Decidim::Verifications::Sms::ExampleGateway.new(phone_number, verification_code)
+ else
+ Decidim.config.sms_gateway_service.constantize.new(phone_number, verification_code)
+ end
+ end
+
+ def phone_with_country_code(country_code, phone_number)
+ PhoneNumberFormatter.new(phone_number:, iso_country_code: country_code).format
+ end
+
+ def phone_number
+ @phone_number ||= phone_with_country_code(form.phone_country, form.phone_number)
+ end
+ end
+ end
+ end
+end
diff --git a/app/controllers/concerns/decidim/ephemeral_authorization_handler/verification/ephemeral_authorization_handler_concern.rb b/app/controllers/concerns/decidim/ephemeral_authorization_handler/verification/ephemeral_authorization_handler_concern.rb
new file mode 100644
index 0000000..29472ca
--- /dev/null
+++ b/app/controllers/concerns/decidim/ephemeral_authorization_handler/verification/ephemeral_authorization_handler_concern.rb
@@ -0,0 +1,23 @@
+# frozen_string_literal: true
+
+module Decidim
+ module EphemeralAuthorizationHandler
+ module Verification
+ module EphemeralAuthorizationHandlerConcern
+ extend ActiveSupport::Concern
+
+ included do
+ layout "decidim/application"
+
+ def init_sessions!(options = {})
+ session[:auth_attempt] = options
+ end
+
+ def auth_session
+ (session[:auth_attempt].presence || {}).with_indifferent_access
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/app/controllers/decidim/ephemeral_authorization_handler/verification/authorizations_controller.rb b/app/controllers/decidim/ephemeral_authorization_handler/verification/authorizations_controller.rb
new file mode 100644
index 0000000..63e0167
--- /dev/null
+++ b/app/controllers/decidim/ephemeral_authorization_handler/verification/authorizations_controller.rb
@@ -0,0 +1,158 @@
+# frozen_string_literal: true
+
+module Decidim
+ module EphemeralAuthorizationHandler
+ module Verification
+ class AuthorizationsController < ::Decidim::ApplicationController
+ include FormFactory
+ include EphemeralAuthorizationHandlerConcern
+ include Decidim::Verifications::Renewable
+
+ helper Decidim::EphemeralAuthorizationHandler::Verification::ApplicationHelper
+
+ def new
+ return redirect_to decidim_ephemeral_authorization_handler.sms_authorization_path if user_signed_in?
+
+ action = current_user.extended_data.dig("onboarding", "action")
+ if requested_component.permissions[action]["authorization_handlers"].keys.include?("ephemeral_authorization_handler")
+ redirect_to decidim_ephemeral_authorization_handler.sms_authorization_path
+ else
+ redirect_to decidim_verifications.onboarding_pending_authorizations_path
+ end
+ end
+
+ def renew
+ redirect_to decidim_ephemeral_authorization_handler.sms_authorization_path
+ end
+
+ def sms
+ @form = form(Decidim::EphemeralAuthorizationHandler::Verification::SmsCodeForm).instance
+ end
+
+ def verify_sms_code
+ @form = form(::Decidim::EphemeralAuthorizationHandler::Verification::VerificationCodeForm).instance
+ end
+
+ def verify
+ form = form(Decidim::EphemeralAuthorizationHandler::Verification::SmsCodeForm).from_params(params)
+
+ SendSmsVerification.call(form, current_user) do
+ on(:ok) do |result, expires_at, formatted_phone_number|
+ init_sessions!({ code: result, expires_at: expires_at, formatted_phone_number:, phone_number: params["sms_code"]["phone_number"],
+ phone_country: params["sms_code"]["phone_country"], strategy: :sms })
+ flash[:notice] = I18n.t("success", scope: "decidim.ephemeral_authorization_handler.sms", phone_number: phone_number)
+ redirect_to decidim_ephemeral_authorization_handler.verify_sms_code_authorization_path
+ end
+
+ on(:invalid) do |_error_code|
+ flash.now[:alert] = I18n.t("error", scope: "decidim.ephemeral_authorization_handler.sms")
+ redirect_to decidim_ephemeral_authorization_handler.root_path
+ end
+ end
+ end
+
+ def edit; end
+
+ def verify_submitted_code
+ return redirect_to decidim_ephemeral_authorization_handler.new_authorization_path if auth_session.blank?
+
+ if auth_session[:code] == params[:verification_code][:verification]
+ # if there is a duplicated authorization associated
+ # to an ephemeral user and the current user is also ephemeral
+ # the session is transferred to the user with the existing authorization
+ if transferable_user?
+ handler.user = authorization.user
+ Authorization.create_or_update_from(handler)
+ handler.user.update(last_sign_in_at: Time.current, deleted_at: nil)
+ sign_out(current_user)
+ sign_in(handler.user)
+ redirect_to handler.user.extended_data.dig("onboarding", "redirect_path")
+ elsif transferable_handler?
+ # if there is an existing authorization that can be transferred
+ handler.user = current_user
+ transfer = proceed_transfer(authorization, handler)
+ handle_transfer(transfer)
+ else
+ # create Authorization
+ new_authorization = Decidim::Authorization.find_or_initialize_by(
+ user: current_user,
+ name: "ephemeral_authorization_handler"
+ )
+ new_authorization.attributes = {
+ granted_at: Time.current,
+ unique_id: auth_session[:formatted_phone_number],
+ metadata: { phone_number: auth_session[:formatted_phone_number] },
+ verification_metadata: {},
+ verification_attachment: nil
+ }
+ new_authorization.save!
+ init_sessions!
+ flash[:notice] = I18n.t("success", scope: "decidim.ephemeral_authorization_handler.verification.authorizations.verify_sms_code")
+ # redirect for ephemeral user or signed_in user
+ redirect_to current_user.extended_data.dig("onboarding", "redirect_path") || decidim_verifications.authorizations_path
+ end
+ else
+ # invalid code
+ flash[:alert] = I18n.t("error", scope: "decidim.ephemeral_authorization_handler.verification.authorizations.verify_sms_code")
+ redirect_to decidim_ephemeral_authorization_handler.verify_sms_code_authorization_path
+ end
+ end
+
+ def transferable_user?
+ authorization.present? && [authorization.user, current_user].all?(&:ephemeral?)
+ end
+
+ def transferable_handler?
+ authorization.present? && (authorization.user.deleted? || authorization.user.ephemeral?)
+ end
+
+ def proceed_transfer(authorization, handler)
+ authorization.transfer!(handler)
+ rescue Decidim::AuthorizationTransfer::DisabledError
+ Decidim::Verifications::AuthorizeUser.register_conflict
+ redirect_to decidim_ephemeral_authorization_handler.verify_sms_code_authorization_path
+ end
+
+ def handle_transfer(transfer)
+ if transfer
+ message = t("authorizations.create.success", scope: "decidim.verifications")
+ if transfer.records.any?
+ flash[:html_safe] = true
+ message = <<~HTML
+
#{CGI.escapeHTML(message)}
+ #{CGI.escapeHTML(t("authorizations.create.transferred", scope: "decidim.verifications"))}
+ #{transfer.presenter.records_list_html}
+ HTML
+ end
+
+ flash[:notice] = message
+ redirect_to transfer.user.extended_data["onboarding"]["redirect_path"]
+ else
+ flash[:alert] = I18n.t("error", scope: "decidim.ephemeral_authorization_handler.verification.authorizations.verify_sms_code")
+ redirect_to decidim_ephemeral_authorization_handler.verify_sms_code_authorization_path
+ end
+ end
+
+ def authorization
+ Decidim::Authorization.find_by(
+ user: Decidim::User.where.not(id: current_user.id).where(organization: current_user.organization),
+ name: "ephemeral_authorization_handler",
+ unique_id: auth_session[:formatted_phone_number]
+ )
+ end
+
+ private
+
+ def handler
+ @handler ||= ::EphemeralAuthorizationHandler.new(phone_number: auth_session[:phone_number], phone_country: auth_session[:phone_country])
+ end
+
+ def requested_component
+ path = current_user.extended_data.dig("onboarding", "redirect_path")
+ id = URI.parse(path).path.match(%r{/f/(\d+)/})&.captures&.first
+ Decidim::Component.find(id)
+ end
+ end
+ end
+ end
+end
diff --git a/app/forms/decidim/ephemeral_authorization_handler/verification/sms_code_form.rb b/app/forms/decidim/ephemeral_authorization_handler/verification/sms_code_form.rb
new file mode 100644
index 0000000..bbe3c2b
--- /dev/null
+++ b/app/forms/decidim/ephemeral_authorization_handler/verification/sms_code_form.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+module Decidim
+ module EphemeralAuthorizationHandler
+ module Verification
+ class SmsCodeForm < Form
+ attribute :phone_number, Integer
+ attribute :phone_country, String
+
+ validates :phone_country, presence: true
+ validates :phone_number, numericality: { greater_than: 0 }, presence: true
+ end
+ end
+ end
+end
diff --git a/app/forms/decidim/ephemeral_authorization_handler/verification/verification_code_form.rb b/app/forms/decidim/ephemeral_authorization_handler/verification/verification_code_form.rb
new file mode 100644
index 0000000..107ece5
--- /dev/null
+++ b/app/forms/decidim/ephemeral_authorization_handler/verification/verification_code_form.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+module Decidim
+ module EphemeralAuthorizationHandler
+ module Verification
+ class VerificationCodeForm < Form
+ attribute :verification, String
+ attribute :current_locale, String
+ attribute :organization, Decidim::Organization
+
+ validates :verification, presence: true
+ end
+ end
+ end
+end
diff --git a/app/helpers/decidim/ephemeral_authorization_handler/application_helper.rb b/app/helpers/decidim/ephemeral_authorization_handler/application_helper.rb
deleted file mode 100644
index e339557..0000000
--- a/app/helpers/decidim/ephemeral_authorization_handler/application_helper.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-# frozen_string_literal: true
-
-module Decidim
- module EphemeralAuthorizationHandler
- # Custom helpers, scoped to the ephemeral_authorization_handler engine.
- #
- module ApplicationHelper
- end
- end
-end
diff --git a/app/helpers/decidim/ephemeral_authorization_handler/verification/application_helper.rb b/app/helpers/decidim/ephemeral_authorization_handler/verification/application_helper.rb
new file mode 100644
index 0000000..49697ae
--- /dev/null
+++ b/app/helpers/decidim/ephemeral_authorization_handler/verification/application_helper.rb
@@ -0,0 +1,42 @@
+# frozen_string_literal: true
+
+module Decidim
+ module EphemeralAuthorizationHandler
+ module Verification
+ # Custom helpers, scoped to the ephemeral_authorization_handler engine.
+ #
+ module ApplicationHelper
+ def phone_country_options(selected = nil)
+ options_for_select(sorted_countries, selected)
+ end
+
+ def sorted_countries
+ unsorted = ISO3166::Country.all.map do |c|
+ next if Decidim::EphemeralAuthorizationHandler.default_countries&.include?(c.alpha2)
+
+ generate_data(c)
+ end
+ unshift_defaults(unsorted)
+ end
+
+ private
+
+ def generate_data(country)
+ [
+ "#{country.iso_short_name} (+#{country.country_code})",
+ country.alpha2,
+ { data: { flag_image: image_pack_path("media/images/#{country.alpha2.downcase}.svg") } }
+ ]
+ end
+
+ def unshift_defaults(unsorted)
+ Decidim::EphemeralAuthorizationHandler.default_countries&.reverse&.each do |alph2|
+ country = ISO3166::Country.find_country_by_alpha2(alph2)
+ unsorted.unshift(generate_data(country))
+ end
+ unsorted
+ end
+ end
+ end
+ end
+end
diff --git a/app/packs/entrypoints/decidim_ephemeral_authorization_handler.js b/app/packs/entrypoints/decidim_ephemeral_authorization_handler.js
index a516e90..bf39514 100644
--- a/app/packs/entrypoints/decidim_ephemeral_authorization_handler.js
+++ b/app/packs/entrypoints/decidim_ephemeral_authorization_handler.js
@@ -1,2 +1,4 @@
// Images
require.context("../images", true)
+
+import "src/decidim/ephemeral_authorization_handler/verification"
diff --git a/app/packs/entrypoints/decidim_select_country.js b/app/packs/entrypoints/decidim_select_country.js
new file mode 100644
index 0000000..90e22f7
--- /dev/null
+++ b/app/packs/entrypoints/decidim_select_country.js
@@ -0,0 +1,22 @@
+import SlimSelect from "vendor/slim-select/slimselect"
+
+document.addEventListener("DOMContentLoaded", () => {
+ document.querySelectorAll(".country-select").forEach((select) => {
+ const data = [];
+ select.querySelectorAll("option").forEach((opt) => {
+ if (opt.value.length < 1) {
+ return;
+ }
+
+ data.push({
+ text: opt.textContent,
+ value: opt.value,
+ selected: opt.selected,
+ innerHTML: ` ${opt.textContent}`
+ });
+ });
+
+ /* eslint-disable no-new */
+ new SlimSelect({select, data});
+ });
+});
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ac.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ac.svg
new file mode 100644
index 0000000..1a6d508
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ac.svg
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ad.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ad.svg
new file mode 100644
index 0000000..726f981
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ad.svg
@@ -0,0 +1,150 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ae.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ae.svg
new file mode 100644
index 0000000..b7acdbd
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ae.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/af.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/af.svg
new file mode 100644
index 0000000..6e75539
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/af.svg
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ag.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ag.svg
new file mode 100644
index 0000000..3bce748
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ag.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ai.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ai.svg
new file mode 100644
index 0000000..cf91b39
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ai.svg
@@ -0,0 +1,758 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/al.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/al.svg
new file mode 100644
index 0000000..4e7098f
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/al.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/am.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/am.svg
new file mode 100644
index 0000000..99fa4dc
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/am.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ao.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ao.svg
new file mode 100644
index 0000000..4dc39f6
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ao.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/aq.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/aq.svg
new file mode 100644
index 0000000..53840cc
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/aq.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ar.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ar.svg
new file mode 100644
index 0000000..d1810f2
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ar.svg
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/as.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/as.svg
new file mode 100644
index 0000000..88e2ca5
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/as.svg
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/at.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/at.svg
new file mode 100644
index 0000000..c282508
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/at.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/au.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/au.svg
new file mode 100644
index 0000000..407fef4
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/au.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/aw.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/aw.svg
new file mode 100644
index 0000000..e840233
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/aw.svg
@@ -0,0 +1,186 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ax.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ax.svg
new file mode 100644
index 0000000..9f04648
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ax.svg
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/az.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/az.svg
new file mode 100644
index 0000000..8e56ef5
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/az.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ba.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ba.svg
new file mode 100644
index 0000000..7c30421
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ba.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/bb.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bb.svg
new file mode 100644
index 0000000..420a688
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bb.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/bd.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bd.svg
new file mode 100644
index 0000000..16b794d
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bd.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/be.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/be.svg
new file mode 100644
index 0000000..327f28f
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/be.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/bf.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bf.svg
new file mode 100644
index 0000000..4713822
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bf.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/bg.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bg.svg
new file mode 100644
index 0000000..b100dd0
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bg.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/bh.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bh.svg
new file mode 100644
index 0000000..7a2ea54
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bh.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/bi.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bi.svg
new file mode 100644
index 0000000..a37bc67
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bi.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/bj.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bj.svg
new file mode 100644
index 0000000..871c57e
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bj.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/bl.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bl.svg
new file mode 100644
index 0000000..15803ff
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bl.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/bm.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bm.svg
new file mode 100644
index 0000000..330d5ec
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bm.svg
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/bn.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bn.svg
new file mode 100644
index 0000000..19f15fa
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bn.svg
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/bo.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bo.svg
new file mode 100644
index 0000000..391e226
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bo.svg
@@ -0,0 +1,676 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/bq.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bq.svg
new file mode 100644
index 0000000..0e6bc76
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bq.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/br.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/br.svg
new file mode 100644
index 0000000..354a701
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/br.svg
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/bs.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bs.svg
new file mode 100644
index 0000000..b26d476
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bs.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/bt.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bt.svg
new file mode 100644
index 0000000..cea6006
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bt.svg
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/bv.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bv.svg
new file mode 100644
index 0000000..86431fc
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bv.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/bw.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bw.svg
new file mode 100644
index 0000000..a1c8db0
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bw.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/by.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/by.svg
new file mode 100644
index 0000000..20ae52b
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/by.svg
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/bz.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bz.svg
new file mode 100644
index 0000000..fbc6d7c
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/bz.svg
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ca.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ca.svg
new file mode 100644
index 0000000..f1b2c96
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ca.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/cc.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cc.svg
new file mode 100644
index 0000000..c4457de
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cc.svg
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/cd.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cd.svg
new file mode 100644
index 0000000..e106ddd
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cd.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/cefta.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cefta.svg
new file mode 100644
index 0000000..d66e18b
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cefta.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/cf.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cf.svg
new file mode 100644
index 0000000..fd30063
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cf.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/cg.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cg.svg
new file mode 100644
index 0000000..a290234
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cg.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ch.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ch.svg
new file mode 100644
index 0000000..b42d670
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ch.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ci.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ci.svg
new file mode 100644
index 0000000..e400f0c
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ci.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ck.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ck.svg
new file mode 100644
index 0000000..18e547b
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ck.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/cl.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cl.svg
new file mode 100644
index 0000000..50218c8
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cl.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/cm.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cm.svg
new file mode 100644
index 0000000..d06f656
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cm.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/cn.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cn.svg
new file mode 100644
index 0000000..2416236
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cn.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/co.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/co.svg
new file mode 100644
index 0000000..ebd0a0f
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/co.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/cp.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cp.svg
new file mode 100644
index 0000000..b3efb07
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cp.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/cr.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cr.svg
new file mode 100644
index 0000000..5a409ee
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cr.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/cu.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cu.svg
new file mode 100644
index 0000000..31cf99c
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cu.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/cv.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cv.svg
new file mode 100644
index 0000000..381985a
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cv.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/cw.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cw.svg
new file mode 100644
index 0000000..4294b5b
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cw.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/cx.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cx.svg
new file mode 100644
index 0000000..39fa9b0
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cx.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/cy.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cy.svg
new file mode 100644
index 0000000..b72473a
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cy.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/cz.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cz.svg
new file mode 100644
index 0000000..7913de3
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/cz.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/de.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/de.svg
new file mode 100644
index 0000000..b08334b
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/de.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/dg.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/dg.svg
new file mode 100644
index 0000000..8ba6750
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/dg.svg
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/dj.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/dj.svg
new file mode 100644
index 0000000..674d7ef
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/dj.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/dk.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/dk.svg
new file mode 100644
index 0000000..563277f
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/dk.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/dm.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/dm.svg
new file mode 100644
index 0000000..7fa4dd8
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/dm.svg
@@ -0,0 +1,152 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/do.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/do.svg
new file mode 100644
index 0000000..e8114b3
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/do.svg
@@ -0,0 +1,6745 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/dz.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/dz.svg
new file mode 100644
index 0000000..5ff29a7
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/dz.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ea.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ea.svg
new file mode 100644
index 0000000..d55c9b6
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ea.svg
@@ -0,0 +1,544 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ec.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ec.svg
new file mode 100644
index 0000000..65b7885
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ec.svg
@@ -0,0 +1,138 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ee.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ee.svg
new file mode 100644
index 0000000..36ea288
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ee.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/eg.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/eg.svg
new file mode 100644
index 0000000..728538b
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/eg.svg
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/eh.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/eh.svg
new file mode 100644
index 0000000..8743371
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/eh.svg
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/er.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/er.svg
new file mode 100644
index 0000000..2705295
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/er.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/es-ct.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/es-ct.svg
new file mode 100644
index 0000000..4d85911
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/es-ct.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/es-ga.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/es-ga.svg
new file mode 100644
index 0000000..cc52c84
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/es-ga.svg
@@ -0,0 +1,187 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/es.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/es.svg
new file mode 100644
index 0000000..815e0f8
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/es.svg
@@ -0,0 +1,544 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/et.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/et.svg
new file mode 100644
index 0000000..7075040
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/et.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/eu.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/eu.svg
new file mode 100644
index 0000000..1bb04ec
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/eu.svg
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/fi.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/fi.svg
new file mode 100644
index 0000000..470be2d
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/fi.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/fj.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/fj.svg
new file mode 100644
index 0000000..2d7cd98
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/fj.svg
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/fk.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/fk.svg
new file mode 100644
index 0000000..8aeee57
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/fk.svg
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/fm.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/fm.svg
new file mode 100644
index 0000000..baa9668
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/fm.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/fo.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/fo.svg
new file mode 100644
index 0000000..898f669
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/fo.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/fr.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/fr.svg
new file mode 100644
index 0000000..1be6191
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/fr.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ga.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ga.svg
new file mode 100644
index 0000000..76edab4
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ga.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gb-eng.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gb-eng.svg
new file mode 100644
index 0000000..12e3b67
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gb-eng.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gb-nir.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gb-nir.svg
new file mode 100644
index 0000000..e34b224
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gb-nir.svg
@@ -0,0 +1,132 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gb-sct.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gb-sct.svg
new file mode 100644
index 0000000..f50cd32
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gb-sct.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gb-wls.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gb-wls.svg
new file mode 100644
index 0000000..6e15fd0
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gb-wls.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gb.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gb.svg
new file mode 100644
index 0000000..dbac25e
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gb.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gd.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gd.svg
new file mode 100644
index 0000000..dad1107
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gd.svg
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ge.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ge.svg
new file mode 100644
index 0000000..453898b
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ge.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gf.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gf.svg
new file mode 100644
index 0000000..f8752d9
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gf.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gg.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gg.svg
new file mode 100644
index 0000000..e40a838
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gg.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gh.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gh.svg
new file mode 100644
index 0000000..a6497de
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gh.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gi.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gi.svg
new file mode 100644
index 0000000..64a69e8
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gi.svg
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gl.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gl.svg
new file mode 100644
index 0000000..eb5a52e
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gl.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gm.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gm.svg
new file mode 100644
index 0000000..2fbcb19
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gm.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gn.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gn.svg
new file mode 100644
index 0000000..40d6ad4
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gn.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gp.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gp.svg
new file mode 100644
index 0000000..1b38158
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gp.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gq.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gq.svg
new file mode 100644
index 0000000..ba2acf2
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gq.svg
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gr.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gr.svg
new file mode 100644
index 0000000..599741e
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gr.svg
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gs.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gs.svg
new file mode 100644
index 0000000..7e0692c
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gs.svg
@@ -0,0 +1,133 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gt.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gt.svg
new file mode 100644
index 0000000..be45324
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gt.svg
@@ -0,0 +1,220 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gu.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gu.svg
new file mode 100644
index 0000000..a5584ff
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gu.svg
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+ G
+ U
+ A
+ M
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gw.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gw.svg
new file mode 100644
index 0000000..9e0aeeb
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gw.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/gy.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gy.svg
new file mode 100644
index 0000000..f4d9b8a
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/gy.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/hk.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/hk.svg
new file mode 100644
index 0000000..e32924f
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/hk.svg
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/hm.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/hm.svg
new file mode 100644
index 0000000..c0748d3
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/hm.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/hn.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/hn.svg
new file mode 100644
index 0000000..6f92950
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/hn.svg
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/hr.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/hr.svg
new file mode 100644
index 0000000..70115ae
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/hr.svg
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ht.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ht.svg
new file mode 100644
index 0000000..9cddb29
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ht.svg
@@ -0,0 +1,116 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/hu.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/hu.svg
new file mode 100644
index 0000000..baddf7f
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/hu.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ic.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ic.svg
new file mode 100644
index 0000000..81e6ee2
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ic.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/id.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/id.svg
new file mode 100644
index 0000000..3b7c8fc
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/id.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ie.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ie.svg
new file mode 100644
index 0000000..049be14
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ie.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/il.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/il.svg
new file mode 100644
index 0000000..d9d8213
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/il.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/im.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/im.svg
new file mode 100644
index 0000000..ce1243c
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/im.svg
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/in.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/in.svg
new file mode 100644
index 0000000..53c29b3
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/in.svg
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/io.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/io.svg
new file mode 100644
index 0000000..c0ed2af
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/io.svg
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/iq.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/iq.svg
new file mode 100644
index 0000000..6891785
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/iq.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ir.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ir.svg
new file mode 100644
index 0000000..c937a36
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ir.svg
@@ -0,0 +1,219 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/is.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/is.svg
new file mode 100644
index 0000000..b0828a4
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/is.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/it.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/it.svg
new file mode 100644
index 0000000..20a8bfd
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/it.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/je.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/je.svg
new file mode 100644
index 0000000..b65965c
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/je.svg
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/jm.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/jm.svg
new file mode 100644
index 0000000..e03a342
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/jm.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/jo.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/jo.svg
new file mode 100644
index 0000000..df0ce75
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/jo.svg
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/jp.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/jp.svg
new file mode 100644
index 0000000..90af6c4
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/jp.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ke.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ke.svg
new file mode 100644
index 0000000..ad190f5
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ke.svg
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/kg.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/kg.svg
new file mode 100644
index 0000000..1d237fe
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/kg.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/kh.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/kh.svg
new file mode 100644
index 0000000..984e84e
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/kh.svg
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ki.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ki.svg
new file mode 100644
index 0000000..c469370
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ki.svg
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/km.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/km.svg
new file mode 100644
index 0000000..fda3a53
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/km.svg
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/kn.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/kn.svg
new file mode 100644
index 0000000..f96b06c
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/kn.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/kp.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/kp.svg
new file mode 100644
index 0000000..b405e45
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/kp.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/kr.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/kr.svg
new file mode 100644
index 0000000..39fa999
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/kr.svg
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/kw.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/kw.svg
new file mode 100644
index 0000000..d55aa19
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/kw.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ky.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ky.svg
new file mode 100644
index 0000000..103af5b
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ky.svg
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/kz.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/kz.svg
new file mode 100644
index 0000000..64776c3
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/kz.svg
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/la.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/la.svg
new file mode 100644
index 0000000..cd7ea9d
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/la.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/lb.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/lb.svg
new file mode 100644
index 0000000..f8b8b6d
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/lb.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/lc.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/lc.svg
new file mode 100644
index 0000000..46bbc6c
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/lc.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/li.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/li.svg
new file mode 100644
index 0000000..d557d31
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/li.svg
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/lk.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/lk.svg
new file mode 100644
index 0000000..416c0f0
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/lk.svg
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/lr.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/lr.svg
new file mode 100644
index 0000000..0025221
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/lr.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ls.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ls.svg
new file mode 100644
index 0000000..e701650
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ls.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/lt.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/lt.svg
new file mode 100644
index 0000000..90ec5d2
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/lt.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/lu.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/lu.svg
new file mode 100644
index 0000000..c31d2bf
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/lu.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/lv.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/lv.svg
new file mode 100644
index 0000000..6a9e75e
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/lv.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ly.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ly.svg
new file mode 100644
index 0000000..7324a87
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ly.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ma.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ma.svg
new file mode 100644
index 0000000..7ce56ef
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ma.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/mc.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mc.svg
new file mode 100644
index 0000000..9cb6c9e
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mc.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/md.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/md.svg
new file mode 100644
index 0000000..a806572
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/md.svg
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/me.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/me.svg
new file mode 100644
index 0000000..b56cce0
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/me.svg
@@ -0,0 +1,116 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/mf.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mf.svg
new file mode 100644
index 0000000..0e5ae11
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mf.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/mg.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mg.svg
new file mode 100644
index 0000000..5fa2d24
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mg.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/mh.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mh.svg
new file mode 100644
index 0000000..46351e5
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mh.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/mk.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mk.svg
new file mode 100644
index 0000000..4f5cae7
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mk.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ml.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ml.svg
new file mode 100644
index 0000000..6f6b716
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ml.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/mm.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mm.svg
new file mode 100644
index 0000000..3527782
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mm.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/mn.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mn.svg
new file mode 100644
index 0000000..56cb072
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mn.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/mo.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mo.svg
new file mode 100644
index 0000000..6b70cc7
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mo.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/mp.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mp.svg
new file mode 100644
index 0000000..d94f688
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mp.svg
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/mq.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mq.svg
new file mode 100644
index 0000000..750b396
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mq.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/mr.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mr.svg
new file mode 100644
index 0000000..e9cc291
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mr.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ms.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ms.svg
new file mode 100644
index 0000000..a1e52d9
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ms.svg
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/mt.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mt.svg
new file mode 100644
index 0000000..676e801
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mt.svg
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/mu.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mu.svg
new file mode 100644
index 0000000..82d7a3b
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mu.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/mv.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mv.svg
new file mode 100644
index 0000000..10450f9
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mv.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/mw.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mw.svg
new file mode 100644
index 0000000..113aae5
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mw.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/mx.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mx.svg
new file mode 100644
index 0000000..4219195
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mx.svg
@@ -0,0 +1,382 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/my.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/my.svg
new file mode 100644
index 0000000..773a432
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/my.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/mz.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mz.svg
new file mode 100644
index 0000000..dab81a6
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/mz.svg
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/na.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/na.svg
new file mode 100644
index 0000000..3b9202b
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/na.svg
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/nc.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/nc.svg
new file mode 100644
index 0000000..9679540
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/nc.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ne.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ne.svg
new file mode 100644
index 0000000..39a82b8
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ne.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/nf.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/nf.svg
new file mode 100644
index 0000000..ecdb4a3
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/nf.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ng.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ng.svg
new file mode 100644
index 0000000..81eb35f
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ng.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ni.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ni.svg
new file mode 100644
index 0000000..64d2aa0
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ni.svg
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/nl.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/nl.svg
new file mode 100644
index 0000000..4faaf49
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/nl.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/no.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/no.svg
new file mode 100644
index 0000000..a5f2a15
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/no.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/np.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/np.svg
new file mode 100644
index 0000000..a2f9819
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/np.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/nr.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/nr.svg
new file mode 100644
index 0000000..c7db7dd
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/nr.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/nu.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/nu.svg
new file mode 100644
index 0000000..4067baf
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/nu.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/nz.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/nz.svg
new file mode 100644
index 0000000..8ae592a
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/nz.svg
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/om.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/om.svg
new file mode 100644
index 0000000..5be12ed
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/om.svg
@@ -0,0 +1,115 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/pa.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pa.svg
new file mode 100644
index 0000000..658c87e
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pa.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/pe.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pe.svg
new file mode 100644
index 0000000..eeb29a3
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pe.svg
@@ -0,0 +1,244 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/pf.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pf.svg
new file mode 100644
index 0000000..1b35cdb
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pf.svg
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/pg.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pg.svg
new file mode 100644
index 0000000..1080add
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pg.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ph.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ph.svg
new file mode 100644
index 0000000..65489e1
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ph.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/pk.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pk.svg
new file mode 100644
index 0000000..0babde6
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pk.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/pl.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pl.svg
new file mode 100644
index 0000000..0fa5145
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pl.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/pm.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pm.svg
new file mode 100644
index 0000000..42bfcee
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pm.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/pn.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pn.svg
new file mode 100644
index 0000000..972792f
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pn.svg
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/pr.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pr.svg
new file mode 100644
index 0000000..964b421
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pr.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ps.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ps.svg
new file mode 100644
index 0000000..ddd1dc1
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ps.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/pt.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pt.svg
new file mode 100644
index 0000000..afd2e4a
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pt.svg
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/pw.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pw.svg
new file mode 100644
index 0000000..77547c7
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/pw.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/py.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/py.svg
new file mode 100644
index 0000000..bfbf01f
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/py.svg
@@ -0,0 +1,157 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/qa.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/qa.svg
new file mode 100644
index 0000000..bd493c3
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/qa.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/re.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/re.svg
new file mode 100644
index 0000000..6c56aa4
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/re.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ro.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ro.svg
new file mode 100644
index 0000000..fda0f7b
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ro.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/rs.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/rs.svg
new file mode 100644
index 0000000..86ad291
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/rs.svg
@@ -0,0 +1,292 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ru.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ru.svg
new file mode 100644
index 0000000..f4d27ef
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ru.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/rw.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/rw.svg
new file mode 100644
index 0000000..2c6c5d9
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/rw.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/sa.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sa.svg
new file mode 100644
index 0000000..6fcf86b
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sa.svg
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/sb.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sb.svg
new file mode 100644
index 0000000..f450a9c
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sb.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/sc.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sc.svg
new file mode 100644
index 0000000..9a46b36
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sc.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/sd.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sd.svg
new file mode 100644
index 0000000..c00a1a5
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sd.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/se.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/se.svg
new file mode 100644
index 0000000..0e41780
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/se.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/sg.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sg.svg
new file mode 100644
index 0000000..c0d3d08
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sg.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/sh.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sh.svg
new file mode 100644
index 0000000..131b069
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sh.svg
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/si.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/si.svg
new file mode 100644
index 0000000..223fc49
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/si.svg
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/sj.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sj.svg
new file mode 100644
index 0000000..bb2799c
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sj.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/sk.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sk.svg
new file mode 100644
index 0000000..a1953fa
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sk.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/sl.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sl.svg
new file mode 100644
index 0000000..a07baf7
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sl.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/sm.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sm.svg
new file mode 100644
index 0000000..0892990
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sm.svg
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/sn.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sn.svg
new file mode 100644
index 0000000..7c0673d
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sn.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/so.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/so.svg
new file mode 100644
index 0000000..4d4337a
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/so.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/sr.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sr.svg
new file mode 100644
index 0000000..5e71c40
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sr.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ss.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ss.svg
new file mode 100644
index 0000000..73804d8
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ss.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/st.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/st.svg
new file mode 100644
index 0000000..2259f31
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/st.svg
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/sv.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sv.svg
new file mode 100644
index 0000000..752dd3d
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sv.svg
@@ -0,0 +1,594 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/sx.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sx.svg
new file mode 100644
index 0000000..bcc90d6
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sx.svg
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/sy.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sy.svg
new file mode 100644
index 0000000..29636ae
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sy.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/sz.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sz.svg
new file mode 100644
index 0000000..02ef495
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/sz.svg
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ta.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ta.svg
new file mode 100644
index 0000000..b68ad23
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ta.svg
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/tc.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tc.svg
new file mode 100644
index 0000000..dbdb716
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tc.svg
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/td.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/td.svg
new file mode 100644
index 0000000..9fadf85
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/td.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/tf.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tf.svg
new file mode 100644
index 0000000..4572f4e
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tf.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/tg.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tg.svg
new file mode 100644
index 0000000..8d763cb
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tg.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/th.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/th.svg
new file mode 100644
index 0000000..1e93a61
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/th.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/tj.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tj.svg
new file mode 100644
index 0000000..563c97b
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tj.svg
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/tk.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tk.svg
new file mode 100644
index 0000000..65bab13
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tk.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/tl.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tl.svg
new file mode 100644
index 0000000..1f11e92
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tl.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/tm.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tm.svg
new file mode 100644
index 0000000..3c72f09
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tm.svg
@@ -0,0 +1,205 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/tn.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tn.svg
new file mode 100644
index 0000000..7367688
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tn.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/to.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/to.svg
new file mode 100644
index 0000000..d072337
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/to.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/tr.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tr.svg
new file mode 100644
index 0000000..a92804f
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tr.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/tt.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tt.svg
new file mode 100644
index 0000000..14adbe0
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tt.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/tv.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tv.svg
new file mode 100644
index 0000000..675210e
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tv.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/tw.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tw.svg
new file mode 100644
index 0000000..78f3b9d
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tw.svg
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/tz.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tz.svg
new file mode 100644
index 0000000..ca74eec
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/tz.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ua.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ua.svg
new file mode 100644
index 0000000..a339eb1
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ua.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ug.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ug.svg
new file mode 100644
index 0000000..f9c5e1b
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ug.svg
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/um.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/um.svg
new file mode 100644
index 0000000..7b91838
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/um.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/un.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/un.svg
new file mode 100644
index 0000000..b04c3c4
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/un.svg
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/us.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/us.svg
new file mode 100644
index 0000000..73b6245
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/us.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/uy.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/uy.svg
new file mode 100644
index 0000000..1634d71
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/uy.svg
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/uz.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/uz.svg
new file mode 100644
index 0000000..8c6a532
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/uz.svg
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/va.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/va.svg
new file mode 100644
index 0000000..6a03dc4
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/va.svg
@@ -0,0 +1,479 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/vc.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/vc.svg
new file mode 100644
index 0000000..450f6f0
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/vc.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ve.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ve.svg
new file mode 100644
index 0000000..77bb549
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ve.svg
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/vg.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/vg.svg
new file mode 100644
index 0000000..39023a9
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/vg.svg
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/vi.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/vi.svg
new file mode 100644
index 0000000..8a0941f
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/vi.svg
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/vn.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/vn.svg
new file mode 100644
index 0000000..c557e3a
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/vn.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/vu.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/vu.svg
new file mode 100644
index 0000000..32f4377
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/vu.svg
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/wf.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/wf.svg
new file mode 100644
index 0000000..b0cc4c7
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/wf.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ws.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ws.svg
new file mode 100644
index 0000000..0e758a7
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ws.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/xk.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/xk.svg
new file mode 100644
index 0000000..0edc0c7
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/xk.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/xx.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/xx.svg
new file mode 100644
index 0000000..34515ce
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/xx.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/ye.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ye.svg
new file mode 100644
index 0000000..61f0ed6
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/ye.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/yt.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/yt.svg
new file mode 100644
index 0000000..e84f439
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/yt.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/za.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/za.svg
new file mode 100644
index 0000000..0c1f3af
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/za.svg
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/zm.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/zm.svg
new file mode 100644
index 0000000..84c99c2
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/zm.svg
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/images/decidim/ephemeral_authorization_handler/flags/zw.svg b/app/packs/images/decidim/ephemeral_authorization_handler/flags/zw.svg
new file mode 100644
index 0000000..64e8d48
--- /dev/null
+++ b/app/packs/images/decidim/ephemeral_authorization_handler/flags/zw.svg
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/packs/src/decidim/ephemeral_authorization_handler/verification.js b/app/packs/src/decidim/ephemeral_authorization_handler/verification.js
new file mode 100644
index 0000000..9f958b6
--- /dev/null
+++ b/app/packs/src/decidim/ephemeral_authorization_handler/verification.js
@@ -0,0 +1,112 @@
+$(() => {
+ const verificationInputs = document.querySelectorAll("#verification input[type='number']");
+ const verificationForm = document.querySelector("#verification").closest("form");
+ verificationInputs.forEach((input, ind) => {
+ input.setAttribute("maxlength", "1");
+ input.addEventListener("click", () => {
+ input.select();
+ })
+ input.addEventListener("input", () => {
+ const val = input.value
+
+ if (val.trim() === "") {
+ return
+ }
+
+ if (val.length > 1) {
+ let jj = 0;
+ for (let ii = ind; ii < verificationInputs.length; ii += 1) {
+ if (jj > val.length) {
+ return;
+ }
+ if (val.substr(jj, 1)) {
+ verificationInputs[ii].value = val.substr(jj, 1);
+ verificationInputs[ii].focus();
+ jj += 1
+ }
+ }
+ } else {
+ if (!(/\d/).test(val)) {
+ input.value = ""
+ return
+ }
+
+ if (verificationInputs[ind].value.trim() !== "") {
+ verificationInputs[ind].value = val;
+ }
+
+ const nextInput = verificationInputs[ind + 1];
+
+ if (nextInput) {
+ nextInput.focus();
+ nextInput.select();
+ } else {
+ verificationForm.querySelector("button[type='submit']").focus();
+ }
+ }
+ })
+
+ input.addEventListener("paste", (event) => {
+ const clipboardData = event.clipboardData || window.clipboardData;
+ const pastedData = clipboardData.getData("text").trim();
+
+ // find the first empty input field and paste the data there
+ let jj = 0;
+ for (let ii = ind; ii < verificationInputs.length; ii += 1) {
+ if (jj > pastedData.length) {
+ return;
+ }
+ if (pastedData.substr(jj, 1)) {
+ verificationInputs[ii].value = pastedData.substr(jj, 1);
+ verificationInputs[ii].focus();
+ jj += 1
+ }
+ }
+ });
+ });
+ const fieldsvalid = () => {
+ let allFieldsFilled = true;
+ verificationInputs.forEach((input) => {
+ if (input.value.trim() === "") {
+ allFieldsFilled = false;
+ }
+ });
+ return allFieldsFilled
+ };
+
+ const togglevalidity = (item) => {
+ if (item.classList.contains("is-invisible")) {
+ item.classList.remove("is-invisible")
+ item.classList.add("is-visible")
+ } else {
+ item.classList.remove("is-visible")
+ item.classList.add("is-invisible")
+ }
+ }
+
+ const setVerificationField = () => {
+ let combinedValue = "";
+ verificationInputs.forEach((input) => {
+ combinedValue += input.value.trim();
+ });
+ document.querySelector('input[name="verification_code[verification]"]').value = combinedValue
+ };
+
+ const makeFieldsInvalid = () => {
+ verificationInputs.forEach((input) => {
+ input.classList.add("is-invalid-input")
+ })
+ togglevalidity(document.querySelector("#verification-error"))
+ }
+
+ const form = document.querySelector(".new_verification_code");
+ $(form).on("submit", (ev) => {
+ setVerificationField();
+ if (fieldsvalid()) {
+ return;
+ }
+
+ ev.preventDefault();
+ makeFieldsInvalid();
+ });
+})
diff --git a/app/packs/stylesheets/decidim/ephemeral_authorization_handler/ephemeral_authorization_handler.scss b/app/packs/stylesheets/decidim/ephemeral_authorization_handler/ephemeral_authorization_handler.scss
index 6c21537..5741b32 100644
--- a/app/packs/stylesheets/decidim/ephemeral_authorization_handler/ephemeral_authorization_handler.scss
+++ b/app/packs/stylesheets/decidim/ephemeral_authorization_handler/ephemeral_authorization_handler.scss
@@ -1 +1,78 @@
/* css for decidim_ephemeral_authorization_handler */
+
+@import "vendor/slim-select/slimselect";
+
+.ss-main.country-select{
+ .ss-single-selected{
+ padding: 10px;
+ font-size: 16px;
+ line-height: 0.75rem;
+ height: 2.4375rem;
+ border: 1px solid black;
+ box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.05);
+ }
+
+ .ss-single-selected,
+ .ss-option{
+ .country-flag img{
+ position: relative;
+ display: inline-block;
+ width: 1rem;
+ margin: -.1rem .5rem 0 0;
+ }
+ }
+}
+
+form input[type='number']::-webkit-outer-spin-button,
+form input[type='number']::-webkit-inner-spin-button{
+ -webkit-appearance: none;
+ margin: 0;
+}
+
+/* css for decidim_admin_multi_factor */
+.sms-card {
+ margin-bottom: 30px;
+ background: rgb(243 244 247 / var(--tw-bg-opacity, 1));
+ border: 1px solid #e8e8e8;
+ border-radius: 4px;
+ overflow: visible;
+ overflow-wrap: break-word;
+ hyphens: auto;
+ padding: 1.5rem;
+ width: 100%;
+ margin: auto;
+}
+.flex-digits{
+ display: flex;
+ justify-content: space-between;
+ width: 40%;
+ margin: auto;
+
+ .flex-digits-input{
+ display: flex;
+ flex: 0 0 auto;
+
+ input[type=number] {
+ -moz-appearance: textfield;
+ }
+
+ input[type=number]::-webkit-outer-spin-button,
+ input[type=number]::-webkit-inner-spin-button{
+ -webkit-appearance: none;
+ margin: 0;
+ }
+
+ input{
+ margin: 0 auto;
+ height: 2.5rem;
+ width: 3rem;
+ text-align: center;
+
+
+ //@include breakpoint(smallmedium up){
+ // height: 3rem;
+ // width: 3rem;
+ //}
+ }
+ }
+}
diff --git a/app/packs/vendor/slim-select/slimselect.css b/app/packs/vendor/slim-select/slimselect.css
new file mode 100644
index 0000000..f6c6e6d
--- /dev/null
+++ b/app/packs/vendor/slim-select/slimselect.css
@@ -0,0 +1 @@
+.ss-main{position:relative;display:inline-block;user-select:none;color:#666;width:100%}.ss-main .ss-single-selected{display:flex;cursor:pointer;width:100%;height:30px;padding:6px;border:1px solid #dcdee2;border-radius:4px;background-color:#fff;outline:0;box-sizing:border-box;transition:background-color .2s}.ss-main .ss-single-selected.ss-disabled{background-color:#dcdee2;cursor:not-allowed}.ss-main .ss-single-selected.ss-open-above{border-top-left-radius:0px;border-top-right-radius:0px}.ss-main .ss-single-selected.ss-open-below{border-bottom-left-radius:0px;border-bottom-right-radius:0px}.ss-main .ss-single-selected .placeholder{display:flex;flex:1 1 100%;align-items:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left;width:calc(100% - 30px);line-height:1em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ss-main .ss-single-selected .placeholder *{display:flex;align-items:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:auto}.ss-main .ss-single-selected .placeholder .ss-disabled{color:#dedede}.ss-main .ss-single-selected .ss-deselect{display:flex;align-items:center;justify-content:flex-end;flex:0 1 auto;margin:0 6px 0 6px;font-weight:bold}.ss-main .ss-single-selected .ss-deselect.ss-hide{display:none}.ss-main .ss-single-selected .ss-arrow{display:flex;align-items:center;justify-content:flex-end;flex:0 1 auto;margin:0 6px 0 6px}.ss-main .ss-single-selected .ss-arrow span{border:solid #666;border-width:0 2px 2px 0;display:inline-block;padding:3px;transition:transform .2s, margin .2s}.ss-main .ss-single-selected .ss-arrow span.arrow-up{transform:rotate(-135deg);margin:3px 0 0 0}.ss-main .ss-single-selected .ss-arrow span.arrow-down{transform:rotate(45deg);margin:-3px 0 0 0}.ss-main .ss-multi-selected{display:flex;flex-direction:row;cursor:pointer;min-height:30px;width:100%;padding:0 0 0 3px;border:1px solid #dcdee2;border-radius:4px;background-color:#fff;outline:0;box-sizing:border-box;transition:background-color .2s}.ss-main .ss-multi-selected.ss-disabled{background-color:#dcdee2;cursor:not-allowed}.ss-main .ss-multi-selected.ss-disabled .ss-values .ss-disabled{color:#666}.ss-main .ss-multi-selected.ss-disabled .ss-values .ss-value .ss-value-delete{cursor:not-allowed}.ss-main .ss-multi-selected.ss-open-above{border-top-left-radius:0px;border-top-right-radius:0px}.ss-main .ss-multi-selected.ss-open-below{border-bottom-left-radius:0px;border-bottom-right-radius:0px}.ss-main .ss-multi-selected .ss-values{display:flex;flex-wrap:wrap;justify-content:flex-start;flex:1 1 100%;width:calc(100% - 30px)}.ss-main .ss-multi-selected .ss-values .ss-disabled{display:flex;padding:4px 5px;margin:2px 0px;line-height:1em;align-items:center;width:100%;color:#dedede;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@keyframes scaleIn{0%{transform:scale(0);opacity:0}100%{transform:scale(1);opacity:1}}@keyframes scaleOut{0%{transform:scale(1);opacity:1}100%{transform:scale(0);opacity:0}}.ss-main .ss-multi-selected .ss-values .ss-value{display:flex;user-select:none;align-items:center;font-size:12px;padding:3px 5px;margin:3px 5px 3px 0px;color:#fff;background-color:#5897fb;border-radius:4px;animation-name:scaleIn;animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:both}.ss-main .ss-multi-selected .ss-values .ss-value.ss-out{animation-name:scaleOut;animation-duration:.2s;animation-timing-function:ease-out}.ss-main .ss-multi-selected .ss-values .ss-value .ss-value-delete{margin:0 0 0 5px;cursor:pointer}.ss-main .ss-multi-selected .ss-add{display:flex;flex:0 1 3px;margin:9px 12px 0 5px}.ss-main .ss-multi-selected .ss-add .ss-plus{display:flex;justify-content:center;align-items:center;background:#666;position:relative;height:10px;width:2px;transition:transform .2s}.ss-main .ss-multi-selected .ss-add .ss-plus:after{background:#666;content:"";position:absolute;height:2px;width:10px;left:-4px;top:4px}.ss-main .ss-multi-selected .ss-add .ss-plus.ss-cross{transform:rotate(45deg)}.ss-content{position:absolute;width:100%;margin:-1px 0 0 0;box-sizing:border-box;border:solid 1px #dcdee2;z-index:1010;background-color:#fff;transform-origin:center top;transition:transform .2s, opacity .2s;opacity:0;transform:scaleY(0)}.ss-content.ss-open{display:block;opacity:1;transform:scaleY(1)}.ss-content .ss-search{display:flex;flex-direction:row;padding:8px 8px 6px 8px}.ss-content .ss-search.ss-hide{height:0px;opacity:0;padding:0px 0px 0px 0px;margin:0px 0px 0px 0px}.ss-content .ss-search.ss-hide input{height:0px;opacity:0;padding:0px 0px 0px 0px;margin:0px 0px 0px 0px}.ss-content .ss-search input{display:inline-flex;font-size:inherit;line-height:inherit;flex:1 1 auto;width:100%;min-width:0px;height:30px;padding:6px 8px;margin:0;border:1px solid #dcdee2;border-radius:4px;background-color:#fff;outline:0;text-align:left;box-sizing:border-box;-webkit-box-sizing:border-box;-webkit-appearance:textfield}.ss-content .ss-search input::placeholder{color:#8a8a8a;vertical-align:middle}.ss-content .ss-search input:focus{box-shadow:0 0 5px #5897fb}.ss-content .ss-search .ss-addable{display:inline-flex;justify-content:center;align-items:center;cursor:pointer;font-size:22px;font-weight:bold;flex:0 0 30px;height:30px;margin:0 0 0 8px;border:1px solid #dcdee2;border-radius:4px;box-sizing:border-box}.ss-content .ss-addable{padding-top:0px}.ss-content .ss-list{max-height:200px;overflow-x:hidden;overflow-y:auto;text-align:left}.ss-content .ss-list .ss-optgroup .ss-optgroup-label{padding:6px 10px 6px 10px;font-weight:bold}.ss-content .ss-list .ss-optgroup .ss-option{padding:6px 6px 6px 25px}.ss-content .ss-list .ss-optgroup-label-selectable{cursor:pointer}.ss-content .ss-list .ss-optgroup-label-selectable:hover{color:#fff;background-color:#5897fb}.ss-content .ss-list .ss-option{padding:6px 10px 6px 10px;cursor:pointer;user-select:none}.ss-content .ss-list .ss-option *{display:inline-block}.ss-content .ss-list .ss-option:hover,.ss-content .ss-list .ss-option.ss-highlighted{color:#fff;background-color:#5897fb}.ss-content .ss-list .ss-option.ss-disabled{cursor:not-allowed;color:#dedede;background-color:#fff}.ss-content .ss-list .ss-option:not(.ss-disabled).ss-option-selected{color:#666;background-color:rgba(88,151,251,0.1)}.ss-content .ss-list .ss-option.ss-hide{display:none}.ss-content .ss-list .ss-option .ss-search-highlight{background-color:#fffb8c}
diff --git a/app/packs/vendor/slim-select/slimselect.js b/app/packs/vendor/slim-select/slimselect.js
new file mode 100644
index 0000000..d4941c1
--- /dev/null
+++ b/app/packs/vendor/slim-select/slimselect.js
@@ -0,0 +1,1970 @@
+(function webpackUniversalModuleDefinition(root, factory) {
+ if(typeof exports === 'object' && typeof module === 'object')
+ module.exports = factory();
+ else if(typeof define === 'function' && define.amd)
+ define([], factory);
+ else if(typeof exports === 'object')
+ exports["SlimSelect"] = factory();
+ else
+ root["SlimSelect"] = factory();
+})(window, function() {
+ return /******/ (function(modules) { // webpackBootstrap
+ /******/ // The module cache
+ /******/ var installedModules = {};
+ /******/
+ /******/ // The require function
+ /******/ function __webpack_require__(moduleId) {
+ /******/
+ /******/ // Check if module is in cache
+ /******/ if(installedModules[moduleId]) {
+ /******/ return installedModules[moduleId].exports;
+ /******/ }
+ /******/ // Create a new module (and put it into the cache)
+ /******/ var module = installedModules[moduleId] = {
+ /******/ i: moduleId,
+ /******/ l: false,
+ /******/ exports: {}
+ /******/ };
+ /******/
+ /******/ // Execute the module function
+ /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+ /******/
+ /******/ // Flag the module as loaded
+ /******/ module.l = true;
+ /******/
+ /******/ // Return the exports of the module
+ /******/ return module.exports;
+ /******/ }
+ /******/
+ /******/
+ /******/ // expose the modules object (__webpack_modules__)
+ /******/ __webpack_require__.m = modules;
+ /******/
+ /******/ // expose the module cache
+ /******/ __webpack_require__.c = installedModules;
+ /******/
+ /******/ // define getter function for harmony exports
+ /******/ __webpack_require__.d = function(exports, name, getter) {
+ /******/ if(!__webpack_require__.o(exports, name)) {
+ /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+ /******/ }
+ /******/ };
+ /******/
+ /******/ // define __esModule on exports
+ /******/ __webpack_require__.r = function(exports) {
+ /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+ /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+ /******/ }
+ /******/ Object.defineProperty(exports, '__esModule', { value: true });
+ /******/ };
+ /******/
+ /******/ // create a fake namespace object
+ /******/ // mode & 1: value is a module id, require it
+ /******/ // mode & 2: merge all properties of value into the ns
+ /******/ // mode & 4: return value when already ns object
+ /******/ // mode & 8|1: behave like require
+ /******/ __webpack_require__.t = function(value, mode) {
+ /******/ if(mode & 1) value = __webpack_require__(value);
+ /******/ if(mode & 8) return value;
+ /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+ /******/ var ns = Object.create(null);
+ /******/ __webpack_require__.r(ns);
+ /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+ /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+ /******/ return ns;
+ /******/ };
+ /******/
+ /******/ // getDefaultExport function for compatibility with non-harmony modules
+ /******/ __webpack_require__.n = function(module) {
+ /******/ var getter = module && module.__esModule ?
+ /******/ function getDefault() { return module['default']; } :
+ /******/ function getModuleExports() { return module; };
+ /******/ __webpack_require__.d(getter, 'a', getter);
+ /******/ return getter;
+ /******/ };
+ /******/
+ /******/ // Object.prototype.hasOwnProperty.call
+ /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+ /******/
+ /******/ // __webpack_public_path__
+ /******/ __webpack_require__.p = "";
+ /******/
+ /******/
+ /******/ // Load entry module and return exports
+ /******/ return __webpack_require__(__webpack_require__.s = 2);
+ /******/ })
+ /************************************************************************/
+ /******/ ([
+ /* 0 */
+ /***/ (function(module, exports, __webpack_require__) {
+
+ "use strict";
+
+ exports.__esModule = true;
+ exports.kebabCase = exports.highlight = exports.isValueInArrayOfObjects = exports.debounce = exports.putContent = exports.ensureElementInView = exports.hasClassInTree = void 0;
+ function hasClassInTree(element, className) {
+ function hasClass(e, c) {
+ if (!(!c || !e || !e.classList || !e.classList.contains(c))) {
+ return e;
+ }
+ return null;
+ }
+ function parentByClass(e, c) {
+ if (!e || e === document) {
+ return null;
+ }
+ else if (hasClass(e, c)) {
+ return e;
+ }
+ else {
+ return parentByClass(e.parentNode, c);
+ }
+ }
+ return hasClass(element, className) || parentByClass(element, className);
+ }
+ exports.hasClassInTree = hasClassInTree;
+ function ensureElementInView(container, element) {
+ var cTop = container.scrollTop + container.offsetTop;
+ var cBottom = cTop + container.clientHeight;
+ var eTop = element.offsetTop;
+ var eBottom = eTop + element.clientHeight;
+ if (eTop < cTop) {
+ container.scrollTop -= (cTop - eTop);
+ }
+ else if (eBottom > cBottom) {
+ container.scrollTop += (eBottom - cBottom);
+ }
+ }
+ exports.ensureElementInView = ensureElementInView;
+ function putContent(el, currentPosition, isOpen) {
+ var height = el.offsetHeight;
+ var rect = el.getBoundingClientRect();
+ var elemTop = (isOpen ? rect.top : rect.top - height);
+ var elemBottom = (isOpen ? rect.bottom : rect.bottom + height);
+ if (elemTop <= 0) {
+ return 'below';
+ }
+ if (elemBottom >= window.innerHeight) {
+ return 'above';
+ }
+ return (isOpen ? currentPosition : 'below');
+ }
+ exports.putContent = putContent;
+ function debounce(func, wait, immediate) {
+ if (wait === void 0) { wait = 100; }
+ if (immediate === void 0) { immediate = false; }
+ var timeout;
+ return function () {
+ var args = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ args[_i] = arguments[_i];
+ }
+ var context = self;
+ var later = function () {
+ timeout = null;
+ if (!immediate) {
+ func.apply(context, args);
+ }
+ };
+ var callNow = immediate && !timeout;
+ clearTimeout(timeout);
+ timeout = setTimeout(later, wait);
+ if (callNow) {
+ func.apply(context, args);
+ }
+ };
+ }
+ exports.debounce = debounce;
+ function isValueInArrayOfObjects(selected, key, value) {
+ if (!Array.isArray(selected)) {
+ return selected[key] === value;
+ }
+ for (var _i = 0, selected_1 = selected; _i < selected_1.length; _i++) {
+ var s = selected_1[_i];
+ if (s && s[key] && s[key] === value) {
+ return true;
+ }
+ }
+ return false;
+ }
+ exports.isValueInArrayOfObjects = isValueInArrayOfObjects;
+ function highlight(str, search, className) {
+ var completedString = str;
+ var regex = new RegExp('(' + search.trim() + ')(?![^<]*>[^<>]*)', 'i');
+ if (!str.match(regex)) {
+ return str;
+ }
+ var matchStartPosition = str.match(regex).index;
+ var matchEndPosition = matchStartPosition + str.match(regex)[0].toString().length;
+ var originalTextFoundByRegex = str.substring(matchStartPosition, matchEndPosition);
+ completedString = completedString.replace(regex, "").concat(originalTextFoundByRegex, " "));
+ return completedString;
+ }
+ exports.highlight = highlight;
+ function kebabCase(str) {
+ var result = str.replace(/[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g, function (match) { return '-' + match.toLowerCase(); });
+ return (str[0] === str[0].toUpperCase())
+ ? result.substring(1)
+ : result;
+ }
+ exports.kebabCase = kebabCase;
+ (function () {
+ var w = window;
+ if (typeof w.CustomEvent === 'function') {
+ return;
+ }
+ function CustomEvent(event, params) {
+ params = params || { bubbles: false, cancelable: false, detail: undefined };
+ var evt = document.createEvent('CustomEvent');
+ evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
+ return evt;
+ }
+ CustomEvent.prototype = w.Event.prototype;
+ w.CustomEvent = CustomEvent;
+ })();
+
+
+ /***/ }),
+ /* 1 */
+ /***/ (function(module, exports, __webpack_require__) {
+
+ "use strict";
+
+ exports.__esModule = true;
+ exports.validateOption = exports.validateData = exports.Data = void 0;
+ var Data = (function () {
+ function Data(info) {
+ this.contentOpen = false;
+ this.contentPosition = 'below';
+ this.isOnChangeEnabled = true;
+ this.main = info.main;
+ this.searchValue = '';
+ this.data = [];
+ this.filtered = null;
+ this.parseSelectData();
+ this.setSelectedFromSelect();
+ }
+ Data.prototype.newOption = function (info) {
+ return {
+ id: (info.id ? info.id : String(Math.floor(Math.random() * 100000000))),
+ value: (info.value ? info.value : ''),
+ text: (info.text ? info.text : ''),
+ innerHTML: (info.innerHTML ? info.innerHTML : ''),
+ selected: (info.selected ? info.selected : false),
+ display: (info.display !== undefined ? info.display : true),
+ disabled: (info.disabled ? info.disabled : false),
+ placeholder: (info.placeholder ? info.placeholder : false),
+ "class": (info["class"] ? info["class"] : undefined),
+ data: (info.data ? info.data : {}),
+ mandatory: (info.mandatory ? info.mandatory : false)
+ };
+ };
+ Data.prototype.add = function (data) {
+ this.data.push({
+ id: String(Math.floor(Math.random() * 100000000)),
+ value: data.value,
+ text: data.text,
+ innerHTML: '',
+ selected: false,
+ display: true,
+ disabled: false,
+ placeholder: false,
+ "class": undefined,
+ mandatory: data.mandatory,
+ data: {}
+ });
+ };
+ Data.prototype.parseSelectData = function () {
+ this.data = [];
+ var nodes = this.main.select.element.childNodes;
+ for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {
+ var n = nodes_1[_i];
+ if (n.nodeName === 'OPTGROUP') {
+ var node = n;
+ var optgroup = {
+ label: node.label,
+ options: []
+ };
+ var options = n.childNodes;
+ for (var _a = 0, options_1 = options; _a < options_1.length; _a++) {
+ var o = options_1[_a];
+ if (o.nodeName === 'OPTION') {
+ var option = this.pullOptionData(o);
+ optgroup.options.push(option);
+ if (option.placeholder && option.text.trim() !== '') {
+ this.main.config.placeholderText = option.text;
+ }
+ }
+ }
+ this.data.push(optgroup);
+ }
+ else if (n.nodeName === 'OPTION') {
+ var option = this.pullOptionData(n);
+ this.data.push(option);
+ if (option.placeholder && option.text.trim() !== '') {
+ this.main.config.placeholderText = option.text;
+ }
+ }
+ }
+ };
+ Data.prototype.pullOptionData = function (option) {
+ return {
+ id: (option.dataset ? option.dataset.id : false) || String(Math.floor(Math.random() * 100000000)),
+ value: option.value,
+ text: option.text,
+ innerHTML: option.innerHTML,
+ selected: option.selected,
+ disabled: option.disabled,
+ placeholder: option.dataset.placeholder === 'true',
+ "class": option.className,
+ style: option.style.cssText,
+ data: option.dataset,
+ mandatory: (option.dataset ? option.dataset.mandatory === 'true' : false)
+ };
+ };
+ Data.prototype.setSelectedFromSelect = function () {
+ if (this.main.config.isMultiple) {
+ var options = this.main.select.element.options;
+ var newSelected = [];
+ for (var _i = 0, options_2 = options; _i < options_2.length; _i++) {
+ var o = options_2[_i];
+ if (o.selected) {
+ var newOption = this.getObjectFromData(o.value, 'value');
+ if (newOption && newOption.id) {
+ newSelected.push(newOption.id);
+ }
+ }
+ }
+ this.setSelected(newSelected, 'id');
+ }
+ else {
+ var element = this.main.select.element;
+ if (element.selectedIndex !== -1) {
+ var option = element.options[element.selectedIndex];
+ var value = option.value;
+ this.setSelected(value, 'value');
+ }
+ }
+ };
+ Data.prototype.setSelected = function (value, type) {
+ if (type === void 0) { type = 'id'; }
+ for (var _i = 0, _a = this.data; _i < _a.length; _i++) {
+ var d = _a[_i];
+ if (d.hasOwnProperty('label')) {
+ if (d.hasOwnProperty('options')) {
+ var options = d.options;
+ if (options) {
+ for (var _b = 0, options_3 = options; _b < options_3.length; _b++) {
+ var o = options_3[_b];
+ if (o.placeholder) {
+ continue;
+ }
+ o.selected = this.shouldBeSelected(o, value, type);
+ }
+ }
+ }
+ }
+ else {
+ d.selected = this.shouldBeSelected(d, value, type);
+ }
+ }
+ };
+ Data.prototype.shouldBeSelected = function (option, value, type) {
+ if (type === void 0) { type = 'id'; }
+ if (Array.isArray(value)) {
+ for (var _i = 0, value_1 = value; _i < value_1.length; _i++) {
+ var v = value_1[_i];
+ if (type in option && String(option[type]) === String(v)) {
+ return true;
+ }
+ }
+ }
+ else {
+ if (type in option && String(option[type]) === String(value)) {
+ return true;
+ }
+ }
+ return false;
+ };
+ Data.prototype.getSelected = function () {
+ var value = { text: '', placeholder: this.main.config.placeholderText };
+ var values = [];
+ for (var _i = 0, _a = this.data; _i < _a.length; _i++) {
+ var d = _a[_i];
+ if (d.hasOwnProperty('label')) {
+ if (d.hasOwnProperty('options')) {
+ var options = d.options;
+ if (options) {
+ for (var _b = 0, options_4 = options; _b < options_4.length; _b++) {
+ var o = options_4[_b];
+ if (o.selected) {
+ if (!this.main.config.isMultiple) {
+ value = o;
+ }
+ else {
+ values.push(o);
+ }
+ }
+ }
+ }
+ }
+ }
+ else {
+ if (d.selected) {
+ if (!this.main.config.isMultiple) {
+ value = d;
+ }
+ else {
+ values.push(d);
+ }
+ }
+ }
+ }
+ if (this.main.config.isMultiple) {
+ return values;
+ }
+ return value;
+ };
+ Data.prototype.addToSelected = function (value, type) {
+ if (type === void 0) { type = 'id'; }
+ if (this.main.config.isMultiple) {
+ var values = [];
+ var selected = this.getSelected();
+ if (Array.isArray(selected)) {
+ for (var _i = 0, selected_1 = selected; _i < selected_1.length; _i++) {
+ var s = selected_1[_i];
+ values.push(s[type]);
+ }
+ }
+ values.push(value);
+ this.setSelected(values, type);
+ }
+ };
+ Data.prototype.removeFromSelected = function (value, type) {
+ if (type === void 0) { type = 'id'; }
+ if (this.main.config.isMultiple) {
+ var values = [];
+ var selected = this.getSelected();
+ for (var _i = 0, selected_2 = selected; _i < selected_2.length; _i++) {
+ var s = selected_2[_i];
+ if (String(s[type]) !== String(value)) {
+ values.push(s[type]);
+ }
+ }
+ this.setSelected(values, type);
+ }
+ };
+ Data.prototype.onDataChange = function () {
+ if (this.main.onChange && this.isOnChangeEnabled) {
+ this.main.onChange(JSON.parse(JSON.stringify(this.getSelected())));
+ }
+ };
+ Data.prototype.getObjectFromData = function (value, type) {
+ if (type === void 0) { type = 'id'; }
+ for (var _i = 0, _a = this.data; _i < _a.length; _i++) {
+ var d = _a[_i];
+ if (type in d && String(d[type]) === String(value)) {
+ return d;
+ }
+ if (d.hasOwnProperty('options')) {
+ var optgroupObject = d;
+ if (optgroupObject.options) {
+ for (var _b = 0, _c = optgroupObject.options; _b < _c.length; _b++) {
+ var oo = _c[_b];
+ if (String(oo[type]) === String(value)) {
+ return oo;
+ }
+ }
+ }
+ }
+ }
+ return null;
+ };
+ Data.prototype.search = function (search) {
+ this.searchValue = search;
+ if (search.trim() === '') {
+ this.filtered = null;
+ return;
+ }
+ var searchFilter = this.main.config.searchFilter;
+ var valuesArray = this.data.slice(0);
+ search = search.trim();
+ var filtered = valuesArray.map(function (obj) {
+ if (obj.hasOwnProperty('options')) {
+ var optgroupObj = obj;
+ var options = [];
+ if (optgroupObj.options) {
+ options = optgroupObj.options.filter(function (opt) {
+ return searchFilter(opt, search);
+ });
+ }
+ if (options.length !== 0) {
+ var optgroup = Object.assign({}, optgroupObj);
+ optgroup.options = options;
+ return optgroup;
+ }
+ }
+ if (obj.hasOwnProperty('text')) {
+ var optionObj = obj;
+ if (searchFilter(optionObj, search)) {
+ return obj;
+ }
+ }
+ return null;
+ });
+ this.filtered = filtered.filter(function (info) { return info; });
+ };
+ return Data;
+ }());
+ exports.Data = Data;
+ function validateData(data) {
+ if (!data) {
+ console.error('Data must be an array of objects');
+ return false;
+ }
+ var isValid = false;
+ var errorCount = 0;
+ for (var _i = 0, data_1 = data; _i < data_1.length; _i++) {
+ var d = data_1[_i];
+ if (d.hasOwnProperty('label')) {
+ if (d.hasOwnProperty('options')) {
+ var optgroup = d;
+ var options = optgroup.options;
+ if (options) {
+ for (var _a = 0, options_5 = options; _a < options_5.length; _a++) {
+ var o = options_5[_a];
+ isValid = validateOption(o);
+ if (!isValid) {
+ errorCount++;
+ }
+ }
+ }
+ }
+ }
+ else {
+ var option = d;
+ isValid = validateOption(option);
+ if (!isValid) {
+ errorCount++;
+ }
+ }
+ }
+ return errorCount === 0;
+ }
+ exports.validateData = validateData;
+ function validateOption(option) {
+ if (option.text === undefined) {
+ console.error('Data object option must have at least have a text value. Check object: ' + JSON.stringify(option));
+ return false;
+ }
+ return true;
+ }
+ exports.validateOption = validateOption;
+
+
+ /***/ }),
+ /* 2 */
+ /***/ (function(module, exports, __webpack_require__) {
+
+ "use strict";
+
+ exports.__esModule = true;
+ var config_1 = __webpack_require__(3);
+ var select_1 = __webpack_require__(4);
+ var slim_1 = __webpack_require__(5);
+ var data_1 = __webpack_require__(1);
+ var helper_1 = __webpack_require__(0);
+ var SlimSelect = (function () {
+ function SlimSelect(info) {
+ var _this = this;
+ this.ajax = null;
+ this.addable = null;
+ this.beforeOnChange = null;
+ this.onChange = null;
+ this.beforeOpen = null;
+ this.afterOpen = null;
+ this.beforeClose = null;
+ this.afterClose = null;
+ this.windowScroll = (0, helper_1.debounce)(function (e) {
+ if (_this.data.contentOpen) {
+ if ((0, helper_1.putContent)(_this.slim.content, _this.data.contentPosition, _this.data.contentOpen) === 'above') {
+ _this.moveContentAbove();
+ }
+ else {
+ _this.moveContentBelow();
+ }
+ }
+ });
+ this.documentClick = function (e) {
+ if (e.target && !(0, helper_1.hasClassInTree)(e.target, _this.config.id)) {
+ _this.close();
+ }
+ };
+ var selectElement = this.validate(info);
+ if (selectElement.dataset.ssid) {
+ this.destroy(selectElement.dataset.ssid);
+ }
+ if (info.ajax) {
+ this.ajax = info.ajax;
+ }
+ if (info.addable) {
+ this.addable = info.addable;
+ }
+ this.config = new config_1.Config({
+ select: selectElement,
+ isAjax: (info.ajax ? true : false),
+ showSearch: info.showSearch,
+ searchPlaceholder: info.searchPlaceholder,
+ searchText: info.searchText,
+ searchingText: info.searchingText,
+ searchFocus: info.searchFocus,
+ searchHighlight: info.searchHighlight,
+ searchFilter: info.searchFilter,
+ closeOnSelect: info.closeOnSelect,
+ showContent: info.showContent,
+ placeholderText: info.placeholder,
+ allowDeselect: info.allowDeselect,
+ allowDeselectOption: info.allowDeselectOption,
+ hideSelectedOption: info.hideSelectedOption,
+ deselectLabel: info.deselectLabel,
+ isEnabled: info.isEnabled,
+ valuesUseText: info.valuesUseText,
+ showOptionTooltips: info.showOptionTooltips,
+ selectByGroup: info.selectByGroup,
+ limit: info.limit,
+ timeoutDelay: info.timeoutDelay,
+ addToBody: info.addToBody
+ });
+ this.select = new select_1.Select({
+ select: selectElement,
+ main: this
+ });
+ this.data = new data_1.Data({ main: this });
+ this.slim = new slim_1.Slim({ main: this });
+ if (this.select.element.parentNode) {
+ this.select.element.parentNode.insertBefore(this.slim.container, this.select.element.nextSibling);
+ }
+ if (info.data) {
+ this.setData(info.data);
+ }
+ else {
+ this.render();
+ }
+ document.addEventListener('click', this.documentClick);
+ if (this.config.showContent === 'auto') {
+ window.addEventListener('scroll', this.windowScroll, false);
+ }
+ if (info.beforeOnChange) {
+ this.beforeOnChange = info.beforeOnChange;
+ }
+ if (info.onChange) {
+ this.onChange = info.onChange;
+ }
+ if (info.beforeOpen) {
+ this.beforeOpen = info.beforeOpen;
+ }
+ if (info.afterOpen) {
+ this.afterOpen = info.afterOpen;
+ }
+ if (info.beforeClose) {
+ this.beforeClose = info.beforeClose;
+ }
+ if (info.afterClose) {
+ this.afterClose = info.afterClose;
+ }
+ if (!this.config.isEnabled) {
+ this.disable();
+ }
+ }
+ SlimSelect.prototype.validate = function (info) {
+ var select = (typeof info.select === 'string' ? document.querySelector(info.select) : info.select);
+ if (!select) {
+ throw new Error('Could not find select element');
+ }
+ if (select.tagName !== 'SELECT') {
+ throw new Error('Element isnt of type select');
+ }
+ return select;
+ };
+ SlimSelect.prototype.selected = function () {
+ if (this.config.isMultiple) {
+ var selected = this.data.getSelected();
+ var outputSelected = [];
+ for (var _i = 0, selected_1 = selected; _i < selected_1.length; _i++) {
+ var s = selected_1[_i];
+ outputSelected.push(s.value);
+ }
+ return outputSelected;
+ }
+ else {
+ var selected = this.data.getSelected();
+ return (selected ? selected.value : '');
+ }
+ };
+ SlimSelect.prototype.set = function (value, type, close, render) {
+ if (type === void 0) { type = 'value'; }
+ if (close === void 0) { close = true; }
+ if (render === void 0) { render = true; }
+ if (this.config.isMultiple && !Array.isArray(value)) {
+ this.data.addToSelected(value, type);
+ }
+ else {
+ this.data.setSelected(value, type);
+ }
+ this.select.setValue();
+ this.data.onDataChange();
+ this.render();
+ if (this.config.hideSelectedOption && this.config.isMultiple && this.data.getSelected().length === this.data.data.length) {
+ close = true;
+ }
+ if (close) {
+ this.close();
+ }
+ };
+ SlimSelect.prototype.setSelected = function (value, type, close, render) {
+ if (type === void 0) { type = 'value'; }
+ if (close === void 0) { close = true; }
+ if (render === void 0) { render = true; }
+ this.set(value, type, close, render);
+ };
+ SlimSelect.prototype.setData = function (data) {
+ var isValid = (0, data_1.validateData)(data);
+ if (!isValid) {
+ console.error('Validation problem on: #' + this.select.element.id);
+ return;
+ }
+ var newData = JSON.parse(JSON.stringify(data));
+ var selected = this.data.getSelected();
+ for (var i = 0; i < newData.length; i++) {
+ if (!newData[i].value && !newData[i].placeholder) {
+ newData[i].value = newData[i].text;
+ }
+ }
+ if (this.config.isAjax && selected) {
+ if (this.config.isMultiple) {
+ var reverseSelected = selected.reverse();
+ for (var _i = 0, reverseSelected_1 = reverseSelected; _i < reverseSelected_1.length; _i++) {
+ var r = reverseSelected_1[_i];
+ newData.unshift(r);
+ }
+ }
+ else {
+ newData.unshift(selected);
+ for (var i = 0; i < newData.length; i++) {
+ if (!newData[i].placeholder && newData[i].value === selected.value && newData[i].text === selected.text) {
+ newData.splice(i, 1);
+ }
+ }
+ var hasPlaceholder = false;
+ for (var i = 0; i < newData.length; i++) {
+ if (newData[i].placeholder) {
+ hasPlaceholder = true;
+ }
+ }
+ if (!hasPlaceholder) {
+ newData.unshift({ text: '', placeholder: true });
+ }
+ }
+ }
+ this.select.create(newData);
+ this.data.parseSelectData();
+ this.data.setSelectedFromSelect();
+ };
+ SlimSelect.prototype.addData = function (data) {
+ var isValid = (0, data_1.validateData)([data]);
+ if (!isValid) {
+ console.error('Validation problem on: #' + this.select.element.id);
+ return;
+ }
+ this.data.add(this.data.newOption(data));
+ this.select.create(this.data.data);
+ this.data.parseSelectData();
+ this.data.setSelectedFromSelect();
+ this.render();
+ };
+ SlimSelect.prototype.open = function () {
+ var _this = this;
+ if (!this.config.isEnabled) {
+ return;
+ }
+ if (this.data.contentOpen) {
+ return;
+ }
+ if (this.config.hideSelectedOption && this.config.isMultiple && this.data.getSelected().length === this.data.data.length) {
+ return;
+ }
+ if (this.beforeOpen) {
+ this.beforeOpen();
+ }
+ if (this.config.isMultiple && this.slim.multiSelected) {
+ this.slim.multiSelected.plus.classList.add('ss-cross');
+ }
+ else if (this.slim.singleSelected) {
+ this.slim.singleSelected.arrowIcon.arrow.classList.remove('arrow-down');
+ this.slim.singleSelected.arrowIcon.arrow.classList.add('arrow-up');
+ }
+ this.slim[(this.config.isMultiple ? 'multiSelected' : 'singleSelected')].container.classList.add((this.data.contentPosition === 'above' ? this.config.openAbove : this.config.openBelow));
+ if (this.config.addToBody) {
+ var containerRect = this.slim.container.getBoundingClientRect();
+ this.slim.content.style.top = (containerRect.top + containerRect.height + window.scrollY) + 'px';
+ this.slim.content.style.left = (containerRect.left + window.scrollX) + 'px';
+ this.slim.content.style.width = containerRect.width + 'px';
+ }
+ this.slim.content.classList.add(this.config.open);
+ if (this.config.showContent.toLowerCase() === 'up') {
+ this.moveContentAbove();
+ }
+ else if (this.config.showContent.toLowerCase() === 'down') {
+ this.moveContentBelow();
+ }
+ else {
+ if ((0, helper_1.putContent)(this.slim.content, this.data.contentPosition, this.data.contentOpen) === 'above') {
+ this.moveContentAbove();
+ }
+ else {
+ this.moveContentBelow();
+ }
+ }
+ if (!this.config.isMultiple) {
+ var selected = this.data.getSelected();
+ if (selected) {
+ var selectedId = selected.id;
+ var selectedOption = this.slim.list.querySelector('[data-id="' + selectedId + '"]');
+ if (selectedOption) {
+ (0, helper_1.ensureElementInView)(this.slim.list, selectedOption);
+ }
+ }
+ }
+ setTimeout(function () {
+ _this.data.contentOpen = true;
+ if (_this.config.searchFocus) {
+ _this.slim.search.input.focus();
+ }
+ if (_this.afterOpen) {
+ _this.afterOpen();
+ }
+ }, this.config.timeoutDelay);
+ };
+ SlimSelect.prototype.close = function () {
+ var _this = this;
+ if (!this.data.contentOpen) {
+ return;
+ }
+ if (this.beforeClose) {
+ this.beforeClose();
+ }
+ if (this.config.isMultiple && this.slim.multiSelected) {
+ this.slim.multiSelected.container.classList.remove(this.config.openAbove);
+ this.slim.multiSelected.container.classList.remove(this.config.openBelow);
+ this.slim.multiSelected.plus.classList.remove('ss-cross');
+ }
+ else if (this.slim.singleSelected) {
+ this.slim.singleSelected.container.classList.remove(this.config.openAbove);
+ this.slim.singleSelected.container.classList.remove(this.config.openBelow);
+ this.slim.singleSelected.arrowIcon.arrow.classList.add('arrow-down');
+ this.slim.singleSelected.arrowIcon.arrow.classList.remove('arrow-up');
+ }
+ this.slim.content.classList.remove(this.config.open);
+ this.data.contentOpen = false;
+ this.search('');
+ setTimeout(function () {
+ _this.slim.content.removeAttribute('style');
+ _this.data.contentPosition = 'below';
+ if (_this.config.isMultiple && _this.slim.multiSelected) {
+ _this.slim.multiSelected.container.classList.remove(_this.config.openAbove);
+ _this.slim.multiSelected.container.classList.remove(_this.config.openBelow);
+ }
+ else if (_this.slim.singleSelected) {
+ _this.slim.singleSelected.container.classList.remove(_this.config.openAbove);
+ _this.slim.singleSelected.container.classList.remove(_this.config.openBelow);
+ }
+ _this.slim.search.input.blur();
+ if (_this.afterClose) {
+ _this.afterClose();
+ }
+ }, this.config.timeoutDelay);
+ };
+ SlimSelect.prototype.moveContentAbove = function () {
+ var selectHeight = 0;
+ if (this.config.isMultiple && this.slim.multiSelected) {
+ selectHeight = this.slim.multiSelected.container.offsetHeight;
+ }
+ else if (this.slim.singleSelected) {
+ selectHeight = this.slim.singleSelected.container.offsetHeight;
+ }
+ var contentHeight = this.slim.content.offsetHeight;
+ var height = selectHeight + contentHeight - 1;
+ this.slim.content.style.margin = '-' + height + 'px 0 0 0';
+ this.slim.content.style.height = (height - selectHeight + 1) + 'px';
+ this.slim.content.style.transformOrigin = 'center bottom';
+ this.data.contentPosition = 'above';
+ if (this.config.isMultiple && this.slim.multiSelected) {
+ this.slim.multiSelected.container.classList.remove(this.config.openBelow);
+ this.slim.multiSelected.container.classList.add(this.config.openAbove);
+ }
+ else if (this.slim.singleSelected) {
+ this.slim.singleSelected.container.classList.remove(this.config.openBelow);
+ this.slim.singleSelected.container.classList.add(this.config.openAbove);
+ }
+ };
+ SlimSelect.prototype.moveContentBelow = function () {
+ this.data.contentPosition = 'below';
+ if (this.config.isMultiple && this.slim.multiSelected) {
+ this.slim.multiSelected.container.classList.remove(this.config.openAbove);
+ this.slim.multiSelected.container.classList.add(this.config.openBelow);
+ }
+ else if (this.slim.singleSelected) {
+ this.slim.singleSelected.container.classList.remove(this.config.openAbove);
+ this.slim.singleSelected.container.classList.add(this.config.openBelow);
+ }
+ };
+ SlimSelect.prototype.enable = function () {
+ this.config.isEnabled = true;
+ if (this.config.isMultiple && this.slim.multiSelected) {
+ this.slim.multiSelected.container.classList.remove(this.config.disabled);
+ }
+ else if (this.slim.singleSelected) {
+ this.slim.singleSelected.container.classList.remove(this.config.disabled);
+ }
+ this.select.triggerMutationObserver = false;
+ this.select.element.disabled = false;
+ this.slim.search.input.disabled = false;
+ this.select.triggerMutationObserver = true;
+ };
+ SlimSelect.prototype.disable = function () {
+ this.config.isEnabled = false;
+ if (this.config.isMultiple && this.slim.multiSelected) {
+ this.slim.multiSelected.container.classList.add(this.config.disabled);
+ }
+ else if (this.slim.singleSelected) {
+ this.slim.singleSelected.container.classList.add(this.config.disabled);
+ }
+ this.select.triggerMutationObserver = false;
+ this.select.element.disabled = true;
+ this.slim.search.input.disabled = true;
+ this.select.triggerMutationObserver = true;
+ };
+ SlimSelect.prototype.search = function (value) {
+ if (this.data.searchValue === value) {
+ return;
+ }
+ this.slim.search.input.value = value;
+ if (this.config.isAjax) {
+ var master_1 = this;
+ this.config.isSearching = true;
+ this.render();
+ if (this.ajax) {
+ this.ajax(value, function (info) {
+ master_1.config.isSearching = false;
+ if (Array.isArray(info)) {
+ info.unshift({ text: '', placeholder: true });
+ master_1.setData(info);
+ master_1.data.search(value);
+ master_1.render();
+ }
+ else if (typeof info === 'string') {
+ master_1.slim.options(info);
+ }
+ else {
+ master_1.render();
+ }
+ });
+ }
+ }
+ else {
+ this.data.search(value);
+ this.render();
+ }
+ };
+ SlimSelect.prototype.setSearchText = function (text) {
+ this.config.searchText = text;
+ };
+ SlimSelect.prototype.render = function () {
+ if (this.config.isMultiple) {
+ this.slim.values();
+ }
+ else {
+ this.slim.placeholder();
+ this.slim.deselect();
+ }
+ this.slim.options();
+ };
+ SlimSelect.prototype.destroy = function (id) {
+ if (id === void 0) { id = null; }
+ var slim = (id ? document.querySelector('.' + id + '.ss-main') : this.slim.container);
+ var select = (id ? document.querySelector("[data-ssid=".concat(id, "]")) : this.select.element);
+ if (!slim || !select) {
+ return;
+ }
+ document.removeEventListener('click', this.documentClick);
+ if (this.config.showContent === 'auto') {
+ window.removeEventListener('scroll', this.windowScroll, false);
+ }
+ select.style.display = '';
+ delete select.dataset.ssid;
+ var el = select;
+ el.slim = null;
+ if (slim.parentElement) {
+ slim.parentElement.removeChild(slim);
+ }
+ if (this.config.addToBody) {
+ var slimContent = (id ? document.querySelector('.' + id + '.ss-content') : this.slim.content);
+ if (!slimContent) {
+ return;
+ }
+ document.body.removeChild(slimContent);
+ }
+ };
+ return SlimSelect;
+ }());
+ exports["default"] = SlimSelect;
+
+
+ /***/ }),
+ /* 3 */
+ /***/ (function(module, exports, __webpack_require__) {
+
+ "use strict";
+
+ exports.__esModule = true;
+ exports.Config = void 0;
+ var Config = (function () {
+ function Config(info) {
+ this.id = '';
+ this.isMultiple = false;
+ this.isAjax = false;
+ this.isSearching = false;
+ this.showSearch = true;
+ this.searchFocus = true;
+ this.searchHighlight = false;
+ this.closeOnSelect = true;
+ this.showContent = 'auto';
+ this.searchPlaceholder = 'Search';
+ this.searchText = 'No Results';
+ this.searchingText = 'Searching...';
+ this.placeholderText = 'Select Value';
+ this.allowDeselect = false;
+ this.allowDeselectOption = false;
+ this.hideSelectedOption = false;
+ this.deselectLabel = 'x';
+ this.isEnabled = true;
+ this.valuesUseText = false;
+ this.showOptionTooltips = false;
+ this.selectByGroup = false;
+ this.limit = 0;
+ this.timeoutDelay = 200;
+ this.addToBody = false;
+ this.main = 'ss-main';
+ this.singleSelected = 'ss-single-selected';
+ this.arrow = 'ss-arrow';
+ this.multiSelected = 'ss-multi-selected';
+ this.add = 'ss-add';
+ this.plus = 'ss-plus';
+ this.values = 'ss-values';
+ this.value = 'ss-value';
+ this.valueText = 'ss-value-text';
+ this.valueDelete = 'ss-value-delete';
+ this.content = 'ss-content';
+ this.open = 'ss-open';
+ this.openAbove = 'ss-open-above';
+ this.openBelow = 'ss-open-below';
+ this.search = 'ss-search';
+ this.searchHighlighter = 'ss-search-highlight';
+ this.addable = 'ss-addable';
+ this.list = 'ss-list';
+ this.optgroup = 'ss-optgroup';
+ this.optgroupLabel = 'ss-optgroup-label';
+ this.optgroupLabelSelectable = 'ss-optgroup-label-selectable';
+ this.option = 'ss-option';
+ this.optionSelected = 'ss-option-selected';
+ this.highlighted = 'ss-highlighted';
+ this.disabled = 'ss-disabled';
+ this.hide = 'ss-hide';
+ this.id = 'ss-' + Math.floor(Math.random() * 100000);
+ this.style = info.select.style.cssText;
+ this["class"] = info.select.className.split(' ');
+ this.isMultiple = info.select.multiple;
+ this.isAjax = info.isAjax;
+ this.showSearch = (info.showSearch === false ? false : true);
+ this.searchFocus = (info.searchFocus === false ? false : true);
+ this.searchHighlight = (info.searchHighlight === true ? true : false);
+ this.closeOnSelect = (info.closeOnSelect === false ? false : true);
+ if (info.showContent) {
+ this.showContent = info.showContent;
+ }
+ this.isEnabled = (info.isEnabled === false ? false : true);
+ if (info.searchPlaceholder) {
+ this.searchPlaceholder = info.searchPlaceholder;
+ }
+ if (info.searchText) {
+ this.searchText = info.searchText;
+ }
+ if (info.searchingText) {
+ this.searchingText = info.searchingText;
+ }
+ if (info.placeholderText) {
+ this.placeholderText = info.placeholderText;
+ }
+ this.allowDeselect = (info.allowDeselect === true ? true : false);
+ this.allowDeselectOption = (info.allowDeselectOption === true ? true : false);
+ this.hideSelectedOption = (info.hideSelectedOption === true ? true : false);
+ if (info.deselectLabel) {
+ this.deselectLabel = info.deselectLabel;
+ }
+ if (info.valuesUseText) {
+ this.valuesUseText = info.valuesUseText;
+ }
+ if (info.showOptionTooltips) {
+ this.showOptionTooltips = info.showOptionTooltips;
+ }
+ if (info.selectByGroup) {
+ this.selectByGroup = info.selectByGroup;
+ }
+ if (info.limit) {
+ this.limit = info.limit;
+ }
+ if (info.searchFilter) {
+ this.searchFilter = info.searchFilter;
+ }
+ if (info.timeoutDelay != null) {
+ this.timeoutDelay = info.timeoutDelay;
+ }
+ this.addToBody = (info.addToBody === true ? true : false);
+ }
+ Config.prototype.searchFilter = function (opt, search) {
+ return opt.text.toLowerCase().indexOf(search.toLowerCase()) !== -1;
+ };
+ return Config;
+ }());
+ exports.Config = Config;
+
+
+ /***/ }),
+ /* 4 */
+ /***/ (function(module, exports, __webpack_require__) {
+
+ "use strict";
+
+ exports.__esModule = true;
+ exports.Select = void 0;
+ var helper_1 = __webpack_require__(0);
+ var Select = (function () {
+ function Select(info) {
+ this.triggerMutationObserver = true;
+ this.element = info.select;
+ this.main = info.main;
+ if (this.element.disabled) {
+ this.main.config.isEnabled = false;
+ }
+ this.addAttributes();
+ this.addEventListeners();
+ this.mutationObserver = null;
+ this.addMutationObserver();
+ var el = this.element;
+ el.slim = info.main;
+ }
+ Select.prototype.setValue = function () {
+ if (!this.main.data.getSelected()) {
+ return;
+ }
+ if (this.main.config.isMultiple) {
+ var selected = this.main.data.getSelected();
+ var options = this.element.options;
+ for (var _i = 0, options_1 = options; _i < options_1.length; _i++) {
+ var o = options_1[_i];
+ o.selected = false;
+ for (var _a = 0, selected_1 = selected; _a < selected_1.length; _a++) {
+ var s = selected_1[_a];
+ if (s.value === o.value) {
+ o.selected = true;
+ }
+ }
+ }
+ }
+ else {
+ var selected = this.main.data.getSelected();
+ this.element.value = (selected ? selected.value : '');
+ }
+ this.main.data.isOnChangeEnabled = false;
+ this.element.dispatchEvent(new CustomEvent('change', { bubbles: true }));
+ this.main.data.isOnChangeEnabled = true;
+ };
+ Select.prototype.addAttributes = function () {
+ this.element.tabIndex = -1;
+ this.element.style.display = 'none';
+ this.element.dataset.ssid = this.main.config.id;
+ this.element.setAttribute('aria-hidden', 'true');
+ };
+ Select.prototype.addEventListeners = function () {
+ var _this = this;
+ this.element.addEventListener('change', function (e) {
+ _this.main.data.setSelectedFromSelect();
+ _this.main.render();
+ });
+ };
+ Select.prototype.addMutationObserver = function () {
+ var _this = this;
+ if (this.main.config.isAjax) {
+ return;
+ }
+ this.mutationObserver = new MutationObserver(function (mutations) {
+ if (!_this.triggerMutationObserver) {
+ return;
+ }
+ _this.main.data.parseSelectData();
+ _this.main.data.setSelectedFromSelect();
+ _this.main.render();
+ mutations.forEach(function (mutation) {
+ if (mutation.attributeName === 'class') {
+ _this.main.slim.updateContainerDivClass(_this.main.slim.container);
+ }
+ });
+ });
+ this.observeMutationObserver();
+ };
+ Select.prototype.observeMutationObserver = function () {
+ if (!this.mutationObserver) {
+ return;
+ }
+ this.mutationObserver.observe(this.element, {
+ attributes: true,
+ childList: true,
+ characterData: true
+ });
+ };
+ Select.prototype.disconnectMutationObserver = function () {
+ if (this.mutationObserver) {
+ this.mutationObserver.disconnect();
+ }
+ };
+ Select.prototype.create = function (data) {
+ this.element.innerHTML = '';
+ for (var _i = 0, data_1 = data; _i < data_1.length; _i++) {
+ var d = data_1[_i];
+ if (d.hasOwnProperty('options')) {
+ var optgroupObject = d;
+ var optgroupEl = document.createElement('optgroup');
+ optgroupEl.label = optgroupObject.label;
+ if (optgroupObject.options) {
+ for (var _a = 0, _b = optgroupObject.options; _a < _b.length; _a++) {
+ var oo = _b[_a];
+ optgroupEl.appendChild(this.createOption(oo));
+ }
+ }
+ this.element.appendChild(optgroupEl);
+ }
+ else {
+ this.element.appendChild(this.createOption(d));
+ }
+ }
+ };
+ Select.prototype.createOption = function (info) {
+ var optionEl = document.createElement('option');
+ optionEl.value = info.value !== '' ? info.value : info.text;
+ optionEl.innerHTML = info.innerHTML || info.text;
+ if (info.selected) {
+ optionEl.selected = info.selected;
+ }
+ if (info.display === false) {
+ optionEl.style.display = 'none';
+ }
+ if (info.disabled) {
+ optionEl.disabled = true;
+ }
+ if (info.placeholder) {
+ optionEl.setAttribute('data-placeholder', 'true');
+ }
+ if (info.mandatory) {
+ optionEl.setAttribute('data-mandatory', 'true');
+ }
+ if (info["class"]) {
+ info["class"].split(' ').forEach(function (optionClass) {
+ optionEl.classList.add(optionClass);
+ });
+ }
+ if (info.data && typeof info.data === 'object') {
+ Object.keys(info.data).forEach(function (key) {
+ optionEl.setAttribute('data-' + (0, helper_1.kebabCase)(key), info.data[key]);
+ });
+ }
+ return optionEl;
+ };
+ return Select;
+ }());
+ exports.Select = Select;
+
+
+ /***/ }),
+ /* 5 */
+ /***/ (function(module, exports, __webpack_require__) {
+
+ "use strict";
+
+ exports.__esModule = true;
+ exports.Slim = void 0;
+ var helper_1 = __webpack_require__(0);
+ var data_1 = __webpack_require__(1);
+ var Slim = (function () {
+ function Slim(info) {
+ this.main = info.main;
+ this.container = this.containerDiv();
+ this.content = this.contentDiv();
+ this.search = this.searchDiv();
+ this.list = this.listDiv();
+ this.options();
+ this.singleSelected = null;
+ this.multiSelected = null;
+ if (this.main.config.isMultiple) {
+ this.multiSelected = this.multiSelectedDiv();
+ if (this.multiSelected) {
+ this.container.appendChild(this.multiSelected.container);
+ }
+ }
+ else {
+ this.singleSelected = this.singleSelectedDiv();
+ this.container.appendChild(this.singleSelected.container);
+ }
+ if (this.main.config.addToBody) {
+ this.content.classList.add(this.main.config.id);
+ document.body.appendChild(this.content);
+ }
+ else {
+ this.container.appendChild(this.content);
+ }
+ this.content.appendChild(this.search.container);
+ this.content.appendChild(this.list);
+ }
+ Slim.prototype.containerDiv = function () {
+ var container = document.createElement('div');
+ container.style.cssText = this.main.config.style;
+ this.updateContainerDivClass(container);
+ return container;
+ };
+ Slim.prototype.updateContainerDivClass = function (container) {
+ this.main.config["class"] = this.main.select.element.className.split(' ');
+ container.className = '';
+ container.classList.add(this.main.config.id);
+ container.classList.add(this.main.config.main);
+ for (var _i = 0, _a = this.main.config["class"]; _i < _a.length; _i++) {
+ var c = _a[_i];
+ if (c.trim() !== '') {
+ container.classList.add(c);
+ }
+ }
+ };
+ Slim.prototype.singleSelectedDiv = function () {
+ var _this = this;
+ var container = document.createElement('div');
+ container.classList.add(this.main.config.singleSelected);
+ var placeholder = document.createElement('span');
+ placeholder.classList.add('placeholder');
+ container.appendChild(placeholder);
+ var deselect = document.createElement('span');
+ deselect.innerHTML = this.main.config.deselectLabel;
+ deselect.classList.add('ss-deselect');
+ deselect.onclick = function (e) {
+ e.stopPropagation();
+ if (!_this.main.config.isEnabled) {
+ return;
+ }
+ _this.main.set('');
+ };
+ container.appendChild(deselect);
+ var arrowContainer = document.createElement('span');
+ arrowContainer.classList.add(this.main.config.arrow);
+ var arrowIcon = document.createElement('span');
+ arrowIcon.classList.add('arrow-down');
+ arrowContainer.appendChild(arrowIcon);
+ container.appendChild(arrowContainer);
+ container.onclick = function () {
+ if (!_this.main.config.isEnabled) {
+ return;
+ }
+ _this.main.data.contentOpen ? _this.main.close() : _this.main.open();
+ };
+ return {
+ container: container,
+ placeholder: placeholder,
+ deselect: deselect,
+ arrowIcon: {
+ container: arrowContainer,
+ arrow: arrowIcon
+ }
+ };
+ };
+ Slim.prototype.placeholder = function () {
+ var selected = this.main.data.getSelected();
+ if (selected === null || (selected && selected.placeholder)) {
+ var placeholder = document.createElement('span');
+ placeholder.classList.add(this.main.config.disabled);
+ placeholder.innerHTML = this.main.config.placeholderText;
+ if (this.singleSelected) {
+ this.singleSelected.placeholder.innerHTML = placeholder.outerHTML;
+ }
+ }
+ else {
+ var selectedValue = '';
+ if (selected) {
+ selectedValue = selected.innerHTML && this.main.config.valuesUseText !== true ? selected.innerHTML : selected.text;
+ }
+ if (this.singleSelected) {
+ this.singleSelected.placeholder.innerHTML = (selected ? selectedValue : '');
+ }
+ }
+ };
+ Slim.prototype.deselect = function () {
+ if (this.singleSelected) {
+ if (!this.main.config.allowDeselect) {
+ this.singleSelected.deselect.classList.add('ss-hide');
+ return;
+ }
+ if (this.main.selected() === '') {
+ this.singleSelected.deselect.classList.add('ss-hide');
+ }
+ else {
+ this.singleSelected.deselect.classList.remove('ss-hide');
+ }
+ }
+ };
+ Slim.prototype.multiSelectedDiv = function () {
+ var _this = this;
+ var container = document.createElement('div');
+ container.classList.add(this.main.config.multiSelected);
+ var values = document.createElement('div');
+ values.classList.add(this.main.config.values);
+ container.appendChild(values);
+ var add = document.createElement('div');
+ add.classList.add(this.main.config.add);
+ var plus = document.createElement('span');
+ plus.classList.add(this.main.config.plus);
+ plus.onclick = function (e) {
+ if (_this.main.data.contentOpen) {
+ _this.main.close();
+ e.stopPropagation();
+ }
+ };
+ add.appendChild(plus);
+ container.appendChild(add);
+ container.onclick = function (e) {
+ if (!_this.main.config.isEnabled) {
+ return;
+ }
+ var target = e.target;
+ if (!target.classList.contains(_this.main.config.valueDelete)) {
+ _this.main.data.contentOpen ? _this.main.close() : _this.main.open();
+ }
+ };
+ return {
+ container: container,
+ values: values,
+ add: add,
+ plus: plus
+ };
+ };
+ Slim.prototype.values = function () {
+ if (!this.multiSelected) {
+ return;
+ }
+ var currentNodes = this.multiSelected.values.childNodes;
+ var selected = this.main.data.getSelected();
+ var exists;
+ var nodesToRemove = [];
+ for (var _i = 0, currentNodes_1 = currentNodes; _i < currentNodes_1.length; _i++) {
+ var c = currentNodes_1[_i];
+ exists = true;
+ for (var _a = 0, selected_1 = selected; _a < selected_1.length; _a++) {
+ var s = selected_1[_a];
+ if (String(s.id) === String(c.dataset.id)) {
+ exists = false;
+ }
+ }
+ if (exists) {
+ nodesToRemove.push(c);
+ }
+ }
+ for (var _b = 0, nodesToRemove_1 = nodesToRemove; _b < nodesToRemove_1.length; _b++) {
+ var n = nodesToRemove_1[_b];
+ n.classList.add('ss-out');
+ this.multiSelected.values.removeChild(n);
+ }
+ currentNodes = this.multiSelected.values.childNodes;
+ for (var s = 0; s < selected.length; s++) {
+ exists = false;
+ for (var _c = 0, currentNodes_2 = currentNodes; _c < currentNodes_2.length; _c++) {
+ var c = currentNodes_2[_c];
+ if (String(selected[s].id) === String(c.dataset.id)) {
+ exists = true;
+ }
+ }
+ if (!exists) {
+ if (currentNodes.length === 0 || !HTMLElement.prototype.insertAdjacentElement) {
+ this.multiSelected.values.appendChild(this.valueDiv(selected[s]));
+ }
+ else if (s === 0) {
+ this.multiSelected.values.insertBefore(this.valueDiv(selected[s]), currentNodes[s]);
+ }
+ else {
+ currentNodes[s - 1].insertAdjacentElement('afterend', this.valueDiv(selected[s]));
+ }
+ }
+ }
+ if (selected.length === 0) {
+ var placeholder = document.createElement('span');
+ placeholder.classList.add(this.main.config.disabled);
+ placeholder.innerHTML = this.main.config.placeholderText;
+ this.multiSelected.values.innerHTML = placeholder.outerHTML;
+ }
+ };
+ Slim.prototype.valueDiv = function (optionObj) {
+ var _this = this;
+ var value = document.createElement('div');
+ value.classList.add(this.main.config.value);
+ value.dataset.id = optionObj.id;
+ var text = document.createElement('span');
+ text.classList.add(this.main.config.valueText);
+ text.innerHTML = (optionObj.innerHTML && this.main.config.valuesUseText !== true ? optionObj.innerHTML : optionObj.text);
+ value.appendChild(text);
+ if (!optionObj.mandatory) {
+ var deleteSpan = document.createElement('span');
+ deleteSpan.classList.add(this.main.config.valueDelete);
+ deleteSpan.innerHTML = this.main.config.deselectLabel;
+ deleteSpan.onclick = function (e) {
+ e.preventDefault();
+ e.stopPropagation();
+ var shouldUpdate = false;
+ if (!_this.main.beforeOnChange) {
+ shouldUpdate = true;
+ }
+ if (_this.main.beforeOnChange) {
+ var selected = _this.main.data.getSelected();
+ var currentValues = JSON.parse(JSON.stringify(selected));
+ for (var i = 0; i < currentValues.length; i++) {
+ if (currentValues[i].id === optionObj.id) {
+ currentValues.splice(i, 1);
+ }
+ }
+ var beforeOnchange = _this.main.beforeOnChange(currentValues);
+ if (beforeOnchange !== false) {
+ shouldUpdate = true;
+ }
+ }
+ if (shouldUpdate) {
+ _this.main.data.removeFromSelected(optionObj.id, 'id');
+ _this.main.render();
+ _this.main.select.setValue();
+ _this.main.data.onDataChange();
+ }
+ };
+ value.appendChild(deleteSpan);
+ }
+ return value;
+ };
+ Slim.prototype.contentDiv = function () {
+ var container = document.createElement('div');
+ container.classList.add(this.main.config.content);
+ return container;
+ };
+ Slim.prototype.searchDiv = function () {
+ var _this = this;
+ var container = document.createElement('div');
+ var input = document.createElement('input');
+ var addable = document.createElement('div');
+ container.classList.add(this.main.config.search);
+ var searchReturn = {
+ container: container,
+ input: input
+ };
+ if (!this.main.config.showSearch) {
+ container.classList.add(this.main.config.hide);
+ input.readOnly = true;
+ }
+ input.type = 'search';
+ input.placeholder = this.main.config.searchPlaceholder;
+ input.tabIndex = 0;
+ input.setAttribute('aria-label', this.main.config.searchPlaceholder);
+ input.setAttribute('autocapitalize', 'off');
+ input.setAttribute('autocomplete', 'off');
+ input.setAttribute('autocorrect', 'off');
+ input.onclick = function (e) {
+ setTimeout(function () {
+ var target = e.target;
+ if (target.value === '') {
+ _this.main.search('');
+ }
+ }, 10);
+ };
+ input.onkeydown = function (e) {
+ if (e.key === 'ArrowUp') {
+ _this.main.open();
+ _this.highlightUp();
+ e.preventDefault();
+ }
+ else if (e.key === 'ArrowDown') {
+ _this.main.open();
+ _this.highlightDown();
+ e.preventDefault();
+ }
+ else if (e.key === 'Tab') {
+ if (!_this.main.data.contentOpen) {
+ setTimeout(function () { _this.main.close(); }, _this.main.config.timeoutDelay);
+ }
+ else {
+ _this.main.close();
+ }
+ }
+ else if (e.key === 'Enter') {
+ e.preventDefault();
+ }
+ };
+ input.onkeyup = function (e) {
+ var target = e.target;
+ if (e.key === 'Enter') {
+ if (_this.main.addable && e.ctrlKey) {
+ addable.click();
+ e.preventDefault();
+ e.stopPropagation();
+ return;
+ }
+ var highlighted = _this.list.querySelector('.' + _this.main.config.highlighted);
+ if (highlighted) {
+ highlighted.click();
+ }
+ }
+ else if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {
+ }
+ else if (e.key === 'Escape') {
+ _this.main.close();
+ }
+ else {
+ if (_this.main.config.showSearch && _this.main.data.contentOpen) {
+ _this.main.search(target.value);
+ }
+ else {
+ input.value = '';
+ }
+ }
+ e.preventDefault();
+ e.stopPropagation();
+ };
+ input.onfocus = function () { _this.main.open(); };
+ container.appendChild(input);
+ if (this.main.addable) {
+ addable.classList.add(this.main.config.addable);
+ addable.innerHTML = '+';
+ addable.onclick = function (e) {
+ if (_this.main.addable) {
+ e.preventDefault();
+ e.stopPropagation();
+ var inputValue = _this.search.input.value;
+ if (inputValue.trim() === '') {
+ _this.search.input.focus();
+ return;
+ }
+ var addableValue = _this.main.addable(inputValue);
+ var addableValueStr_1 = '';
+ if (!addableValue) {
+ return;
+ }
+ if (typeof addableValue === 'object') {
+ var validValue = (0, data_1.validateOption)(addableValue);
+ if (validValue) {
+ _this.main.addData(addableValue);
+ addableValueStr_1 = (addableValue.value ? addableValue.value : addableValue.text);
+ }
+ }
+ else {
+ _this.main.addData(_this.main.data.newOption({
+ text: addableValue,
+ value: addableValue
+ }));
+ addableValueStr_1 = addableValue;
+ }
+ _this.main.search('');
+ setTimeout(function () {
+ _this.main.set(addableValueStr_1, 'value', false, false);
+ }, 100);
+ if (_this.main.config.closeOnSelect) {
+ setTimeout(function () {
+ _this.main.close();
+ }, 100);
+ }
+ }
+ };
+ container.appendChild(addable);
+ searchReturn.addable = addable;
+ }
+ return searchReturn;
+ };
+ Slim.prototype.highlightUp = function () {
+ var highlighted = this.list.querySelector('.' + this.main.config.highlighted);
+ var prev = null;
+ if (highlighted) {
+ prev = highlighted.previousSibling;
+ while (prev !== null) {
+ if (prev.classList.contains(this.main.config.disabled)) {
+ prev = prev.previousSibling;
+ continue;
+ }
+ else {
+ break;
+ }
+ }
+ }
+ else {
+ var allOptions = this.list.querySelectorAll('.' + this.main.config.option + ':not(.' + this.main.config.disabled + ')');
+ prev = allOptions[allOptions.length - 1];
+ }
+ if (prev && prev.classList.contains(this.main.config.optgroupLabel)) {
+ prev = null;
+ }
+ if (prev === null) {
+ var parent_1 = highlighted.parentNode;
+ if (parent_1.classList.contains(this.main.config.optgroup)) {
+ if (parent_1.previousSibling) {
+ var prevNodes = parent_1.previousSibling.querySelectorAll('.' + this.main.config.option + ':not(.' + this.main.config.disabled + ')');
+ if (prevNodes.length) {
+ prev = prevNodes[prevNodes.length - 1];
+ }
+ }
+ }
+ }
+ if (prev) {
+ if (highlighted) {
+ highlighted.classList.remove(this.main.config.highlighted);
+ }
+ prev.classList.add(this.main.config.highlighted);
+ (0, helper_1.ensureElementInView)(this.list, prev);
+ }
+ };
+ Slim.prototype.highlightDown = function () {
+ var highlighted = this.list.querySelector('.' + this.main.config.highlighted);
+ var next = null;
+ if (highlighted) {
+ next = highlighted.nextSibling;
+ while (next !== null) {
+ if (next.classList.contains(this.main.config.disabled)) {
+ next = next.nextSibling;
+ continue;
+ }
+ else {
+ break;
+ }
+ }
+ }
+ else {
+ next = this.list.querySelector('.' + this.main.config.option + ':not(.' + this.main.config.disabled + ')');
+ }
+ if (next === null && highlighted !== null) {
+ var parent_2 = highlighted.parentNode;
+ if (parent_2.classList.contains(this.main.config.optgroup)) {
+ if (parent_2.nextSibling) {
+ var sibling = parent_2.nextSibling;
+ next = sibling.querySelector('.' + this.main.config.option + ':not(.' + this.main.config.disabled + ')');
+ }
+ }
+ }
+ if (next) {
+ if (highlighted) {
+ highlighted.classList.remove(this.main.config.highlighted);
+ }
+ next.classList.add(this.main.config.highlighted);
+ (0, helper_1.ensureElementInView)(this.list, next);
+ }
+ };
+ Slim.prototype.listDiv = function () {
+ var list = document.createElement('div');
+ list.classList.add(this.main.config.list);
+ list.setAttribute('role', 'listbox');
+ return list;
+ };
+ Slim.prototype.options = function (content) {
+ if (content === void 0) { content = ''; }
+ var data = this.main.data.filtered || this.main.data.data;
+ this.list.innerHTML = '';
+ if (content !== '') {
+ var searching = document.createElement('div');
+ searching.classList.add(this.main.config.option);
+ searching.classList.add(this.main.config.disabled);
+ searching.innerHTML = content;
+ this.list.appendChild(searching);
+ return;
+ }
+ if (this.main.config.isAjax && this.main.config.isSearching) {
+ var searching = document.createElement('div');
+ searching.classList.add(this.main.config.option);
+ searching.classList.add(this.main.config.disabled);
+ searching.innerHTML = this.main.config.searchingText;
+ this.list.appendChild(searching);
+ return;
+ }
+ if (data.length === 0) {
+ var noResults = document.createElement('div');
+ noResults.classList.add(this.main.config.option);
+ noResults.classList.add(this.main.config.disabled);
+ noResults.innerHTML = this.main.config.searchText;
+ this.list.appendChild(noResults);
+ return;
+ }
+ var _loop_1 = function (d) {
+ if (d.hasOwnProperty('label')) {
+ var item = d;
+ var optgroupEl_1 = document.createElement('div');
+ optgroupEl_1.classList.add(this_1.main.config.optgroup);
+ var optgroupLabel = document.createElement('div');
+ optgroupLabel.classList.add(this_1.main.config.optgroupLabel);
+ if (this_1.main.config.selectByGroup && this_1.main.config.isMultiple) {
+ optgroupLabel.classList.add(this_1.main.config.optgroupLabelSelectable);
+ }
+ optgroupLabel.innerHTML = item.label;
+ optgroupEl_1.appendChild(optgroupLabel);
+ var options = item.options;
+ if (options) {
+ for (var _a = 0, options_1 = options; _a < options_1.length; _a++) {
+ var o = options_1[_a];
+ optgroupEl_1.appendChild(this_1.option(o));
+ }
+ if (this_1.main.config.selectByGroup && this_1.main.config.isMultiple) {
+ var master_1 = this_1;
+ optgroupLabel.addEventListener('click', function (e) {
+ e.preventDefault();
+ e.stopPropagation();
+ for (var _i = 0, _a = optgroupEl_1.children; _i < _a.length; _i++) {
+ var childEl = _a[_i];
+ if (childEl.className.indexOf(master_1.main.config.option) !== -1) {
+ childEl.click();
+ }
+ }
+ });
+ }
+ }
+ this_1.list.appendChild(optgroupEl_1);
+ }
+ else {
+ this_1.list.appendChild(this_1.option(d));
+ }
+ };
+ var this_1 = this;
+ for (var _i = 0, data_2 = data; _i < data_2.length; _i++) {
+ var d = data_2[_i];
+ _loop_1(d);
+ }
+ };
+ Slim.prototype.option = function (data) {
+ if (data.placeholder) {
+ var placeholder = document.createElement('div');
+ placeholder.classList.add(this.main.config.option);
+ placeholder.classList.add(this.main.config.hide);
+ return placeholder;
+ }
+ var optionEl = document.createElement('div');
+ optionEl.classList.add(this.main.config.option);
+ optionEl.setAttribute('role', 'option');
+ if (data["class"]) {
+ data["class"].split(' ').forEach(function (dataClass) {
+ optionEl.classList.add(dataClass);
+ });
+ }
+ if (data.style) {
+ optionEl.style.cssText = data.style;
+ }
+ var selected = this.main.data.getSelected();
+ optionEl.dataset.id = data.id;
+ if (this.main.config.searchHighlight && this.main.slim && data.innerHTML && this.main.slim.search.input.value.trim() !== '') {
+ optionEl.innerHTML = (0, helper_1.highlight)(data.innerHTML, this.main.slim.search.input.value, this.main.config.searchHighlighter);
+ }
+ else if (data.innerHTML) {
+ optionEl.innerHTML = data.innerHTML;
+ }
+ if (this.main.config.showOptionTooltips && optionEl.textContent) {
+ optionEl.setAttribute('title', optionEl.textContent);
+ }
+ var master = this;
+ optionEl.addEventListener('click', function (e) {
+ e.preventDefault();
+ e.stopPropagation();
+ var element = this;
+ var elementID = element.dataset.id;
+ if (data.selected === true && master.main.config.allowDeselectOption) {
+ var shouldUpdate = false;
+ if (!master.main.beforeOnChange || !master.main.config.isMultiple) {
+ shouldUpdate = true;
+ }
+ if (master.main.beforeOnChange && master.main.config.isMultiple) {
+ var selectedValues = master.main.data.getSelected();
+ var currentValues = JSON.parse(JSON.stringify(selectedValues));
+ for (var i = 0; i < currentValues.length; i++) {
+ if (currentValues[i].id === elementID) {
+ currentValues.splice(i, 1);
+ }
+ }
+ var beforeOnchange = master.main.beforeOnChange(currentValues);
+ if (beforeOnchange !== false) {
+ shouldUpdate = true;
+ }
+ }
+ if (shouldUpdate) {
+ if (master.main.config.isMultiple) {
+ master.main.data.removeFromSelected(elementID, 'id');
+ master.main.render();
+ master.main.select.setValue();
+ master.main.data.onDataChange();
+ }
+ else {
+ master.main.set('');
+ }
+ }
+ }
+ else {
+ if (data.disabled || data.selected) {
+ return;
+ }
+ if (master.main.config.limit && Array.isArray(selected) && master.main.config.limit <= selected.length) {
+ return;
+ }
+ if (master.main.beforeOnChange) {
+ var value = void 0;
+ var objectInfo = JSON.parse(JSON.stringify(master.main.data.getObjectFromData(elementID)));
+ objectInfo.selected = true;
+ if (master.main.config.isMultiple) {
+ value = JSON.parse(JSON.stringify(selected));
+ value.push(objectInfo);
+ }
+ else {
+ value = JSON.parse(JSON.stringify(objectInfo));
+ }
+ var beforeOnchange = master.main.beforeOnChange(value);
+ if (beforeOnchange !== false) {
+ master.main.set(elementID, 'id', master.main.config.closeOnSelect);
+ }
+ }
+ else {
+ master.main.set(elementID, 'id', master.main.config.closeOnSelect);
+ }
+ }
+ });
+ var isSelected = selected && (0, helper_1.isValueInArrayOfObjects)(selected, 'id', data.id);
+ if (data.disabled || isSelected) {
+ optionEl.onclick = null;
+ if (!master.main.config.allowDeselectOption) {
+ optionEl.classList.add(this.main.config.disabled);
+ }
+ if (master.main.config.hideSelectedOption) {
+ optionEl.classList.add(this.main.config.hide);
+ }
+ }
+ if (isSelected) {
+ optionEl.classList.add(this.main.config.optionSelected);
+ }
+ else {
+ optionEl.classList.remove(this.main.config.optionSelected);
+ }
+ return optionEl;
+ };
+ return Slim;
+ }());
+ exports.Slim = Slim;
+
+
+ /***/ })
+ /******/ ])["default"];
+});
diff --git a/app/services/ephemeral_authorization_handler.rb b/app/services/ephemeral_authorization_handler.rb
new file mode 100644
index 0000000..1f8a2fe
--- /dev/null
+++ b/app/services/ephemeral_authorization_handler.rb
@@ -0,0 +1,31 @@
+# frozen_string_literal: true
+
+class EphemeralAuthorizationHandler < Decidim::AuthorizationHandler
+ # Define the attributes you need for this authorization handler. Attributes
+ # are defined using Decidim::AttributeObject
+ attribute :phone_number, Integer
+ attribute :phone_country, String
+
+ validates :phone_country, presence: true
+ validates :phone_number, numericality: { greater_than: 0 }, presence: true
+
+ # If you need to store any of the defined attributes in the authorization you
+ # can do it here.
+ #
+ # You must return a Hash that will be serialized to the authorization when
+ # it is created, and available though authorization.metadata
+ def metadata
+ super.merge(phone_number:, phone_country:)
+ end
+
+ # If set, enforces the handler to validate the uniqueness of the field
+ def unique_id
+ return nil if phone_number.blank?
+
+ Decidim::EphemeralAuthorizationHandler::PhoneNumberFormatter.new(phone_number:, iso_country_code: phone_country).format
+ end
+
+ def self.ephemeral?
+ true
+ end
+end
diff --git a/app/views/decidim/ephemeral_authorization_handler/verification/authorizations/sms.html.erb b/app/views/decidim/ephemeral_authorization_handler/verification/authorizations/sms.html.erb
new file mode 100644
index 0000000..e359ffe
--- /dev/null
+++ b/app/views/decidim/ephemeral_authorization_handler/verification/authorizations/sms.html.erb
@@ -0,0 +1,28 @@
+
+
+ <%= t(".welcome", organization: translated_attribute(current_organization.name)).html_safe %>
+
+
+
+
+ <%= decidim_form_for(@form, url: verify_authorization_path, method: :post, class: "block") do |form| %>
+
+
+ <%= form.select :phone_country, phone_country_options(form.object.phone_country), { id: "omniauth_country", include_blank: true }, class: "country-select" %>
+
+
+ <%= form.number_field :phone_number, class: "w-full" %>
+
+
+
+
+ <%= form.submit t(".submit"), class:"button button__sm md:button__lg button__secondary w-40" %>
+
+
+ <% end %>
+
+
+
+
+<%= append_javascript_pack_tag "decidim_ephemeral_authorization_handler" %>
+<%= append_javascript_pack_tag "decidim_select_country" %>
diff --git a/app/views/decidim/ephemeral_authorization_handler/verification/authorizations/verify_sms_code.html.erb b/app/views/decidim/ephemeral_authorization_handler/verification/authorizations/verify_sms_code.html.erb
new file mode 100644
index 0000000..f33c8e4
--- /dev/null
+++ b/app/views/decidim/ephemeral_authorization_handler/verification/authorizations/verify_sms_code.html.erb
@@ -0,0 +1,38 @@
+
+
+ <%= t(".welcome", organization: translated_attribute(current_organization.name)).html_safe %>
+
+
+
+
+
+
<%= t(".enter_code") %>
+
+ <%= decidim_form_for(@form, url: verify_submitted_code_authorization_path, method: :post, class: "form-defaults") do |form| %>
+
+ <% end %>
+
+ <%= t(".have_not_received") %>
+ <%= link_to t(".resend_code"), sms_authorization_path %>
+
+
+
+
+
+<%= append_javascript_pack_tag "decidim_ephemeral_authorization_handler" %>
diff --git a/config/assets.rb b/config/assets.rb
index 396b6d7..60eaeda 100644
--- a/config/assets.rb
+++ b/config/assets.rb
@@ -4,6 +4,7 @@
Decidim::Shakapacker.register_path("#{base_path}/app/packs")
Decidim::Shakapacker.register_entrypoints(
- decidim_ephemeral_authorization_handler: "#{base_path}/app/packs/entrypoints/decidim_ephemeral_authorization_handler.js"
+ decidim_ephemeral_authorization_handler: "#{base_path}/app/packs/entrypoints/decidim_ephemeral_authorization_handler.js",
+ decidim_select_country: "#{base_path}/app/packs/entrypoints/decidim_select_country.js"
)
Decidim::Shakapacker.register_stylesheet_import("stylesheets/decidim/ephemeral_authorization_handler/ephemeral_authorization_handler")
diff --git a/config/i18n-tasks.yml b/config/i18n-tasks.yml
index 32a2efb..d4024e7 100644
--- a/config/i18n-tasks.yml
+++ b/config/i18n-tasks.yml
@@ -8,3 +8,12 @@ ignore_unused:
ignore_missing:
- decidim.participatory_processes.scopes.global
+ - decidim.forms.errors.error
+ - decidim.verifications.authorizations.create.success
+ - decidim.verifications.authorizations.create.transferred
+ - decidim.ephemeral_authorization_handler.sms.success
+ - decidim.ephemeral_authorization_handler.sms.error
+ - decidim.ephemeral_authorization_handler.verification.authorizations.sms.*
+ - decidim.ephemeral_authorization_handler.verification.authorizations.verify_sms_code.*
+ - decidim.authorization_handlers.ephemeral_authorization_handler.*
+ - decidim.components.ephemeral_authorization_handler.*
diff --git a/config/locales/de.yml b/config/locales/de.yml
new file mode 100644
index 0000000..0a5d26e
--- /dev/null
+++ b/config/locales/de.yml
@@ -0,0 +1,40 @@
+---
+de:
+ decidim:
+ authorization_handlers:
+ ephemeral_authorization_handler:
+ explanation: Lassen Sie sich verifizieren, indem Sie einen an Ihr Mobiltelefon
+ gesendeten Code eingeben.
+ fields:
+ phone_number: telefonnummer
+ name: Ephemere Autorisierungsbearbeiter per SMS
+ components:
+ ephemeral_authorization_handler:
+ name: Ephemere Autorisierungsbearbeiter
+ ephemeral_authorization_handler:
+ sms:
+ error: Ein Fehler ist aufgetreten und wurde protokolliert. Bitte versuchen
+ Sie es erneut. Wenn der Fehler weiterhin besteht, wenden Sie sich bitte
+ an den Plattform-Support, um weitere Unterstützung zu erhalten.
+ success: Verifizierungscode an %{phone_number} gesendet.
+ verification:
+ authorizations:
+ sms:
+ error: Es ist ein Fehler aufgetreten, der protokolliert wurde. Bitte versuchen
+ Sie es erneut. Sollte der Fehler weiterhin bestehen, wenden Sie sich
+ bitte an den Plattform-Support, um weitere Hilfe zu erhalten.
+ have_not_received: Haben Sie ihn nicht erhalten?
+ resend_code: Code erneut senden
+ submit: Absenden
+ success: Bestätigungscode wurde gesendet an %{phone_number}.
+ welcome: Willkommen auf der %{organization}-Plattform!
+ verify_sms_code:
+ enter_code: 'Bitte geben Sie den Code ein:'
+ error: Der eingegebene Code ist ungültig
+ have_not_received: Haben Sie ihn nicht erhalten?
+ inputs: Ziffer %{count}
+ instruction: Sie sollten den Code an %{contact_info} erhalten haben.
+ resend_code: Code erneut senden
+ submit: Absenden
+ success: Verifizierung erfolgreich
+ welcome: Willkommen auf der %{organization}-Plattform!
diff --git a/config/locales/en.yml b/config/locales/en.yml
index b1fc940..b195905 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -1,6 +1,37 @@
---
en:
decidim:
+ authorization_handlers:
+ ephemeral_authorization_handler:
+ explanation: Get verified by entering a code sent to your mobile phone
+ fields:
+ phone_number: phone number
+ name: Ephemeral Authorization via SMS
components:
ephemeral_authorization_handler:
name: EphemeralAuthorizationHandler
+ ephemeral_authorization_handler:
+ sms:
+ error: An error occurred which has been logged, please try again. If the error
+ persists, please contact the platform support for further help.
+ success: Verification code sent to %{phone_number}.
+ verification:
+ authorizations:
+ sms:
+ error: An error occurred which has been logged, please try again. If the
+ error persists, please contact the platform support for further help.
+ have_not_received: You have not received it?
+ resend_code: Resend code
+ submit: Submit
+ success: Verification code sent to %{phone_number}.
+ welcome: Welcome to the %{organization} platform!
+ verify_sms_code:
+ enter_code: 'Please enter the code:'
+ error: The code entered is not valid
+ have_not_received: You have not received it?
+ inputs: digit number %{count}
+ instruction: You should have received the code to %{contact_info}
+ resend_code: Resend code
+ submit: Submit
+ success: Verification successful
+ welcome: Welcome to the %{organization} platform!
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
new file mode 100644
index 0000000..0620c31
--- /dev/null
+++ b/config/locales/fr.yml
@@ -0,0 +1,42 @@
+---
+fr:
+ decidim:
+ authorization_handlers:
+ ephemeral_authorization_handler:
+ explanation: Obtenir une vérification en saisissant un code envoyé sur votre
+ téléphone portable
+ fields:
+ phone_number: numéro de téléphone
+ name: Autorisation Ephémère par SMS
+ components:
+ ephemeral_authorization_handler:
+ name: Autorisation Ephémère
+ ephemeral_authorization_handler:
+ sms:
+ error: Une erreur est survenue, veuillez réessayer. Si l'erreur persiste,
+ veuillez contacter le support de la plateforme pour plus d'aide.
+ success: Code de vérification envoyé à %{phone_number}.
+ verification:
+ authorizations:
+ sms:
+ error: Une erreur est survenue, veuillez réessayer. Si l'erreur persiste,
+ veuillez contacter le support de la plateforme pour plus d'aide.
+ have_not_received: Vous ne l'avez pas reçu?
+ resend_code: Renvoyer le code
+ submit: Soumettre
+ success: Code de vérification envoyé à %{phone_number}.
+ welcome: Bienvenue sur la plateforme %{organization} ! .
+ verify_sms_code:
+ enter_code: 'Veuillez saisir le code :'
+ error: Le code saisi n'est pas valide
+ have_not_received: Vous ne l'avez pas reçu?
+ inputs: nombre de chiffres %{count}
+ instruction: Vous devriez avoir reçu le code au %{contact_info}
+ resend_code: Renvoyer le code
+ submit: Soumettre
+ success: Vérification réussie
+ welcome: Bienvenue sur la plateforme %{organization} !
+ layouts:
+ decidim:
+ header:
+ confirm_close_ephemeral_session: Si vous quittez la page, votre session temporaire sera fermée. Toutefois, votre progression et votre activité seront enregistrées. Si vous avez terminé votre activité, cliquez sur OK.
diff --git a/decidim-ephemeral_authorization_handler.gemspec b/decidim-ephemeral_authorization_handler.gemspec
index 24aa359..8f5b514 100644
--- a/decidim-ephemeral_authorization_handler.gemspec
+++ b/decidim-ephemeral_authorization_handler.gemspec
@@ -30,5 +30,6 @@ Gem::Specification.new do |s|
end
end
+ s.add_dependency "countries", "~> 5.1", ">= 5.1.2"
s.add_dependency "decidim-core", Decidim::EphemeralAuthorizationHandler.decidim_version
end
diff --git a/lib/decidim/ephemeral_authorization_handler.rb b/lib/decidim/ephemeral_authorization_handler.rb
index 757a8f6..d548c27 100644
--- a/lib/decidim/ephemeral_authorization_handler.rb
+++ b/lib/decidim/ephemeral_authorization_handler.rb
@@ -1,12 +1,29 @@
# frozen_string_literal: true
-require "decidim/ephemeral_authorization_handler/admin"
-require "decidim/ephemeral_authorization_handler/engine"
-require "decidim/ephemeral_authorization_handler/admin_engine"
+require_relative "ephemeral_authorization_handler/verification"
+require_relative "ephemeral_authorization_handler/version"
module Decidim
# This namespace holds the logic of the `EphemeralAuthorizationHandler` component. This component
# allows users to create ephemeral_authorization_handler in a participatory space.
module EphemeralAuthorizationHandler
+ include ActiveSupport::Configurable
+
+ autoload :PhoneNumberFormatter, "decidim/ephemeral_authorization_handler/phone_number_formatter"
+
+ # Default configuration digits to generate the auth code.
+ config_accessor :auth_code_length do
+ 4
+ end
+
+ # The country or countries to be selected in country selection
+ # during sms verification/authentication. The default is being set to nil
+ config_accessor :default_countries do
+ nil
+ end
+
+ config_accessor :code_ttl do
+ 5.minutes
+ end
end
end
diff --git a/lib/decidim/ephemeral_authorization_handler/admin.rb b/lib/decidim/ephemeral_authorization_handler/admin.rb
deleted file mode 100644
index 430862a..0000000
--- a/lib/decidim/ephemeral_authorization_handler/admin.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-# frozen_string_literal: true
-
-module Decidim
- module EphemeralAuthorizationHandler
- # This module contains all the domain logic associated to Decidim's EphemeralAuthorizationHandler
- # component admin panel.
- module Admin
- end
- end
-end
diff --git a/lib/decidim/ephemeral_authorization_handler/admin_engine.rb b/lib/decidim/ephemeral_authorization_handler/admin_engine.rb
deleted file mode 100644
index 0863a9d..0000000
--- a/lib/decidim/ephemeral_authorization_handler/admin_engine.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-# frozen_string_literal: true
-
-module Decidim
- module EphemeralAuthorizationHandler
- # This is the engine that runs on the public interface of `EphemeralAuthorizationHandler`.
- class AdminEngine < ::Rails::Engine
- isolate_namespace Decidim::EphemeralAuthorizationHandler::Admin
-
- paths["db/migrate"] = nil
- paths["lib/tasks"] = nil
-
- routes do
- # Add admin engine routes here
- # resources :ephemeral_authorization_handler do
- # collection do
- # resources :exports, only: [:create]
- # end
- # end
- # root to: "ephemeral_authorization_handler#index"
- end
-
- def load_seed
- nil
- end
- end
- end
-end
diff --git a/lib/decidim/ephemeral_authorization_handler/engine.rb b/lib/decidim/ephemeral_authorization_handler/engine.rb
deleted file mode 100644
index 4ac7430..0000000
--- a/lib/decidim/ephemeral_authorization_handler/engine.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-# frozen_string_literal: true
-
-require "rails"
-require "decidim/core"
-
-module Decidim
- module EphemeralAuthorizationHandler
- # This is the engine that runs on the public interface of ephemeral_authorization_handler.
- class Engine < ::Rails::Engine
- isolate_namespace Decidim::EphemeralAuthorizationHandler
-
- routes do
- # Add engine routes here
- # resources :ephemeral_authorization_handler
- # root to: "ephemeral_authorization_handler#index"
- end
-
- initializer "EphemeralAuthorizationHandler.shakapacker.assets_path" do
- Decidim.register_assets_path File.expand_path("app/packs", root)
- end
-
- initializer "EphemeralAuthorizationHandler.data_migrate", after: "decidim_core.data_migrate" do
- DataMigrate.configure do |config|
- config.data_migrations_path << root.join("db/data").to_s
- end
- end
- end
- end
-end
diff --git a/lib/decidim/ephemeral_authorization_handler/phone_number_formatter.rb b/lib/decidim/ephemeral_authorization_handler/phone_number_formatter.rb
new file mode 100644
index 0000000..a523877
--- /dev/null
+++ b/lib/decidim/ephemeral_authorization_handler/phone_number_formatter.rb
@@ -0,0 +1,27 @@
+# frozen_string_literal: true
+
+module Decidim
+ module EphemeralAuthorizationHandler
+ class PhoneNumberFormatter
+ def initialize(phone_number:, iso_country_code:)
+ @phone_number = phone_number
+ @iso_country_code = iso_country_code
+ end
+
+ def format
+ "#{phone_country_code}#{phone_number}"
+ end
+
+ def phone_country_code
+ country = ISO3166::Country.find_country_by_alpha2(iso_country_code)
+ return nil unless country
+
+ "+#{country.country_code}"
+ end
+
+ private
+
+ attr_reader :phone_number, :iso_country_code
+ end
+ end
+end
diff --git a/lib/decidim/ephemeral_authorization_handler/test/factories.rb b/lib/decidim/ephemeral_authorization_handler/test/factories.rb
index 307b304..d36e001 100644
--- a/lib/decidim/ephemeral_authorization_handler/test/factories.rb
+++ b/lib/decidim/ephemeral_authorization_handler/test/factories.rb
@@ -1,14 +1,14 @@
# frozen_string_literal: true
-require "decidim/components/namer"
+# require "decidim/components/namer"
require "decidim/core/test/factories"
-FactoryBot.define do
- factory :ephemeral_authorization_handler_component, parent: :component do
- name { Decidim::Components::Namer.new(participatory_space.organization.available_locales, :ephemeral_authorization_handler).i18n_name }
- manifest_name :ephemeral_authorization_handler
- participatory_space { create(:participatory_process, :with_steps) }
- end
+# FactoryBot.define do
+# factory :ephemeral_authorization_handler_component, parent: :component do
+# name { Decidim::Components::Namer.new(participatory_space.organization.available_locales, :ephemeral_authorization_handler).i18n_name }
+# manifest_name :ephemeral_authorization_handler
+# participatory_space { create(:participatory_process, :with_steps) }
+# end
- # Add engine factories here
-end
+# Add engine factories here
+# end
diff --git a/lib/decidim/ephemeral_authorization_handler/verification.rb b/lib/decidim/ephemeral_authorization_handler/verification.rb
new file mode 100644
index 0000000..48c1b2d
--- /dev/null
+++ b/lib/decidim/ephemeral_authorization_handler/verification.rb
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+require_relative "verification/admin"
+require_relative "verification/admin_engine"
+require_relative "verification/engine"
+require_relative "verification/workflow"
diff --git a/lib/decidim/ephemeral_authorization_handler/verification/admin.rb b/lib/decidim/ephemeral_authorization_handler/verification/admin.rb
new file mode 100644
index 0000000..f4c1e55
--- /dev/null
+++ b/lib/decidim/ephemeral_authorization_handler/verification/admin.rb
@@ -0,0 +1,12 @@
+# frozen_string_literal: true
+
+module Decidim
+ module EphemeralAuthorizationHandler
+ module Verification
+ # This module contains all the domain logic associated to Decidim's EphemeralAuthorizationHandler
+ # component admin panel.
+ module Admin
+ end
+ end
+ end
+end
diff --git a/lib/decidim/ephemeral_authorization_handler/verification/admin_engine.rb b/lib/decidim/ephemeral_authorization_handler/verification/admin_engine.rb
new file mode 100644
index 0000000..e0956b2
--- /dev/null
+++ b/lib/decidim/ephemeral_authorization_handler/verification/admin_engine.rb
@@ -0,0 +1,29 @@
+# frozen_string_literal: true
+
+module Decidim
+ module EphemeralAuthorizationHandler
+ module Verification
+ # This is the engine that runs on the public interface of `EphemeralAuthorizationHandler`.
+ class AdminEngine < ::Rails::Engine
+ isolate_namespace Decidim::EphemeralAuthorizationHandler::Verification::Admin
+
+ paths["db/migrate"] = nil
+ paths["lib/tasks"] = nil
+
+ # routes do
+ # Add admin engine routes here
+ # resources :ephemeral_authorization_handler do
+ # collection do
+ # resources :exports, only: [:create]
+ # end
+ # end
+ # root to: "ephemeral_authorization_handler#index"
+ # end
+
+ def load_seed
+ nil
+ end
+ end
+ end
+ end
+end
diff --git a/lib/decidim/ephemeral_authorization_handler/verification/engine.rb b/lib/decidim/ephemeral_authorization_handler/verification/engine.rb
new file mode 100644
index 0000000..19da369
--- /dev/null
+++ b/lib/decidim/ephemeral_authorization_handler/verification/engine.rb
@@ -0,0 +1,38 @@
+# frozen_string_literal: true
+
+require "rails"
+require "decidim/core"
+require "countries"
+
+module Decidim
+ module EphemeralAuthorizationHandler
+ module Verification
+ # This is the engine that runs on the public interface of ephemeral_authorization_handler.
+ class Engine < ::Rails::Engine
+ isolate_namespace Decidim::EphemeralAuthorizationHandler::Verification
+
+ routes do
+ resource :authorizations, only: [:new, :edit], as: :authorization do
+ get :sms, to: "authorizations#sms"
+ get :verify_sms_code, to: "authorizations#verify_sms_code"
+ post :verify, to: "authorizations#verify"
+ post :verify_submitted_code, to: "authorizations#verify_submitted_code"
+ get :renew, on: :collection
+ end
+
+ root to: "authorizations#new"
+ end
+
+ initializer "EphemeralAuthorizationHandler.shakapacker.assets_path" do
+ Decidim.register_assets_path File.expand_path("app/packs", root)
+ end
+
+ initializer "EphemeralAuthorizationHandler.data_migrate", after: "decidim_core.data_migrate" do
+ DataMigrate.configure do |config|
+ config.data_migrations_path << root.join("db/data").to_s
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/lib/decidim/ephemeral_authorization_handler/verification/workflow.rb b/lib/decidim/ephemeral_authorization_handler/verification/workflow.rb
new file mode 100644
index 0000000..773c939
--- /dev/null
+++ b/lib/decidim/ephemeral_authorization_handler/verification/workflow.rb
@@ -0,0 +1,10 @@
+# frozen_string_literal: true
+
+Decidim::Verifications.register_workflow(:ephemeral_authorization_handler) do |workflow|
+ workflow.ephemeral = true
+ workflow.engine = Decidim::EphemeralAuthorizationHandler::Verification::Engine
+ workflow.admin_engine = Decidim::EphemeralAuthorizationHandler::Verification::AdminEngine
+ workflow.expires_in = 1.month
+ workflow.renewable = true
+ workflow.time_between_renewals = 1.day
+end
diff --git a/spec/factories.rb b/spec/factories.rb
index 12421ad..54e7ae5 100644
--- a/spec/factories.rb
+++ b/spec/factories.rb
@@ -1,3 +1,4 @@
# frozen_string_literal: true
require "decidim/ephemeral_authorization_handler/test/factories"
+require "decidim/proposals/test/factories"
diff --git a/spec/forms/sms_code_form_spec.rb b/spec/forms/sms_code_form_spec.rb
new file mode 100644
index 0000000..229b14c
--- /dev/null
+++ b/spec/forms/sms_code_form_spec.rb
@@ -0,0 +1,55 @@
+# frozen_string_literal: true
+
+require "spec_helper"
+
+module Decidim
+ module EphemeralAuthorizationHandler
+ module Verification
+ describe SmsCodeForm do
+ subject { form }
+ let(:form) do
+ described_class.from_params(
+ attributes
+ )
+ end
+
+ let(:phone_number) { "0123456789" }
+ let(:phone_country) { "BR" }
+ let(:attributes) do
+ {
+ phone_number:,
+ phone_country:
+ }
+ end
+
+ context "when everything is OK" do
+ it { is_expected.to be_valid }
+ end
+
+ context "when there is no phone number" do
+ let(:phone_number) { nil }
+
+ it "is invalid" do
+ expect(subject).not_to be_valid
+ end
+ end
+
+ context "when there is no phone country" do
+ let(:phone_country) { nil }
+
+ it "is invalid" do
+ expect(subject).not_to be_valid
+ end
+ end
+
+ context "with invalid phone number format" do
+ let(:phone_number) { "-1234567" }
+
+ it "is invalid" do
+ expect(subject).not_to be_valid
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/spec/forms/verification_code_form_spec.rb b/spec/forms/verification_code_form_spec.rb
new file mode 100644
index 0000000..a4b7c92
--- /dev/null
+++ b/spec/forms/verification_code_form_spec.rb
@@ -0,0 +1,42 @@
+# frozen_string_literal: true
+
+require "spec_helper"
+
+module Decidim
+ module EphemeralAuthorizationHandler
+ module Verification
+ describe VerificationCodeForm do
+ subject { form }
+ let(:form) do
+ described_class.from_params(
+ attributes
+ )
+ end
+
+ let(:verification) { "0123" }
+ let(:current_locale) { "en" }
+ let(:organization) { create(:organization) }
+
+ let(:attributes) do
+ {
+ verification:,
+ current_locale:,
+ organization:
+ }
+ end
+
+ context "when everything is OK" do
+ it { is_expected.to be_valid }
+ end
+
+ context "when there is no verification code" do
+ let(:verification) { nil }
+
+ it "is invalid" do
+ expect(subject).not_to be_valid
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/spec/i18n_spec.rb b/spec/i18n_spec.rb
new file mode 100644
index 0000000..6991f01
--- /dev/null
+++ b/spec/i18n_spec.rb
@@ -0,0 +1,32 @@
+# frozen_string_literal: true
+
+require "i18n/tasks"
+
+describe "I18n sanity" do
+ let(:locales) do
+ "en, fr, de"
+ end
+
+ let(:i18n) { I18n::Tasks::BaseTask.new(locales: locales.split(",")) }
+ let(:missing_keys) { i18n.missing_keys }
+ let(:unused_keys) { i18n.unused_keys }
+ let(:non_normalized_paths) { i18n.non_normalized_paths }
+
+ it "does not have missing keys" do
+ expect(missing_keys).to be_empty, "#{missing_keys.inspect} are missing"
+ end
+
+ # it "does not have unused keys" do
+ # expect(unused_keys).to be_empty, "#{unused_keys.inspect} are unused"
+ # end
+
+ unless ENV["SKIP_NORMALIZATION"]
+ it "is normalized" do
+ error_message = "The following files need to be normalized:\n" \
+ "#{non_normalized_paths.map { |path| " #{path}" }.join("\n")}\n" \
+ "Please run `bundle exec i18n-tasks normalize --locales #{locales}` to fix them"
+
+ expect(non_normalized_paths).to be_empty, error_message
+ end
+ end
+end
diff --git a/spec/lib/decidim/ephemeral_authorization_handler/version_spec.rb b/spec/lib/decidim/ephemeral_authorization_handler/version_spec.rb
index b38d28b..c8eec42 100644
--- a/spec/lib/decidim/ephemeral_authorization_handler/version_spec.rb
+++ b/spec/lib/decidim/ephemeral_authorization_handler/version_spec.rb
@@ -7,7 +7,11 @@ module Decidim
subject { described_class }
it "has version" do
- expect(subject.version).to eq("0.31.2")
+ expect(subject.version).to eq("1.0.0")
+ end
+
+ it "has decidim_version" do
+ expect(subject.decidim_version).to eq("~> 0.31")
end
end
end
diff --git a/spec/permissions/admin/permissions_spec.rb b/spec/permissions/admin/permissions_spec.rb
index ed270f0..5101f23 100644
--- a/spec/permissions/admin/permissions_spec.rb
+++ b/spec/permissions/admin/permissions_spec.rb
@@ -6,7 +6,7 @@ module Decidim::EphemeralAuthorizationHandler::Admin
describe Permissions do
subject { described_class.new(user, permission_action, context).permissions.allowed? }
- let(:organization) { create :organization }
+ let(:organization) { create(:organization) }
let(:context) do
{
current_organization: organization
@@ -18,7 +18,7 @@ module Decidim::EphemeralAuthorizationHandler::Admin
let(:permission_action) { Decidim::PermissionAction.new(**action) }
context "when user is admin" do
- let(:user) { create :user, :admin, organization: organization }
+ let(:user) { create(:user, :admin, organization: organization) }
it { is_expected.to be_truthy }
@@ -32,7 +32,7 @@ module Decidim::EphemeralAuthorizationHandler::Admin
end
context "when user is not admin" do
- let(:user) { create :user, organization: organization }
+ let(:user) { create(:user, organization: organization) }
it_behaves_like "permission is not set"
end
diff --git a/spec/services/ephemeral_authorization_handler_spec.rb b/spec/services/ephemeral_authorization_handler_spec.rb
new file mode 100644
index 0000000..ddb0c12
--- /dev/null
+++ b/spec/services/ephemeral_authorization_handler_spec.rb
@@ -0,0 +1,67 @@
+# frozen_string_literal: true
+
+require "spec_helper"
+
+describe EphemeralAuthorizationHandler do
+ subject do
+ described_class.new(
+ phone_number:,
+ phone_country:
+ )
+ end
+
+ let(:phone_number) { "+0640123422" }
+ let(:phone_country) { "BR" }
+
+ context "when everything is valid" do
+ it "is valid" do
+ expect(subject).to be_valid
+ end
+ end
+
+ context "when phone number is nil" do
+ let(:phone_number) { nil }
+
+ it "is invalid" do
+ expect(subject).to be_invalid
+ end
+ end
+
+ context "when phone country is nil" do
+ let(:phone_country) { nil }
+
+ it "is invalid" do
+ expect(subject).to be_invalid
+ end
+ end
+
+ context "when invalid phone number format" do
+ let(:phone_number) { "-1234567" }
+
+ it "is invalid" do
+ expect(subject).not_to be_valid
+ end
+ end
+
+ describe "unique_id" do
+ context "when there is a phone number" do
+ it "returns a formatted phone number as unique id" do
+ expect(subject.unique_id).to eq("+55640123422")
+ end
+ end
+
+ context "when there is a no phone number" do
+ let(:phone_number) { nil }
+
+ it "returns nil as unique id" do
+ expect(subject.unique_id).to be_nil
+ end
+ end
+ end
+
+ describe "ephemeral" do
+ it "returns true" do
+ expect(described_class.ephemeral?).to be true
+ end
+ end
+end
diff --git a/spec/system/ephemeral_user_authorization_spec.rb b/spec/system/ephemeral_user_authorization_spec.rb
new file mode 100644
index 0000000..8f47750
--- /dev/null
+++ b/spec/system/ephemeral_user_authorization_spec.rb
@@ -0,0 +1,169 @@
+# frozen_string_literal: true
+
+require "spec_helper"
+
+# rubocop:disable RSpec/DescribeClass
+describe "Ephemeral user authorization" do
+ # rubocop:enable RSpec/DescribeClass
+ include_context "with a component"
+
+ let(:manifest_name) { "proposals" }
+ let!(:organization) do
+ create(:organization, available_authorizations: %w(ephemeral_authorization_handler))
+ end
+
+ let!(:proposal) { create(:proposal, component:) }
+ let(:permissions) do
+ { create: { authorization_handlers: { ephemeral_authorization_handler: {} } } }
+ end
+
+ let!(:component) do
+ create(
+ :proposal_component,
+ :with_creation_enabled,
+ manifest:,
+ participatory_space:,
+ permissions:
+ )
+ end
+
+ before do
+ switch_to_host(organization.host)
+ end
+
+ context "when not signed in" do
+ before do
+ visit main_component_path(component)
+ # rubocop:disable RSpec/AnyInstance
+ allow_any_instance_of(Decidim::EphemeralAuthorizationHandler::Verification::BaseVerification).to receive(:generate_code).and_return("1234")
+ # rubocop:enable RSpec/AnyInstance
+ end
+
+ context "and data does not match any user" do
+ it "creates an ephemeral user and allows to create a new proposal" do
+ ephemeral_users_count = Decidim::User.ephemeral.size
+ ephemeral_authorizations_count = Decidim::Authorization.where(name: "ephemeral_authorization_handler").size
+ click_on "New proposal"
+ # on sms form
+ expect(page).to have_content "Phone country"
+ expect(page).to have_content "Phone number"
+ fill_in "Phone number", with: "0123456789"
+ click_on "Submit"
+ # on verify_sms_code form
+ expect(page).to have_content("Please enter the code:")
+ fill_in "digit1", with: 1
+ fill_in "digit2", with: 2
+ fill_in "digit3", with: 3
+ fill_in "digit4", with: 4
+ # fill the hidden input that allows to verify code
+ page.execute_script(<<~JS)
+ document.querySelector('input[name="verification_code[verification]"]').value = '1234';
+ JS
+ click_on "Submit"
+ expect(page).to have_content("Verification successful")
+ expect(page).to have_content("Create new proposal")
+ # new ephemeral user and new authorization created
+ expect(Decidim::User.ephemeral.reload.size).to eq(ephemeral_users_count + 1)
+ expect(Decidim::Authorization.where(name: "ephemeral_authorization_handler").reload.size).to eq(ephemeral_authorizations_count + 1)
+ end
+ end
+
+ context "when the current user is ephemeral" do
+ before do
+ click_on "New proposal"
+ ephemeral_verification_process
+ end
+
+ context "when data matches an existing ephemeral user" do
+ it "the ephemeral user is able to recover its session" do
+ ephemeral_users_count = Decidim::User.ephemeral.size
+ ephemeral_authorizations_count = Decidim::Authorization.where(name: "ephemeral_authorization_handler").size
+ fill_in :proposal_title, with: "This is a new proposal"
+ fill_in :proposal_body, with: "The proposal includes a lot of ideas"
+ click_on "Continue"
+
+ expect(page).to have_content "Proposal successfully created. Saved as a Draft."
+
+ accept_confirm do
+ find("#main-bar [data-close]").click
+ end
+ sleep 2
+ visit main_component_path(component)
+ sleep 2
+ click_on "New proposal"
+ ephemeral_verification_process
+ # retrieving draft proposal
+ expect(page).to have_content "Edit proposal draft"
+ expect(page).to have_field :proposal_title, with: "This is a new proposal"
+ expect(page).to have_field :proposal_body, with: "The proposal includes a lot of ideas"
+ # new ephemeral user created but no new authorization as it is transferred
+ expect(Decidim::User.ephemeral.reload.size).to eq(ephemeral_users_count + 1)
+ expect(Decidim::Authorization.where(name: "ephemeral_authorization_handler").reload.size).to eq(ephemeral_authorizations_count)
+ end
+ end
+ end
+ end
+
+ context "when a regular user tries to create a new proposal" do
+ # default code is +376
+ let!(:first_authorization) { create(:authorization, :granted, user: ephemeral_user, name: "ephemeral_authorization_handler", unique_id: "+376123456789") }
+ let!(:ephemeral_user) { create(:user, :ephemeral, organization:) }
+ let!(:proposal) { create(:proposal, component:, users: [ephemeral_user]) }
+ let(:user) { create(:user, :confirmed, organization:) }
+
+ before do
+ login_as user, scope: :user
+ visit main_component_path(component)
+ # rubocop:disable RSpec/AnyInstance
+ allow_any_instance_of(Decidim::EphemeralAuthorizationHandler::Verification::BaseVerification).to receive(:generate_code).and_return("1234")
+ # rubocop:enable RSpec/AnyInstance
+ click_on "New proposal"
+ end
+
+ it "redirects to sms verification form" do
+ expect(page).to have_content "Phone country"
+ expect(page).to have_content "Phone number"
+ end
+
+ context "and verifies with the same data than an exisiting ephemeral user" do
+ before do
+ fill_in "Phone number", with: "0123456789"
+ click_on "Submit"
+ fill_in "digit1", with: 1
+ fill_in "digit2", with: 2
+ fill_in "digit3", with: 3
+ fill_in "digit4", with: 4
+ page.execute_script(<<~JS)
+ document.querySelector('input[name="verification_code[verification]"]').value = '1234';
+ JS
+ end
+
+ it "transfers the authorization" do
+ expect { click_on "Submit" }.not_to change(Decidim::Authorization, :count)
+ sleep 2
+ expect(Decidim::Authorization.where(user: ephemeral_user)).to be_blank
+ expect(first_authorization.reload.user).to eq(user)
+ end
+
+ it "transfers the authorship of the proposal" do
+ expect(proposal.authors).to contain_exactly(ephemeral_user)
+ click_on "Submit"
+ sleep 2
+ expect(proposal.reload.authors).to contain_exactly(user)
+ end
+ end
+ end
+
+ def ephemeral_verification_process
+ fill_in "Phone number", with: "0123456789"
+ click_on "Submit"
+ fill_in "digit1", with: 1
+ fill_in "digit2", with: 2
+ fill_in "digit3", with: 3
+ fill_in "digit4", with: 4
+ page.execute_script(<<~JS)
+ document.querySelector('input[name="verification_code[verification]"]').value = '1234';
+ JS
+ click_on "Submit"
+ end
+end
diff --git a/spec/system/user_manages_ephemeral_authorization_spec.rb b/spec/system/user_manages_ephemeral_authorization_spec.rb
new file mode 100644
index 0000000..6ba827b
--- /dev/null
+++ b/spec/system/user_manages_ephemeral_authorization_spec.rb
@@ -0,0 +1,77 @@
+# frozen_string_literal: true
+
+require "spec_helper"
+
+# rubocop:disable RSpec/DescribeClass
+describe "User manages ephemeral authorization" do
+ # rubocop:enable RSpec/DescribeClass
+ let!(:organization) do
+ create(:organization, available_authorizations: ["ephemeral_authorization_handler"])
+ end
+
+ let(:user) { create(:user, :confirmed) }
+
+ before do
+ switch_to_host(organization.host)
+ login_as user, scope: :user
+
+ visit decidim.account_path
+ click_on "Authorizations"
+ end
+
+ it "displays the authorization item" do
+ within ".authorizations-list" do
+ expect(page).to have_content("Ephemeral Authorization via SMS")
+ expect(page).to have_content("Get verified by entering a code sent to your mobile phone")
+ end
+ end
+
+ context "when accessing ephemeral authorization" do
+ before do
+ click_on "Ephemeral Authorization via SMS"
+ # rubocop:disable RSpec/AnyInstance
+ allow_any_instance_of(Decidim::EphemeralAuthorizationHandler::Verification::BaseVerification).to receive(:generate_code).and_return("1234")
+ # rubocop:enable RSpec/AnyInstance
+ end
+
+ it "displays sms form" do
+ expect(page).to have_content "Phone country"
+ expect(page).to have_content "Phone number"
+ end
+
+ it "allows user to fill sms form and verify_sms_code, and redirect to authorizations page" do
+ fill_in "Phone number", with: "0123456789"
+ click_on "Submit"
+
+ expect(page).to have_content("Please enter the code:")
+ find('input[name="digit1"]').set(1)
+ find('input[name="digit2"]').set(2)
+ find('input[name="digit3"]').set(3)
+ find('input[name="digit4"]').set(4)
+ # fill the hidden input that allows to verify code
+ page.execute_script(<<~JS)
+ document.querySelector('input[name="verification_code[verification]"]').value = '1234';
+ JS
+ click_on "Submit"
+ expect(page).to have_content("Participant settings - Authorizations")
+ expect(page).to have_content("Verification successful")
+ end
+
+ it "displays an error message if verification code is false" do
+ fill_in "Phone number", with: "0123456789"
+ click_on "Submit"
+
+ expect(page).to have_content("Please enter the code:")
+ find('input[name="digit1"]').set(0)
+ find('input[name="digit2"]').set(0)
+ find('input[name="digit3"]').set(0)
+ find('input[name="digit4"]').set(0)
+ # fill the hidden input that allows to verify code
+ page.execute_script(<<~JS)
+ document.querySelector('input[name="verification_code[verification]"]').value = '0000';
+ JS
+ click_on "Submit"
+ expect(page).to have_content("The code entered is not valid")
+ end
+ end
+end