{"version":3,"sources":["jsdelivr-header.js","/npm/spid-react-button-update@0.4.0/src/shared/providers.tsx","/npm/spid-react-button-update@0.4.0/src/shared/utils.ts","/npm/spid-react-button-update@0.4.0/src/shared/i18n.ts","/npm/spid-react-button-update@0.4.0/src/modalVariant/constants.tsx","/npm/spid-react-button-update@0.4.0/src/modalVariant/utils.tsx","/npm/spid-react-button-update@0.4.0/src/shared/ProviderButton.tsx","/npm/spid-react-button-update@0.4.0/src/modalVariant/ProvidersModal.tsx","/npm/spid-react-button-update@0.4.0/src/modalVariant/index.tsx","/npm/spid-react-button-update@0.4.0/src/dropdownVariant/constants.ts","/npm/spid-react-button-update@0.4.0/src/dropdownVariant/util.tsx","/npm/spid-react-button-update@0.4.0/src/dropdownVariant/ProvidersMenu.tsx","/npm/spid-react-button-update@0.4.0/src/dropdownVariant/index.tsx","/npm/spid-react-button-update@0.4.0/src/component.tsx"],"names":[],"mappings":"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","file":"/npm/spid-react-button-update@0.4.0/dist/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/spid-react-button-update@0.4.0/dist/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import ArubaSVGUrl from '/./svgs/idp-logos/spid-idp-arubaid.svg';\nimport InfocertSVGUrl from '/./svgs/idp-logos/spid-idp-infocertid.svg';\nimport PosteSVGUrl from '/./svgs/idp-logos/spid-idp-posteid.svg';\nimport SielteSVGUrl from '/./svgs/idp-logos/spid-idp-sielteid.svg';\nimport TimSVGUrl from '/./svgs/idp-logos/spid-idp-timid.svg';\nimport NamirialSVGUrl from '/./svgs/idp-logos/spid-idp-namirialid.svg';\nimport RegisterItSVGUrl from '/./svgs/idp-logos/spid-idp-spiditalia.svg';\nimport IntesaSVGUrl from '/./svgs/idp-logos/spid-idp-intesaid.svg';\nimport LepidaSVGUrl from '/./svgs/idp-logos/spid-idp-lepidaid.svg';\nimport TeamSystemSVGUrl from '/./svgs/idp-logos/spid-idp-teamsystemid.svg';\n\nimport providersList from './providers_meta.json';\n\nimport type { RegisteredProviderRecord } from './types';\n\n/**\n * This array of images has been carefully ordered alphabetically\n * to do the matching with the metadata from json, until\n * https://github.com/italia/spid-sp-access-button/issues/7 gets resolved\n */\nconst images = [\n  ArubaSVGUrl,\n  InfocertSVGUrl,\n  IntesaSVGUrl,\n  LepidaSVGUrl,\n  NamirialSVGUrl,\n  PosteSVGUrl,\n  RegisterItSVGUrl,\n  SielteSVGUrl,\n  TeamSystemSVGUrl,\n  TimSVGUrl\n];\n\nexport const providers: Readonly<RegisteredProviderRecord>[] = Object.entries(\n  providersList\n)\n  .sort(([idA], [idB]) => idA.localeCompare(idB))\n  .map(([entityName, entityID], i) => ({\n    protocols: ['SAML'],\n    entityName,\n    entityID,\n    active: true,\n    logo: images[i]\n  }));\n","import { ProviderRecord } from '..';\nimport { providers } from './providers';\nimport {\n  ConfigurationGET,\n  ConfigurationPOST,\n  Protocols,\n  RegisteredProviderRecord\n} from './types';\n\n// avoid http/https confusion and centralize this URL\nexport const SPID_URL = 'https://www.spid.gov.it';\n\nexport function mergeProviders(\n  providers: Readonly<RegisteredProviderRecord>[],\n  extraProviders: ProviderRecord[],\n  { sorted }: { sorted?: boolean } = {}\n): RegisteredProviderRecord[] {\n  const mergedList = [\n    ...providers.map((idp) => ({\n      ...idp,\n      active: !extraProviders.length\n    })),\n    ...extraProviders.map((idp) => ({\n      ...idp,\n      protocols: idp.protocols ?? ['SAML'],\n      active: true\n    }))\n  ];\n  if (!sorted) {\n    return mergedList;\n  }\n  return mergedList.sort((idpA, idpB) =>\n    idpA.entityName.localeCompare(idpB.entityName)\n  );\n}\n\nexport function validateURL(url: string | undefined) {\n  if (url == null || url.indexOf('{{idp}}') < 0) {\n    throw Error('URL parameter must contain the \"{{idp}} string');\n  }\n}\n\nexport function isGetMethod(\n  configuration: ConfigurationGET | ConfigurationPOST\n): configuration is ConfigurationGET {\n  return configuration.method.toUpperCase() === 'GET';\n}\n\nfunction dirtyCopy<T>(obj: T): T {\n  return JSON.parse(JSON.stringify(obj));\n}\n// Used for exporting\n/**\n * Returns a copy of the list of the official providers.\n * @private\n */\nexport const providersCopy = dirtyCopy(providers) as RegisteredProviderRecord[];\n\n/**\n * Returns a copy of the list of the official providers, already shuffled\n */\nexport function getShuffledProviders() {\n  return providersCopy.sort(() => Math.random() - 0.5);\n}\n\nexport function isProviderActive(\n  idp: RegisteredProviderRecord,\n  supported: string[],\n  protocol: Protocols,\n  extraProviders: ProviderRecord[]\n) {\n  const isExtraProviders = extraProviders.some(\n    ({ entityID }) => entityID === idp.entityID\n  );\n  return (\n    supported.indexOf(idp.entityID) > -1 &&\n    idp.protocols.indexOf(protocol) > -1 &&\n    (extraProviders.length === 0 || isExtraProviders) &&\n    idp.active\n  );\n}\n","import type { Languages } from './types';\n\nconst translations = {\n  naviga_indietro: {\n    it: 'Torna indietro',\n    en: 'Go back',\n    de: 'Gehen Sie zurück',\n    es: 'Regresar',\n    fr: 'Revenir'\n  },\n  alt_logo_SPID: {\n    it: 'Logo SPID',\n    en: 'Logo SPID',\n    de: 'Logo SPID',\n    es: 'Logo SPID',\n    fr: 'Logo SPID'\n  },\n  scegli_provider_SPID: {\n    it: 'Scegli il tuo provider SPID',\n    en: 'Choose your SPID provider',\n    de: 'Wähle Ihren SPIDProvider',\n    es: 'Escoge tu proveedor SPID',\n    fr: 'Choisissez votre fournisseur SPID'\n  },\n  annulla_accesso: {\n    it: 'Annulla',\n    en: 'Cancel',\n    de: 'Zurücknehmen',\n    es: 'Cancelar',\n    fr: 'Annuler'\n  },\n  non_hai_SPID: {\n    it: 'Non hai SPID?',\n    en: \"Don't have SPID?\",\n    de: 'Haben Sie nicht SPID?',\n    es: 'No tiene SPID?',\n    fr: \"Vous ñ'avez pas de SPID?\"\n  },\n  cosa_SPID: {\n    it: \"Cos'è SPID?\",\n    en: 'What is SPID?',\n    de: 'Was ist SPID?',\n    es: 'Qué es SPID?',\n    fr: 'Qu’est-ce que SPID?'\n  },\n  entra_con_SPID: {\n    it: 'Entra con SPID',\n    en: 'Sign in with SPID',\n    de: 'Loggen Sie mit SPID',\n    es: 'Ingresa con SPID',\n    fr: 'Connectez-vous avec SPID'\n  },\n  scopri_di_piu: {\n    it: 'Scopri di più.',\n    en: 'Learn more.',\n    de: 'Finde mehr heraus.',\n    es: 'Saber más',\n    fr: 'En savoir plus.'\n  },\n  accedi_con_idp: {\n    it: 'Accedi a SPID con {0}',\n    en: 'Access to SPID with {0}',\n    de: 'Zugriff auf SPID mit {0}',\n    es: 'Accede a SPID con {0}',\n    fr: 'Accès à SPID avec {0}'\n  },\n  idp_disabled: {\n    it: 'Provider non attivo',\n    en: 'Provider not enabled',\n    de: 'Provider nicht aktiviert',\n    es: 'Proveedor no disponible',\n    fr: 'Fournisseur non activé'\n  },\n  maggiori_info: {\n    it: 'Maggiori info',\n    en: 'More info',\n    de: 'Mehr info',\n    es: 'Más información',\n    fr: 'Plus d’info'\n  }\n} as const;\nconst placeholderRegex = /\\{\\d}/;\n\nexport type labelKeys = keyof typeof translations;\n\nexport type TranslateFn = (\n  labelKey: labelKeys,\n  placeholderValue?: string\n) => string;\n\nlet currentLang = 'it';\nexport const getTranslationFn = (language: Languages): TranslateFn => {\n  currentLang = language;\n  return (labelKey: labelKeys, placeholderValue?: string) => {\n    const text = translations[labelKey] && translations[labelKey][currentLang];\n    if (!text) {\n      throw Error(\n        `labelKey ${labelKey} non presente per la lingua selezionata ${currentLang}`\n      );\n    }\n    if (placeholderValue != null) {\n      return text.replace(placeholderRegex, placeholderValue);\n    }\n    return text;\n  };\n};\n/**\n * Returns the list of supported languages for the UI\n */\nexport const getSupportedLanguages = (): Languages[] =>\n  Object.keys(Object.values(translations)[0]) as Languages[];\n","export const DEFAULT_TRANSITION_TIME = 2000;\nexport const BUTTON_DELAY_TIME = 1.1;\nexport const DELAY_STEP = 0.1;\n\nexport const possibleStates = {\n  INIT: { type: 'init' },\n  ENTERING: { type: 'entering' },\n  ENTERED: { type: 'entered' },\n  EXITING: { type: 'exiting' },\n  EXITED: { type: 'exited' }\n} as const;\n\nexport const panelAnimClass = 'spid-button-panel-anim';\nexport const logoAnimationOutClass = 'spid-button-logo-animation-out';\nexport const emptyClass = '';\nexport const buttonIconAnimationClass = 'spid-button-icon-animation';\n\nexport const sizeMapping = {\n  sm: 'small',\n  md: 'medium',\n  l: 'large'\n};\n","import { SPIDButtonProps } from '../shared/types';\nimport {\n  buttonIconAnimationClass,\n  possibleStates,\n  sizeMapping,\n  emptyClass\n} from './constants';\nimport { ModalState } from './types';\n\nimport styles from './index.module.css';\nimport extraStyles from './extra.module.css';\n\n// the css module is fake for the modal, so we can just centralize the renaming logic here\nexport function getDefinedClasses(klasses: (string | undefined)[]) {\n  return klasses\n    .map(\n      (klass) => (klass && (styles[klass] || extraStyles[klass])) || emptyClass\n    )\n    .join(' ');\n}\n\n// do not wrap these results with the getDefinedClasses yet as they will be wrapped later on\n// on the components\ntype classesProps = Pick<\n  SPIDButtonProps,\n  'theme' | 'corners' | 'size' | 'fluid'\n>;\nexport function computeButtonClasses({\n  theme,\n  corners,\n  size,\n  fluid\n}: classesProps): string[] {\n  if (process.env.NODE_ENV === 'production') {\n    if (size === 'xl') {\n      console.log(\n        'Size \"xl\" is not supported by SPID React Button with Modal variant'\n      );\n    }\n  }\n  return [\n    theme,\n    corners,\n    size ? `size-${sizeMapping[size] || 'large'}` : null,\n    fluid ? 'fluid' : null\n  ]\n    .map((type) => (type != null ? `spid-button-${type}` : ''))\n    .filter(Boolean);\n}\n\nconst emptyClasses: string[] = [];\nexport function computeButtonTransitionClasses({\n  type\n}: ModalState): { wrapper: string[]; icon: string[] } {\n  const inClass = 'in';\n  switch (type) {\n    case possibleStates.ENTERING.type:\n      return {\n        wrapper: ['spid-button-transition'],\n        icon: [buttonIconAnimationClass, inClass]\n      };\n    case possibleStates.ENTERED.type:\n      return {\n        wrapper: emptyClasses,\n        icon: [buttonIconAnimationClass, inClass]\n      };\n    case possibleStates.EXITING.type:\n      return {\n        wrapper: ['spid-button-reverse-enter-transition'],\n        icon: [buttonIconAnimationClass]\n      };\n    case possibleStates.EXITED.type:\n      return { wrapper: emptyClasses, icon: [buttonIconAnimationClass] };\n    case possibleStates.INIT.type:\n      return { wrapper: emptyClasses, icon: emptyClasses };\n  }\n}\n\nexport function isVisible(modalState: ModalState) {\n  return modalState.type.includes('enter');\n}\n","import React, { useRef, useEffect } from 'react';\n\nimport { isGetMethod } from './utils';\n\nimport type { TranslateFn } from './i18n';\nimport type { RegisteredProviderRecord, SPIDButtonProps, Types } from './types';\n\nimport styles from './ProviderButton.module.css';\n\ntype ProviderButtonProps = Required<\n  Pick<SPIDButtonProps, 'url' | 'mapping' | 'configuration' | 'type'>\n> &\n  Pick<SPIDButtonProps, 'onProviderClicked'> & {\n    idp: RegisteredProviderRecord;\n    isActive: boolean;\n    i18n: TranslateFn;\n    className: string;\n    firstFocus: boolean;\n  };\nexport const SharedProviderButton = ({\n  idp,\n  configuration,\n  url,\n  isActive,\n  mapping,\n  i18n,\n  onProviderClicked,\n  className,\n  type,\n  firstFocus\n}: ProviderButtonProps) => {\n  const idpRef = useRef<HTMLAnchorElement | HTMLButtonElement | null>(null);\n  const entityID =\n    idp.entityID in mapping ? mapping[idp.entityID] : idp.entityID;\n  const actionURL = url.replace('{{idp}}', encodeURIComponent(entityID));\n  const linkTitle = isActive\n    ? i18n('accedi_con_idp', idp.entityName)\n    : i18n('idp_disabled');\n\n  const loginURL = isActive ? actionURL : undefined;\n\n  useEffect(() => {\n    if (firstFocus && idpRef.current) {\n      idpRef.current.focus();\n    }\n  }, [idpRef]);\n\n  if (isGetMethod(configuration)) {\n    return (\n      <a\n        ref={(el) => (idpRef.current = el)}\n        title={linkTitle}\n        href={loginURL}\n        // @ts-expect-error\n        disabled={!isActive}\n        className={type === 'modal' ? '' : className}\n        onClick={(e) =>\n          onProviderClicked && onProviderClicked(idp, loginURL, e)\n        }\n        role='link'\n        id={entityID}\n      >\n        <ProviderButtonContent idp={idp} title={linkTitle} type={type} />\n      </a>\n    );\n  }\n  return (\n    <form name='spid_idp_access' action={actionURL} method='POST'>\n      <button\n        ref={(el) => (idpRef.current = el)}\n        className={className}\n        id={entityID}\n        name={linkTitle}\n        title={linkTitle}\n        type='submit'\n        onClick={(e) => {\n          if (!isActive) {\n            e.preventDefault();\n          }\n          return onProviderClicked && onProviderClicked(idp, loginURL, e);\n        }}\n        disabled={!isActive}\n      >\n        <ProviderButtonContent idp={idp} title={linkTitle} type={type} />\n      </button>\n      <input type='hidden' name={configuration.fieldName} value={entityID} />\n      {Object.entries(configuration.extraFields || {}).map(\n        ([inputName, inputValue]) => {\n          return (\n            <input\n              key={inputName}\n              type='hidden'\n              name={inputName}\n              value={inputValue}\n            />\n          );\n        }\n      )}\n    </form>\n  );\n};\n\nconst ProviderButtonContent = ({\n  idp,\n  title,\n  type\n}: {\n  idp: RegisteredProviderRecord;\n  title: string;\n  type: Types;\n}) => {\n  if (idp.logo == null) {\n    return <span>{idp.entityName}</span>;\n  }\n  return (\n    <span>\n      <span className={styles.srOnly}>{title}</span>\n      <img\n        src={idp.logo}\n        alt={idp.entityName}\n        title={idp.entityName}\n        style={type === 'modal' ? { maxWidth: '90%' } : {}}\n      />\n    </span>\n  );\n};\n","import React from 'react';\nimport { FocusOn } from 'react-focus-on';\n\nimport SpidLogoAnimationBlackUrl from '/../shared/svgs/spid-logo-animation-black.svg';\nimport SpidLogoUrl from '/../shared/svgs/spid-logo.svg';\nimport CloseSvgUrl from '/../shared/svgs/close.svg';\n\nimport type {\n  RegisteredProviderRecord,\n  SPIDButtonProps\n} from '../shared/types';\n\nimport {\n  BUTTON_DELAY_TIME,\n  DELAY_STEP,\n  emptyClass,\n  logoAnimationOutClass,\n  panelAnimClass,\n  possibleStates\n} from './constants';\nimport type { ModalState } from './types';\nimport { isProviderActive, SPID_URL } from '../shared/utils';\nimport { isVisible, getDefinedClasses } from './utils';\nimport { TranslateFn } from '../shared/i18n';\n\nimport { SharedProviderButton } from '../shared/ProviderButton';\n\nconst ButtonImage = ({ url, altText }: { url: string; altText: string }) => (\n  <img aria-hidden='true' src={url} alt={altText} style={{ float: 'left' }} />\n);\n\nfunction getModalClasses({ type }: ModalState) {\n  const fadeInLeftClass = 'spid-button-fade-in-left';\n  switch (type) {\n    case possibleStates.ENTERING.type:\n      return {\n        panel: panelAnimClass,\n        buttonLogo: fadeInLeftClass,\n        buttonClose: fadeInLeftClass\n      };\n    case possibleStates.EXITING.type:\n      return {\n        panel: panelAnimClass,\n        buttonManIcon: logoAnimationOutClass\n      };\n    case possibleStates.ENTERED.type:\n    case possibleStates.EXITED.type:\n    case possibleStates.INIT.type: {\n      return {};\n    }\n  }\n}\n\ntype ProvidersModalProps = Required<\n  Pick<\n    SPIDButtonProps,\n    | 'supported'\n    | 'protocol'\n    | 'url'\n    | 'mapping'\n    | 'configuration'\n    | 'extraProviders'\n  >\n> &\n  Pick<SPIDButtonProps, 'onProviderClicked'> & {\n    i18n: TranslateFn;\n    visibility: ModalState;\n    providers: RegisteredProviderRecord[];\n    closeModal: () => void;\n  };\nexport const ProvidersModal = ({\n  i18n,\n  mapping,\n  visibility,\n  extraProviders = [],\n  supported,\n  providers,\n  protocol,\n  url,\n  closeModal,\n  configuration,\n  onProviderClicked\n}: ProvidersModalProps) => {\n  const {\n    panel: panelClasses,\n    buttonClose: buttonCloseClasses,\n    buttonLogo: buttonLogoClasses,\n    buttonManIcon: buttonManIconClasses\n  } = getModalClasses(visibility);\n\n  return (\n    <FocusOn\n      onClickOutside={closeModal}\n      onEscapeKey={closeModal}\n      enabled={isVisible(visibility)}\n    >\n      <section\n        className={getDefinedClasses(['spid-enter-container'])}\n        hidden={!isVisible(visibility)}\n        aria-modal='true'\n      >\n        <div className={getDefinedClasses(['spid-enter'])}>\n          <section\n            className={getDefinedClasses([\n              'spid-button-panel',\n              'spid-button-panel-select',\n              panelClasses\n            ])}\n            aria-label={i18n('scegli_provider_SPID')}\n            tabIndex={0}\n          >\n            <header className={getDefinedClasses(['spid-button-header'])}>\n              <div className={getDefinedClasses(['spid-button-panel-back'])}>\n                <div\n                  className={getDefinedClasses([\n                    'spid-button-logo',\n                    buttonLogoClasses\n                  ])}\n                >\n                  <ButtonImage\n                    url={SpidLogoUrl}\n                    altText={i18n('alt_logo_SPID')}\n                  />\n                </div>\n                <div\n                  className={getDefinedClasses([\n                    'spid-button-close-button',\n                    'spid-button-fade-out-right',\n                    buttonCloseClasses\n                  ])}\n                >\n                  <button\n                    tabIndex={0}\n                    className={getDefinedClasses([\n                      'spid-button-panel-close-button',\n                      'spid-button-navigable'\n                    ])}\n                    aria-label={i18n('naviga_indietro')}\n                    onClick={closeModal}\n                  >\n                    <ButtonImage\n                      url={CloseSvgUrl}\n                      altText={i18n('naviga_indietro')}\n                    />\n                  </button>\n                </div>\n              </div>\n            </header>\n            <div className={getDefinedClasses(['spid-button-panel-content'])}>\n              <img\n                className={getDefinedClasses([\n                  'spid-button-little-man-icon',\n                  buttonManIconClasses\n                ])}\n                src={SpidLogoAnimationBlackUrl}\n                alt={i18n('entra_con_SPID')}\n              />\n              <div\n                className={getDefinedClasses([\n                  'spid-button-panel-content-center'\n                ])}\n              >\n                <h1\n                  className={getDefinedClasses([\n                    'spid-enter-title-page',\n                    'spid-button-fade-in-bottom',\n                    'spid-button-fade-out-bottom'\n                  ])}\n                >\n                  {i18n('scegli_provider_SPID')}\n                </h1>\n                <div className={getDefinedClasses(['spid-idp-list'])}>\n                  {providers.map((idp, i) => {\n                    const isActive = isProviderActive(\n                      idp,\n                      supported,\n                      protocol,\n                      extraProviders\n                    );\n                    const {\n                      classNames,\n                      style\n                    }: {\n                      classNames: string;\n                      style?: Record<string, string>;\n                    } =\n                      visibility.type === possibleStates.ENTERING.type\n                        ? {\n                            classNames: 'spid-button-idp-fade-in',\n                            style: {\n                              animationDelay: `${\n                                BUTTON_DELAY_TIME + DELAY_STEP * (i + 1)\n                              }s`\n                            }\n                          }\n                        : { classNames: emptyClass };\n\n                    return (\n                      <span\n                        key={idp.entityID}\n                        className={getDefinedClasses([\n                          'spid-button-idp',\n                          classNames\n                        ])}\n                        style={style}\n                      >\n                        <SharedProviderButton\n                          idp={idp}\n                          mapping={mapping}\n                          url={url}\n                          isActive={isActive}\n                          i18n={i18n}\n                          configuration={configuration}\n                          onProviderClicked={onProviderClicked}\n                          className={getDefinedClasses([\n                            'spid-button-idp-button'\n                          ])}\n                          type='modal'\n                          firstFocus={i === 0}\n                        />\n                      </span>\n                    );\n                  })}\n                </div>\n                <div className={getDefinedClasses(['spid-non-hai-spid'])}>\n                  {i18n('non_hai_SPID')}{' '}\n                  <a\n                    href={SPID_URL + '/richiedi-spid'}\n                    target='_blank noreferrer'\n                  >\n                    {i18n('scopri_di_piu')}\n                  </a>\n                </div>\n              </div>\n              <div className={getDefinedClasses(['spid-foot-btn'])}>\n                <button\n                  className={getDefinedClasses(['spid-cancel-access-button'])}\n                  onClick={closeModal}\n                >\n                  {i18n('annulla_accesso')}\n                </button>\n              </div>\n            </div>\n          </section>\n        </div>\n      </section>\n    </FocusOn>\n  );\n};\n","import React, { useState, useEffect } from 'react';\nimport SpidIcoCircleLbUrl from '/../shared/svgs/spid-ico-circle-lb.svg';\nimport SpidIcoCircleBbUrl from '/../shared/svgs/spid-ico-circle-bb.svg';\n\nimport { getTranslationFn } from '../shared/i18n';\nimport {\n  computeButtonClasses,\n  computeButtonTransitionClasses,\n  isVisible,\n  getDefinedClasses\n} from './utils';\n\nimport { DEFAULT_TRANSITION_TIME, possibleStates } from './constants';\nimport {\n  mergeProviders,\n  validateURL,\n  getShuffledProviders\n} from '../shared/utils';\nimport { ProvidersModal } from './ProvidersModal';\n\nimport type { TranslateFn } from '../shared/i18n';\nimport type { SPIDButtonProps } from '../shared/types';\nimport type { ModalState } from './types';\n\nconst providersList = getShuffledProviders();\n\nconst LoginButton = ({\n  i18n,\n  theme,\n  corners,\n  fluid,\n  size,\n  toggleModal,\n  modalVisibility\n}: Pick<SPIDButtonProps, 'theme' | 'corners' | 'fluid' | 'size'> & {\n  i18n: TranslateFn;\n  modalVisibility: ModalState;\n  toggleModal: (prevState: boolean) => void;\n}) => {\n  const customStylingClasses = computeButtonClasses({\n    theme,\n    corners,\n    size,\n    fluid\n  });\n  const {\n    wrapper: wrapperTransitionClasses,\n    icon: iconButtonClasses\n  } = computeButtonTransitionClasses(modalVisibility);\n  const buttonImageUrl =\n    theme === 'negative' ? SpidIcoCircleLbUrl : SpidIcoCircleBbUrl;\n  return (\n    <button\n      className={getDefinedClasses([\n        'spid-button',\n        ...customStylingClasses,\n        ...wrapperTransitionClasses\n      ])}\n      onClick={() => toggleModal(true)}\n    >\n      <span\n        aria-hidden={!isVisible(modalVisibility)}\n        className={getDefinedClasses([\n          'spid-button-icon',\n          ...iconButtonClasses\n        ])}\n      >\n        <img\n          src={buttonImageUrl}\n          alt='Login logo'\n          className={getDefinedClasses(['spid-button-image-fix'])}\n        />\n      </span>\n      <span className={getDefinedClasses(['spid-button-text'])}>\n        {i18n('entra_con_SPID')}\n      </span>\n    </button>\n  );\n};\n\n/**\n * The specific component button with the modal.\n * Use this component when you want to minimize the footprint in your project.\n * It accepts the same props as the main component. The `type` prop is ignored in this case.\n *\n * @param props\n */\nexport const SPIDReactButton = ({\n  lang = 'it',\n  extraProviders = [],\n  corners = 'rounded',\n  fluid = true,\n  size = 'md',\n  theme = 'positive',\n  configuration = { method: 'GET' },\n  mapping = {},\n  protocol = 'SAML',\n  url,\n  sorted = false,\n  supported = providersList.map(({ entityID }) => entityID),\n  onProvidersShown,\n  onProvidersHidden,\n  onProviderClicked\n}: SPIDButtonProps) => {\n  const [state, setState] = useState<ModalState>(possibleStates.INIT);\n\n  useEffect(() => {\n    if (state.type === possibleStates.ENTERING.type) {\n      if (onProvidersShown) {\n        onProvidersShown();\n      }\n    }\n    if (state.type === possibleStates.EXITING.type) {\n      if (onProvidersHidden) {\n        onProvidersHidden();\n      }\n    }\n  }, [state]);\n\n  useEffect(() => {\n    let timer: NodeJS.Timeout;\n    if (state.type === possibleStates.ENTERING.type) {\n      timer = setTimeout(\n        () => setState(possibleStates.ENTERED),\n        DEFAULT_TRANSITION_TIME\n      );\n    }\n    if (state.type === possibleStates.EXITING.type) {\n      timer = setTimeout(\n        () => setState(possibleStates.EXITED),\n        DEFAULT_TRANSITION_TIME\n      );\n    }\n    return () => {\n      if (timer != null) {\n        clearTimeout(timer);\n      }\n    };\n  }, [state]);\n\n  validateURL(url);\n\n  const translateFn = getTranslationFn(lang);\n\n  const moreLoginProps = {\n    theme,\n    corners,\n    fluid,\n    size\n  };\n\n  const moreModalProps = {\n    extraProviders,\n    configuration,\n    url,\n    mapping,\n    protocol,\n    supported,\n    onProviderClicked\n  };\n\n  const mergedProviders = mergeProviders(providersList, extraProviders, {\n    sorted\n  });\n\n  return (\n    <div aria-live='polite'>\n      <ProvidersModal\n        visibility={state}\n        i18n={translateFn}\n        providers={mergedProviders}\n        closeModal={() => setState(possibleStates.EXITING)}\n        {...moreModalProps}\n      />\n      <LoginButton\n        modalVisibility={state}\n        i18n={translateFn}\n        toggleModal={(open: boolean) =>\n          setState(open ? possibleStates.ENTERING : possibleStates.EXITING)\n        }\n        {...moreLoginProps}\n      />\n    </div>\n  );\n};\n","export const sizeMapping = {\n  sm: 'small',\n  md: 'medium',\n  l: 'large',\n  xl: 'extraLarge'\n} as const;\n","import { sizeMapping } from './constants';\n\nimport type { Sizes } from '../shared/types';\n\nexport const getButtonSizeClass = (size: Sizes | 'xl') => {\n  return sizeMapping[size];\n};\n\nexport const getIdpButtonSizeClass = (size: Sizes | 'xl') => {\n  const currentSize = sizeMapping[size];\n  return 'idpButton' + currentSize[0].toUpperCase() + currentSize.slice(1);\n};\n","import React from 'react';\n\nimport { isProviderActive, SPID_URL } from '../shared/utils';\nimport { getIdpButtonSizeClass } from './util';\n\nimport type { TranslateFn } from '../shared/i18n';\nimport type {\n  RegisteredProviderRecord,\n  SPIDButtonProps\n} from '../shared/types';\n\nimport styles from './index.module.css';\nimport { SharedProviderButton } from '../shared/ProviderButton';\n\ntype ProvidersDropdownProps = Required<\n  Pick<\n    SPIDButtonProps,\n    | 'url'\n    | 'supported'\n    | 'mapping'\n    | 'size'\n    | 'configuration'\n    | 'protocol'\n    | 'extraProviders'\n  >\n> &\n  Pick<SPIDButtonProps, 'onProviderClicked'> & {\n    i18n: TranslateFn;\n    providers: RegisteredProviderRecord[];\n  };\nexport const ProvidersDropdown = ({\n  configuration,\n  supported,\n  url,\n  mapping,\n  i18n,\n  size,\n  protocol,\n  providers,\n  extraProviders,\n  onProviderClicked\n}: ProvidersDropdownProps) => {\n  return (\n    <div\n      className={`${styles.idpButton} ${styles.idpButtonTip} ${\n        styles[getIdpButtonSizeClass(size)]\n      }`}\n      aria-modal='true'\n    >\n      <ul\n        className={styles.idpButtonMenu}\n        aria-label={i18n('scegli_provider_SPID')}\n      >\n        {providers.map((idp, i) => {\n          const isActive = isProviderActive(\n            idp,\n            supported,\n            protocol,\n            extraProviders\n          );\n\n          const buttonClasses = `${styles.idpLogo} ${\n            isActive ? '' : styles.disabled\n          }`;\n          return (\n            <li data-idp={idp.entityName} key={idp.entityName}>\n              <SharedProviderButton\n                idp={idp}\n                url={url}\n                isActive={isActive}\n                mapping={mapping}\n                i18n={i18n}\n                configuration={configuration}\n                onProviderClicked={onProviderClicked}\n                className={buttonClasses}\n                type='dropdown'\n                firstFocus={i === 0}\n              />\n            </li>\n          );\n        })}\n        <li className={styles.supportLink}>\n          <a href={SPID_URL} target='_blank noreferrer'>\n            {i18n('maggiori_info')}\n          </a>\n        </li>\n        <li className={styles.supportLink}>\n          <a href={SPID_URL + '/#registrati'} target='_blank noreferrer'>\n            {i18n('non_hai_SPID')}\n          </a>\n        </li>\n      </ul>\n    </div>\n  );\n};\n","import React, { useState, useEffect } from 'react';\nimport { FocusOn } from 'react-focus-on';\n\nimport SpidIcoCircleBbUrl from '/../shared/svgs/spid-ico-circle-bb.svg';\nimport SpidIcoCircleLbUrl from '/../shared/svgs/spid-ico-circle-lb.svg';\nimport { getTranslationFn } from '../shared/i18n';\nimport { SPIDButtonProps } from '../shared/types';\nimport {\n  validateURL,\n  getShuffledProviders,\n  mergeProviders\n} from '../shared/utils';\n\nimport styles from './index.module.css';\nimport { ProvidersDropdown } from './ProvidersMenu';\nimport { getButtonSizeClass } from './util';\n\nconst shuffledProviders = getShuffledProviders();\n/**\n * The specific component button with the dropdown.\n * Use this component when you want to minimize the footprint in your project.\n * It accepts the same props as the main component. The `type` prop is ignored in this case.\n *\n * @param props\n */\nexport const SPIDReactButton = ({\n  url,\n  lang = 'it',\n  supported = shuffledProviders.map(({ entityID }) => entityID),\n  mapping = {},\n  size = 'md',\n  configuration = { method: 'GET' },\n  theme = 'positive',\n  protocol = 'SAML',\n  sorted = false,\n  extraProviders = [],\n  onProviderClicked,\n  onProvidersHidden,\n  onProvidersShown\n}: SPIDButtonProps) => {\n  const [openDropdown, toggleDropdown] = useState<boolean | undefined>(\n    undefined\n  );\n\n  const i18n = getTranslationFn(lang);\n\n  useEffect(() => {\n    if (openDropdown && onProvidersShown) {\n      onProvidersShown();\n    }\n    if (openDropdown === false && onProvidersHidden) {\n      onProvidersHidden();\n    }\n  }, [openDropdown]);\n\n  validateURL(url);\n\n  const mergedProviders = mergeProviders(shuffledProviders, extraProviders, {\n    sorted\n  });\n\n  const buttonImageUrl =\n    theme === 'negative' ? SpidIcoCircleLbUrl : SpidIcoCircleBbUrl;\n\n  return (\n    <FocusOn\n      onClickOutside={() => toggleDropdown(false)}\n      onEscapeKey={() => toggleDropdown(false)}\n      scrollLock={false}\n      enabled={openDropdown}\n    >\n      <div className={styles.container}>\n        <a\n          href='#'\n          className={`${styles.button} ${styles[getButtonSizeClass(size)]} ${\n            theme === 'positive' ? styles.theme : styles.themeNegative\n          }`}\n          aria-haspopup='true'\n          aria-expanded={openDropdown}\n          onClick={() => toggleDropdown(!openDropdown)}\n        >\n          <span className={styles.buttonIcon}>\n            <img src={buttonImageUrl} alt='Login logo' />\n          </span>\n          <span className={styles.buttonText}>{i18n('entra_con_SPID')}</span>\n        </a>\n        {openDropdown && (\n          <ProvidersDropdown\n            supported={supported}\n            url={url}\n            mapping={mapping}\n            i18n={i18n}\n            size={size}\n            configuration={configuration}\n            protocol={protocol}\n            providers={mergedProviders}\n            extraProviders={extraProviders}\n            onProviderClicked={onProviderClicked}\n          />\n        )}\n      </div>\n    </FocusOn>\n  );\n};\n","import React from 'react';\n\nimport { SPIDReactButton as SPIDReactButtonModal } from './modalVariant';\nimport { SPIDReactButton as SPIDReactButtonDropdown } from './dropdownVariant';\nimport type { SPIDButtonProps } from './shared/types';\n/**\n * The main component for the button.\n * Use this component with the `type` prop to select the version you prefer.\n * @param props\n */\nexport const SPIDReactButton = (props: SPIDButtonProps) => {\n  if (!props.type || props.type === 'modal') {\n    return <SPIDReactButtonModal {...props} />;\n  }\n  return <SPIDReactButtonDropdown {...props} />;\n};\n"]}