{"version":3,"file":"s3-explorer.umd.cjs","sources":["../../../node_modules/@azure/msal-common/dist/utils/Constants.mjs","../../../node_modules/@azure/msal-common/dist/error/AuthErrorCodes.mjs","../../../node_modules/@azure/msal-common/dist/error/AuthError.mjs","../../../node_modules/@azure/msal-common/dist/error/ClientAuthErrorCodes.mjs","../../../node_modules/@azure/msal-common/dist/error/ClientAuthError.mjs","../../../node_modules/@azure/msal-common/dist/crypto/ICrypto.mjs","../../../node_modules/@azure/msal-common/dist/logger/Logger.mjs","../../../node_modules/@azure/msal-common/dist/packageMetadata.mjs","../../../node_modules/@azure/msal-common/dist/authority/AuthorityOptions.mjs","../../../node_modules/@azure/msal-common/dist/error/ClientConfigurationErrorCodes.mjs","../../../node_modules/@azure/msal-common/dist/error/ClientConfigurationError.mjs","../../../node_modules/@azure/msal-common/dist/utils/StringUtils.mjs","../../../node_modules/@azure/msal-common/dist/request/ScopeSet.mjs","../../../node_modules/@azure/msal-common/dist/account/ClientInfo.mjs","../../../node_modules/@azure/msal-common/dist/account/AccountInfo.mjs","../../../node_modules/@azure/msal-common/dist/authority/AuthorityType.mjs","../../../node_modules/@azure/msal-common/dist/account/TokenClaims.mjs","../../../node_modules/@azure/msal-common/dist/authority/ProtocolMode.mjs","../../../node_modules/@azure/msal-common/dist/cache/entities/AccountEntity.mjs","../../../node_modules/@azure/msal-common/dist/account/AuthToken.mjs","../../../node_modules/@azure/msal-common/dist/utils/UrlUtils.mjs","../../../node_modules/@azure/msal-common/dist/url/UrlString.mjs","../../../node_modules/@azure/msal-common/dist/authority/AuthorityMetadata.mjs","../../../node_modules/@azure/msal-common/dist/error/CacheErrorCodes.mjs","../../../node_modules/@azure/msal-common/dist/error/CacheError.mjs","../../../node_modules/@azure/msal-common/dist/cache/CacheManager.mjs","../../../node_modules/@azure/msal-common/dist/telemetry/performance/PerformanceEvent.mjs","../../../node_modules/@azure/msal-common/dist/telemetry/performance/StubPerformanceClient.mjs","../../../node_modules/@azure/msal-common/dist/config/ClientConfiguration.mjs","../../../node_modules/@azure/msal-common/dist/account/CcsCredential.mjs","../../../node_modules/@azure/msal-common/dist/constants/AADServerParamKeys.mjs","../../../node_modules/@azure/msal-common/dist/request/RequestParameterBuilder.mjs","../../../node_modules/@azure/msal-common/dist/authority/OpenIdConfigResponse.mjs","../../../node_modules/@azure/msal-common/dist/authority/CloudInstanceDiscoveryResponse.mjs","../../../node_modules/@azure/msal-common/dist/authority/CloudInstanceDiscoveryErrorResponse.mjs","../../../node_modules/@azure/msal-common/dist/utils/FunctionWrappers.mjs","../../../node_modules/@azure/msal-common/dist/authority/RegionDiscovery.mjs","../../../node_modules/@azure/msal-common/dist/utils/TimeUtils.mjs","../../../node_modules/@azure/msal-common/dist/cache/utils/CacheHelpers.mjs","../../../node_modules/@azure/msal-common/dist/authority/Authority.mjs","../../../node_modules/@azure/msal-common/dist/authority/AuthorityFactory.mjs","../../../node_modules/@azure/msal-common/dist/error/ServerError.mjs","../../../node_modules/@azure/msal-common/dist/network/RequestThumbprint.mjs","../../../node_modules/@azure/msal-common/dist/network/ThrottlingUtils.mjs","../../../node_modules/@azure/msal-common/dist/error/NetworkError.mjs","../../../node_modules/@azure/msal-common/dist/client/BaseClient.mjs","../../../node_modules/@azure/msal-common/dist/error/InteractionRequiredAuthErrorCodes.mjs","../../../node_modules/@azure/msal-common/dist/error/InteractionRequiredAuthError.mjs","../../../node_modules/@azure/msal-common/dist/utils/ProtocolUtils.mjs","../../../node_modules/@azure/msal-common/dist/crypto/PopTokenGenerator.mjs","../../../node_modules/@azure/msal-common/dist/cache/persistence/TokenCacheContext.mjs","../../../node_modules/@azure/msal-common/dist/response/ResponseHandler.mjs","../../../node_modules/@azure/msal-common/dist/utils/ClientAssertionUtils.mjs","../../../node_modules/@azure/msal-common/dist/client/AuthorizationCodeClient.mjs","../../../node_modules/@azure/msal-common/dist/client/RefreshTokenClient.mjs","../../../node_modules/@azure/msal-common/dist/client/SilentFlowClient.mjs","../../../node_modules/@azure/msal-common/dist/network/INetworkModule.mjs","../../../node_modules/@azure/msal-common/dist/protocol/Authorize.mjs","../../../node_modules/@azure/msal-common/dist/telemetry/server/ServerTelemetryManager.mjs","../../../node_modules/@azure/msal-common/dist/error/JoseHeaderErrorCodes.mjs","../../../node_modules/@azure/msal-common/dist/error/JoseHeaderError.mjs","../../../node_modules/@azure/msal-common/dist/crypto/JoseHeader.mjs","../../../node_modules/@azure/msal-browser/dist/error/BrowserAuthErrorCodes.mjs","../../../node_modules/@azure/msal-browser/dist/error/BrowserAuthError.mjs","../../../node_modules/@azure/msal-browser/dist/utils/BrowserConstants.mjs","../../../node_modules/@azure/msal-browser/dist/encode/Base64Encode.mjs","../../../node_modules/@azure/msal-browser/dist/encode/Base64Decode.mjs","../../../node_modules/@azure/msal-browser/dist/crypto/BrowserCrypto.mjs","../../../node_modules/@azure/msal-browser/dist/error/BrowserConfigurationAuthErrorCodes.mjs","../../../node_modules/@azure/msal-browser/dist/error/BrowserConfigurationAuthError.mjs","../../../node_modules/@azure/msal-browser/dist/utils/BrowserUtils.mjs","../../../node_modules/@azure/msal-browser/dist/navigation/NavigationClient.mjs","../../../node_modules/@azure/msal-browser/dist/network/FetchClient.mjs","../../../node_modules/@azure/msal-browser/dist/config/Configuration.mjs","../../../node_modules/@azure/msal-browser/dist/packageMetadata.mjs","../../../node_modules/@azure/msal-browser/dist/cache/CacheKeys.mjs","../../../node_modules/@azure/msal-browser/dist/operatingcontext/BaseOperatingContext.mjs","../../../node_modules/@azure/msal-browser/dist/operatingcontext/StandardOperatingContext.mjs","../../../node_modules/@azure/msal-browser/dist/cache/DatabaseStorage.mjs","../../../node_modules/@azure/msal-browser/dist/cache/MemoryStorage.mjs","../../../node_modules/@azure/msal-browser/dist/cache/AsyncMemoryStorage.mjs","../../../node_modules/@azure/msal-browser/dist/crypto/CryptoOps.mjs","../../../node_modules/@azure/msal-browser/dist/cache/CookieStorage.mjs","../../../node_modules/@azure/msal-browser/dist/cache/CacheHelpers.mjs","../../../node_modules/@azure/msal-browser/dist/cache/EncryptedData.mjs","../../../node_modules/@azure/msal-browser/dist/cache/LocalStorage.mjs","../../../node_modules/@azure/msal-browser/dist/cache/SessionStorage.mjs","../../../node_modules/@azure/msal-browser/dist/event/EventType.mjs","../../../node_modules/@azure/msal-browser/dist/utils/Helpers.mjs","../../../node_modules/@azure/msal-browser/dist/cache/BrowserCacheManager.mjs","../../../node_modules/@azure/msal-browser/dist/cache/AccountManager.mjs","../../../node_modules/@azure/msal-browser/dist/event/EventHandler.mjs","../../../node_modules/@azure/msal-browser/dist/interaction_client/BaseInteractionClient.mjs","../../../node_modules/@azure/msal-browser/dist/request/RequestHelpers.mjs","../../../node_modules/@azure/msal-browser/dist/interaction_client/StandardInteractionClient.mjs","../../../node_modules/@azure/msal-browser/dist/utils/BrowserProtocolUtils.mjs","../../../node_modules/@azure/msal-browser/dist/response/ResponseHandler.mjs","../../../node_modules/@azure/msal-browser/dist/interaction_handler/InteractionHandler.mjs","../../../node_modules/@azure/msal-browser/dist/error/NativeAuthErrorCodes.mjs","../../../node_modules/@azure/msal-browser/dist/broker/nativeBroker/NativeStatusCodes.mjs","../../../node_modules/@azure/msal-browser/dist/error/NativeAuthError.mjs","../../../node_modules/@azure/msal-browser/dist/interaction_client/SilentCacheClient.mjs","../../../node_modules/@azure/msal-browser/dist/interaction_client/PlatformAuthInteractionClient.mjs","../../../node_modules/@azure/msal-browser/dist/protocol/Authorize.mjs","../../../node_modules/@azure/msal-browser/dist/crypto/PkceGenerator.mjs","../../../node_modules/@azure/msal-browser/dist/broker/nativeBroker/PlatformAuthExtensionHandler.mjs","../../../node_modules/@azure/msal-browser/dist/broker/nativeBroker/PlatformAuthDOMHandler.mjs","../../../node_modules/@azure/msal-browser/dist/broker/nativeBroker/PlatformAuthProvider.mjs","../../../node_modules/@azure/msal-browser/dist/interaction_client/PopupClient.mjs","../../../node_modules/@azure/msal-browser/dist/interaction_client/RedirectClient.mjs","../../../node_modules/@azure/msal-browser/dist/interaction_handler/SilentHandler.mjs","../../../node_modules/@azure/msal-browser/dist/interaction_client/SilentIframeClient.mjs","../../../node_modules/@azure/msal-browser/dist/interaction_client/SilentRefreshClient.mjs","../../../node_modules/@azure/msal-browser/dist/cache/TokenCache.mjs","../../../node_modules/@azure/msal-browser/dist/interaction_client/HybridSpaAuthorizationCodeClient.mjs","../../../node_modules/@azure/msal-browser/dist/interaction_client/SilentAuthCodeClient.mjs","../../../node_modules/@azure/msal-browser/dist/utils/MsalFrameStatsUtils.mjs","../../../node_modules/@azure/msal-browser/dist/controllers/StandardController.mjs","../../../node_modules/@azure/msal-browser/dist/controllers/ControllerFactory.mjs","../../../node_modules/@azure/msal-browser/dist/app/PublicClientApplication.mjs","../../../node_modules/@heroicons/react/24/outline/esm/ArrowDownTrayIcon.js","../../../node_modules/@heroicons/react/24/outline/esm/ArrowPathIcon.js","../../../node_modules/@heroicons/react/24/outline/esm/ArrowUpTrayIcon.js","../../../node_modules/@heroicons/react/24/outline/esm/ClockIcon.js","../../../node_modules/@heroicons/react/24/outline/esm/FolderPlusIcon.js","../../../node_modules/@heroicons/react/24/outline/esm/FolderIcon.js","../../../node_modules/@heroicons/react/24/outline/esm/GlobeAltIcon.js","../../../node_modules/@heroicons/react/24/outline/esm/PencilIcon.js","../../../node_modules/@heroicons/react/24/outline/esm/PlusIcon.js","../../../node_modules/@heroicons/react/24/outline/esm/ShareIcon.js","../../../node_modules/@heroicons/react/24/outline/esm/StopIcon.js","../../../node_modules/@heroicons/react/24/outline/esm/TrashIcon.js","../../../node_modules/@radix-ui/primitive/dist/index.mjs","../../../node_modules/@radix-ui/react-compose-refs/dist/index.mjs","../../../node_modules/@radix-ui/react-context/dist/index.mjs","../../../node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs","../../../node_modules/@radix-ui/react-id/dist/index.mjs","../../../node_modules/@radix-ui/react-use-effect-event/dist/index.mjs","../../../node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs","../../../node_modules/@radix-ui/react-slot/dist/index.mjs","../../../node_modules/@radix-ui/react-primitive/dist/index.mjs","../../../node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs","../../../node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs","../../../node_modules/@radix-ui/react-focus-scope/dist/index.mjs","../../../node_modules/@radix-ui/react-portal/dist/index.mjs","../../../node_modules/@radix-ui/react-presence/dist/index.mjs","../../../node_modules/@radix-ui/react-focus-guards/dist/index.mjs","../../../node_modules/tslib/tslib.es6.mjs","../../../node_modules/react-remove-scroll-bar/dist/es2015/constants.js","../../../node_modules/use-callback-ref/dist/es2015/assignRef.js","../../../node_modules/use-callback-ref/dist/es2015/useRef.js","../../../node_modules/use-callback-ref/dist/es2015/useMergeRef.js","../../../node_modules/use-sidecar/dist/es2015/medium.js","../../../node_modules/use-sidecar/dist/es2015/exports.js","../../../node_modules/react-remove-scroll/dist/es2015/medium.js","../../../node_modules/react-remove-scroll/dist/es2015/UI.js","../../../node_modules/get-nonce/dist/es2015/index.js","../../../node_modules/react-style-singleton/dist/es2015/singleton.js","../../../node_modules/react-style-singleton/dist/es2015/hook.js","../../../node_modules/react-style-singleton/dist/es2015/component.js","../../../node_modules/react-remove-scroll-bar/dist/es2015/utils.js","../../../node_modules/react-remove-scroll-bar/dist/es2015/component.js","../../../node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js","../../../node_modules/react-remove-scroll/dist/es2015/handleScroll.js","../../../node_modules/react-remove-scroll/dist/es2015/SideEffect.js","../../../node_modules/react-remove-scroll/dist/es2015/sidecar.js","../../../node_modules/react-remove-scroll/dist/es2015/Combination.js","../../../node_modules/aria-hidden/dist/es2015/index.js","../../../node_modules/@radix-ui/react-dialog/dist/index.mjs","../../../node_modules/@react-oauth/google/dist/index.esm.js","../../../node_modules/@tanstack/table-core/build/lib/index.mjs","../../../node_modules/@tanstack/react-table/build/lib/index.mjs","../../../node_modules/dayjs/dayjs.min.js","../../../node_modules/lodash/lodash.js","../../../node_modules/lucide-react/dist/esm/shared/src/utils.js","../../../node_modules/lucide-react/dist/esm/defaultAttributes.js","../../../node_modules/lucide-react/dist/esm/Icon.js","../../../node_modules/lucide-react/dist/esm/createLucideIcon.js","../../../node_modules/lucide-react/dist/esm/icons/arrow-up-down.js","../../../node_modules/lucide-react/dist/esm/icons/briefcase.js","../../../node_modules/lucide-react/dist/esm/icons/calendar-days.js","../../../node_modules/lucide-react/dist/esm/icons/check.js","../../../node_modules/lucide-react/dist/esm/icons/chevron-down.js","../../../node_modules/lucide-react/dist/esm/icons/chevron-left.js","../../../node_modules/lucide-react/dist/esm/icons/chevron-right.js","../../../node_modules/lucide-react/dist/esm/icons/circle-alert.js","../../../node_modules/lucide-react/dist/esm/icons/circle-check-big.js","../../../node_modules/lucide-react/dist/esm/icons/circle-check.js","../../../node_modules/lucide-react/dist/esm/icons/circle-play.js","../../../node_modules/lucide-react/dist/esm/icons/circle-x.js","../../../node_modules/lucide-react/dist/esm/icons/download.js","../../../node_modules/lucide-react/dist/esm/icons/ellipsis.js","../../../node_modules/lucide-react/dist/esm/icons/external-link.js","../../../node_modules/lucide-react/dist/esm/icons/eye.js","../../../node_modules/lucide-react/dist/esm/icons/file-text.js","../../../node_modules/lucide-react/dist/esm/icons/file-x.js","../../../node_modules/lucide-react/dist/esm/icons/folder-open.js","../../../node_modules/lucide-react/dist/esm/icons/folder.js","../../../node_modules/lucide-react/dist/esm/icons/globe.js","../../../node_modules/lucide-react/dist/esm/icons/loader-circle.js","../../../node_modules/lucide-react/dist/esm/icons/lock.js","../../../node_modules/lucide-react/dist/esm/icons/minus.js","../../../node_modules/lucide-react/dist/esm/icons/move-up-right.js","../../../node_modules/lucide-react/dist/esm/icons/pen-off.js","../../../node_modules/lucide-react/dist/esm/icons/refresh-cw.js","../../../node_modules/lucide-react/dist/esm/icons/rotate-cw.js","../../../node_modules/lucide-react/dist/esm/icons/triangle-alert.js","../../../node_modules/lucide-react/dist/esm/icons/x.js","../../../node_modules/clsx/dist/clsx.mjs","../../../node_modules/react-toastify/dist/index.mjs","../src/common/utils.ts","../src/components/buttons/toggle-button/ToggleButton.tsx","../../../node_modules/axios/lib/helpers/bind.js","../../../node_modules/axios/lib/utils.js","../../../node_modules/axios/lib/helpers/parseHeaders.js","../../../node_modules/axios/lib/helpers/sanitizeHeaderValue.js","../../../node_modules/axios/lib/core/AxiosHeaders.js","../../../node_modules/axios/lib/core/AxiosError.js","../../../node_modules/axios/lib/helpers/null.js","../../../node_modules/axios/lib/helpers/toFormData.js","../../../node_modules/axios/lib/helpers/AxiosURLSearchParams.js","../../../node_modules/axios/lib/helpers/buildURL.js","../../../node_modules/axios/lib/core/InterceptorManager.js","../../../node_modules/axios/lib/defaults/transitional.js","../../../node_modules/axios/lib/platform/browser/index.js","../../../node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","../../../node_modules/axios/lib/platform/browser/classes/FormData.js","../../../node_modules/axios/lib/platform/browser/classes/Blob.js","../../../node_modules/axios/lib/platform/common/utils.js","../../../node_modules/axios/lib/platform/index.js","../../../node_modules/axios/lib/helpers/toURLEncodedForm.js","../../../node_modules/axios/lib/helpers/formDataToJSON.js","../../../node_modules/axios/lib/defaults/index.js","../../../node_modules/axios/lib/core/transformData.js","../../../node_modules/axios/lib/cancel/isCancel.js","../../../node_modules/axios/lib/cancel/CanceledError.js","../../../node_modules/axios/lib/core/settle.js","../../../node_modules/axios/lib/helpers/parseProtocol.js","../../../node_modules/axios/lib/helpers/speedometer.js","../../../node_modules/axios/lib/helpers/throttle.js","../../../node_modules/axios/lib/helpers/progressEventReducer.js","../../../node_modules/axios/lib/helpers/isURLSameOrigin.js","../../../node_modules/axios/lib/helpers/cookies.js","../../../node_modules/axios/lib/helpers/isAbsoluteURL.js","../../../node_modules/axios/lib/helpers/combineURLs.js","../../../node_modules/axios/lib/core/buildFullPath.js","../../../node_modules/axios/lib/core/mergeConfig.js","../../../node_modules/axios/lib/helpers/resolveConfig.js","../../../node_modules/axios/lib/adapters/xhr.js","../../../node_modules/axios/lib/helpers/composeSignals.js","../../../node_modules/axios/lib/helpers/trackStream.js","../../../node_modules/axios/lib/helpers/estimateDataURLDecodedBytes.js","../../../node_modules/axios/lib/env/data.js","../../../node_modules/axios/lib/adapters/fetch.js","../../../node_modules/axios/lib/adapters/adapters.js","../../../node_modules/axios/lib/core/dispatchRequest.js","../../../node_modules/axios/lib/helpers/validator.js","../../../node_modules/axios/lib/core/Axios.js","../../../node_modules/axios/lib/cancel/CancelToken.js","../../../node_modules/axios/lib/helpers/spread.js","../../../node_modules/axios/lib/helpers/isAxiosError.js","../../../node_modules/axios/lib/helpers/HttpStatusCode.js","../../../node_modules/axios/lib/axios.js","../../../node_modules/axios/index.js","../../../node_modules/class-variance-authority/dist/index.mjs","../../../node_modules/tailwind-merge/dist/bundle-mjs.mjs","../src/lib/utils.ts","../src/components/ui/badge.tsx","../src/components/ui/button.tsx","../../../node_modules/@radix-ui/react-use-previous/dist/index.mjs","../../../node_modules/@radix-ui/react-use-size/dist/index.mjs","../../../node_modules/@radix-ui/react-checkbox/dist/index.mjs","../src/components/ui/checkbox.tsx","../src/components/ui/dialog.tsx","../src/components/ui/table.tsx","../../../node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../../../node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../../../node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../../../node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../../../node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs","../../../node_modules/@radix-ui/react-arrow/dist/index.mjs","../../../node_modules/@radix-ui/react-popper/dist/index.mjs","../../../node_modules/@radix-ui/react-visually-hidden/dist/index.mjs","../../../node_modules/@radix-ui/react-tooltip/dist/index.mjs","../src/components/ui/tooltip.tsx","../src/components/external-document-approval/PendingApprovalPage.tsx","../src/components/ui/breadcrumb.tsx","../src/components/ui/input.tsx","../../../node_modules/@radix-ui/react-label/dist/index.mjs","../src/components/ui/label.tsx","../src/components/ui/pagination.tsx","../../../node_modules/@radix-ui/number/dist/index.mjs","../../../node_modules/@radix-ui/react-collection/dist/index.mjs","../../../node_modules/@radix-ui/react-direction/dist/index.mjs","../../../node_modules/@radix-ui/react-select/dist/index.mjs","../src/components/ui/select.tsx","../../../node_modules/@radix-ui/react-switch/dist/index.mjs","../src/components/ui/switch.tsx","../../../node_modules/@radix-ui/react-roving-focus/dist/index.mjs","../../../node_modules/@radix-ui/react-tabs/dist/index.mjs","../src/components/ui/tabs.tsx","../src/components/ui/textarea.tsx","../../../node_modules/@radix-ui/react-toast/dist/index.mjs","../src/components/ui/toast.tsx","../src/hooks/use-toast.ts","../src/components/ui/toaster.tsx","../../../node_modules/@heroicons/react/24/solid/esm/XMarkIcon.js","../../../node_modules/ahooks/es/createUpdateEffect/index.js","../../../node_modules/ahooks/es/utils/index.js","../../../node_modules/ahooks/es/utils/isDev.js","../../../node_modules/ahooks/es/useUpdateEffect/index.js","../../../node_modules/ahooks/es/useLatest/index.js","../../../node_modules/ahooks/es/useUnmount/index.js","../../../node_modules/lodash/isObject.js","../../../node_modules/lodash/_freeGlobal.js","../../../node_modules/lodash/_root.js","../../../node_modules/lodash/now.js","../../../node_modules/lodash/_trimmedEndIndex.js","../../../node_modules/lodash/_baseTrim.js","../../../node_modules/lodash/_Symbol.js","../../../node_modules/lodash/_getRawTag.js","../../../node_modules/lodash/_objectToString.js","../../../node_modules/lodash/_baseGetTag.js","../../../node_modules/lodash/isObjectLike.js","../../../node_modules/lodash/isSymbol.js","../../../node_modules/lodash/toNumber.js","../../../node_modules/lodash/debounce.js","../../../node_modules/ahooks/es/utils/lodash-polyfill.js","../../../node_modules/ahooks/es/useDebounceFn/index.js","../../../node_modules/ahooks/es/useDebounceEffect/index.js","../src/components/utils/SearchBox.tsx","../src/lib/config.ts","../../../node_modules/is-retry-allowed/index.js","../../../node_modules/axios-retry/dist/esm/index.js","../src/lib/api-key-headers.ts","../src/lib/axios.ts","../src/lib/bld-reports-api.ts","../src/lib/bld-reports-history-api.ts","../src/lib/bld-report-periods.ts","../src/features/bld-reports/BldPeriodPicker.tsx","../src/pages/ReportHistory.tsx","../src/features/bld-reports/ReportHistoryModal.tsx","../src/features/bld-reports/BldReportsConfigForm.tsx","../src/lib/email-crawler-api.ts","../src/lib/email-crawler-vn-time.ts","../src/features/email-crawler/EmailCrawlerSourceModal.tsx","../src/hooks/use-shareing-api.ts","../src/lib/email-scheduler-auth-api.ts","../src/lib/email-crawler-folders.ts","../src/lib/use-email-crawler-source.ts","../src/components/FailedFilesDisplay.tsx","../../../node_modules/react-is/cjs/react-is.production.min.js","../../../node_modules/react-is/cjs/react-is.development.js","../../../node_modules/react-is/index.js","../../../node_modules/object-assign/index.js","../../../node_modules/prop-types/lib/ReactPropTypesSecret.js","../../../node_modules/prop-types/lib/has.js","../../../node_modules/prop-types/checkPropTypes.js","../../../node_modules/prop-types/factoryWithTypeCheckers.js","../../../node_modules/prop-types/factoryWithThrowingShims.js","../../../node_modules/prop-types/index.js","../../../node_modules/file-selector/dist/es2015/file.js","../../../node_modules/file-selector/dist/es2015/file-selector.js","../../../node_modules/attr-accept/dist/es/index.js","../../../node_modules/react-dropzone/dist/es/utils/index.js","../../../node_modules/react-dropzone/dist/es/index.js","../src/components/utils/DragDrop.tsx","../src/pages/Dialog/CrawlProgressDialog.tsx","../src/pages/Dialog/DialogRemoveFiles.tsx","../src/pages/Dialog/DialogShare.tsx","../src/pages/Dialog/PrivacyDialog.tsx","../src/pages/Dialog/S3FolderTreeSelector.tsx","../src/pages/Home.tsx","../../../node_modules/react-hook-form/dist/index.esm.mjs","../src/components/ui/ToolTipS.tsx","../src/pages/Summary.tsx","../src/pages/Job/Job.tsx"],"sourcesContent":["/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst Constants = {\r\n    LIBRARY_NAME: \"MSAL.JS\",\r\n    SKU: \"msal.js.common\",\r\n    // default authority\r\n    DEFAULT_AUTHORITY: \"https://login.microsoftonline.com/common/\",\r\n    DEFAULT_AUTHORITY_HOST: \"login.microsoftonline.com\",\r\n    DEFAULT_COMMON_TENANT: \"common\",\r\n    // ADFS String\r\n    ADFS: \"adfs\",\r\n    DSTS: \"dstsv2\",\r\n    // Default AAD Instance Discovery Endpoint\r\n    AAD_INSTANCE_DISCOVERY_ENDPT: \"https://login.microsoftonline.com/common/discovery/instance?api-version=1.1&authorization_endpoint=\",\r\n    // CIAM URL\r\n    CIAM_AUTH_URL: \".ciamlogin.com\",\r\n    AAD_TENANT_DOMAIN_SUFFIX: \".onmicrosoft.com\",\r\n    // Resource delimiter - used for certain cache entries\r\n    RESOURCE_DELIM: \"|\",\r\n    // Placeholder for non-existent account ids/objects\r\n    NO_ACCOUNT: \"NO_ACCOUNT\",\r\n    // Claims\r\n    CLAIMS: \"claims\",\r\n    // Consumer UTID\r\n    CONSUMER_UTID: \"9188040d-6c67-4c5b-b112-36a304b66dad\",\r\n    // Default scopes\r\n    OPENID_SCOPE: \"openid\",\r\n    PROFILE_SCOPE: \"profile\",\r\n    OFFLINE_ACCESS_SCOPE: \"offline_access\",\r\n    EMAIL_SCOPE: \"email\",\r\n    CODE_GRANT_TYPE: \"authorization_code\",\r\n    RT_GRANT_TYPE: \"refresh_token\",\r\n    S256_CODE_CHALLENGE_METHOD: \"S256\",\r\n    URL_FORM_CONTENT_TYPE: \"application/x-www-form-urlencoded;charset=utf-8\",\r\n    AUTHORIZATION_PENDING: \"authorization_pending\",\r\n    NOT_DEFINED: \"not_defined\",\r\n    EMPTY_STRING: \"\",\r\n    NOT_APPLICABLE: \"N/A\",\r\n    NOT_AVAILABLE: \"Not Available\",\r\n    FORWARD_SLASH: \"/\",\r\n    IMDS_ENDPOINT: \"http://169.254.169.254/metadata/instance/compute/location\",\r\n    IMDS_VERSION: \"2020-06-01\",\r\n    IMDS_TIMEOUT: 2000,\r\n    AZURE_REGION_AUTO_DISCOVER_FLAG: \"TryAutoDetect\",\r\n    REGIONAL_AUTH_PUBLIC_CLOUD_SUFFIX: \"login.microsoft.com\",\r\n    KNOWN_PUBLIC_CLOUDS: [\r\n        \"login.microsoftonline.com\",\r\n        \"login.windows.net\",\r\n        \"login.microsoft.com\",\r\n        \"sts.windows.net\",\r\n    ],\r\n    SHR_NONCE_VALIDITY: 240,\r\n    INVALID_INSTANCE: \"invalid_instance\",\r\n};\r\nconst HttpStatus = {\r\n    SUCCESS: 200,\r\n    SUCCESS_RANGE_START: 200,\r\n    SUCCESS_RANGE_END: 299,\r\n    REDIRECT: 302,\r\n    CLIENT_ERROR: 400,\r\n    CLIENT_ERROR_RANGE_START: 400,\r\n    BAD_REQUEST: 400,\r\n    UNAUTHORIZED: 401,\r\n    NOT_FOUND: 404,\r\n    REQUEST_TIMEOUT: 408,\r\n    GONE: 410,\r\n    TOO_MANY_REQUESTS: 429,\r\n    CLIENT_ERROR_RANGE_END: 499,\r\n    SERVER_ERROR: 500,\r\n    SERVER_ERROR_RANGE_START: 500,\r\n    SERVICE_UNAVAILABLE: 503,\r\n    GATEWAY_TIMEOUT: 504,\r\n    SERVER_ERROR_RANGE_END: 599,\r\n    MULTI_SIDED_ERROR: 600,\r\n};\r\nconst HttpMethod = {\r\n    GET: \"GET\",\r\n    POST: \"POST\",\r\n};\r\nconst OIDC_DEFAULT_SCOPES = [\r\n    Constants.OPENID_SCOPE,\r\n    Constants.PROFILE_SCOPE,\r\n    Constants.OFFLINE_ACCESS_SCOPE,\r\n];\r\nconst OIDC_SCOPES = [...OIDC_DEFAULT_SCOPES, Constants.EMAIL_SCOPE];\r\n/**\r\n * Request header names\r\n */\r\nconst HeaderNames = {\r\n    CONTENT_TYPE: \"Content-Type\",\r\n    CONTENT_LENGTH: \"Content-Length\",\r\n    RETRY_AFTER: \"Retry-After\",\r\n    CCS_HEADER: \"X-AnchorMailbox\",\r\n    WWWAuthenticate: \"WWW-Authenticate\",\r\n    AuthenticationInfo: \"Authentication-Info\",\r\n    X_MS_REQUEST_ID: \"x-ms-request-id\",\r\n    X_MS_HTTP_VERSION: \"x-ms-httpver\",\r\n};\r\n/**\r\n * Persistent cache keys MSAL which stay while user is logged in.\r\n */\r\nconst PersistentCacheKeys = {\r\n    ACTIVE_ACCOUNT_FILTERS: \"active-account-filters\", // new cache entry for active_account for a more robust version for browser\r\n};\r\n/**\r\n * String constants related to AAD Authority\r\n */\r\nconst AADAuthorityConstants = {\r\n    COMMON: \"common\",\r\n    ORGANIZATIONS: \"organizations\",\r\n    CONSUMERS: \"consumers\",\r\n};\r\n/**\r\n * Claims request keys\r\n */\r\nconst ClaimsRequestKeys = {\r\n    ACCESS_TOKEN: \"access_token\",\r\n    XMS_CC: \"xms_cc\",\r\n};\r\n/**\r\n * we considered making this \"enum\" in the request instead of string, however it looks like the allowed list of\r\n * prompt values kept changing over past couple of years. There are some undocumented prompt values for some\r\n * internal partners too, hence the choice of generic \"string\" type instead of the \"enum\"\r\n */\r\nconst PromptValue = {\r\n    LOGIN: \"login\",\r\n    SELECT_ACCOUNT: \"select_account\",\r\n    CONSENT: \"consent\",\r\n    NONE: \"none\",\r\n    CREATE: \"create\",\r\n    NO_SESSION: \"no_session\",\r\n};\r\n/**\r\n * allowed values for codeVerifier\r\n */\r\nconst CodeChallengeMethodValues = {\r\n    PLAIN: \"plain\",\r\n    S256: \"S256\",\r\n};\r\n/**\r\n * Allowed values for response_type\r\n */\r\nconst OAuthResponseType = {\r\n    CODE: \"code\",\r\n    IDTOKEN_TOKEN: \"id_token token\",\r\n    IDTOKEN_TOKEN_REFRESHTOKEN: \"id_token token refresh_token\",\r\n};\r\n/**\r\n * allowed values for server response type\r\n * @deprecated Use ResponseMode instead\r\n */\r\nconst ServerResponseType = {\r\n    QUERY: \"query\",\r\n    FRAGMENT: \"fragment\",\r\n};\r\n/**\r\n * allowed values for response_mode\r\n */\r\nconst ResponseMode = {\r\n    QUERY: \"query\",\r\n    FRAGMENT: \"fragment\",\r\n    FORM_POST: \"form_post\",\r\n};\r\n/**\r\n * allowed grant_type\r\n */\r\nconst GrantType = {\r\n    IMPLICIT_GRANT: \"implicit\",\r\n    AUTHORIZATION_CODE_GRANT: \"authorization_code\",\r\n    CLIENT_CREDENTIALS_GRANT: \"client_credentials\",\r\n    RESOURCE_OWNER_PASSWORD_GRANT: \"password\",\r\n    REFRESH_TOKEN_GRANT: \"refresh_token\",\r\n    DEVICE_CODE_GRANT: \"device_code\",\r\n    JWT_BEARER: \"urn:ietf:params:oauth:grant-type:jwt-bearer\",\r\n};\r\n/**\r\n * Account types in Cache\r\n */\r\nconst CacheAccountType = {\r\n    MSSTS_ACCOUNT_TYPE: \"MSSTS\",\r\n    ADFS_ACCOUNT_TYPE: \"ADFS\",\r\n    MSAV1_ACCOUNT_TYPE: \"MSA\",\r\n    GENERIC_ACCOUNT_TYPE: \"Generic\", // NTLM, Kerberos, FBA, Basic etc\r\n};\r\n/**\r\n * Separators used in cache\r\n */\r\nconst Separators = {\r\n    CACHE_KEY_SEPARATOR: \"-\",\r\n    CLIENT_INFO_SEPARATOR: \".\",\r\n};\r\n/**\r\n * Credential Type stored in the cache\r\n */\r\nconst CredentialType = {\r\n    ID_TOKEN: \"IdToken\",\r\n    ACCESS_TOKEN: \"AccessToken\",\r\n    ACCESS_TOKEN_WITH_AUTH_SCHEME: \"AccessToken_With_AuthScheme\",\r\n    REFRESH_TOKEN: \"RefreshToken\",\r\n};\r\n/**\r\n * Combine all cache types\r\n */\r\nconst CacheType = {\r\n    ADFS: 1001,\r\n    MSA: 1002,\r\n    MSSTS: 1003,\r\n    GENERIC: 1004,\r\n    ACCESS_TOKEN: 2001,\r\n    REFRESH_TOKEN: 2002,\r\n    ID_TOKEN: 2003,\r\n    APP_METADATA: 3001,\r\n    UNDEFINED: 9999,\r\n};\r\n/**\r\n * More Cache related constants\r\n */\r\nconst APP_METADATA = \"appmetadata\";\r\nconst CLIENT_INFO = \"client_info\";\r\nconst THE_FAMILY_ID = \"1\";\r\nconst AUTHORITY_METADATA_CONSTANTS = {\r\n    CACHE_KEY: \"authority-metadata\",\r\n    REFRESH_TIME_SECONDS: 3600 * 24, // 24 Hours\r\n};\r\nconst AuthorityMetadataSource = {\r\n    CONFIG: \"config\",\r\n    CACHE: \"cache\",\r\n    NETWORK: \"network\",\r\n    HARDCODED_VALUES: \"hardcoded_values\",\r\n};\r\nconst SERVER_TELEM_CONSTANTS = {\r\n    SCHEMA_VERSION: 5,\r\n    MAX_LAST_HEADER_BYTES: 330,\r\n    MAX_CACHED_ERRORS: 50,\r\n    CACHE_KEY: \"server-telemetry\",\r\n    CATEGORY_SEPARATOR: \"|\",\r\n    VALUE_SEPARATOR: \",\",\r\n    OVERFLOW_TRUE: \"1\",\r\n    OVERFLOW_FALSE: \"0\",\r\n    UNKNOWN_ERROR: \"unknown_error\",\r\n};\r\n/**\r\n * Type of the authentication request\r\n */\r\nconst AuthenticationScheme = {\r\n    BEARER: \"Bearer\",\r\n    POP: \"pop\",\r\n    SSH: \"ssh-cert\",\r\n};\r\n/**\r\n * Constants related to throttling\r\n */\r\nconst ThrottlingConstants = {\r\n    // Default time to throttle RequestThumbprint in seconds\r\n    DEFAULT_THROTTLE_TIME_SECONDS: 60,\r\n    // Default maximum time to throttle in seconds, overrides what the server sends back\r\n    DEFAULT_MAX_THROTTLE_TIME_SECONDS: 3600,\r\n    // Prefix for storing throttling entries\r\n    THROTTLING_PREFIX: \"throttling\",\r\n    // Value assigned to the x-ms-lib-capability header to indicate to the server the library supports throttling\r\n    X_MS_LIB_CAPABILITY_VALUE: \"retry-after, h429\",\r\n};\r\nconst Errors = {\r\n    INVALID_GRANT_ERROR: \"invalid_grant\",\r\n    CLIENT_MISMATCH_ERROR: \"client_mismatch\",\r\n};\r\n/**\r\n * Password grant parameters\r\n */\r\nconst PasswordGrantConstants = {\r\n    username: \"username\",\r\n    password: \"password\",\r\n};\r\n/**\r\n * Region Discovery Sources\r\n */\r\nconst RegionDiscoverySources = {\r\n    FAILED_AUTO_DETECTION: \"1\",\r\n    INTERNAL_CACHE: \"2\",\r\n    ENVIRONMENT_VARIABLE: \"3\",\r\n    IMDS: \"4\",\r\n};\r\n/**\r\n * Region Discovery Outcomes\r\n */\r\nconst RegionDiscoveryOutcomes = {\r\n    CONFIGURED_NO_AUTO_DETECTION: \"2\",\r\n    AUTO_DETECTION_REQUESTED_SUCCESSFUL: \"4\",\r\n    AUTO_DETECTION_REQUESTED_FAILED: \"5\",\r\n};\r\n/**\r\n * Specifies the reason for fetching the access token from the identity provider\r\n */\r\nconst CacheOutcome = {\r\n    // When a token is found in the cache or the cache is not supposed to be hit when making the request\r\n    NOT_APPLICABLE: \"0\",\r\n    // When the token request goes to the identity provider because force_refresh was set to true. Also occurs if claims were requested\r\n    FORCE_REFRESH_OR_CLAIMS: \"1\",\r\n    // When the token request goes to the identity provider because no cached access token exists\r\n    NO_CACHED_ACCESS_TOKEN: \"2\",\r\n    // When the token request goes to the identity provider because cached access token expired\r\n    CACHED_ACCESS_TOKEN_EXPIRED: \"3\",\r\n    // When the token request goes to the identity provider because refresh_in was used and the existing token needs to be refreshed\r\n    PROACTIVELY_REFRESHED: \"4\",\r\n};\r\nconst JsonWebTokenTypes = {\r\n    Jwt: \"JWT\",\r\n    Jwk: \"JWK\",\r\n    Pop: \"pop\",\r\n};\r\nconst ONE_DAY_IN_MS = 86400000;\r\n// Token renewal offset default in seconds\r\nconst DEFAULT_TOKEN_RENEWAL_OFFSET_SEC = 300;\r\nconst EncodingTypes = {\r\n    BASE64: \"base64\",\r\n    HEX: \"hex\",\r\n    UTF8: \"utf-8\",\r\n};\n\nexport { AADAuthorityConstants, APP_METADATA, AUTHORITY_METADATA_CONSTANTS, AuthenticationScheme, AuthorityMetadataSource, CLIENT_INFO, CacheAccountType, CacheOutcome, CacheType, ClaimsRequestKeys, CodeChallengeMethodValues, Constants, CredentialType, DEFAULT_TOKEN_RENEWAL_OFFSET_SEC, EncodingTypes, Errors, GrantType, HeaderNames, HttpMethod, HttpStatus, JsonWebTokenTypes, OAuthResponseType, OIDC_DEFAULT_SCOPES, OIDC_SCOPES, ONE_DAY_IN_MS, PasswordGrantConstants, PersistentCacheKeys, PromptValue, RegionDiscoveryOutcomes, RegionDiscoverySources, ResponseMode, SERVER_TELEM_CONSTANTS, Separators, ServerResponseType, THE_FAMILY_ID, ThrottlingConstants };\n//# sourceMappingURL=Constants.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * AuthErrorMessage class containing string constants used by error codes and messages.\r\n */\r\nconst unexpectedError = \"unexpected_error\";\r\nconst postRequestFailed = \"post_request_failed\";\n\nexport { postRequestFailed, unexpectedError };\n//# sourceMappingURL=AuthErrorCodes.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\nimport { Constants } from '../utils/Constants.mjs';\nimport { postRequestFailed, unexpectedError } from './AuthErrorCodes.mjs';\nimport * as AuthErrorCodes from './AuthErrorCodes.mjs';\nexport { AuthErrorCodes };\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst AuthErrorMessages = {\r\n    [unexpectedError]: \"Unexpected error in authentication.\",\r\n    [postRequestFailed]: \"Post request failed from the network, could be a 4xx/5xx or a network unavailability. Please check the exact error code for details.\",\r\n};\r\n/**\r\n * AuthErrorMessage class containing string constants used by error codes and messages.\r\n * @deprecated Use AuthErrorCodes instead\r\n */\r\nconst AuthErrorMessage = {\r\n    unexpectedError: {\r\n        code: unexpectedError,\r\n        desc: AuthErrorMessages[unexpectedError],\r\n    },\r\n    postRequestFailed: {\r\n        code: postRequestFailed,\r\n        desc: AuthErrorMessages[postRequestFailed],\r\n    },\r\n};\r\n/**\r\n * General error class thrown by the MSAL.js library.\r\n */\r\nclass AuthError extends Error {\r\n    constructor(errorCode, errorMessage, suberror) {\r\n        const errorString = errorMessage\r\n            ? `${errorCode}: ${errorMessage}`\r\n            : errorCode;\r\n        super(errorString);\r\n        Object.setPrototypeOf(this, AuthError.prototype);\r\n        this.errorCode = errorCode || Constants.EMPTY_STRING;\r\n        this.errorMessage = errorMessage || Constants.EMPTY_STRING;\r\n        this.subError = suberror || Constants.EMPTY_STRING;\r\n        this.name = \"AuthError\";\r\n    }\r\n    setCorrelationId(correlationId) {\r\n        this.correlationId = correlationId;\r\n    }\r\n}\r\nfunction createAuthError(code, additionalMessage) {\r\n    return new AuthError(code, additionalMessage\r\n        ? `${AuthErrorMessages[code]} ${additionalMessage}`\r\n        : AuthErrorMessages[code]);\r\n}\n\nexport { AuthError, AuthErrorMessage, AuthErrorMessages, createAuthError };\n//# sourceMappingURL=AuthError.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst clientInfoDecodingError = \"client_info_decoding_error\";\r\nconst clientInfoEmptyError = \"client_info_empty_error\";\r\nconst tokenParsingError = \"token_parsing_error\";\r\nconst nullOrEmptyToken = \"null_or_empty_token\";\r\nconst endpointResolutionError = \"endpoints_resolution_error\";\r\nconst networkError = \"network_error\";\r\nconst openIdConfigError = \"openid_config_error\";\r\nconst hashNotDeserialized = \"hash_not_deserialized\";\r\nconst invalidState = \"invalid_state\";\r\nconst stateMismatch = \"state_mismatch\";\r\nconst stateNotFound = \"state_not_found\";\r\nconst nonceMismatch = \"nonce_mismatch\";\r\nconst authTimeNotFound = \"auth_time_not_found\";\r\nconst maxAgeTranspired = \"max_age_transpired\";\r\nconst multipleMatchingTokens = \"multiple_matching_tokens\";\r\nconst multipleMatchingAccounts = \"multiple_matching_accounts\";\r\nconst multipleMatchingAppMetadata = \"multiple_matching_appMetadata\";\r\nconst requestCannotBeMade = \"request_cannot_be_made\";\r\nconst cannotRemoveEmptyScope = \"cannot_remove_empty_scope\";\r\nconst cannotAppendScopeSet = \"cannot_append_scopeset\";\r\nconst emptyInputScopeSet = \"empty_input_scopeset\";\r\nconst deviceCodePollingCancelled = \"device_code_polling_cancelled\";\r\nconst deviceCodeExpired = \"device_code_expired\";\r\nconst deviceCodeUnknownError = \"device_code_unknown_error\";\r\nconst noAccountInSilentRequest = \"no_account_in_silent_request\";\r\nconst invalidCacheRecord = \"invalid_cache_record\";\r\nconst invalidCacheEnvironment = \"invalid_cache_environment\";\r\nconst noAccountFound = \"no_account_found\";\r\nconst noCryptoObject = \"no_crypto_object\";\r\nconst unexpectedCredentialType = \"unexpected_credential_type\";\r\nconst invalidAssertion = \"invalid_assertion\";\r\nconst invalidClientCredential = \"invalid_client_credential\";\r\nconst tokenRefreshRequired = \"token_refresh_required\";\r\nconst userTimeoutReached = \"user_timeout_reached\";\r\nconst tokenClaimsCnfRequiredForSignedJwt = \"token_claims_cnf_required_for_signedjwt\";\r\nconst authorizationCodeMissingFromServerResponse = \"authorization_code_missing_from_server_response\";\r\nconst bindingKeyNotRemoved = \"binding_key_not_removed\";\r\nconst endSessionEndpointNotSupported = \"end_session_endpoint_not_supported\";\r\nconst keyIdMissing = \"key_id_missing\";\r\nconst noNetworkConnectivity = \"no_network_connectivity\";\r\nconst userCanceled = \"user_canceled\";\r\nconst missingTenantIdError = \"missing_tenant_id_error\";\r\nconst methodNotImplemented = \"method_not_implemented\";\r\nconst nestedAppAuthBridgeDisabled = \"nested_app_auth_bridge_disabled\";\r\nconst platformBrokerError = \"platform_broker_error\";\n\nexport { authTimeNotFound, authorizationCodeMissingFromServerResponse, bindingKeyNotRemoved, cannotAppendScopeSet, cannotRemoveEmptyScope, clientInfoDecodingError, clientInfoEmptyError, deviceCodeExpired, deviceCodePollingCancelled, deviceCodeUnknownError, emptyInputScopeSet, endSessionEndpointNotSupported, endpointResolutionError, hashNotDeserialized, invalidAssertion, invalidCacheEnvironment, invalidCacheRecord, invalidClientCredential, invalidState, keyIdMissing, maxAgeTranspired, methodNotImplemented, missingTenantIdError, multipleMatchingAccounts, multipleMatchingAppMetadata, multipleMatchingTokens, nestedAppAuthBridgeDisabled, networkError, noAccountFound, noAccountInSilentRequest, noCryptoObject, noNetworkConnectivity, nonceMismatch, nullOrEmptyToken, openIdConfigError, platformBrokerError, requestCannotBeMade, stateMismatch, stateNotFound, tokenClaimsCnfRequiredForSignedJwt, tokenParsingError, tokenRefreshRequired, unexpectedCredentialType, userCanceled, userTimeoutReached };\n//# sourceMappingURL=ClientAuthErrorCodes.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\nimport { AuthError } from './AuthError.mjs';\nimport { platformBrokerError, nestedAppAuthBridgeDisabled, missingTenantIdError, userCanceled, noNetworkConnectivity, keyIdMissing, endSessionEndpointNotSupported, bindingKeyNotRemoved, authorizationCodeMissingFromServerResponse, tokenClaimsCnfRequiredForSignedJwt, userTimeoutReached, tokenRefreshRequired, invalidClientCredential, invalidAssertion, unexpectedCredentialType, noCryptoObject, noAccountFound, invalidCacheEnvironment, invalidCacheRecord, noAccountInSilentRequest, deviceCodeUnknownError, deviceCodeExpired, deviceCodePollingCancelled, emptyInputScopeSet, cannotAppendScopeSet, cannotRemoveEmptyScope, requestCannotBeMade, multipleMatchingAppMetadata, multipleMatchingAccounts, multipleMatchingTokens, maxAgeTranspired, authTimeNotFound, nonceMismatch, stateNotFound, stateMismatch, invalidState, hashNotDeserialized, openIdConfigError, networkError, endpointResolutionError, nullOrEmptyToken, tokenParsingError, clientInfoEmptyError, clientInfoDecodingError, methodNotImplemented } from './ClientAuthErrorCodes.mjs';\nimport * as ClientAuthErrorCodes from './ClientAuthErrorCodes.mjs';\nexport { ClientAuthErrorCodes };\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * ClientAuthErrorMessage class containing string constants used by error codes and messages.\r\n */\r\nconst ClientAuthErrorMessages = {\r\n    [clientInfoDecodingError]: \"The client info could not be parsed/decoded correctly\",\r\n    [clientInfoEmptyError]: \"The client info was empty\",\r\n    [tokenParsingError]: \"Token cannot be parsed\",\r\n    [nullOrEmptyToken]: \"The token is null or empty\",\r\n    [endpointResolutionError]: \"Endpoints cannot be resolved\",\r\n    [networkError]: \"Network request failed\",\r\n    [openIdConfigError]: \"Could not retrieve endpoints. Check your authority and verify the .well-known/openid-configuration endpoint returns the required endpoints.\",\r\n    [hashNotDeserialized]: \"The hash parameters could not be deserialized\",\r\n    [invalidState]: \"State was not the expected format\",\r\n    [stateMismatch]: \"State mismatch error\",\r\n    [stateNotFound]: \"State not found\",\r\n    [nonceMismatch]: \"Nonce mismatch error\",\r\n    [authTimeNotFound]: \"Max Age was requested and the ID token is missing the auth_time variable.\" +\r\n        \" auth_time is an optional claim and is not enabled by default - it must be enabled.\" +\r\n        \" See https://aka.ms/msaljs/optional-claims for more information.\",\r\n    [maxAgeTranspired]: \"Max Age is set to 0, or too much time has elapsed since the last end-user authentication.\",\r\n    [multipleMatchingTokens]: \"The cache contains multiple tokens satisfying the requirements. \" +\r\n        \"Call AcquireToken again providing more requirements such as authority or account.\",\r\n    [multipleMatchingAccounts]: \"The cache contains multiple accounts satisfying the given parameters. Please pass more info to obtain the correct account\",\r\n    [multipleMatchingAppMetadata]: \"The cache contains multiple appMetadata satisfying the given parameters. Please pass more info to obtain the correct appMetadata\",\r\n    [requestCannotBeMade]: \"Token request cannot be made without authorization code or refresh token.\",\r\n    [cannotRemoveEmptyScope]: \"Cannot remove null or empty scope from ScopeSet\",\r\n    [cannotAppendScopeSet]: \"Cannot append ScopeSet\",\r\n    [emptyInputScopeSet]: \"Empty input ScopeSet cannot be processed\",\r\n    [deviceCodePollingCancelled]: \"Caller has cancelled token endpoint polling during device code flow by setting DeviceCodeRequest.cancel = true.\",\r\n    [deviceCodeExpired]: \"Device code is expired.\",\r\n    [deviceCodeUnknownError]: \"Device code stopped polling for unknown reasons.\",\r\n    [noAccountInSilentRequest]: \"Please pass an account object, silent flow is not supported without account information\",\r\n    [invalidCacheRecord]: \"Cache record object was null or undefined.\",\r\n    [invalidCacheEnvironment]: \"Invalid environment when attempting to create cache entry\",\r\n    [noAccountFound]: \"No account found in cache for given key.\",\r\n    [noCryptoObject]: \"No crypto object detected.\",\r\n    [unexpectedCredentialType]: \"Unexpected credential type.\",\r\n    [invalidAssertion]: \"Client assertion must meet requirements described in https://tools.ietf.org/html/rfc7515\",\r\n    [invalidClientCredential]: \"Client credential (secret, certificate, or assertion) must not be empty when creating a confidential client. An application should at most have one credential\",\r\n    [tokenRefreshRequired]: \"Cannot return token from cache because it must be refreshed. This may be due to one of the following reasons: forceRefresh parameter is set to true, claims have been requested, there is no cached access token or it is expired.\",\r\n    [userTimeoutReached]: \"User defined timeout for device code polling reached\",\r\n    [tokenClaimsCnfRequiredForSignedJwt]: \"Cannot generate a POP jwt if the token_claims are not populated\",\r\n    [authorizationCodeMissingFromServerResponse]: \"Server response does not contain an authorization code to proceed\",\r\n    [bindingKeyNotRemoved]: \"Could not remove the credential's binding key from storage.\",\r\n    [endSessionEndpointNotSupported]: \"The provided authority does not support logout\",\r\n    [keyIdMissing]: \"A keyId value is missing from the requested bound token's cache record and is required to match the token to it's stored binding key.\",\r\n    [noNetworkConnectivity]: \"No network connectivity. Check your internet connection.\",\r\n    [userCanceled]: \"User cancelled the flow.\",\r\n    [missingTenantIdError]: \"A tenant id - not common, organizations, or consumers - must be specified when using the client_credentials flow.\",\r\n    [methodNotImplemented]: \"This method has not been implemented\",\r\n    [nestedAppAuthBridgeDisabled]: \"The nested app auth bridge is disabled\",\r\n    [platformBrokerError]: \"An error occurred in the native broker. See the platformBrokerError property for details.\",\r\n};\r\n/**\r\n * String constants used by error codes and messages.\r\n * @deprecated Use ClientAuthErrorCodes instead\r\n */\r\nconst ClientAuthErrorMessage = {\r\n    clientInfoDecodingError: {\r\n        code: clientInfoDecodingError,\r\n        desc: ClientAuthErrorMessages[clientInfoDecodingError],\r\n    },\r\n    clientInfoEmptyError: {\r\n        code: clientInfoEmptyError,\r\n        desc: ClientAuthErrorMessages[clientInfoEmptyError],\r\n    },\r\n    tokenParsingError: {\r\n        code: tokenParsingError,\r\n        desc: ClientAuthErrorMessages[tokenParsingError],\r\n    },\r\n    nullOrEmptyToken: {\r\n        code: nullOrEmptyToken,\r\n        desc: ClientAuthErrorMessages[nullOrEmptyToken],\r\n    },\r\n    endpointResolutionError: {\r\n        code: endpointResolutionError,\r\n        desc: ClientAuthErrorMessages[endpointResolutionError],\r\n    },\r\n    networkError: {\r\n        code: networkError,\r\n        desc: ClientAuthErrorMessages[networkError],\r\n    },\r\n    unableToGetOpenidConfigError: {\r\n        code: openIdConfigError,\r\n        desc: ClientAuthErrorMessages[openIdConfigError],\r\n    },\r\n    hashNotDeserialized: {\r\n        code: hashNotDeserialized,\r\n        desc: ClientAuthErrorMessages[hashNotDeserialized],\r\n    },\r\n    invalidStateError: {\r\n        code: invalidState,\r\n        desc: ClientAuthErrorMessages[invalidState],\r\n    },\r\n    stateMismatchError: {\r\n        code: stateMismatch,\r\n        desc: ClientAuthErrorMessages[stateMismatch],\r\n    },\r\n    stateNotFoundError: {\r\n        code: stateNotFound,\r\n        desc: ClientAuthErrorMessages[stateNotFound],\r\n    },\r\n    nonceMismatchError: {\r\n        code: nonceMismatch,\r\n        desc: ClientAuthErrorMessages[nonceMismatch],\r\n    },\r\n    authTimeNotFoundError: {\r\n        code: authTimeNotFound,\r\n        desc: ClientAuthErrorMessages[authTimeNotFound],\r\n    },\r\n    maxAgeTranspired: {\r\n        code: maxAgeTranspired,\r\n        desc: ClientAuthErrorMessages[maxAgeTranspired],\r\n    },\r\n    multipleMatchingTokens: {\r\n        code: multipleMatchingTokens,\r\n        desc: ClientAuthErrorMessages[multipleMatchingTokens],\r\n    },\r\n    multipleMatchingAccounts: {\r\n        code: multipleMatchingAccounts,\r\n        desc: ClientAuthErrorMessages[multipleMatchingAccounts],\r\n    },\r\n    multipleMatchingAppMetadata: {\r\n        code: multipleMatchingAppMetadata,\r\n        desc: ClientAuthErrorMessages[multipleMatchingAppMetadata],\r\n    },\r\n    tokenRequestCannotBeMade: {\r\n        code: requestCannotBeMade,\r\n        desc: ClientAuthErrorMessages[requestCannotBeMade],\r\n    },\r\n    removeEmptyScopeError: {\r\n        code: cannotRemoveEmptyScope,\r\n        desc: ClientAuthErrorMessages[cannotRemoveEmptyScope],\r\n    },\r\n    appendScopeSetError: {\r\n        code: cannotAppendScopeSet,\r\n        desc: ClientAuthErrorMessages[cannotAppendScopeSet],\r\n    },\r\n    emptyInputScopeSetError: {\r\n        code: emptyInputScopeSet,\r\n        desc: ClientAuthErrorMessages[emptyInputScopeSet],\r\n    },\r\n    DeviceCodePollingCancelled: {\r\n        code: deviceCodePollingCancelled,\r\n        desc: ClientAuthErrorMessages[deviceCodePollingCancelled],\r\n    },\r\n    DeviceCodeExpired: {\r\n        code: deviceCodeExpired,\r\n        desc: ClientAuthErrorMessages[deviceCodeExpired],\r\n    },\r\n    DeviceCodeUnknownError: {\r\n        code: deviceCodeUnknownError,\r\n        desc: ClientAuthErrorMessages[deviceCodeUnknownError],\r\n    },\r\n    NoAccountInSilentRequest: {\r\n        code: noAccountInSilentRequest,\r\n        desc: ClientAuthErrorMessages[noAccountInSilentRequest],\r\n    },\r\n    invalidCacheRecord: {\r\n        code: invalidCacheRecord,\r\n        desc: ClientAuthErrorMessages[invalidCacheRecord],\r\n    },\r\n    invalidCacheEnvironment: {\r\n        code: invalidCacheEnvironment,\r\n        desc: ClientAuthErrorMessages[invalidCacheEnvironment],\r\n    },\r\n    noAccountFound: {\r\n        code: noAccountFound,\r\n        desc: ClientAuthErrorMessages[noAccountFound],\r\n    },\r\n    noCryptoObj: {\r\n        code: noCryptoObject,\r\n        desc: ClientAuthErrorMessages[noCryptoObject],\r\n    },\r\n    unexpectedCredentialType: {\r\n        code: unexpectedCredentialType,\r\n        desc: ClientAuthErrorMessages[unexpectedCredentialType],\r\n    },\r\n    invalidAssertion: {\r\n        code: invalidAssertion,\r\n        desc: ClientAuthErrorMessages[invalidAssertion],\r\n    },\r\n    invalidClientCredential: {\r\n        code: invalidClientCredential,\r\n        desc: ClientAuthErrorMessages[invalidClientCredential],\r\n    },\r\n    tokenRefreshRequired: {\r\n        code: tokenRefreshRequired,\r\n        desc: ClientAuthErrorMessages[tokenRefreshRequired],\r\n    },\r\n    userTimeoutReached: {\r\n        code: userTimeoutReached,\r\n        desc: ClientAuthErrorMessages[userTimeoutReached],\r\n    },\r\n    tokenClaimsRequired: {\r\n        code: tokenClaimsCnfRequiredForSignedJwt,\r\n        desc: ClientAuthErrorMessages[tokenClaimsCnfRequiredForSignedJwt],\r\n    },\r\n    noAuthorizationCodeFromServer: {\r\n        code: authorizationCodeMissingFromServerResponse,\r\n        desc: ClientAuthErrorMessages[authorizationCodeMissingFromServerResponse],\r\n    },\r\n    bindingKeyNotRemovedError: {\r\n        code: bindingKeyNotRemoved,\r\n        desc: ClientAuthErrorMessages[bindingKeyNotRemoved],\r\n    },\r\n    logoutNotSupported: {\r\n        code: endSessionEndpointNotSupported,\r\n        desc: ClientAuthErrorMessages[endSessionEndpointNotSupported],\r\n    },\r\n    keyIdMissing: {\r\n        code: keyIdMissing,\r\n        desc: ClientAuthErrorMessages[keyIdMissing],\r\n    },\r\n    noNetworkConnectivity: {\r\n        code: noNetworkConnectivity,\r\n        desc: ClientAuthErrorMessages[noNetworkConnectivity],\r\n    },\r\n    userCanceledError: {\r\n        code: userCanceled,\r\n        desc: ClientAuthErrorMessages[userCanceled],\r\n    },\r\n    missingTenantIdError: {\r\n        code: missingTenantIdError,\r\n        desc: ClientAuthErrorMessages[missingTenantIdError],\r\n    },\r\n    nestedAppAuthBridgeDisabled: {\r\n        code: nestedAppAuthBridgeDisabled,\r\n        desc: ClientAuthErrorMessages[nestedAppAuthBridgeDisabled],\r\n    },\r\n    platformBrokerError: {\r\n        code: platformBrokerError,\r\n        desc: ClientAuthErrorMessages[platformBrokerError],\r\n    },\r\n};\r\n/**\r\n * Error thrown when there is an error in the client code running on the browser.\r\n */\r\nclass ClientAuthError extends AuthError {\r\n    constructor(errorCode, additionalMessage) {\r\n        super(errorCode, additionalMessage\r\n            ? `${ClientAuthErrorMessages[errorCode]}: ${additionalMessage}`\r\n            : ClientAuthErrorMessages[errorCode]);\r\n        this.name = \"ClientAuthError\";\r\n        Object.setPrototypeOf(this, ClientAuthError.prototype);\r\n    }\r\n}\r\nfunction createClientAuthError(errorCode, additionalMessage) {\r\n    return new ClientAuthError(errorCode, additionalMessage);\r\n}\n\nexport { ClientAuthError, ClientAuthErrorMessage, ClientAuthErrorMessages, createClientAuthError };\n//# sourceMappingURL=ClientAuthError.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\nimport { createClientAuthError } from '../error/ClientAuthError.mjs';\nimport { methodNotImplemented } from '../error/ClientAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst DEFAULT_CRYPTO_IMPLEMENTATION = {\r\n    createNewGuid: () => {\r\n        throw createClientAuthError(methodNotImplemented);\r\n    },\r\n    base64Decode: () => {\r\n        throw createClientAuthError(methodNotImplemented);\r\n    },\r\n    base64Encode: () => {\r\n        throw createClientAuthError(methodNotImplemented);\r\n    },\r\n    base64UrlEncode: () => {\r\n        throw createClientAuthError(methodNotImplemented);\r\n    },\r\n    encodeKid: () => {\r\n        throw createClientAuthError(methodNotImplemented);\r\n    },\r\n    async getPublicKeyThumbprint() {\r\n        throw createClientAuthError(methodNotImplemented);\r\n    },\r\n    async removeTokenBindingKey() {\r\n        throw createClientAuthError(methodNotImplemented);\r\n    },\r\n    async clearKeystore() {\r\n        throw createClientAuthError(methodNotImplemented);\r\n    },\r\n    async signJwt() {\r\n        throw createClientAuthError(methodNotImplemented);\r\n    },\r\n    async hashString() {\r\n        throw createClientAuthError(methodNotImplemented);\r\n    },\r\n};\n\nexport { DEFAULT_CRYPTO_IMPLEMENTATION };\n//# sourceMappingURL=ICrypto.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\nimport { Constants } from '../utils/Constants.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Log message level.\r\n */\r\nvar LogLevel;\r\n(function (LogLevel) {\r\n    LogLevel[LogLevel[\"Error\"] = 0] = \"Error\";\r\n    LogLevel[LogLevel[\"Warning\"] = 1] = \"Warning\";\r\n    LogLevel[LogLevel[\"Info\"] = 2] = \"Info\";\r\n    LogLevel[LogLevel[\"Verbose\"] = 3] = \"Verbose\";\r\n    LogLevel[LogLevel[\"Trace\"] = 4] = \"Trace\";\r\n})(LogLevel || (LogLevel = {}));\r\n/**\r\n * Class which facilitates logging of messages to a specific place.\r\n */\r\nclass Logger {\r\n    constructor(loggerOptions, packageName, packageVersion) {\r\n        // Current log level, defaults to info.\r\n        this.level = LogLevel.Info;\r\n        const defaultLoggerCallback = () => {\r\n            return;\r\n        };\r\n        const setLoggerOptions = loggerOptions || Logger.createDefaultLoggerOptions();\r\n        this.localCallback =\r\n            setLoggerOptions.loggerCallback || defaultLoggerCallback;\r\n        this.piiLoggingEnabled = setLoggerOptions.piiLoggingEnabled || false;\r\n        this.level =\r\n            typeof setLoggerOptions.logLevel === \"number\"\r\n                ? setLoggerOptions.logLevel\r\n                : LogLevel.Info;\r\n        this.correlationId =\r\n            setLoggerOptions.correlationId || Constants.EMPTY_STRING;\r\n        this.packageName = packageName || Constants.EMPTY_STRING;\r\n        this.packageVersion = packageVersion || Constants.EMPTY_STRING;\r\n    }\r\n    static createDefaultLoggerOptions() {\r\n        return {\r\n            loggerCallback: () => {\r\n                // allow users to not set loggerCallback\r\n            },\r\n            piiLoggingEnabled: false,\r\n            logLevel: LogLevel.Info,\r\n        };\r\n    }\r\n    /**\r\n     * Create new Logger with existing configurations.\r\n     */\r\n    clone(packageName, packageVersion, correlationId) {\r\n        return new Logger({\r\n            loggerCallback: this.localCallback,\r\n            piiLoggingEnabled: this.piiLoggingEnabled,\r\n            logLevel: this.level,\r\n            correlationId: correlationId || this.correlationId,\r\n        }, packageName, packageVersion);\r\n    }\r\n    /**\r\n     * Log message with required options.\r\n     */\r\n    logMessage(logMessage, options) {\r\n        if (options.logLevel > this.level ||\r\n            (!this.piiLoggingEnabled && options.containsPii)) {\r\n            return;\r\n        }\r\n        const timestamp = new Date().toUTCString();\r\n        // Add correlationId to logs if set, correlationId provided on log messages take precedence\r\n        const logHeader = `[${timestamp}] : [${options.correlationId || this.correlationId || \"\"}]`;\r\n        const log = `${logHeader} : ${this.packageName}@${this.packageVersion} : ${LogLevel[options.logLevel]} - ${logMessage}`;\r\n        // debug(`msal:${LogLevel[options.logLevel]}${options.containsPii ? \"-Pii\": Constants.EMPTY_STRING}${options.context ? `:${options.context}` : Constants.EMPTY_STRING}`)(logMessage);\r\n        this.executeCallback(options.logLevel, log, options.containsPii || false);\r\n    }\r\n    /**\r\n     * Execute callback with message.\r\n     */\r\n    executeCallback(level, message, containsPii) {\r\n        if (this.localCallback) {\r\n            this.localCallback(level, message, containsPii);\r\n        }\r\n    }\r\n    /**\r\n     * Logs error messages.\r\n     */\r\n    error(message, correlationId) {\r\n        this.logMessage(message, {\r\n            logLevel: LogLevel.Error,\r\n            containsPii: false,\r\n            correlationId: correlationId || Constants.EMPTY_STRING,\r\n        });\r\n    }\r\n    /**\r\n     * Logs error messages with PII.\r\n     */\r\n    errorPii(message, correlationId) {\r\n        this.logMessage(message, {\r\n            logLevel: LogLevel.Error,\r\n            containsPii: true,\r\n            correlationId: correlationId || Constants.EMPTY_STRING,\r\n        });\r\n    }\r\n    /**\r\n     * Logs warning messages.\r\n     */\r\n    warning(message, correlationId) {\r\n        this.logMessage(message, {\r\n            logLevel: LogLevel.Warning,\r\n            containsPii: false,\r\n            correlationId: correlationId || Constants.EMPTY_STRING,\r\n        });\r\n    }\r\n    /**\r\n     * Logs warning messages with PII.\r\n     */\r\n    warningPii(message, correlationId) {\r\n        this.logMessage(message, {\r\n            logLevel: LogLevel.Warning,\r\n            containsPii: true,\r\n            correlationId: correlationId || Constants.EMPTY_STRING,\r\n        });\r\n    }\r\n    /**\r\n     * Logs info messages.\r\n     */\r\n    info(message, correlationId) {\r\n        this.logMessage(message, {\r\n            logLevel: LogLevel.Info,\r\n            containsPii: false,\r\n            correlationId: correlationId || Constants.EMPTY_STRING,\r\n        });\r\n    }\r\n    /**\r\n     * Logs info messages with PII.\r\n     */\r\n    infoPii(message, correlationId) {\r\n        this.logMessage(message, {\r\n            logLevel: LogLevel.Info,\r\n            containsPii: true,\r\n            correlationId: correlationId || Constants.EMPTY_STRING,\r\n        });\r\n    }\r\n    /**\r\n     * Logs verbose messages.\r\n     */\r\n    verbose(message, correlationId) {\r\n        this.logMessage(message, {\r\n            logLevel: LogLevel.Verbose,\r\n            containsPii: false,\r\n            correlationId: correlationId || Constants.EMPTY_STRING,\r\n        });\r\n    }\r\n    /**\r\n     * Logs verbose messages with PII.\r\n     */\r\n    verbosePii(message, correlationId) {\r\n        this.logMessage(message, {\r\n            logLevel: LogLevel.Verbose,\r\n            containsPii: true,\r\n            correlationId: correlationId || Constants.EMPTY_STRING,\r\n        });\r\n    }\r\n    /**\r\n     * Logs trace messages.\r\n     */\r\n    trace(message, correlationId) {\r\n        this.logMessage(message, {\r\n            logLevel: LogLevel.Trace,\r\n            containsPii: false,\r\n            correlationId: correlationId || Constants.EMPTY_STRING,\r\n        });\r\n    }\r\n    /**\r\n     * Logs trace messages with PII.\r\n     */\r\n    tracePii(message, correlationId) {\r\n        this.logMessage(message, {\r\n            logLevel: LogLevel.Trace,\r\n            containsPii: true,\r\n            correlationId: correlationId || Constants.EMPTY_STRING,\r\n        });\r\n    }\r\n    /**\r\n     * Returns whether PII Logging is enabled or not.\r\n     */\r\n    isPiiLoggingEnabled() {\r\n        return this.piiLoggingEnabled || false;\r\n    }\r\n}\n\nexport { LogLevel, Logger };\n//# sourceMappingURL=Logger.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\n/* eslint-disable header/header */\r\nconst name = \"@azure/msal-common\";\r\nconst version = \"15.17.0\";\n\nexport { name, version };\n//# sourceMappingURL=packageMetadata.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst AzureCloudInstance = {\r\n    // AzureCloudInstance is not specified.\r\n    None: \"none\",\r\n    // Microsoft Azure public cloud\r\n    AzurePublic: \"https://login.microsoftonline.com\",\r\n    // Microsoft PPE\r\n    AzurePpe: \"https://login.windows-ppe.net\",\r\n    // Microsoft Chinese national/regional cloud\r\n    AzureChina: \"https://login.chinacloudapi.cn\",\r\n    // Microsoft German national/regional cloud (\"Black Forest\")\r\n    AzureGermany: \"https://login.microsoftonline.de\",\r\n    // US Government cloud\r\n    AzureUsGovernment: \"https://login.microsoftonline.us\",\r\n};\n\nexport { AzureCloudInstance };\n//# sourceMappingURL=AuthorityOptions.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst redirectUriEmpty = \"redirect_uri_empty\";\r\nconst claimsRequestParsingError = \"claims_request_parsing_error\";\r\nconst authorityUriInsecure = \"authority_uri_insecure\";\r\nconst urlParseError = \"url_parse_error\";\r\nconst urlEmptyError = \"empty_url_error\";\r\nconst emptyInputScopesError = \"empty_input_scopes_error\";\r\nconst invalidClaims = \"invalid_claims\";\r\nconst tokenRequestEmpty = \"token_request_empty\";\r\nconst logoutRequestEmpty = \"logout_request_empty\";\r\nconst invalidCodeChallengeMethod = \"invalid_code_challenge_method\";\r\nconst pkceParamsMissing = \"pkce_params_missing\";\r\nconst invalidCloudDiscoveryMetadata = \"invalid_cloud_discovery_metadata\";\r\nconst invalidAuthorityMetadata = \"invalid_authority_metadata\";\r\nconst untrustedAuthority = \"untrusted_authority\";\r\nconst missingSshJwk = \"missing_ssh_jwk\";\r\nconst missingSshKid = \"missing_ssh_kid\";\r\nconst missingNonceAuthenticationHeader = \"missing_nonce_authentication_header\";\r\nconst invalidAuthenticationHeader = \"invalid_authentication_header\";\r\nconst cannotSetOIDCOptions = \"cannot_set_OIDCOptions\";\r\nconst cannotAllowPlatformBroker = \"cannot_allow_platform_broker\";\r\nconst authorityMismatch = \"authority_mismatch\";\r\nconst invalidRequestMethodForEAR = \"invalid_request_method_for_EAR\";\r\nconst invalidAuthorizePostBodyParameters = \"invalid_authorize_post_body_parameters\";\r\nconst invalidPlatformBrokerConfiguration = \"invalid_platform_broker_configuration\";\n\nexport { authorityMismatch, authorityUriInsecure, cannotAllowPlatformBroker, cannotSetOIDCOptions, claimsRequestParsingError, emptyInputScopesError, invalidAuthenticationHeader, invalidAuthorityMetadata, invalidAuthorizePostBodyParameters, invalidClaims, invalidCloudDiscoveryMetadata, invalidCodeChallengeMethod, invalidPlatformBrokerConfiguration, invalidRequestMethodForEAR, logoutRequestEmpty, missingNonceAuthenticationHeader, missingSshJwk, missingSshKid, pkceParamsMissing, redirectUriEmpty, tokenRequestEmpty, untrustedAuthority, urlEmptyError, urlParseError };\n//# sourceMappingURL=ClientConfigurationErrorCodes.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\nimport { AuthError } from './AuthError.mjs';\nimport { invalidPlatformBrokerConfiguration, invalidRequestMethodForEAR, invalidAuthorizePostBodyParameters, authorityMismatch, cannotAllowPlatformBroker, cannotSetOIDCOptions, invalidAuthenticationHeader, missingNonceAuthenticationHeader, missingSshKid, missingSshJwk, untrustedAuthority, invalidAuthorityMetadata, invalidCloudDiscoveryMetadata, pkceParamsMissing, invalidCodeChallengeMethod, logoutRequestEmpty, tokenRequestEmpty, invalidClaims, emptyInputScopesError, urlEmptyError, urlParseError, authorityUriInsecure, claimsRequestParsingError, redirectUriEmpty } from './ClientConfigurationErrorCodes.mjs';\nimport * as ClientConfigurationErrorCodes from './ClientConfigurationErrorCodes.mjs';\nexport { ClientConfigurationErrorCodes };\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst ClientConfigurationErrorMessages = {\r\n    [redirectUriEmpty]: \"A redirect URI is required for all calls, and none has been set.\",\r\n    [claimsRequestParsingError]: \"Could not parse the given claims request object.\",\r\n    [authorityUriInsecure]: \"Authority URIs must use https.  Please see here for valid authority configuration options: https://docs.microsoft.com/en-us/azure/active-directory/develop/msal-js-initializing-client-applications#configuration-options\",\r\n    [urlParseError]: \"URL could not be parsed into appropriate segments.\",\r\n    [urlEmptyError]: \"URL was empty or null.\",\r\n    [emptyInputScopesError]: \"Scopes cannot be passed as null, undefined or empty array because they are required to obtain an access token.\",\r\n    [invalidClaims]: \"Given claims parameter must be a stringified JSON object.\",\r\n    [tokenRequestEmpty]: \"Token request was empty and not found in cache.\",\r\n    [logoutRequestEmpty]: \"The logout request was null or undefined.\",\r\n    [invalidCodeChallengeMethod]: 'code_challenge_method passed is invalid. Valid values are \"plain\" and \"S256\".',\r\n    [pkceParamsMissing]: \"Both params: code_challenge and code_challenge_method are to be passed if to be sent in the request\",\r\n    [invalidCloudDiscoveryMetadata]: \"Invalid cloudDiscoveryMetadata provided. Must be a stringified JSON object containing tenant_discovery_endpoint and metadata fields\",\r\n    [invalidAuthorityMetadata]: \"Invalid authorityMetadata provided. Must by a stringified JSON object containing authorization_endpoint, token_endpoint, issuer fields.\",\r\n    [untrustedAuthority]: \"The provided authority is not a trusted authority. Please include this authority in the knownAuthorities config parameter.\",\r\n    [missingSshJwk]: \"Missing sshJwk in SSH certificate request. A stringified JSON Web Key is required when using the SSH authentication scheme.\",\r\n    [missingSshKid]: \"Missing sshKid in SSH certificate request. A string that uniquely identifies the public SSH key is required when using the SSH authentication scheme.\",\r\n    [missingNonceAuthenticationHeader]: \"Unable to find an authentication header containing server nonce. Either the Authentication-Info or WWW-Authenticate headers must be present in order to obtain a server nonce.\",\r\n    [invalidAuthenticationHeader]: \"Invalid authentication header provided\",\r\n    [cannotSetOIDCOptions]: \"Cannot set OIDCOptions parameter. Please change the protocol mode to OIDC or use a non-Microsoft authority.\",\r\n    [cannotAllowPlatformBroker]: \"Cannot set allowPlatformBroker parameter to true when not in AAD protocol mode.\",\r\n    [authorityMismatch]: \"Authority mismatch error. Authority provided in login request or PublicClientApplication config does not match the environment of the provided account. Please use a matching account or make an interactive request to login to this authority.\",\r\n    [invalidAuthorizePostBodyParameters]: \"Invalid authorize post body parameters provided. If you are using authorizePostBodyParameters, the request method must be POST. Please check the request method and parameters.\",\r\n    [invalidRequestMethodForEAR]: \"Invalid request method for EAR protocol mode. The request method cannot be GET when using EAR protocol mode. Please change the request method to POST.\",\r\n    [invalidPlatformBrokerConfiguration]: \"Invalid platform broker configuration. `allowPlatformBrokerWithDOM` can only be enabled when `allowPlatformBroker` is enabled.\",\r\n};\r\n/**\r\n * ClientConfigurationErrorMessage class containing string constants used by error codes and messages.\r\n * @deprecated Use ClientConfigurationErrorCodes instead\r\n */\r\nconst ClientConfigurationErrorMessage = {\r\n    redirectUriNotSet: {\r\n        code: redirectUriEmpty,\r\n        desc: ClientConfigurationErrorMessages[redirectUriEmpty],\r\n    },\r\n    claimsRequestParsingError: {\r\n        code: claimsRequestParsingError,\r\n        desc: ClientConfigurationErrorMessages[claimsRequestParsingError],\r\n    },\r\n    authorityUriInsecure: {\r\n        code: authorityUriInsecure,\r\n        desc: ClientConfigurationErrorMessages[authorityUriInsecure],\r\n    },\r\n    urlParseError: {\r\n        code: urlParseError,\r\n        desc: ClientConfigurationErrorMessages[urlParseError],\r\n    },\r\n    urlEmptyError: {\r\n        code: urlEmptyError,\r\n        desc: ClientConfigurationErrorMessages[urlEmptyError],\r\n    },\r\n    emptyScopesError: {\r\n        code: emptyInputScopesError,\r\n        desc: ClientConfigurationErrorMessages[emptyInputScopesError],\r\n    },\r\n    invalidClaimsRequest: {\r\n        code: invalidClaims,\r\n        desc: ClientConfigurationErrorMessages[invalidClaims],\r\n    },\r\n    tokenRequestEmptyError: {\r\n        code: tokenRequestEmpty,\r\n        desc: ClientConfigurationErrorMessages[tokenRequestEmpty],\r\n    },\r\n    logoutRequestEmptyError: {\r\n        code: logoutRequestEmpty,\r\n        desc: ClientConfigurationErrorMessages[logoutRequestEmpty],\r\n    },\r\n    invalidCodeChallengeMethod: {\r\n        code: invalidCodeChallengeMethod,\r\n        desc: ClientConfigurationErrorMessages[invalidCodeChallengeMethod],\r\n    },\r\n    invalidCodeChallengeParams: {\r\n        code: pkceParamsMissing,\r\n        desc: ClientConfigurationErrorMessages[pkceParamsMissing],\r\n    },\r\n    invalidCloudDiscoveryMetadata: {\r\n        code: invalidCloudDiscoveryMetadata,\r\n        desc: ClientConfigurationErrorMessages[invalidCloudDiscoveryMetadata],\r\n    },\r\n    invalidAuthorityMetadata: {\r\n        code: invalidAuthorityMetadata,\r\n        desc: ClientConfigurationErrorMessages[invalidAuthorityMetadata],\r\n    },\r\n    untrustedAuthority: {\r\n        code: untrustedAuthority,\r\n        desc: ClientConfigurationErrorMessages[untrustedAuthority],\r\n    },\r\n    missingSshJwk: {\r\n        code: missingSshJwk,\r\n        desc: ClientConfigurationErrorMessages[missingSshJwk],\r\n    },\r\n    missingSshKid: {\r\n        code: missingSshKid,\r\n        desc: ClientConfigurationErrorMessages[missingSshKid],\r\n    },\r\n    missingNonceAuthenticationHeader: {\r\n        code: missingNonceAuthenticationHeader,\r\n        desc: ClientConfigurationErrorMessages[missingNonceAuthenticationHeader],\r\n    },\r\n    invalidAuthenticationHeader: {\r\n        code: invalidAuthenticationHeader,\r\n        desc: ClientConfigurationErrorMessages[invalidAuthenticationHeader],\r\n    },\r\n    cannotSetOIDCOptions: {\r\n        code: cannotSetOIDCOptions,\r\n        desc: ClientConfigurationErrorMessages[cannotSetOIDCOptions],\r\n    },\r\n    cannotAllowPlatformBroker: {\r\n        code: cannotAllowPlatformBroker,\r\n        desc: ClientConfigurationErrorMessages[cannotAllowPlatformBroker],\r\n    },\r\n    authorityMismatch: {\r\n        code: authorityMismatch,\r\n        desc: ClientConfigurationErrorMessages[authorityMismatch],\r\n    },\r\n    invalidAuthorizePostBodyParameters: {\r\n        code: invalidAuthorizePostBodyParameters,\r\n        desc: ClientConfigurationErrorMessages[invalidAuthorizePostBodyParameters],\r\n    },\r\n    invalidRequestMethodForEAR: {\r\n        code: invalidRequestMethodForEAR,\r\n        desc: ClientConfigurationErrorMessages[invalidRequestMethodForEAR],\r\n    },\r\n    invalidPlatformBrokerConfiguration: {\r\n        code: invalidPlatformBrokerConfiguration,\r\n        desc: ClientConfigurationErrorMessages[invalidPlatformBrokerConfiguration],\r\n    },\r\n};\r\n/**\r\n * Error thrown when there is an error in configuration of the MSAL.js library.\r\n */\r\nclass ClientConfigurationError extends AuthError {\r\n    constructor(errorCode) {\r\n        super(errorCode, ClientConfigurationErrorMessages[errorCode]);\r\n        this.name = \"ClientConfigurationError\";\r\n        Object.setPrototypeOf(this, ClientConfigurationError.prototype);\r\n    }\r\n}\r\nfunction createClientConfigurationError(errorCode) {\r\n    return new ClientConfigurationError(errorCode);\r\n}\n\nexport { ClientConfigurationError, ClientConfigurationErrorMessage, ClientConfigurationErrorMessages, createClientConfigurationError };\n//# sourceMappingURL=ClientConfigurationError.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * @hidden\r\n */\r\nclass StringUtils {\r\n    /**\r\n     * Check if stringified object is empty\r\n     * @param strObj\r\n     */\r\n    static isEmptyObj(strObj) {\r\n        if (strObj) {\r\n            try {\r\n                const obj = JSON.parse(strObj);\r\n                return Object.keys(obj).length === 0;\r\n            }\r\n            catch (e) { }\r\n        }\r\n        return true;\r\n    }\r\n    static startsWith(str, search) {\r\n        return str.indexOf(search) === 0;\r\n    }\r\n    static endsWith(str, search) {\r\n        return (str.length >= search.length &&\r\n            str.lastIndexOf(search) === str.length - search.length);\r\n    }\r\n    /**\r\n     * Parses string into an object.\r\n     *\r\n     * @param query\r\n     */\r\n    static queryStringToObject(query) {\r\n        const obj = {};\r\n        const params = query.split(\"&\");\r\n        const decode = (s) => decodeURIComponent(s.replace(/\\+/g, \" \"));\r\n        params.forEach((pair) => {\r\n            if (pair.trim()) {\r\n                const [key, value] = pair.split(/=(.+)/g, 2); // Split on the first occurence of the '=' character\r\n                if (key && value) {\r\n                    obj[decode(key)] = decode(value);\r\n                }\r\n            }\r\n        });\r\n        return obj;\r\n    }\r\n    /**\r\n     * Trims entries in an array.\r\n     *\r\n     * @param arr\r\n     */\r\n    static trimArrayEntries(arr) {\r\n        return arr.map((entry) => entry.trim());\r\n    }\r\n    /**\r\n     * Removes empty strings from array\r\n     * @param arr\r\n     */\r\n    static removeEmptyStringsFromArray(arr) {\r\n        return arr.filter((entry) => {\r\n            return !!entry;\r\n        });\r\n    }\r\n    /**\r\n     * Attempts to parse a string into JSON\r\n     * @param str\r\n     */\r\n    static jsonParseHelper(str) {\r\n        try {\r\n            return JSON.parse(str);\r\n        }\r\n        catch (e) {\r\n            return null;\r\n        }\r\n    }\r\n    /**\r\n     * Tests if a given string matches a given pattern, with support for wildcards and queries.\r\n     * @param pattern Wildcard pattern to string match. Supports \"*\" for wildcards and \"?\" for queries\r\n     * @param input String to match against\r\n     */\r\n    static matchPattern(pattern, input) {\r\n        /**\r\n         * Wildcard support: https://stackoverflow.com/a/3117248/4888559\r\n         * Queries: replaces \"?\" in string with escaped \"\\?\" for regex test\r\n         */\r\n        // eslint-disable-next-line security/detect-non-literal-regexp\r\n        const regex = new RegExp(pattern\r\n            .replace(/\\\\/g, \"\\\\\\\\\")\r\n            .replace(/\\*/g, \"[^ ]*\")\r\n            .replace(/\\?/g, \"\\\\?\"));\r\n        return regex.test(input);\r\n    }\r\n    /**\r\n     * Tests if a given string matches a given pattern using stricter, anchored matching semantics.\r\n     *\r\n     * Differences from `matchPattern` (legacy):\r\n     * - All regex metacharacters (including `.`) in the pattern are treated as literals,\r\n     *   so `example.com` matches only `example.com` and not `exampleXcom`.\r\n     * - The generated regex is anchored with `^` and `$` so partial/substring matches\r\n     *   are not allowed.\r\n     * - `*` is the only supported wildcard. Its behaviour depends on the URL component:\r\n     *   - `host` component: `*` matches any sequence of characters that does NOT include\r\n     *     a dot (`.`), keeping wildcards within a single DNS label boundary.\r\n     *   - All other components: `*` matches any sequence of characters (including `/`).\r\n     *\r\n     * @param pattern - The `protectedResourceMap` key pattern to match against. `*` is a\r\n     *   multi-character wildcard; all other characters are treated as literals.\r\n     * @param input - The URL component value (e.g. host, pathname) extracted from the\r\n     *   outgoing request URL to test against the pattern.\r\n     * @param options - Optional. Provide `component` to enable component-aware wildcard\r\n     *   semantics. Accepted values: `\"host\"`, `\"path\"`, `\"protocol\"`, `\"search\"`,\r\n     *   `\"hash\"`. Defaults to path-style (permissive) matching when omitted.\r\n     * @returns `true` if the full input string matches the pattern; `false` otherwise.\r\n     */\r\n    static matchPatternStrict(pattern, input, options) {\r\n        const component = options?.component;\r\n        // Step 1: Escape all regex special characters so literals are matched literally.\r\n        let regexBody = pattern.replace(/[.+^${}()|[\\]\\\\*?]/g, \"\\\\$&\");\r\n        // Step 2: Replace the escaped '*' with its component-aware regex equivalent.\r\n        if (component === \"host\") {\r\n            regexBody = regexBody.replace(/\\\\\\*/g, \"[^.]*\");\r\n        }\r\n        else {\r\n            // PATH, PROTOCOL, SEARCH, HASH, or unspecified: '*' matches any characters.\r\n            regexBody = regexBody.replace(/\\\\\\*/g, \".*\");\r\n        }\r\n        // Step 3: Anchor for full-string matching.\r\n        // eslint-disable-next-line security/detect-non-literal-regexp\r\n        const regex = new RegExp(`^${regexBody}$`);\r\n        return regex.test(input);\r\n    }\r\n}\n\nexport { StringUtils };\n//# sourceMappingURL=StringUtils.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\nimport { createClientConfigurationError } from '../error/ClientConfigurationError.mjs';\nimport { StringUtils } from '../utils/StringUtils.mjs';\nimport { createClientAuthError } from '../error/ClientAuthError.mjs';\nimport { Constants, OIDC_DEFAULT_SCOPES, OIDC_SCOPES } from '../utils/Constants.mjs';\nimport { emptyInputScopesError } from '../error/ClientConfigurationErrorCodes.mjs';\nimport { cannotAppendScopeSet, cannotRemoveEmptyScope, emptyInputScopeSet } from '../error/ClientAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * The ScopeSet class creates a set of scopes. Scopes are case-insensitive, unique values, so the Set object in JS makes\r\n * the most sense to implement for this class. All scopes are trimmed and converted to lower case strings in intersection and union functions\r\n * to ensure uniqueness of strings.\r\n */\r\nclass ScopeSet {\r\n    constructor(inputScopes) {\r\n        // Filter empty string and null/undefined array items\r\n        const scopeArr = inputScopes\r\n            ? StringUtils.trimArrayEntries([...inputScopes])\r\n            : [];\r\n        const filteredInput = scopeArr\r\n            ? StringUtils.removeEmptyStringsFromArray(scopeArr)\r\n            : [];\r\n        // Check if scopes array has at least one member\r\n        if (!filteredInput || !filteredInput.length) {\r\n            throw createClientConfigurationError(emptyInputScopesError);\r\n        }\r\n        this.scopes = new Set(); // Iterator in constructor not supported by IE11\r\n        filteredInput.forEach((scope) => this.scopes.add(scope));\r\n    }\r\n    /**\r\n     * Factory method to create ScopeSet from space-delimited string\r\n     * @param inputScopeString\r\n     * @param appClientId\r\n     * @param scopesRequired\r\n     */\r\n    static fromString(inputScopeString) {\r\n        const scopeString = inputScopeString || Constants.EMPTY_STRING;\r\n        const inputScopes = scopeString.split(\" \");\r\n        return new ScopeSet(inputScopes);\r\n    }\r\n    /**\r\n     * Creates the set of scopes to search for in cache lookups\r\n     * @param inputScopeString\r\n     * @returns\r\n     */\r\n    static createSearchScopes(inputScopeString) {\r\n        // Handle empty scopes by using default OIDC scopes for cache lookup\r\n        const scopesToUse = inputScopeString && inputScopeString.length > 0\r\n            ? inputScopeString\r\n            : [...OIDC_DEFAULT_SCOPES];\r\n        const scopeSet = new ScopeSet(scopesToUse);\r\n        if (!scopeSet.containsOnlyOIDCScopes()) {\r\n            scopeSet.removeOIDCScopes();\r\n        }\r\n        else {\r\n            scopeSet.removeScope(Constants.OFFLINE_ACCESS_SCOPE);\r\n        }\r\n        return scopeSet;\r\n    }\r\n    /**\r\n     * Check if a given scope is present in this set of scopes.\r\n     * @param scope\r\n     */\r\n    containsScope(scope) {\r\n        const lowerCaseScopes = this.printScopesLowerCase().split(\" \");\r\n        const lowerCaseScopesSet = new ScopeSet(lowerCaseScopes);\r\n        // compare lowercase scopes\r\n        return scope\r\n            ? lowerCaseScopesSet.scopes.has(scope.toLowerCase())\r\n            : false;\r\n    }\r\n    /**\r\n     * Check if a set of scopes is present in this set of scopes.\r\n     * @param scopeSet\r\n     */\r\n    containsScopeSet(scopeSet) {\r\n        if (!scopeSet || scopeSet.scopes.size <= 0) {\r\n            return false;\r\n        }\r\n        return (this.scopes.size >= scopeSet.scopes.size &&\r\n            scopeSet.asArray().every((scope) => this.containsScope(scope)));\r\n    }\r\n    /**\r\n     * Check if set of scopes contains only the defaults\r\n     */\r\n    containsOnlyOIDCScopes() {\r\n        let defaultScopeCount = 0;\r\n        OIDC_SCOPES.forEach((defaultScope) => {\r\n            if (this.containsScope(defaultScope)) {\r\n                defaultScopeCount += 1;\r\n            }\r\n        });\r\n        return this.scopes.size === defaultScopeCount;\r\n    }\r\n    /**\r\n     * Appends single scope if passed\r\n     * @param newScope\r\n     */\r\n    appendScope(newScope) {\r\n        if (newScope) {\r\n            this.scopes.add(newScope.trim());\r\n        }\r\n    }\r\n    /**\r\n     * Appends multiple scopes if passed\r\n     * @param newScopes\r\n     */\r\n    appendScopes(newScopes) {\r\n        try {\r\n            newScopes.forEach((newScope) => this.appendScope(newScope));\r\n        }\r\n        catch (e) {\r\n            throw createClientAuthError(cannotAppendScopeSet);\r\n        }\r\n    }\r\n    /**\r\n     * Removes element from set of scopes.\r\n     * @param scope\r\n     */\r\n    removeScope(scope) {\r\n        if (!scope) {\r\n            throw createClientAuthError(cannotRemoveEmptyScope);\r\n        }\r\n        this.scopes.delete(scope.trim());\r\n    }\r\n    /**\r\n     * Removes default scopes from set of scopes\r\n     * Primarily used to prevent cache misses if the default scopes are not returned from the server\r\n     */\r\n    removeOIDCScopes() {\r\n        OIDC_SCOPES.forEach((defaultScope) => {\r\n            this.scopes.delete(defaultScope);\r\n        });\r\n    }\r\n    /**\r\n     * Combines an array of scopes with the current set of scopes.\r\n     * @param otherScopes\r\n     */\r\n    unionScopeSets(otherScopes) {\r\n        if (!otherScopes) {\r\n            throw createClientAuthError(emptyInputScopeSet);\r\n        }\r\n        const unionScopes = new Set(); // Iterator in constructor not supported in IE11\r\n        otherScopes.scopes.forEach((scope) => unionScopes.add(scope.toLowerCase()));\r\n        this.scopes.forEach((scope) => unionScopes.add(scope.toLowerCase()));\r\n        return unionScopes;\r\n    }\r\n    /**\r\n     * Check if scopes intersect between this set and another.\r\n     * @param otherScopes\r\n     */\r\n    intersectingScopeSets(otherScopes) {\r\n        if (!otherScopes) {\r\n            throw createClientAuthError(emptyInputScopeSet);\r\n        }\r\n        // Do not allow OIDC scopes to be the only intersecting scopes\r\n        if (!otherScopes.containsOnlyOIDCScopes()) {\r\n            otherScopes.removeOIDCScopes();\r\n        }\r\n        const unionScopes = this.unionScopeSets(otherScopes);\r\n        const sizeOtherScopes = otherScopes.getScopeCount();\r\n        const sizeThisScopes = this.getScopeCount();\r\n        const sizeUnionScopes = unionScopes.size;\r\n        return sizeUnionScopes < sizeThisScopes + sizeOtherScopes;\r\n    }\r\n    /**\r\n     * Returns size of set of scopes.\r\n     */\r\n    getScopeCount() {\r\n        return this.scopes.size;\r\n    }\r\n    /**\r\n     * Returns the scopes as an array of string values\r\n     */\r\n    asArray() {\r\n        const array = [];\r\n        this.scopes.forEach((val) => array.push(val));\r\n        return array;\r\n    }\r\n    /**\r\n     * Prints scopes into a space-delimited string\r\n     */\r\n    printScopes() {\r\n        if (this.scopes) {\r\n            const scopeArr = this.asArray();\r\n            return scopeArr.join(\" \");\r\n        }\r\n        return Constants.EMPTY_STRING;\r\n    }\r\n    /**\r\n     * Prints scopes into a space-delimited lower-case string (used for caching)\r\n     */\r\n    printScopesLowerCase() {\r\n        return this.printScopes().toLowerCase();\r\n    }\r\n}\n\nexport { ScopeSet };\n//# sourceMappingURL=ScopeSet.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\nimport { createClientAuthError } from '../error/ClientAuthError.mjs';\nimport { Separators, Constants } from '../utils/Constants.mjs';\nimport { clientInfoEmptyError, clientInfoDecodingError } from '../error/ClientAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Function to build a client info object from server clientInfo string\r\n * @param rawClientInfo\r\n * @param crypto\r\n */\r\nfunction buildClientInfo(rawClientInfo, base64Decode) {\r\n    if (!rawClientInfo) {\r\n        throw createClientAuthError(clientInfoEmptyError);\r\n    }\r\n    try {\r\n        const decodedClientInfo = base64Decode(rawClientInfo);\r\n        return JSON.parse(decodedClientInfo);\r\n    }\r\n    catch (e) {\r\n        throw createClientAuthError(clientInfoDecodingError);\r\n    }\r\n}\r\n/**\r\n * Function to build a client info object from cached homeAccountId string\r\n * @param homeAccountId\r\n */\r\nfunction buildClientInfoFromHomeAccountId(homeAccountId) {\r\n    if (!homeAccountId) {\r\n        throw createClientAuthError(clientInfoDecodingError);\r\n    }\r\n    const clientInfoParts = homeAccountId.split(Separators.CLIENT_INFO_SEPARATOR, 2);\r\n    return {\r\n        uid: clientInfoParts[0],\r\n        utid: clientInfoParts.length < 2\r\n            ? Constants.EMPTY_STRING\r\n            : clientInfoParts[1],\r\n    };\r\n}\n\nexport { buildClientInfo, buildClientInfoFromHomeAccountId };\n//# sourceMappingURL=ClientInfo.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Returns true if tenantId matches the utid portion of homeAccountId\r\n * @param tenantId\r\n * @param homeAccountId\r\n * @returns\r\n */\r\nfunction tenantIdMatchesHomeTenant(tenantId, homeAccountId) {\r\n    return (!!tenantId &&\r\n        !!homeAccountId &&\r\n        tenantId === homeAccountId.split(\".\")[1]);\r\n}\r\n/**\r\n * Build tenant profile\r\n * @param homeAccountId - Home account identifier for this account object\r\n * @param localAccountId - Local account identifer for this account object\r\n * @param tenantId - Full tenant or organizational id that this account belongs to\r\n * @param idTokenClaims - Claims from the ID token\r\n * @returns\r\n */\r\nfunction buildTenantProfile(homeAccountId, localAccountId, tenantId, idTokenClaims) {\r\n    if (idTokenClaims) {\r\n        const { oid, sub, tid, name, tfp, acr, preferred_username, upn, login_hint, } = idTokenClaims;\r\n        /**\r\n         * Since there is no way to determine if the authority is AAD or B2C, we exhaust all the possible claims that can serve as tenant ID with the following precedence:\r\n         * tid - TenantID claim that identifies the tenant that issued the token in AAD. Expected in all AAD ID tokens, not present in B2C ID Tokens.\r\n         * tfp - Trust Framework Policy claim that identifies the policy that was used to authenticate the user. Functions as tenant for B2C scenarios.\r\n         * acr - Authentication Context Class Reference claim used only with older B2C policies. Fallback in case tfp is not present, but likely won't be present anyway.\r\n         */\r\n        const tenantId = tid || tfp || acr || \"\";\r\n        return {\r\n            tenantId: tenantId,\r\n            localAccountId: oid || sub || \"\",\r\n            name: name,\r\n            username: preferred_username || upn || \"\",\r\n            loginHint: login_hint,\r\n            isHomeTenant: tenantIdMatchesHomeTenant(tenantId, homeAccountId),\r\n        };\r\n    }\r\n    else {\r\n        return {\r\n            tenantId,\r\n            localAccountId,\r\n            username: \"\",\r\n            isHomeTenant: tenantIdMatchesHomeTenant(tenantId, homeAccountId),\r\n        };\r\n    }\r\n}\r\n/**\r\n * Replaces account info that varies by tenant profile sourced from the ID token claims passed in with the tenant-specific account info\r\n * @param baseAccountInfo\r\n * @param idTokenClaims\r\n * @returns\r\n */\r\nfunction updateAccountTenantProfileData(baseAccountInfo, tenantProfile, idTokenClaims, idTokenSecret) {\r\n    let updatedAccountInfo = baseAccountInfo;\r\n    // Tenant Profile overrides passed in account info\r\n    if (tenantProfile) {\r\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n        const { isHomeTenant, ...tenantProfileOverride } = tenantProfile;\r\n        updatedAccountInfo = { ...baseAccountInfo, ...tenantProfileOverride };\r\n    }\r\n    // ID token claims override passed in account info and tenant profile\r\n    if (idTokenClaims) {\r\n        // Ignore isHomeTenant, loginHint, and sid which are part of tenant profile but not base account info\r\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n        const { isHomeTenant, ...claimsSourcedTenantProfile } = buildTenantProfile(baseAccountInfo.homeAccountId, baseAccountInfo.localAccountId, baseAccountInfo.tenantId, idTokenClaims);\r\n        updatedAccountInfo = {\r\n            ...updatedAccountInfo,\r\n            ...claimsSourcedTenantProfile,\r\n            idTokenClaims: idTokenClaims,\r\n            idToken: idTokenSecret,\r\n        };\r\n        return updatedAccountInfo;\r\n    }\r\n    return updatedAccountInfo;\r\n}\n\nexport { buildTenantProfile, tenantIdMatchesHomeTenant, updateAccountTenantProfileData };\n//# sourceMappingURL=AccountInfo.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Authority types supported by MSAL.\r\n */\r\nconst AuthorityType = {\r\n    Default: 0,\r\n    Adfs: 1,\r\n    Dsts: 2,\r\n    Ciam: 3,\r\n};\n\nexport { AuthorityType };\n//# sourceMappingURL=AuthorityType.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Gets tenantId from available ID token claims to set as credential realm with the following precedence:\r\n * 1. tid - if the token is acquired from an Azure AD tenant tid will be present\r\n * 2. tfp - if the token is acquired from a modern B2C tenant tfp should be present\r\n * 3. acr - if the token is acquired from a legacy B2C tenant acr should be present\r\n * Downcased to match the realm case-insensitive comparison requirements\r\n * @param idTokenClaims\r\n * @returns\r\n */\r\nfunction getTenantIdFromIdTokenClaims(idTokenClaims) {\r\n    if (idTokenClaims) {\r\n        const tenantId = idTokenClaims.tid || idTokenClaims.tfp || idTokenClaims.acr;\r\n        return tenantId || null;\r\n    }\r\n    return null;\r\n}\n\nexport { getTenantIdFromIdTokenClaims };\n//# sourceMappingURL=TokenClaims.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Protocol modes supported by MSAL.\r\n */\r\nconst ProtocolMode = {\r\n    /**\r\n     * Auth Code + PKCE with Entra ID (formerly AAD) specific optimizations and features\r\n     */\r\n    AAD: \"AAD\",\r\n    /**\r\n     * Auth Code + PKCE without Entra ID specific optimizations and features. For use only with non-Microsoft owned authorities.\r\n     * Support is limited for this mode.\r\n     */\r\n    OIDC: \"OIDC\",\r\n    /**\r\n     * Encrypted Authorize Response (EAR) with Entra ID specific optimizations and features\r\n     */\r\n    EAR: \"EAR\",\r\n};\n\nexport { ProtocolMode };\n//# sourceMappingURL=ProtocolMode.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\nimport { CacheAccountType } from '../../utils/Constants.mjs';\nimport { buildClientInfo } from '../../account/ClientInfo.mjs';\nimport { buildTenantProfile } from '../../account/AccountInfo.mjs';\nimport { createClientAuthError } from '../../error/ClientAuthError.mjs';\nimport { AuthorityType } from '../../authority/AuthorityType.mjs';\nimport { getTenantIdFromIdTokenClaims } from '../../account/TokenClaims.mjs';\nimport { ProtocolMode } from '../../authority/ProtocolMode.mjs';\nimport { invalidCacheEnvironment } from '../../error/ClientAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Type that defines required and optional parameters for an Account field (based on universal cache schema implemented by all MSALs).\r\n *\r\n * Key : Value Schema\r\n *\r\n * Key: <home_account_id>-<environment>-<realm*>\r\n *\r\n * Value Schema:\r\n * {\r\n *      homeAccountId: home account identifier for the auth scheme,\r\n *      environment: entity that issued the token, represented as a full host\r\n *      realm: Full tenant or organizational identifier that the account belongs to\r\n *      localAccountId: Original tenant-specific accountID, usually used for legacy cases\r\n *      username: primary username that represents the user, usually corresponds to preferred_username in the v2 endpt\r\n *      authorityType: Accounts authority type as a string\r\n *      name: Full name for the account, including given name and family name,\r\n *      lastModificationTime: last time this entity was modified in the cache\r\n *      lastModificationApp:\r\n *      nativeAccountId: Account identifier on the native device\r\n *      tenantProfiles: Array of tenant profile objects for each tenant that the account has authenticated with in the browser\r\n * }\r\n * @internal\r\n */\r\nclass AccountEntity {\r\n    /**\r\n     * Returns the AccountInfo interface for this account.\r\n     */\r\n    static getAccountInfo(accountEntity) {\r\n        const tenantProfiles = accountEntity.tenantProfiles || [];\r\n        // Ensure at least the home tenant profile exists\r\n        if (tenantProfiles.length === 0 &&\r\n            accountEntity.realm &&\r\n            accountEntity.localAccountId) {\r\n            tenantProfiles.push(buildTenantProfile(accountEntity.homeAccountId, accountEntity.localAccountId, accountEntity.realm));\r\n        }\r\n        return {\r\n            homeAccountId: accountEntity.homeAccountId,\r\n            environment: accountEntity.environment,\r\n            tenantId: accountEntity.realm,\r\n            username: accountEntity.username,\r\n            localAccountId: accountEntity.localAccountId,\r\n            loginHint: accountEntity.loginHint,\r\n            name: accountEntity.name,\r\n            nativeAccountId: accountEntity.nativeAccountId,\r\n            authorityType: accountEntity.authorityType,\r\n            // Deserialize tenant profiles array into a Map\r\n            tenantProfiles: new Map(tenantProfiles.map((tenantProfile) => {\r\n                return [tenantProfile.tenantId, tenantProfile];\r\n            })),\r\n            dataBoundary: accountEntity.dataBoundary,\r\n        };\r\n    }\r\n    /**\r\n     * Returns true if the account entity is in single tenant format (outdated), false otherwise\r\n     */\r\n    isSingleTenant() {\r\n        return !this.tenantProfiles;\r\n    }\r\n    /**\r\n     * Build Account cache from IdToken, clientInfo and authority/policy. Associated with AAD.\r\n     * @param accountDetails\r\n     */\r\n    static createAccount(accountDetails, authority, base64Decode) {\r\n        const account = new AccountEntity();\r\n        if (authority.authorityType === AuthorityType.Adfs) {\r\n            account.authorityType = CacheAccountType.ADFS_ACCOUNT_TYPE;\r\n        }\r\n        else if (authority.protocolMode === ProtocolMode.OIDC) {\r\n            account.authorityType = CacheAccountType.GENERIC_ACCOUNT_TYPE;\r\n        }\r\n        else {\r\n            account.authorityType = CacheAccountType.MSSTS_ACCOUNT_TYPE;\r\n        }\r\n        let clientInfo;\r\n        if (accountDetails.clientInfo && base64Decode) {\r\n            clientInfo = buildClientInfo(accountDetails.clientInfo, base64Decode);\r\n            if (clientInfo.xms_tdbr) {\r\n                account.dataBoundary =\r\n                    clientInfo.xms_tdbr === \"EU\" ? \"EU\" : \"None\";\r\n            }\r\n        }\r\n        account.clientInfo = accountDetails.clientInfo;\r\n        account.homeAccountId = accountDetails.homeAccountId;\r\n        account.nativeAccountId = accountDetails.nativeAccountId;\r\n        const env = accountDetails.environment ||\r\n            (authority && authority.getPreferredCache());\r\n        if (!env) {\r\n            throw createClientAuthError(invalidCacheEnvironment);\r\n        }\r\n        account.environment = env;\r\n        // non AAD scenarios can have empty realm\r\n        account.realm =\r\n            clientInfo?.utid ||\r\n                getTenantIdFromIdTokenClaims(accountDetails.idTokenClaims) ||\r\n                \"\";\r\n        // How do you account for MSA CID here?\r\n        account.localAccountId =\r\n            clientInfo?.uid ||\r\n                accountDetails.idTokenClaims?.oid ||\r\n                accountDetails.idTokenClaims?.sub ||\r\n                \"\";\r\n        /*\r\n         * In B2C scenarios the emails claim is used instead of preferred_username and it is an array.\r\n         * In most cases it will contain a single email. This field should not be relied upon if a custom\r\n         * policy is configured to return more than 1 email.\r\n         */\r\n        const preferredUsername = accountDetails.idTokenClaims?.preferred_username ||\r\n            accountDetails.idTokenClaims?.upn;\r\n        const email = accountDetails.idTokenClaims?.emails\r\n            ? accountDetails.idTokenClaims.emails[0]\r\n            : null;\r\n        account.username = preferredUsername || email || \"\";\r\n        account.loginHint = accountDetails.idTokenClaims?.login_hint;\r\n        account.name = accountDetails.idTokenClaims?.name || \"\";\r\n        account.cloudGraphHostName = accountDetails.cloudGraphHostName;\r\n        account.msGraphHost = accountDetails.msGraphHost;\r\n        if (accountDetails.tenantProfiles) {\r\n            account.tenantProfiles = accountDetails.tenantProfiles;\r\n        }\r\n        else {\r\n            const tenantProfile = buildTenantProfile(accountDetails.homeAccountId, account.localAccountId, account.realm, accountDetails.idTokenClaims);\r\n            account.tenantProfiles = [tenantProfile];\r\n        }\r\n        return account;\r\n    }\r\n    /**\r\n     * Creates an AccountEntity object from AccountInfo\r\n     * @param accountInfo\r\n     * @param cloudGraphHostName\r\n     * @param msGraphHost\r\n     * @returns\r\n     */\r\n    static createFromAccountInfo(accountInfo, cloudGraphHostName, msGraphHost) {\r\n        const account = new AccountEntity();\r\n        account.authorityType =\r\n            accountInfo.authorityType || CacheAccountType.GENERIC_ACCOUNT_TYPE;\r\n        account.homeAccountId = accountInfo.homeAccountId;\r\n        account.localAccountId = accountInfo.localAccountId;\r\n        account.nativeAccountId = accountInfo.nativeAccountId;\r\n        account.realm = accountInfo.tenantId;\r\n        account.environment = accountInfo.environment;\r\n        account.username = accountInfo.username;\r\n        account.name = accountInfo.name;\r\n        account.loginHint = accountInfo.loginHint;\r\n        account.cloudGraphHostName = cloudGraphHostName;\r\n        account.msGraphHost = msGraphHost;\r\n        // Serialize tenant profiles map into an array\r\n        const tenantProfiles = Array.from(accountInfo.tenantProfiles?.values() || []);\r\n        // Ensure at least the home tenant profile exists\r\n        if (tenantProfiles.length === 0 &&\r\n            accountInfo.tenantId &&\r\n            accountInfo.localAccountId) {\r\n            tenantProfiles.push(buildTenantProfile(accountInfo.homeAccountId, accountInfo.localAccountId, accountInfo.tenantId, accountInfo.idTokenClaims));\r\n        }\r\n        account.tenantProfiles = tenantProfiles;\r\n        account.dataBoundary = accountInfo.dataBoundary;\r\n        return account;\r\n    }\r\n    /**\r\n     * Generate HomeAccountId from server response\r\n     * @param serverClientInfo\r\n     * @param authType\r\n     */\r\n    static generateHomeAccountId(serverClientInfo, authType, logger, cryptoObj, idTokenClaims) {\r\n        // since ADFS/DSTS do not have tid and does not set client_info\r\n        if (!(authType === AuthorityType.Adfs ||\r\n            authType === AuthorityType.Dsts)) {\r\n            // for cases where there is clientInfo\r\n            if (serverClientInfo) {\r\n                try {\r\n                    const clientInfo = buildClientInfo(serverClientInfo, cryptoObj.base64Decode);\r\n                    if (clientInfo.uid && clientInfo.utid) {\r\n                        return `${clientInfo.uid}.${clientInfo.utid}`;\r\n                    }\r\n                }\r\n                catch (e) { }\r\n            }\r\n            logger.warning(\"No client info in response\");\r\n        }\r\n        // default to \"sub\" claim\r\n        return idTokenClaims?.sub || \"\";\r\n    }\r\n    /**\r\n     * Validates an entity: checks for all expected params\r\n     * @param entity\r\n     */\r\n    static isAccountEntity(entity) {\r\n        if (!entity) {\r\n            return false;\r\n        }\r\n        return (entity.hasOwnProperty(\"homeAccountId\") &&\r\n            entity.hasOwnProperty(\"environment\") &&\r\n            entity.hasOwnProperty(\"realm\") &&\r\n            entity.hasOwnProperty(\"localAccountId\") &&\r\n            entity.hasOwnProperty(\"username\") &&\r\n            entity.hasOwnProperty(\"authorityType\"));\r\n    }\r\n    /**\r\n     * Helper function to determine whether 2 accountInfo objects represent the same account\r\n     * @param accountA\r\n     * @param accountB\r\n     * @param compareClaims - If set to true idTokenClaims will also be compared to determine account equality\r\n     */\r\n    static accountInfoIsEqual(accountA, accountB, compareClaims) {\r\n        if (!accountA || !accountB) {\r\n            return false;\r\n        }\r\n        let claimsMatch = true; // default to true so as to not fail comparison below if compareClaims: false\r\n        if (compareClaims) {\r\n            const accountAClaims = (accountA.idTokenClaims ||\r\n                {});\r\n            const accountBClaims = (accountB.idTokenClaims ||\r\n                {});\r\n            // issued at timestamp and nonce are expected to change each time a new id token is acquired\r\n            claimsMatch =\r\n                accountAClaims.iat === accountBClaims.iat &&\r\n                    accountAClaims.nonce === accountBClaims.nonce;\r\n        }\r\n        return (accountA.homeAccountId === accountB.homeAccountId &&\r\n            accountA.localAccountId === accountB.localAccountId &&\r\n            accountA.username === accountB.username &&\r\n            accountA.tenantId === accountB.tenantId &&\r\n            accountA.loginHint === accountB.loginHint &&\r\n            accountA.environment === accountB.environment &&\r\n            accountA.nativeAccountId === accountB.nativeAccountId &&\r\n            claimsMatch);\r\n    }\r\n}\n\nexport { AccountEntity };\n//# sourceMappingURL=AccountEntity.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\nimport { createClientAuthError } from '../error/ClientAuthError.mjs';\nimport { tokenParsingError, nullOrEmptyToken, maxAgeTranspired } from '../error/ClientAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Extract token by decoding the rawToken\r\n *\r\n * @param encodedToken\r\n */\r\nfunction extractTokenClaims(encodedToken, base64Decode) {\r\n    const jswPayload = getJWSPayload(encodedToken);\r\n    // token will be decoded to get the username\r\n    try {\r\n        // base64Decode() should throw an error if there is an issue\r\n        const base64Decoded = base64Decode(jswPayload);\r\n        return JSON.parse(base64Decoded);\r\n    }\r\n    catch (err) {\r\n        throw createClientAuthError(tokenParsingError);\r\n    }\r\n}\r\n/**\r\n * Check if the signin_state claim contains \"kmsi\"\r\n * @param idTokenClaims\r\n * @returns\r\n */\r\nfunction isKmsi(idTokenClaims) {\r\n    if (!idTokenClaims.signin_state) {\r\n        return false;\r\n    }\r\n    /**\r\n     * Signin_state claim known values:\r\n     * dvc_mngd - device is managed\r\n     * dvc_dmjd - device is domain joined\r\n     * kmsi - user opted to \"keep me signed in\"\r\n     * inknownntwk - Request made inside a known network. Don't use this, use CAE instead.\r\n     */\r\n    const kmsiClaims = [\"kmsi\", \"dvc_dmjd\"]; // There are some cases where kmsi may not be returned but persistent storage is still OK - allow dvc_dmjd as well\r\n    const kmsi = idTokenClaims.signin_state.some((value) => kmsiClaims.includes(value.trim().toLowerCase()));\r\n    return kmsi;\r\n}\r\n/**\r\n * decode a JWT\r\n *\r\n * @param authToken\r\n */\r\nfunction getJWSPayload(authToken) {\r\n    if (!authToken) {\r\n        throw createClientAuthError(nullOrEmptyToken);\r\n    }\r\n    const tokenPartsRegex = /^([^\\.\\s]*)\\.([^\\.\\s]+)\\.([^\\.\\s]*)$/;\r\n    const matches = tokenPartsRegex.exec(authToken);\r\n    if (!matches || matches.length < 4) {\r\n        throw createClientAuthError(tokenParsingError);\r\n    }\r\n    /**\r\n     * const crackedToken = {\r\n     *  header: matches[1],\r\n     *  JWSPayload: matches[2],\r\n     *  JWSSig: matches[3],\r\n     * };\r\n     */\r\n    return matches[2];\r\n}\r\n/**\r\n * Determine if the token's max_age has transpired\r\n */\r\nfunction checkMaxAge(authTime, maxAge) {\r\n    /*\r\n     * per https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest\r\n     * To force an immediate re-authentication: If an app requires that a user re-authenticate prior to access,\r\n     * provide a value of 0 for the max_age parameter and the AS will force a fresh login.\r\n     */\r\n    const fiveMinuteSkew = 300000; // five minutes in milliseconds\r\n    if (maxAge === 0 || Date.now() - fiveMinuteSkew > authTime + maxAge) {\r\n        throw createClientAuthError(maxAgeTranspired);\r\n    }\r\n}\n\nexport { checkMaxAge, extractTokenClaims, getJWSPayload, isKmsi };\n//# sourceMappingURL=AuthToken.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\nimport { createClientAuthError } from '../error/ClientAuthError.mjs';\nimport { StringUtils } from './StringUtils.mjs';\nimport { hashNotDeserialized } from '../error/ClientAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Canonicalizes a URL by making it lowercase and ensuring it ends with /\r\n * Inlined version of UrlString.canonicalizeUri to avoid circular dependency\r\n * @param url - URL to canonicalize\r\n * @returns Canonicalized URL\r\n */\r\nfunction canonicalizeUrl(url) {\r\n    if (!url) {\r\n        return url;\r\n    }\r\n    let lowerCaseUrl = url.toLowerCase();\r\n    if (StringUtils.endsWith(lowerCaseUrl, \"?\")) {\r\n        lowerCaseUrl = lowerCaseUrl.slice(0, -1);\r\n    }\r\n    else if (StringUtils.endsWith(lowerCaseUrl, \"?/\")) {\r\n        lowerCaseUrl = lowerCaseUrl.slice(0, -2);\r\n    }\r\n    if (!StringUtils.endsWith(lowerCaseUrl, \"/\")) {\r\n        lowerCaseUrl += \"/\";\r\n    }\r\n    return lowerCaseUrl;\r\n}\r\n/**\r\n * Parses hash string from given string. Returns empty string if no hash symbol is found.\r\n * @param hashString\r\n */\r\nfunction stripLeadingHashOrQuery(responseString) {\r\n    if (responseString.startsWith(\"#/\")) {\r\n        return responseString.substring(2);\r\n    }\r\n    else if (responseString.startsWith(\"#\") ||\r\n        responseString.startsWith(\"?\")) {\r\n        return responseString.substring(1);\r\n    }\r\n    return responseString;\r\n}\r\n/**\r\n * Returns URL hash as server auth code response object.\r\n */\r\nfunction getDeserializedResponse(responseString) {\r\n    // Check if given hash is empty\r\n    if (!responseString || responseString.indexOf(\"=\") < 0) {\r\n        return null;\r\n    }\r\n    try {\r\n        // Strip the # or ? symbol if present\r\n        const normalizedResponse = stripLeadingHashOrQuery(responseString);\r\n        // If # symbol was not present, above will return empty string, so give original hash value\r\n        const deserializedHash = Object.fromEntries(new URLSearchParams(normalizedResponse));\r\n        // Check for known response properties\r\n        if (deserializedHash.code ||\r\n            deserializedHash.ear_jwe ||\r\n            deserializedHash.error ||\r\n            deserializedHash.error_description ||\r\n            deserializedHash.state) {\r\n            return deserializedHash;\r\n        }\r\n    }\r\n    catch (e) {\r\n        throw createClientAuthError(hashNotDeserialized);\r\n    }\r\n    return null;\r\n}\r\n/**\r\n * Utility to create a URL from the params map\r\n */\r\nfunction mapToQueryString(parameters, encodeExtraParams = true, extraQueryParameters) {\r\n    const queryParameterArray = new Array();\r\n    parameters.forEach((value, key) => {\r\n        if (!encodeExtraParams &&\r\n            extraQueryParameters &&\r\n            key in extraQueryParameters) {\r\n            queryParameterArray.push(`${key}=${value}`);\r\n        }\r\n        else {\r\n            queryParameterArray.push(`${key}=${encodeURIComponent(value)}`);\r\n        }\r\n    });\r\n    return queryParameterArray.join(\"&\");\r\n}\r\n/**\r\n * Normalizes URLs for comparison by removing hash, canonicalizing,\r\n * and ensuring consistent URL encoding in query parameters.\r\n * This fixes redirect loops when URLs contain encoded characters like apostrophes (%27).\r\n * @param url - URL to normalize\r\n * @returns Normalized URL string for comparison\r\n */\r\nfunction normalizeUrlForComparison(url) {\r\n    if (!url) {\r\n        return url;\r\n    }\r\n    // Remove hash first\r\n    const urlWithoutHash = url.split(\"#\")[0];\r\n    try {\r\n        // Parse the URL to handle encoding consistently\r\n        const urlObj = new URL(urlWithoutHash);\r\n        /*\r\n         * Reconstruct the URL with properly decoded query parameters\r\n         * This ensures that %27 and ' are treated as equivalent\r\n         */\r\n        const normalizedUrl = urlObj.origin + urlObj.pathname + urlObj.search;\r\n        // Apply canonicalization logic inline to avoid circular dependency\r\n        return canonicalizeUrl(normalizedUrl);\r\n    }\r\n    catch (e) {\r\n        // Fallback to original logic if URL parsing fails\r\n        return canonicalizeUrl(urlWithoutHash);\r\n    }\r\n}\n\nexport { getDeserializedResponse, mapToQueryString, normalizeUrlForComparison, stripLeadingHashOrQuery };\n//# sourceMappingURL=UrlUtils.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\nimport { createClientConfigurationError } from '../error/ClientConfigurationError.mjs';\nimport { StringUtils } from '../utils/StringUtils.mjs';\nimport { AADAuthorityConstants, Constants } from '../utils/Constants.mjs';\nimport { getDeserializedResponse } from '../utils/UrlUtils.mjs';\nimport { urlEmptyError, urlParseError, authorityUriInsecure } from '../error/ClientConfigurationErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Url object class which can perform various transformations on url strings.\r\n */\r\nclass UrlString {\r\n    get urlString() {\r\n        return this._urlString;\r\n    }\r\n    constructor(url) {\r\n        this._urlString = url;\r\n        if (!this._urlString) {\r\n            // Throws error if url is empty\r\n            throw createClientConfigurationError(urlEmptyError);\r\n        }\r\n        if (!url.includes(\"#\")) {\r\n            this._urlString = UrlString.canonicalizeUri(url);\r\n        }\r\n    }\r\n    /**\r\n     * Ensure urls are lower case and end with a / character.\r\n     * @param url\r\n     */\r\n    static canonicalizeUri(url) {\r\n        if (url) {\r\n            let lowerCaseUrl = url.toLowerCase();\r\n            if (StringUtils.endsWith(lowerCaseUrl, \"?\")) {\r\n                lowerCaseUrl = lowerCaseUrl.slice(0, -1);\r\n            }\r\n            else if (StringUtils.endsWith(lowerCaseUrl, \"?/\")) {\r\n                lowerCaseUrl = lowerCaseUrl.slice(0, -2);\r\n            }\r\n            if (!StringUtils.endsWith(lowerCaseUrl, \"/\")) {\r\n                lowerCaseUrl += \"/\";\r\n            }\r\n            return lowerCaseUrl;\r\n        }\r\n        return url;\r\n    }\r\n    /**\r\n     * Throws if urlString passed is not a valid authority URI string.\r\n     */\r\n    validateAsUri() {\r\n        // Attempts to parse url for uri components\r\n        let components;\r\n        try {\r\n            components = this.getUrlComponents();\r\n        }\r\n        catch (e) {\r\n            throw createClientConfigurationError(urlParseError);\r\n        }\r\n        // Throw error if URI or path segments are not parseable.\r\n        if (!components.HostNameAndPort || !components.PathSegments) {\r\n            throw createClientConfigurationError(urlParseError);\r\n        }\r\n        // Throw error if uri is insecure.\r\n        if (!components.Protocol ||\r\n            components.Protocol.toLowerCase() !== \"https:\") {\r\n            throw createClientConfigurationError(authorityUriInsecure);\r\n        }\r\n    }\r\n    /**\r\n     * Given a url and a query string return the url with provided query string appended\r\n     * @param url\r\n     * @param queryString\r\n     */\r\n    static appendQueryString(url, queryString) {\r\n        if (!queryString) {\r\n            return url;\r\n        }\r\n        return url.indexOf(\"?\") < 0\r\n            ? `${url}?${queryString}`\r\n            : `${url}&${queryString}`;\r\n    }\r\n    /**\r\n     * Returns a url with the hash removed\r\n     * @param url\r\n     */\r\n    static removeHashFromUrl(url) {\r\n        return UrlString.canonicalizeUri(url.split(\"#\")[0]);\r\n    }\r\n    /**\r\n     * Given a url like https://a:b/common/d?e=f#g, and a tenantId, returns https://a:b/tenantId/d\r\n     * @param href The url\r\n     * @param tenantId The tenant id to replace\r\n     */\r\n    replaceTenantPath(tenantId) {\r\n        const urlObject = this.getUrlComponents();\r\n        const pathArray = urlObject.PathSegments;\r\n        if (tenantId &&\r\n            pathArray.length !== 0 &&\r\n            (pathArray[0] === AADAuthorityConstants.COMMON ||\r\n                pathArray[0] === AADAuthorityConstants.ORGANIZATIONS)) {\r\n            pathArray[0] = tenantId;\r\n        }\r\n        return UrlString.constructAuthorityUriFromObject(urlObject);\r\n    }\r\n    /**\r\n     * Parses out the components from a url string.\r\n     * @returns An object with the various components. Please cache this value insted of calling this multiple times on the same url.\r\n     */\r\n    getUrlComponents() {\r\n        // https://gist.github.com/curtisz/11139b2cfcaef4a261e0\r\n        const regEx = RegExp(\"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\\\?([^#]*))?(#(.*))?\");\r\n        // If url string does not match regEx, we throw an error\r\n        const match = this.urlString.match(regEx);\r\n        if (!match) {\r\n            throw createClientConfigurationError(urlParseError);\r\n        }\r\n        // Url component object\r\n        const urlComponents = {\r\n            Protocol: match[1],\r\n            HostNameAndPort: match[4],\r\n            AbsolutePath: match[5],\r\n            QueryString: match[7],\r\n        };\r\n        let pathSegments = urlComponents.AbsolutePath.split(\"/\");\r\n        pathSegments = pathSegments.filter((val) => val && val.length > 0); // remove empty elements\r\n        urlComponents.PathSegments = pathSegments;\r\n        if (urlComponents.QueryString &&\r\n            urlComponents.QueryString.endsWith(\"/\")) {\r\n            urlComponents.QueryString = urlComponents.QueryString.substring(0, urlComponents.QueryString.length - 1);\r\n        }\r\n        return urlComponents;\r\n    }\r\n    static getDomainFromUrl(url) {\r\n        const regEx = RegExp(\"^([^:/?#]+://)?([^/?#]*)\");\r\n        const match = url.match(regEx);\r\n        if (!match) {\r\n            throw createClientConfigurationError(urlParseError);\r\n        }\r\n        return match[2];\r\n    }\r\n    static getAbsoluteUrl(relativeUrl, baseUrl) {\r\n        if (relativeUrl[0] === Constants.FORWARD_SLASH) {\r\n            const url = new UrlString(baseUrl);\r\n            const baseComponents = url.getUrlComponents();\r\n            return (baseComponents.Protocol +\r\n                \"//\" +\r\n                baseComponents.HostNameAndPort +\r\n                relativeUrl);\r\n        }\r\n        return relativeUrl;\r\n    }\r\n    static constructAuthorityUriFromObject(urlObject) {\r\n        return new UrlString(urlObject.Protocol +\r\n            \"//\" +\r\n            urlObject.HostNameAndPort +\r\n            \"/\" +\r\n            urlObject.PathSegments.join(\"/\"));\r\n    }\r\n    /**\r\n     * Check if the hash of the URL string contains known properties\r\n     * @deprecated This API will be removed in a future version\r\n     */\r\n    static hashContainsKnownProperties(response) {\r\n        return !!getDeserializedResponse(response);\r\n    }\r\n}\n\nexport { UrlString };\n//# sourceMappingURL=UrlString.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\nimport { UrlString } from '../url/UrlString.mjs';\nimport { AuthorityMetadataSource } from '../utils/Constants.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst rawMetdataJSON = {\r\n    endpointMetadata: {\r\n        \"login.microsoftonline.com\": {\r\n            token_endpoint: \"https://login.microsoftonline.com/{tenantid}/oauth2/v2.0/token\",\r\n            jwks_uri: \"https://login.microsoftonline.com/{tenantid}/discovery/v2.0/keys\",\r\n            issuer: \"https://login.microsoftonline.com/{tenantid}/v2.0\",\r\n            authorization_endpoint: \"https://login.microsoftonline.com/{tenantid}/oauth2/v2.0/authorize\",\r\n            end_session_endpoint: \"https://login.microsoftonline.com/{tenantid}/oauth2/v2.0/logout\",\r\n        },\r\n        \"login.chinacloudapi.cn\": {\r\n            token_endpoint: \"https://login.chinacloudapi.cn/{tenantid}/oauth2/v2.0/token\",\r\n            jwks_uri: \"https://login.chinacloudapi.cn/{tenantid}/discovery/v2.0/keys\",\r\n            issuer: \"https://login.partner.microsoftonline.cn/{tenantid}/v2.0\",\r\n            authorization_endpoint: \"https://login.chinacloudapi.cn/{tenantid}/oauth2/v2.0/authorize\",\r\n            end_session_endpoint: \"https://login.chinacloudapi.cn/{tenantid}/oauth2/v2.0/logout\",\r\n        },\r\n        \"login.microsoftonline.us\": {\r\n            token_endpoint: \"https://login.microsoftonline.us/{tenantid}/oauth2/v2.0/token\",\r\n            jwks_uri: \"https://login.microsoftonline.us/{tenantid}/discovery/v2.0/keys\",\r\n            issuer: \"https://login.microsoftonline.us/{tenantid}/v2.0\",\r\n            authorization_endpoint: \"https://login.microsoftonline.us/{tenantid}/oauth2/v2.0/authorize\",\r\n            end_session_endpoint: \"https://login.microsoftonline.us/{tenantid}/oauth2/v2.0/logout\",\r\n        },\r\n        \"login.sovcloud-identity.fr\": {\r\n            token_endpoint: \"https://login.sovcloud-identity.fr/{tenantid}/oauth2/v2.0/token\",\r\n            jwks_uri: \"https://login.sovcloud-identity.fr/{tenantid}/discovery/v2.0/keys\",\r\n            issuer: \"https://login.sovcloud-identity.fr/{tenantid}/v2.0\",\r\n            authorization_endpoint: \"https://login.sovcloud-identity.fr/{tenantid}/oauth2/v2.0/authorize\",\r\n            end_session_endpoint: \"https://login.sovcloud-identity.fr/{tenantid}/oauth2/v2.0/logout\",\r\n        },\r\n        \"login.sovcloud-identity.de\": {\r\n            token_endpoint: \"https://login.sovcloud-identity.de/{tenantid}/oauth2/v2.0/token\",\r\n            jwks_uri: \"https://login.sovcloud-identity.de/{tenantid}/discovery/v2.0/keys\",\r\n            issuer: \"https://login.sovcloud-identity.de/{tenantid}/v2.0\",\r\n            authorization_endpoint: \"https://login.sovcloud-identity.de/{tenantid}/oauth2/v2.0/authorize\",\r\n            end_session_endpoint: \"https://login.sovcloud-identity.de/{tenantid}/oauth2/v2.0/logout\",\r\n        },\r\n        \"login.sovcloud-identity.sg\": {\r\n            token_endpoint: \"https://login.sovcloud-identity.sg/common/oauth2/v2.0/token\",\r\n            jwks_uri: \"https://login.sovcloud-identity.sg/common/discovery/v2.0/keys\",\r\n            issuer: \"https://login.sovcloud-identity.sg/{tenantid}/v2.0\",\r\n            authorization_endpoint: \"https://login.sovcloud-identity.sg/common/oauth2/v2.0/authorize\",\r\n            end_session_endpoint: \"https://login.sovcloud-identity.sg/common/oauth2/v2.0/logout\",\r\n        },\r\n    },\r\n    instanceDiscoveryMetadata: {\r\n        metadata: [\r\n            {\r\n                preferred_network: \"login.microsoftonline.com\",\r\n                preferred_cache: \"login.windows.net\",\r\n                aliases: [\r\n                    \"login.microsoftonline.com\",\r\n                    \"login.windows.net\",\r\n                    \"login.microsoft.com\",\r\n                    \"sts.windows.net\",\r\n                ],\r\n            },\r\n            {\r\n                preferred_network: \"login.partner.microsoftonline.cn\",\r\n                preferred_cache: \"login.partner.microsoftonline.cn\",\r\n                aliases: [\r\n                    \"login.partner.microsoftonline.cn\",\r\n                    \"login.chinacloudapi.cn\",\r\n                ],\r\n            },\r\n            {\r\n                preferred_network: \"login.microsoftonline.de\",\r\n                preferred_cache: \"login.microsoftonline.de\",\r\n                aliases: [\"login.microsoftonline.de\"],\r\n            },\r\n            {\r\n                preferred_network: \"login.microsoftonline.us\",\r\n                preferred_cache: \"login.microsoftonline.us\",\r\n                aliases: [\r\n                    \"login.microsoftonline.us\",\r\n                    \"login.usgovcloudapi.net\",\r\n                ],\r\n            },\r\n            {\r\n                preferred_network: \"login-us.microsoftonline.com\",\r\n                preferred_cache: \"login-us.microsoftonline.com\",\r\n                aliases: [\"login-us.microsoftonline.com\"],\r\n            },\r\n            {\r\n                preferred_network: \"login.sovcloud-identity.fr\",\r\n                preferred_cache: \"login.sovcloud-identity.fr\",\r\n                aliases: [\"login.sovcloud-identity.fr\"],\r\n            },\r\n            {\r\n                preferred_network: \"login.sovcloud-identity.de\",\r\n                preferred_cache: \"login.sovcloud-identity.de\",\r\n                aliases: [\"login.sovcloud-identity.de\"],\r\n            },\r\n            {\r\n                preferred_network: \"login.sovcloud-identity.sg\",\r\n                preferred_cache: \"login.sovcloud-identity.sg\",\r\n                aliases: [\"login.sovcloud-identity.sg\"],\r\n            },\r\n        ],\r\n    },\r\n};\r\nconst EndpointMetadata = rawMetdataJSON.endpointMetadata;\r\nconst InstanceDiscoveryMetadata = rawMetdataJSON.instanceDiscoveryMetadata;\r\nconst InstanceDiscoveryMetadataAliases = new Set();\r\nInstanceDiscoveryMetadata.metadata.forEach((metadataEntry) => {\r\n    metadataEntry.aliases.forEach((alias) => {\r\n        InstanceDiscoveryMetadataAliases.add(alias);\r\n    });\r\n});\r\n/**\r\n * Attempts to get an aliases array from the static authority metadata sources based on the canonical authority host\r\n * @param staticAuthorityOptions\r\n * @param logger\r\n * @returns\r\n */\r\nfunction getAliasesFromStaticSources(staticAuthorityOptions, logger) {\r\n    let staticAliases;\r\n    const canonicalAuthority = staticAuthorityOptions.canonicalAuthority;\r\n    if (canonicalAuthority) {\r\n        const authorityHost = new UrlString(canonicalAuthority).getUrlComponents().HostNameAndPort;\r\n        staticAliases =\r\n            getAliasesFromMetadata(authorityHost, staticAuthorityOptions.cloudDiscoveryMetadata?.metadata, AuthorityMetadataSource.CONFIG, logger) ||\r\n                getAliasesFromMetadata(authorityHost, InstanceDiscoveryMetadata.metadata, AuthorityMetadataSource.HARDCODED_VALUES, logger) ||\r\n                staticAuthorityOptions.knownAuthorities;\r\n    }\r\n    return staticAliases || [];\r\n}\r\n/**\r\n * Returns aliases for from the raw cloud discovery metadata passed in\r\n * @param authorityHost\r\n * @param rawCloudDiscoveryMetadata\r\n * @returns\r\n */\r\nfunction getAliasesFromMetadata(authorityHost, cloudDiscoveryMetadata, source, logger) {\r\n    logger?.trace(`getAliasesFromMetadata called with source: ${source}`);\r\n    if (authorityHost && cloudDiscoveryMetadata) {\r\n        const metadata = getCloudDiscoveryMetadataFromNetworkResponse(cloudDiscoveryMetadata, authorityHost);\r\n        if (metadata) {\r\n            logger?.trace(`getAliasesFromMetadata: found cloud discovery metadata in ${source}, returning aliases`);\r\n            return metadata.aliases;\r\n        }\r\n        else {\r\n            logger?.trace(`getAliasesFromMetadata: did not find cloud discovery metadata in ${source}`);\r\n        }\r\n    }\r\n    return null;\r\n}\r\n/**\r\n * Get cloud discovery metadata for common authorities\r\n */\r\nfunction getCloudDiscoveryMetadataFromHardcodedValues(authorityHost) {\r\n    const metadata = getCloudDiscoveryMetadataFromNetworkResponse(InstanceDiscoveryMetadata.metadata, authorityHost);\r\n    return metadata;\r\n}\r\n/**\r\n * Searches instance discovery network response for the entry that contains the host in the aliases list\r\n * @param response\r\n * @param authority\r\n */\r\nfunction getCloudDiscoveryMetadataFromNetworkResponse(response, authorityHost) {\r\n    for (let i = 0; i < response.length; i++) {\r\n        const metadata = response[i];\r\n        if (metadata.aliases.includes(authorityHost)) {\r\n            return metadata;\r\n        }\r\n    }\r\n    return null;\r\n}\n\nexport { EndpointMetadata, InstanceDiscoveryMetadata, InstanceDiscoveryMetadataAliases, getAliasesFromMetadata, getAliasesFromStaticSources, getCloudDiscoveryMetadataFromHardcodedValues, getCloudDiscoveryMetadataFromNetworkResponse, rawMetdataJSON };\n//# sourceMappingURL=AuthorityMetadata.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst cacheQuotaExceeded = \"cache_quota_exceeded\";\r\nconst cacheErrorUnknown = \"cache_error_unknown\";\n\nexport { cacheErrorUnknown, cacheQuotaExceeded };\n//# sourceMappingURL=CacheErrorCodes.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\nimport { AuthError } from './AuthError.mjs';\nimport { cacheErrorUnknown, cacheQuotaExceeded } from './CacheErrorCodes.mjs';\nimport * as CacheErrorCodes from './CacheErrorCodes.mjs';\nexport { CacheErrorCodes };\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst CacheErrorMessages = {\r\n    [cacheQuotaExceeded]: \"Exceeded cache storage capacity.\",\r\n    [cacheErrorUnknown]: \"Unexpected error occurred when using cache storage.\",\r\n};\r\n/**\r\n * Error thrown when there is an error with the cache\r\n */\r\nclass CacheError extends AuthError {\r\n    constructor(errorCode, errorMessage) {\r\n        const message = errorMessage ||\r\n            (CacheErrorMessages[errorCode]\r\n                ? CacheErrorMessages[errorCode]\r\n                : CacheErrorMessages[cacheErrorUnknown]);\r\n        super(`${errorCode}: ${message}`);\r\n        Object.setPrototypeOf(this, CacheError.prototype);\r\n        this.name = \"CacheError\";\r\n        this.errorCode = errorCode;\r\n        this.errorMessage = message;\r\n    }\r\n}\r\n/**\r\n * Helper function to wrap browser errors in a CacheError object\r\n * @param e\r\n * @returns\r\n */\r\nfunction createCacheError(e) {\r\n    if (!(e instanceof Error)) {\r\n        return new CacheError(cacheErrorUnknown);\r\n    }\r\n    if (e.name === \"QuotaExceededError\" ||\r\n        e.name === \"NS_ERROR_DOM_QUOTA_REACHED\" ||\r\n        e.message.includes(\"exceeded the quota\")) {\r\n        return new CacheError(cacheQuotaExceeded);\r\n    }\r\n    else {\r\n        return new CacheError(e.name, e.message);\r\n    }\r\n}\n\nexport { CacheError, CacheErrorMessages, createCacheError };\n//# sourceMappingURL=CacheError.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\nimport { CredentialType, AuthenticationScheme, THE_FAMILY_ID, APP_METADATA, AUTHORITY_METADATA_CONSTANTS } from '../utils/Constants.mjs';\nimport { ScopeSet } from '../request/ScopeSet.mjs';\nimport { AccountEntity } from './entities/AccountEntity.mjs';\nimport { createClientAuthError } from '../error/ClientAuthError.mjs';\nimport { updateAccountTenantProfileData } from '../account/AccountInfo.mjs';\nimport { extractTokenClaims } from '../account/AuthToken.mjs';\nimport { name, version } from '../packageMetadata.mjs';\nimport { getAliasesFromStaticSources } from '../authority/AuthorityMetadata.mjs';\nimport { createCacheError } from '../error/CacheError.mjs';\nimport { AuthError } from '../error/AuthError.mjs';\nimport { invalidCacheRecord, multipleMatchingAppMetadata, methodNotImplemented } from '../error/ClientAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Interface class which implement cache storage functions used by MSAL to perform validity checks, and store tokens.\r\n * @internal\r\n */\r\nclass CacheManager {\r\n    constructor(clientId, cryptoImpl, logger, performanceClient, staticAuthorityOptions) {\r\n        this.clientId = clientId;\r\n        this.cryptoImpl = cryptoImpl;\r\n        this.commonLogger = logger.clone(name, version);\r\n        this.staticAuthorityOptions = staticAuthorityOptions;\r\n        this.performanceClient = performanceClient;\r\n    }\r\n    /**\r\n     * Returns all the accounts in the cache that match the optional filter. If no filter is provided, all accounts are returned.\r\n     * @param accountFilter - (Optional) filter to narrow down the accounts returned\r\n     * @returns Array of AccountInfo objects in cache\r\n     */\r\n    getAllAccounts(accountFilter, correlationId) {\r\n        return this.buildTenantProfiles(this.getAccountsFilteredBy(accountFilter, correlationId), correlationId, accountFilter);\r\n    }\r\n    /**\r\n     * Gets first tenanted AccountInfo object found based on provided filters\r\n     */\r\n    getAccountInfoFilteredBy(accountFilter, correlationId) {\r\n        if (Object.keys(accountFilter).length === 0 ||\r\n            Object.values(accountFilter).every((value) => !value)) {\r\n            this.commonLogger.warning(\"getAccountInfoFilteredBy: Account filter is empty or invalid, returning null\");\r\n            return null;\r\n        }\r\n        const allAccounts = this.getAllAccounts(accountFilter, correlationId);\r\n        if (allAccounts.length > 1) {\r\n            // If one or more accounts are found, prioritize accounts that have an ID token\r\n            const sortedAccounts = allAccounts.sort((account) => {\r\n                return account.idTokenClaims ? -1 : 1;\r\n            });\r\n            return sortedAccounts[0];\r\n        }\r\n        else if (allAccounts.length === 1) {\r\n            // If only one account is found, return it regardless of whether a matching ID token was found\r\n            return allAccounts[0];\r\n        }\r\n        else {\r\n            return null;\r\n        }\r\n    }\r\n    /**\r\n     * Returns a single matching\r\n     * @param accountFilter\r\n     * @returns\r\n     */\r\n    getBaseAccountInfo(accountFilter, correlationId) {\r\n        const accountEntities = this.getAccountsFilteredBy(accountFilter, correlationId);\r\n        if (accountEntities.length > 0) {\r\n            return AccountEntity.getAccountInfo(accountEntities[0]);\r\n        }\r\n        else {\r\n            return null;\r\n        }\r\n    }\r\n    /**\r\n     * Matches filtered account entities with cached ID tokens that match the tenant profile-specific account filters\r\n     * and builds the account info objects from the matching ID token's claims\r\n     * @param cachedAccounts\r\n     * @param accountFilter\r\n     * @returns Array of AccountInfo objects that match account and tenant profile filters\r\n     */\r\n    buildTenantProfiles(cachedAccounts, correlationId, accountFilter) {\r\n        return cachedAccounts.flatMap((accountEntity) => {\r\n            return this.getTenantProfilesFromAccountEntity(accountEntity, correlationId, accountFilter?.tenantId, accountFilter);\r\n        });\r\n    }\r\n    getTenantedAccountInfoByFilter(accountInfo, tokenKeys, tenantProfile, correlationId, tenantProfileFilter) {\r\n        let tenantedAccountInfo = null;\r\n        let idTokenClaims;\r\n        if (tenantProfileFilter) {\r\n            if (!this.tenantProfileMatchesFilter(tenantProfile, tenantProfileFilter)) {\r\n                return null;\r\n            }\r\n        }\r\n        const idToken = this.getIdToken(accountInfo, correlationId, tokenKeys, tenantProfile.tenantId);\r\n        if (idToken) {\r\n            idTokenClaims = extractTokenClaims(idToken.secret, this.cryptoImpl.base64Decode);\r\n            if (!this.idTokenClaimsMatchTenantProfileFilter(idTokenClaims, tenantProfileFilter)) {\r\n                // ID token sourced claims don't match so this tenant profile is not a match\r\n                return null;\r\n            }\r\n        }\r\n        // Expand tenant profile into account info based on matching tenant profile and if available matching ID token claims\r\n        tenantedAccountInfo = updateAccountTenantProfileData(accountInfo, tenantProfile, idTokenClaims, idToken?.secret);\r\n        return tenantedAccountInfo;\r\n    }\r\n    getTenantProfilesFromAccountEntity(accountEntity, correlationId, targetTenantId, tenantProfileFilter) {\r\n        const accountInfo = AccountEntity.getAccountInfo(accountEntity);\r\n        let searchTenantProfiles = accountInfo.tenantProfiles || new Map();\r\n        const tokenKeys = this.getTokenKeys();\r\n        // If a tenant ID was provided, only return the tenant profile for that tenant ID if it exists\r\n        if (targetTenantId) {\r\n            const tenantProfile = searchTenantProfiles.get(targetTenantId);\r\n            if (tenantProfile) {\r\n                // Reduce search field to just this tenant profile\r\n                searchTenantProfiles = new Map([\r\n                    [targetTenantId, tenantProfile],\r\n                ]);\r\n            }\r\n            else {\r\n                // No tenant profile for search tenant ID, return empty array\r\n                return [];\r\n            }\r\n        }\r\n        const matchingTenantProfiles = [];\r\n        searchTenantProfiles.forEach((tenantProfile) => {\r\n            const tenantedAccountInfo = this.getTenantedAccountInfoByFilter(accountInfo, tokenKeys, tenantProfile, correlationId, tenantProfileFilter);\r\n            if (tenantedAccountInfo) {\r\n                matchingTenantProfiles.push(tenantedAccountInfo);\r\n            }\r\n        });\r\n        return matchingTenantProfiles;\r\n    }\r\n    tenantProfileMatchesFilter(tenantProfile, tenantProfileFilter) {\r\n        if (!!tenantProfileFilter.localAccountId &&\r\n            !this.matchLocalAccountIdFromTenantProfile(tenantProfile, tenantProfileFilter.localAccountId)) {\r\n            return false;\r\n        }\r\n        if (!!tenantProfileFilter.name &&\r\n            !(tenantProfile.name === tenantProfileFilter.name)) {\r\n            return false;\r\n        }\r\n        if (tenantProfileFilter.isHomeTenant !== undefined &&\r\n            !(tenantProfile.isHomeTenant === tenantProfileFilter.isHomeTenant)) {\r\n            return false;\r\n        }\r\n        return true;\r\n    }\r\n    idTokenClaimsMatchTenantProfileFilter(idTokenClaims, tenantProfileFilter) {\r\n        // Tenant Profile filtering\r\n        if (tenantProfileFilter) {\r\n            if (!!tenantProfileFilter.localAccountId &&\r\n                !this.matchLocalAccountIdFromTokenClaims(idTokenClaims, tenantProfileFilter.localAccountId)) {\r\n                return false;\r\n            }\r\n            if (!!tenantProfileFilter.loginHint &&\r\n                !this.matchLoginHintFromTokenClaims(idTokenClaims, tenantProfileFilter.loginHint)) {\r\n                return false;\r\n            }\r\n            if (!!tenantProfileFilter.username &&\r\n                !this.matchUsername(idTokenClaims.preferred_username, tenantProfileFilter.username)) {\r\n                return false;\r\n            }\r\n            if (!!tenantProfileFilter.name &&\r\n                !this.matchName(idTokenClaims, tenantProfileFilter.name)) {\r\n                return false;\r\n            }\r\n            if (!!tenantProfileFilter.sid &&\r\n                !this.matchSid(idTokenClaims, tenantProfileFilter.sid)) {\r\n                return false;\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n    /**\r\n     * saves a cache record\r\n     * @param cacheRecord {CacheRecord}\r\n     * @param correlationId {?string} correlation id\r\n     * @param kmsi - Keep Me Signed In\r\n     * @param apiId - API identifier for telemetry tracking\r\n     * @param storeInCache {?StoreInCache}\r\n     */\r\n    async saveCacheRecord(cacheRecord, correlationId, kmsi, apiId, storeInCache) {\r\n        if (!cacheRecord) {\r\n            throw createClientAuthError(invalidCacheRecord);\r\n        }\r\n        try {\r\n            if (!!cacheRecord.account) {\r\n                await this.setAccount(cacheRecord.account, correlationId, kmsi, apiId);\r\n            }\r\n            if (!!cacheRecord.idToken && storeInCache?.idToken !== false) {\r\n                await this.setIdTokenCredential(cacheRecord.idToken, correlationId, kmsi);\r\n            }\r\n            if (!!cacheRecord.accessToken &&\r\n                storeInCache?.accessToken !== false) {\r\n                await this.saveAccessToken(cacheRecord.accessToken, correlationId, kmsi);\r\n            }\r\n            if (!!cacheRecord.refreshToken &&\r\n                storeInCache?.refreshToken !== false) {\r\n                await this.setRefreshTokenCredential(cacheRecord.refreshToken, correlationId, kmsi);\r\n            }\r\n            if (!!cacheRecord.appMetadata) {\r\n                this.setAppMetadata(cacheRecord.appMetadata, correlationId);\r\n            }\r\n        }\r\n        catch (e) {\r\n            this.commonLogger?.error(`CacheManager.saveCacheRecord: failed`);\r\n            if (e instanceof AuthError) {\r\n                throw e;\r\n            }\r\n            else {\r\n                throw createCacheError(e);\r\n            }\r\n        }\r\n    }\r\n    /**\r\n     * saves access token credential\r\n     * @param credential\r\n     */\r\n    async saveAccessToken(credential, correlationId, kmsi) {\r\n        const accessTokenFilter = {\r\n            clientId: credential.clientId,\r\n            credentialType: credential.credentialType,\r\n            environment: credential.environment,\r\n            homeAccountId: credential.homeAccountId,\r\n            realm: credential.realm,\r\n            tokenType: credential.tokenType,\r\n            requestedClaimsHash: credential.requestedClaimsHash,\r\n        };\r\n        const tokenKeys = this.getTokenKeys();\r\n        const currentScopes = ScopeSet.fromString(credential.target);\r\n        tokenKeys.accessToken.forEach((key) => {\r\n            if (!this.accessTokenKeyMatchesFilter(key, accessTokenFilter, false)) {\r\n                return;\r\n            }\r\n            const tokenEntity = this.getAccessTokenCredential(key, correlationId);\r\n            if (tokenEntity &&\r\n                this.credentialMatchesFilter(tokenEntity, accessTokenFilter)) {\r\n                const tokenScopeSet = ScopeSet.fromString(tokenEntity.target);\r\n                if (tokenScopeSet.intersectingScopeSets(currentScopes)) {\r\n                    this.removeAccessToken(key, correlationId);\r\n                }\r\n            }\r\n        });\r\n        await this.setAccessTokenCredential(credential, correlationId, kmsi);\r\n    }\r\n    /**\r\n     * Retrieve account entities matching all provided tenant-agnostic filters; if no filter is set, get all account entities in the cache\r\n     * Not checking for casing as keys are all generated in lower case, remember to convert to lower case if object properties are compared\r\n     * @param accountFilter - An object containing Account properties to filter by\r\n     */\r\n    getAccountsFilteredBy(accountFilter, correlationId) {\r\n        const allAccountKeys = this.getAccountKeys();\r\n        const matchingAccounts = [];\r\n        allAccountKeys.forEach((cacheKey) => {\r\n            const entity = this.getAccount(cacheKey, correlationId);\r\n            // Match base account fields\r\n            if (!entity) {\r\n                return;\r\n            }\r\n            if (!!accountFilter.homeAccountId &&\r\n                !this.matchHomeAccountId(entity, accountFilter.homeAccountId)) {\r\n                return;\r\n            }\r\n            if (!!accountFilter.username &&\r\n                !this.matchUsername(entity.username, accountFilter.username)) {\r\n                return;\r\n            }\r\n            if (!!accountFilter.environment &&\r\n                !this.matchEnvironment(entity, accountFilter.environment)) {\r\n                return;\r\n            }\r\n            if (!!accountFilter.realm &&\r\n                !this.matchRealm(entity, accountFilter.realm)) {\r\n                return;\r\n            }\r\n            if (!!accountFilter.nativeAccountId &&\r\n                !this.matchNativeAccountId(entity, accountFilter.nativeAccountId)) {\r\n                return;\r\n            }\r\n            if (!!accountFilter.authorityType &&\r\n                !this.matchAuthorityType(entity, accountFilter.authorityType)) {\r\n                return;\r\n            }\r\n            // If at least one tenant profile matches the tenant profile filter, add the account to the list of matching accounts\r\n            const tenantProfileFilter = {\r\n                localAccountId: accountFilter?.localAccountId,\r\n                name: accountFilter?.name,\r\n            };\r\n            const matchingTenantProfiles = entity.tenantProfiles?.filter((tenantProfile) => {\r\n                return this.tenantProfileMatchesFilter(tenantProfile, tenantProfileFilter);\r\n            });\r\n            if (matchingTenantProfiles && matchingTenantProfiles.length === 0) {\r\n                // No tenant profile for this account matches filter, don't add to list of matching accounts\r\n                return;\r\n            }\r\n            matchingAccounts.push(entity);\r\n        });\r\n        return matchingAccounts;\r\n    }\r\n    /**\r\n     * Returns whether or not the given credential entity matches the filter\r\n     * @param entity\r\n     * @param filter\r\n     * @returns\r\n     */\r\n    credentialMatchesFilter(entity, filter) {\r\n        if (!!filter.clientId && !this.matchClientId(entity, filter.clientId)) {\r\n            return false;\r\n        }\r\n        if (!!filter.userAssertionHash &&\r\n            !this.matchUserAssertionHash(entity, filter.userAssertionHash)) {\r\n            return false;\r\n        }\r\n        /*\r\n         * homeAccountId can be undefined, and we want to filter out cached items that have a homeAccountId of \"\"\r\n         * because we don't want a client_credential request to return a cached token that has a homeAccountId\r\n         */\r\n        if (typeof filter.homeAccountId === \"string\" &&\r\n            !this.matchHomeAccountId(entity, filter.homeAccountId)) {\r\n            return false;\r\n        }\r\n        if (!!filter.environment &&\r\n            !this.matchEnvironment(entity, filter.environment)) {\r\n            return false;\r\n        }\r\n        if (!!filter.realm && !this.matchRealm(entity, filter.realm)) {\r\n            return false;\r\n        }\r\n        if (!!filter.credentialType &&\r\n            !this.matchCredentialType(entity, filter.credentialType)) {\r\n            return false;\r\n        }\r\n        if (!!filter.familyId && !this.matchFamilyId(entity, filter.familyId)) {\r\n            return false;\r\n        }\r\n        /*\r\n         * idTokens do not have \"target\", target specific refreshTokens do exist for some types of authentication\r\n         * Resource specific refresh tokens case will be added when the support is deemed necessary\r\n         */\r\n        if (!!filter.target && !this.matchTarget(entity, filter.target)) {\r\n            return false;\r\n        }\r\n        // If request OR cached entity has requested Claims Hash, check if they match\r\n        if (filter.requestedClaimsHash || entity.requestedClaimsHash) {\r\n            // Don't match if either is undefined or they are different\r\n            if (entity.requestedClaimsHash !== filter.requestedClaimsHash) {\r\n                return false;\r\n            }\r\n        }\r\n        // Access Token with Auth Scheme specific matching\r\n        if (entity.credentialType ===\r\n            CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME) {\r\n            if (!!filter.tokenType &&\r\n                !this.matchTokenType(entity, filter.tokenType)) {\r\n                return false;\r\n            }\r\n            // KeyId (sshKid) in request must match cached SSH certificate keyId because SSH cert is bound to a specific key\r\n            if (filter.tokenType === AuthenticationScheme.SSH) {\r\n                if (filter.keyId && !this.matchKeyId(entity, filter.keyId)) {\r\n                    return false;\r\n                }\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n    /**\r\n     * retrieve appMetadata matching all provided filters; if no filter is set, get all appMetadata\r\n     * @param filter\r\n     */\r\n    getAppMetadataFilteredBy(filter) {\r\n        const allCacheKeys = this.getKeys();\r\n        const matchingAppMetadata = {};\r\n        allCacheKeys.forEach((cacheKey) => {\r\n            // don't parse any non-appMetadata type cache entities\r\n            if (!this.isAppMetadata(cacheKey)) {\r\n                return;\r\n            }\r\n            // Attempt retrieval\r\n            const entity = this.getAppMetadata(cacheKey);\r\n            if (!entity) {\r\n                return;\r\n            }\r\n            if (!!filter.environment &&\r\n                !this.matchEnvironment(entity, filter.environment)) {\r\n                return;\r\n            }\r\n            if (!!filter.clientId &&\r\n                !this.matchClientId(entity, filter.clientId)) {\r\n                return;\r\n            }\r\n            matchingAppMetadata[cacheKey] = entity;\r\n        });\r\n        return matchingAppMetadata;\r\n    }\r\n    /**\r\n     * retrieve authorityMetadata that contains a matching alias\r\n     * @param filter\r\n     */\r\n    getAuthorityMetadataByAlias(host) {\r\n        const allCacheKeys = this.getAuthorityMetadataKeys();\r\n        let matchedEntity = null;\r\n        allCacheKeys.forEach((cacheKey) => {\r\n            // don't parse any non-authorityMetadata type cache entities\r\n            if (!this.isAuthorityMetadata(cacheKey) ||\r\n                cacheKey.indexOf(this.clientId) === -1) {\r\n                return;\r\n            }\r\n            // Attempt retrieval\r\n            const entity = this.getAuthorityMetadata(cacheKey);\r\n            if (!entity) {\r\n                return;\r\n            }\r\n            if (entity.aliases.indexOf(host) === -1) {\r\n                return;\r\n            }\r\n            matchedEntity = entity;\r\n        });\r\n        return matchedEntity;\r\n    }\r\n    /**\r\n     * Removes all accounts and related tokens from cache.\r\n     */\r\n    removeAllAccounts(correlationId) {\r\n        const accounts = this.getAllAccounts({}, correlationId);\r\n        accounts.forEach((account) => {\r\n            this.removeAccount(account, correlationId);\r\n        });\r\n    }\r\n    /**\r\n     * Removes the account and related tokens for a given account key\r\n     * @param account\r\n     */\r\n    removeAccount(account, correlationId) {\r\n        this.removeAccountContext(account, correlationId);\r\n        const accountKeys = this.getAccountKeys();\r\n        const keyFilter = (key) => {\r\n            return (key.includes(account.homeAccountId) &&\r\n                key.includes(account.environment));\r\n        };\r\n        accountKeys.filter(keyFilter).forEach((key) => {\r\n            this.removeItem(key, correlationId);\r\n            this.performanceClient.incrementFields({ accountsRemoved: 1 }, correlationId);\r\n        });\r\n    }\r\n    /**\r\n     * Removes credentials associated with the provided account\r\n     * @param account\r\n     */\r\n    removeAccountContext(account, correlationId) {\r\n        const allTokenKeys = this.getTokenKeys();\r\n        const keyFilter = (key) => {\r\n            return (key.includes(account.homeAccountId) &&\r\n                key.includes(account.environment));\r\n        };\r\n        allTokenKeys.idToken.filter(keyFilter).forEach((key) => {\r\n            this.removeIdToken(key, correlationId);\r\n        });\r\n        allTokenKeys.accessToken.filter(keyFilter).forEach((key) => {\r\n            this.removeAccessToken(key, correlationId);\r\n        });\r\n        allTokenKeys.refreshToken.filter(keyFilter).forEach((key) => {\r\n            this.removeRefreshToken(key, correlationId);\r\n        });\r\n    }\r\n    /**\r\n     * Removes accessToken from the cache\r\n     * @param key\r\n     * @param correlationId\r\n     */\r\n    removeAccessToken(key, correlationId) {\r\n        const credential = this.getAccessTokenCredential(key, correlationId);\r\n        this.removeItem(key, correlationId);\r\n        this.performanceClient.incrementFields({ accessTokensRemoved: 1 }, correlationId);\r\n        if (!credential ||\r\n            credential.credentialType.toLowerCase() !==\r\n                CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME.toLowerCase() ||\r\n            credential.tokenType !== AuthenticationScheme.POP) {\r\n            // If the credential is not a PoP token, we can return\r\n            return;\r\n        }\r\n        // Remove Token Binding Key from key store for PoP Tokens Credentials\r\n        const kid = credential.keyId;\r\n        if (kid) {\r\n            void this.cryptoImpl.removeTokenBindingKey(kid).catch(() => {\r\n                this.commonLogger.error(`Failed to remove token binding key ${kid}`, correlationId);\r\n                this.performanceClient?.incrementFields({ removeTokenBindingKeyFailure: 1 }, correlationId);\r\n            });\r\n        }\r\n    }\r\n    /**\r\n     * Removes all app metadata objects from cache.\r\n     */\r\n    removeAppMetadata(correlationId) {\r\n        const allCacheKeys = this.getKeys();\r\n        allCacheKeys.forEach((cacheKey) => {\r\n            if (this.isAppMetadata(cacheKey)) {\r\n                this.removeItem(cacheKey, correlationId);\r\n            }\r\n        });\r\n        return true;\r\n    }\r\n    /**\r\n     * Retrieve IdTokenEntity from cache\r\n     * @param account {AccountInfo}\r\n     * @param tokenKeys {?TokenKeys}\r\n     * @param targetRealm {?string}\r\n     * @param performanceClient {?IPerformanceClient}\r\n     * @param correlationId {?string}\r\n     */\r\n    getIdToken(account, correlationId, tokenKeys, targetRealm, performanceClient) {\r\n        this.commonLogger.trace(\"CacheManager - getIdToken called\");\r\n        const idTokenFilter = {\r\n            homeAccountId: account.homeAccountId,\r\n            environment: account.environment,\r\n            credentialType: CredentialType.ID_TOKEN,\r\n            clientId: this.clientId,\r\n            realm: targetRealm,\r\n        };\r\n        const idTokenMap = this.getIdTokensByFilter(idTokenFilter, correlationId, tokenKeys);\r\n        const numIdTokens = idTokenMap.size;\r\n        if (numIdTokens < 1) {\r\n            this.commonLogger.info(\"CacheManager:getIdToken - No token found\");\r\n            return null;\r\n        }\r\n        else if (numIdTokens > 1) {\r\n            let tokensToBeRemoved = idTokenMap;\r\n            // Multiple tenant profiles and no tenant specified, pick home account\r\n            if (!targetRealm) {\r\n                const homeIdTokenMap = new Map();\r\n                idTokenMap.forEach((idToken, key) => {\r\n                    if (idToken.realm === account.tenantId) {\r\n                        homeIdTokenMap.set(key, idToken);\r\n                    }\r\n                });\r\n                const numHomeIdTokens = homeIdTokenMap.size;\r\n                if (numHomeIdTokens < 1) {\r\n                    this.commonLogger.info(\"CacheManager:getIdToken - Multiple ID tokens found for account but none match account entity tenant id, returning first result\");\r\n                    return idTokenMap.values().next().value;\r\n                }\r\n                else if (numHomeIdTokens === 1) {\r\n                    this.commonLogger.info(\"CacheManager:getIdToken - Multiple ID tokens found for account, defaulting to home tenant profile\");\r\n                    return homeIdTokenMap.values().next().value;\r\n                }\r\n                else {\r\n                    // Multiple ID tokens for home tenant profile, remove all and return null\r\n                    tokensToBeRemoved = homeIdTokenMap;\r\n                }\r\n            }\r\n            // Multiple tokens for a single tenant profile, remove all and return null\r\n            this.commonLogger.info(\"CacheManager:getIdToken - Multiple matching ID tokens found, clearing them\");\r\n            tokensToBeRemoved.forEach((idToken, key) => {\r\n                this.removeIdToken(key, correlationId);\r\n            });\r\n            if (performanceClient && correlationId) {\r\n                performanceClient.addFields({ multiMatchedID: idTokenMap.size }, correlationId);\r\n            }\r\n            return null;\r\n        }\r\n        this.commonLogger.info(\"CacheManager:getIdToken - Returning ID token\");\r\n        return idTokenMap.values().next().value;\r\n    }\r\n    /**\r\n     * Gets all idTokens matching the given filter\r\n     * @param filter\r\n     * @returns\r\n     */\r\n    getIdTokensByFilter(filter, correlationId, tokenKeys) {\r\n        const idTokenKeys = (tokenKeys && tokenKeys.idToken) || this.getTokenKeys().idToken;\r\n        const idTokens = new Map();\r\n        idTokenKeys.forEach((key) => {\r\n            if (!this.idTokenKeyMatchesFilter(key, {\r\n                clientId: this.clientId,\r\n                ...filter,\r\n            })) {\r\n                return;\r\n            }\r\n            const idToken = this.getIdTokenCredential(key, correlationId);\r\n            if (idToken && this.credentialMatchesFilter(idToken, filter)) {\r\n                idTokens.set(key, idToken);\r\n            }\r\n        });\r\n        return idTokens;\r\n    }\r\n    /**\r\n     * Validate the cache key against filter before retrieving and parsing cache value\r\n     * @param key\r\n     * @param filter\r\n     * @returns\r\n     */\r\n    idTokenKeyMatchesFilter(inputKey, filter) {\r\n        const key = inputKey.toLowerCase();\r\n        if (filter.clientId &&\r\n            key.indexOf(filter.clientId.toLowerCase()) === -1) {\r\n            return false;\r\n        }\r\n        if (filter.homeAccountId &&\r\n            key.indexOf(filter.homeAccountId.toLowerCase()) === -1) {\r\n            return false;\r\n        }\r\n        return true;\r\n    }\r\n    /**\r\n     * Removes idToken from the cache\r\n     * @param key\r\n     */\r\n    removeIdToken(key, correlationId) {\r\n        this.removeItem(key, correlationId);\r\n    }\r\n    /**\r\n     * Removes refresh token from the cache\r\n     * @param key\r\n     */\r\n    removeRefreshToken(key, correlationId) {\r\n        this.removeItem(key, correlationId);\r\n    }\r\n    /**\r\n     * Retrieve AccessTokenEntity from cache\r\n     * @param account {AccountInfo}\r\n     * @param request {BaseAuthRequest}\r\n     * @param correlationId {?string}\r\n     * @param tokenKeys {?TokenKeys}\r\n     * @param performanceClient {?IPerformanceClient}\r\n     */\r\n    getAccessToken(account, request, tokenKeys, targetRealm) {\r\n        const correlationId = request.correlationId;\r\n        this.commonLogger.trace(\"CacheManager - getAccessToken called\", correlationId);\r\n        const scopes = ScopeSet.createSearchScopes(request.scopes);\r\n        const authScheme = request.authenticationScheme || AuthenticationScheme.BEARER;\r\n        /*\r\n         * Distinguish between Bearer and PoP/SSH token cache types\r\n         * Cast to lowercase to handle \"bearer\" from ADFS\r\n         */\r\n        const credentialType = authScheme &&\r\n            authScheme.toLowerCase() !==\r\n                AuthenticationScheme.BEARER.toLowerCase()\r\n            ? CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME\r\n            : CredentialType.ACCESS_TOKEN;\r\n        const accessTokenFilter = {\r\n            homeAccountId: account.homeAccountId,\r\n            environment: account.environment,\r\n            credentialType: credentialType,\r\n            clientId: this.clientId,\r\n            realm: targetRealm || account.tenantId,\r\n            target: scopes,\r\n            tokenType: authScheme,\r\n            keyId: request.sshKid,\r\n            requestedClaimsHash: request.requestedClaimsHash,\r\n        };\r\n        const accessTokenKeys = (tokenKeys && tokenKeys.accessToken) ||\r\n            this.getTokenKeys().accessToken;\r\n        const accessTokens = [];\r\n        accessTokenKeys.forEach((key) => {\r\n            // Validate key\r\n            if (this.accessTokenKeyMatchesFilter(key, accessTokenFilter, true)) {\r\n                const accessToken = this.getAccessTokenCredential(key, correlationId);\r\n                // Validate value\r\n                if (accessToken &&\r\n                    this.credentialMatchesFilter(accessToken, accessTokenFilter)) {\r\n                    accessTokens.push(accessToken);\r\n                }\r\n            }\r\n        });\r\n        const numAccessTokens = accessTokens.length;\r\n        if (numAccessTokens < 1) {\r\n            this.commonLogger.info(\"CacheManager:getAccessToken - No token found\", correlationId);\r\n            return null;\r\n        }\r\n        else if (numAccessTokens > 1) {\r\n            this.commonLogger.info(\"CacheManager:getAccessToken - Multiple access tokens found, clearing them\", correlationId);\r\n            accessTokens.forEach((accessToken) => {\r\n                this.removeAccessToken(this.generateCredentialKey(accessToken), correlationId);\r\n            });\r\n            this.performanceClient.addFields({ multiMatchedAT: accessTokens.length }, correlationId);\r\n            return null;\r\n        }\r\n        this.commonLogger.info(\"CacheManager:getAccessToken - Returning access token\", correlationId);\r\n        return accessTokens[0];\r\n    }\r\n    /**\r\n     * Validate the cache key against filter before retrieving and parsing cache value\r\n     * @param key\r\n     * @param filter\r\n     * @param keyMustContainAllScopes\r\n     * @returns\r\n     */\r\n    accessTokenKeyMatchesFilter(inputKey, filter, keyMustContainAllScopes) {\r\n        const key = inputKey.toLowerCase();\r\n        if (filter.clientId &&\r\n            key.indexOf(filter.clientId.toLowerCase()) === -1) {\r\n            return false;\r\n        }\r\n        if (filter.homeAccountId &&\r\n            key.indexOf(filter.homeAccountId.toLowerCase()) === -1) {\r\n            return false;\r\n        }\r\n        if (filter.realm && key.indexOf(filter.realm.toLowerCase()) === -1) {\r\n            return false;\r\n        }\r\n        if (filter.requestedClaimsHash &&\r\n            key.indexOf(filter.requestedClaimsHash.toLowerCase()) === -1) {\r\n            return false;\r\n        }\r\n        if (filter.target) {\r\n            const scopes = filter.target.asArray();\r\n            for (let i = 0; i < scopes.length; i++) {\r\n                if (keyMustContainAllScopes &&\r\n                    !key.includes(scopes[i].toLowerCase())) {\r\n                    // When performing a cache lookup a missing scope would be a cache miss\r\n                    return false;\r\n                }\r\n                else if (!keyMustContainAllScopes &&\r\n                    key.includes(scopes[i].toLowerCase())) {\r\n                    // When performing a cache write, any token with a subset of requested scopes should be replaced\r\n                    return true;\r\n                }\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n    /**\r\n     * Gets all access tokens matching the filter\r\n     * @param filter\r\n     * @returns\r\n     */\r\n    getAccessTokensByFilter(filter, correlationId) {\r\n        const tokenKeys = this.getTokenKeys();\r\n        const accessTokens = [];\r\n        tokenKeys.accessToken.forEach((key) => {\r\n            if (!this.accessTokenKeyMatchesFilter(key, filter, true)) {\r\n                return;\r\n            }\r\n            const accessToken = this.getAccessTokenCredential(key, correlationId);\r\n            if (accessToken &&\r\n                this.credentialMatchesFilter(accessToken, filter)) {\r\n                accessTokens.push(accessToken);\r\n            }\r\n        });\r\n        return accessTokens;\r\n    }\r\n    /**\r\n     * Helper to retrieve the appropriate refresh token from cache\r\n     * @param account {AccountInfo}\r\n     * @param familyRT {boolean}\r\n     * @param correlationId {?string}\r\n     * @param tokenKeys {?TokenKeys}\r\n     * @param performanceClient {?IPerformanceClient}\r\n     */\r\n    getRefreshToken(account, familyRT, correlationId, tokenKeys, performanceClient) {\r\n        this.commonLogger.trace(\"CacheManager - getRefreshToken called\");\r\n        const id = familyRT ? THE_FAMILY_ID : undefined;\r\n        const refreshTokenFilter = {\r\n            homeAccountId: account.homeAccountId,\r\n            environment: account.environment,\r\n            credentialType: CredentialType.REFRESH_TOKEN,\r\n            clientId: this.clientId,\r\n            familyId: id,\r\n        };\r\n        const refreshTokenKeys = (tokenKeys && tokenKeys.refreshToken) ||\r\n            this.getTokenKeys().refreshToken;\r\n        const refreshTokens = [];\r\n        refreshTokenKeys.forEach((key) => {\r\n            // Validate key\r\n            if (this.refreshTokenKeyMatchesFilter(key, refreshTokenFilter)) {\r\n                const refreshToken = this.getRefreshTokenCredential(key, correlationId);\r\n                // Validate value\r\n                if (refreshToken &&\r\n                    this.credentialMatchesFilter(refreshToken, refreshTokenFilter)) {\r\n                    refreshTokens.push(refreshToken);\r\n                }\r\n            }\r\n        });\r\n        const numRefreshTokens = refreshTokens.length;\r\n        if (numRefreshTokens < 1) {\r\n            this.commonLogger.info(\"CacheManager:getRefreshToken - No refresh token found.\");\r\n            return null;\r\n        }\r\n        // address the else case after remove functions address environment aliases\r\n        if (numRefreshTokens > 1 && performanceClient && correlationId) {\r\n            performanceClient.addFields({ multiMatchedRT: numRefreshTokens }, correlationId);\r\n        }\r\n        this.commonLogger.info(\"CacheManager:getRefreshToken - returning refresh token\");\r\n        return refreshTokens[0];\r\n    }\r\n    /**\r\n     * Validate the cache key against filter before retrieving and parsing cache value\r\n     * @param key\r\n     * @param filter\r\n     */\r\n    refreshTokenKeyMatchesFilter(inputKey, filter) {\r\n        const key = inputKey.toLowerCase();\r\n        if (filter.familyId &&\r\n            key.indexOf(filter.familyId.toLowerCase()) === -1) {\r\n            return false;\r\n        }\r\n        // If familyId is used, clientId is not in the key\r\n        if (!filter.familyId &&\r\n            filter.clientId &&\r\n            key.indexOf(filter.clientId.toLowerCase()) === -1) {\r\n            return false;\r\n        }\r\n        if (filter.homeAccountId &&\r\n            key.indexOf(filter.homeAccountId.toLowerCase()) === -1) {\r\n            return false;\r\n        }\r\n        return true;\r\n    }\r\n    /**\r\n     * Retrieve AppMetadataEntity from cache\r\n     */\r\n    readAppMetadataFromCache(environment) {\r\n        const appMetadataFilter = {\r\n            environment,\r\n            clientId: this.clientId,\r\n        };\r\n        const appMetadata = this.getAppMetadataFilteredBy(appMetadataFilter);\r\n        const appMetadataEntries = Object.keys(appMetadata).map((key) => appMetadata[key]);\r\n        const numAppMetadata = appMetadataEntries.length;\r\n        if (numAppMetadata < 1) {\r\n            return null;\r\n        }\r\n        else if (numAppMetadata > 1) {\r\n            throw createClientAuthError(multipleMatchingAppMetadata);\r\n        }\r\n        return appMetadataEntries[0];\r\n    }\r\n    /**\r\n     * Return the family_id value associated  with FOCI\r\n     * @param environment\r\n     * @param clientId\r\n     */\r\n    isAppMetadataFOCI(environment) {\r\n        const appMetadata = this.readAppMetadataFromCache(environment);\r\n        return !!(appMetadata && appMetadata.familyId === THE_FAMILY_ID);\r\n    }\r\n    /**\r\n     * helper to match account ids\r\n     * @param value\r\n     * @param homeAccountId\r\n     */\r\n    matchHomeAccountId(entity, homeAccountId) {\r\n        return !!(typeof entity.homeAccountId === \"string\" &&\r\n            homeAccountId === entity.homeAccountId);\r\n    }\r\n    /**\r\n     * helper to match account ids\r\n     * @param entity\r\n     * @param localAccountId\r\n     * @returns\r\n     */\r\n    matchLocalAccountIdFromTokenClaims(tokenClaims, localAccountId) {\r\n        const idTokenLocalAccountId = tokenClaims.oid || tokenClaims.sub;\r\n        return localAccountId === idTokenLocalAccountId;\r\n    }\r\n    matchLocalAccountIdFromTenantProfile(tenantProfile, localAccountId) {\r\n        return tenantProfile.localAccountId === localAccountId;\r\n    }\r\n    /**\r\n     * helper to match names\r\n     * @param entity\r\n     * @param name\r\n     * @returns true if the downcased name properties are present and match in the filter and the entity\r\n     */\r\n    matchName(claims, name) {\r\n        return !!(name.toLowerCase() === claims.name?.toLowerCase());\r\n    }\r\n    /**\r\n     * helper to match usernames\r\n     * @param entity\r\n     * @param username\r\n     * @returns\r\n     */\r\n    matchUsername(cachedUsername, filterUsername) {\r\n        return !!(cachedUsername &&\r\n            typeof cachedUsername === \"string\" &&\r\n            filterUsername?.toLowerCase() === cachedUsername.toLowerCase());\r\n    }\r\n    /**\r\n     * helper to match assertion\r\n     * @param value\r\n     * @param oboAssertion\r\n     */\r\n    matchUserAssertionHash(entity, userAssertionHash) {\r\n        return !!(entity.userAssertionHash &&\r\n            userAssertionHash === entity.userAssertionHash);\r\n    }\r\n    /**\r\n     * helper to match environment\r\n     * @param value\r\n     * @param environment\r\n     */\r\n    matchEnvironment(entity, environment) {\r\n        // Check static authority options first for cases where authority metadata has not been resolved and cached yet\r\n        if (this.staticAuthorityOptions) {\r\n            const staticAliases = getAliasesFromStaticSources(this.staticAuthorityOptions, this.commonLogger);\r\n            if (staticAliases.includes(environment) &&\r\n                staticAliases.includes(entity.environment)) {\r\n                return true;\r\n            }\r\n        }\r\n        // Query metadata cache if no static authority configuration has aliases that match enviroment\r\n        const cloudMetadata = this.getAuthorityMetadataByAlias(environment);\r\n        if (cloudMetadata &&\r\n            cloudMetadata.aliases.indexOf(entity.environment) > -1) {\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n    /**\r\n     * helper to match credential type\r\n     * @param entity\r\n     * @param credentialType\r\n     */\r\n    matchCredentialType(entity, credentialType) {\r\n        return (entity.credentialType &&\r\n            credentialType.toLowerCase() === entity.credentialType.toLowerCase());\r\n    }\r\n    /**\r\n     * helper to match client ids\r\n     * @param entity\r\n     * @param clientId\r\n     */\r\n    matchClientId(entity, clientId) {\r\n        return !!(entity.clientId && clientId === entity.clientId);\r\n    }\r\n    /**\r\n     * helper to match family ids\r\n     * @param entity\r\n     * @param familyId\r\n     */\r\n    matchFamilyId(entity, familyId) {\r\n        return !!(entity.familyId && familyId === entity.familyId);\r\n    }\r\n    /**\r\n     * helper to match realm\r\n     * @param entity\r\n     * @param realm\r\n     */\r\n    matchRealm(entity, realm) {\r\n        return !!(entity.realm?.toLowerCase() === realm.toLowerCase());\r\n    }\r\n    /**\r\n     * helper to match nativeAccountId\r\n     * @param entity\r\n     * @param nativeAccountId\r\n     * @returns boolean indicating the match result\r\n     */\r\n    matchNativeAccountId(entity, nativeAccountId) {\r\n        return !!(entity.nativeAccountId && nativeAccountId === entity.nativeAccountId);\r\n    }\r\n    /**\r\n     * helper to match loginHint which can be either:\r\n     * 1. login_hint ID token claim\r\n     * 2. username in cached account object\r\n     * 3. upn in ID token claims\r\n     * @param entity\r\n     * @param loginHint\r\n     * @returns\r\n     */\r\n    matchLoginHintFromTokenClaims(tokenClaims, loginHint) {\r\n        if (tokenClaims.login_hint === loginHint) {\r\n            return true;\r\n        }\r\n        if (tokenClaims.preferred_username === loginHint) {\r\n            return true;\r\n        }\r\n        if (tokenClaims.upn === loginHint) {\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n    /**\r\n     * Helper to match sid\r\n     * @param entity\r\n     * @param sid\r\n     * @returns true if the sid claim is present and matches the filter\r\n     */\r\n    matchSid(idTokenClaims, sid) {\r\n        return idTokenClaims.sid === sid;\r\n    }\r\n    matchAuthorityType(entity, authorityType) {\r\n        return !!(entity.authorityType &&\r\n            authorityType.toLowerCase() === entity.authorityType.toLowerCase());\r\n    }\r\n    /**\r\n     * Returns true if the target scopes are a subset of the current entity's scopes, false otherwise.\r\n     * @param entity\r\n     * @param target\r\n     */\r\n    matchTarget(entity, target) {\r\n        const isNotAccessTokenCredential = entity.credentialType !== CredentialType.ACCESS_TOKEN &&\r\n            entity.credentialType !==\r\n                CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME;\r\n        if (isNotAccessTokenCredential || !entity.target) {\r\n            return false;\r\n        }\r\n        const entityScopeSet = ScopeSet.fromString(entity.target);\r\n        return entityScopeSet.containsScopeSet(target);\r\n    }\r\n    /**\r\n     * Returns true if the credential's tokenType or Authentication Scheme matches the one in the request, false otherwise\r\n     * @param entity\r\n     * @param tokenType\r\n     */\r\n    matchTokenType(entity, tokenType) {\r\n        return !!(entity.tokenType && entity.tokenType === tokenType);\r\n    }\r\n    /**\r\n     * Returns true if the credential's keyId matches the one in the request, false otherwise\r\n     * @param entity\r\n     * @param keyId\r\n     */\r\n    matchKeyId(entity, keyId) {\r\n        return !!(entity.keyId && entity.keyId === keyId);\r\n    }\r\n    /**\r\n     * returns if a given cache entity is of the type appmetadata\r\n     * @param key\r\n     */\r\n    isAppMetadata(key) {\r\n        return key.indexOf(APP_METADATA) !== -1;\r\n    }\r\n    /**\r\n     * returns if a given cache entity is of the type authoritymetadata\r\n     * @param key\r\n     */\r\n    isAuthorityMetadata(key) {\r\n        return key.indexOf(AUTHORITY_METADATA_CONSTANTS.CACHE_KEY) !== -1;\r\n    }\r\n    /**\r\n     * returns cache key used for cloud instance metadata\r\n     */\r\n    generateAuthorityMetadataCacheKey(authority) {\r\n        return `${AUTHORITY_METADATA_CONSTANTS.CACHE_KEY}-${this.clientId}-${authority}`;\r\n    }\r\n    /**\r\n     * Helper to convert serialized data to object\r\n     * @param obj\r\n     * @param json\r\n     */\r\n    static toObject(obj, json) {\r\n        for (const propertyName in json) {\r\n            obj[propertyName] = json[propertyName];\r\n        }\r\n        return obj;\r\n    }\r\n}\r\n/** @internal */\r\nclass DefaultStorageClass extends CacheManager {\r\n    async setAccount() {\r\n        throw createClientAuthError(methodNotImplemented);\r\n    }\r\n    getAccount() {\r\n        throw createClientAuthError(methodNotImplemented);\r\n    }\r\n    async setIdTokenCredential() {\r\n        throw createClientAuthError(methodNotImplemented);\r\n    }\r\n    getIdTokenCredential() {\r\n        throw createClientAuthError(methodNotImplemented);\r\n    }\r\n    async setAccessTokenCredential() {\r\n        throw createClientAuthError(methodNotImplemented);\r\n    }\r\n    getAccessTokenCredential() {\r\n        throw createClientAuthError(methodNotImplemented);\r\n    }\r\n    async setRefreshTokenCredential() {\r\n        throw createClientAuthError(methodNotImplemented);\r\n    }\r\n    getRefreshTokenCredential() {\r\n        throw createClientAuthError(methodNotImplemented);\r\n    }\r\n    setAppMetadata() {\r\n        throw createClientAuthError(methodNotImplemented);\r\n    }\r\n    getAppMetadata() {\r\n        throw createClientAuthError(methodNotImplemented);\r\n    }\r\n    setServerTelemetry() {\r\n        throw createClientAuthError(methodNotImplemented);\r\n    }\r\n    getServerTelemetry() {\r\n        throw createClientAuthError(methodNotImplemented);\r\n    }\r\n    setAuthorityMetadata() {\r\n        throw createClientAuthError(methodNotImplemented);\r\n    }\r\n    getAuthorityMetadata() {\r\n        throw createClientAuthError(methodNotImplemented);\r\n    }\r\n    getAuthorityMetadataKeys() {\r\n        throw createClientAuthError(methodNotImplemented);\r\n    }\r\n    setThrottlingCache() {\r\n        throw createClientAuthError(methodNotImplemented);\r\n    }\r\n    getThrottlingCache() {\r\n        throw createClientAuthError(methodNotImplemented);\r\n    }\r\n    removeItem() {\r\n        throw createClientAuthError(methodNotImplemented);\r\n    }\r\n    getKeys() {\r\n        throw createClientAuthError(methodNotImplemented);\r\n    }\r\n    getAccountKeys() {\r\n        throw createClientAuthError(methodNotImplemented);\r\n    }\r\n    getTokenKeys() {\r\n        throw createClientAuthError(methodNotImplemented);\r\n    }\r\n    generateCredentialKey() {\r\n        throw createClientAuthError(methodNotImplemented);\r\n    }\r\n    generateAccountKey() {\r\n        throw createClientAuthError(methodNotImplemented);\r\n    }\r\n}\n\nexport { CacheManager, DefaultStorageClass };\n//# sourceMappingURL=CacheManager.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Enumeration of operations that are instrumented by have their performance measured by the PerformanceClient.\r\n *\r\n * @export\r\n * @enum {number}\r\n */\r\nconst PerformanceEvents = {\r\n    /**\r\n     * acquireTokenByCode API (msal-browser and msal-node).\r\n     * Used to acquire tokens by trading an authorization code against the token endpoint.\r\n     */\r\n    AcquireTokenByCode: \"acquireTokenByCode\",\r\n    /**\r\n     * acquireTokenByRefreshToken API (msal-browser and msal-node).\r\n     * Used to renew an access token using a refresh token against the token endpoint.\r\n     */\r\n    AcquireTokenByRefreshToken: \"acquireTokenByRefreshToken\",\r\n    /**\r\n     * acquireTokenSilent API (msal-browser and msal-node).\r\n     * Used to silently acquire a new access token (from the cache or the network).\r\n     */\r\n    AcquireTokenSilent: \"acquireTokenSilent\",\r\n    /**\r\n     * acquireTokenSilentAsync (msal-browser).\r\n     * Internal API for acquireTokenSilent.\r\n     */\r\n    AcquireTokenSilentAsync: \"acquireTokenSilentAsync\",\r\n    /**\r\n     * acquireTokenPopup (msal-browser).\r\n     * Used to acquire a new access token interactively through pop ups\r\n     */\r\n    AcquireTokenPopup: \"acquireTokenPopup\",\r\n    /**\r\n     * acquireTokenPreRedirect (msal-browser).\r\n     * First part of the redirect flow.\r\n     * Used to acquire a new access token interactively through redirects.\r\n     */\r\n    AcquireTokenPreRedirect: \"acquireTokenPreRedirect\",\r\n    /**\r\n     * acquireTokenRedirect (msal-browser).\r\n     * Second part of the redirect flow.\r\n     * Used to acquire a new access token interactively through redirects.\r\n     */\r\n    AcquireTokenRedirect: \"acquireTokenRedirect\",\r\n    /**\r\n     * getPublicKeyThumbprint API in CryptoOpts class (msal-browser).\r\n     * Used to generate a public/private keypair and generate a public key thumbprint for pop requests.\r\n     */\r\n    CryptoOptsGetPublicKeyThumbprint: \"cryptoOptsGetPublicKeyThumbprint\",\r\n    /**\r\n     * signJwt API in CryptoOpts class (msal-browser).\r\n     * Used to signed a pop token.\r\n     */\r\n    CryptoOptsSignJwt: \"cryptoOptsSignJwt\",\r\n    /**\r\n     * acquireToken API in the SilentCacheClient class (msal-browser).\r\n     * Used to read access tokens from the cache.\r\n     */\r\n    SilentCacheClientAcquireToken: \"silentCacheClientAcquireToken\",\r\n    /**\r\n     * acquireToken API in the SilentIframeClient class (msal-browser).\r\n     * Used to acquire a new set of tokens from the authorize endpoint in a hidden iframe.\r\n     */\r\n    SilentIframeClientAcquireToken: \"silentIframeClientAcquireToken\",\r\n    AwaitConcurrentIframe: \"awaitConcurrentIframe\",\r\n    /**\r\n     * acquireToken API in SilentRereshClient (msal-browser).\r\n     * Used to acquire a new set of tokens from the token endpoint using a refresh token.\r\n     */\r\n    SilentRefreshClientAcquireToken: \"silentRefreshClientAcquireToken\",\r\n    /**\r\n     * ssoSilent API (msal-browser).\r\n     * Used to silently acquire an authorization code and set of tokens using a hidden iframe.\r\n     */\r\n    SsoSilent: \"ssoSilent\",\r\n    /**\r\n     * getDiscoveredAuthority API in StandardInteractionClient class (msal-browser).\r\n     * Used to load authority metadata for a request.\r\n     */\r\n    StandardInteractionClientGetDiscoveredAuthority: \"standardInteractionClientGetDiscoveredAuthority\",\r\n    /**\r\n     * acquireToken APIs in msal-browser.\r\n     * Used to make an /authorize endpoint call with native brokering enabled.\r\n     */\r\n    FetchAccountIdWithNativeBroker: \"fetchAccountIdWithNativeBroker\",\r\n    /**\r\n     * acquireToken API in NativeInteractionClient class (msal-browser).\r\n     * Used to acquire a token from Native component when native brokering is enabled.\r\n     */\r\n    NativeInteractionClientAcquireToken: \"nativeInteractionClientAcquireToken\",\r\n    /**\r\n     * Time spent creating default headers for requests to token endpoint\r\n     */\r\n    BaseClientCreateTokenRequestHeaders: \"baseClientCreateTokenRequestHeaders\",\r\n    /**\r\n     * Time spent sending/waiting for the response of a request to the token endpoint\r\n     */\r\n    NetworkClientSendPostRequestAsync: \"networkClientSendPostRequestAsync\",\r\n    RefreshTokenClientExecutePostToTokenEndpoint: \"refreshTokenClientExecutePostToTokenEndpoint\",\r\n    AuthorizationCodeClientExecutePostToTokenEndpoint: \"authorizationCodeClientExecutePostToTokenEndpoint\",\r\n    /**\r\n     * Used to measure the time taken for completing embedded-broker handshake (PW-Broker).\r\n     */\r\n    BrokerHandhshake: \"brokerHandshake\",\r\n    /**\r\n     * acquireTokenByRefreshToken API in BrokerClientApplication (PW-Broker) .\r\n     */\r\n    AcquireTokenByRefreshTokenInBroker: \"acquireTokenByRefreshTokenInBroker\",\r\n    /**\r\n     * Time taken for token acquisition by broker\r\n     */\r\n    AcquireTokenByBroker: \"acquireTokenByBroker\",\r\n    /**\r\n     * Time spent on the network for refresh token acquisition\r\n     */\r\n    RefreshTokenClientExecuteTokenRequest: \"refreshTokenClientExecuteTokenRequest\",\r\n    /**\r\n     * Time taken for acquiring refresh token , records RT size\r\n     */\r\n    RefreshTokenClientAcquireToken: \"refreshTokenClientAcquireToken\",\r\n    /**\r\n     * Time taken for acquiring cached refresh token\r\n     */\r\n    RefreshTokenClientAcquireTokenWithCachedRefreshToken: \"refreshTokenClientAcquireTokenWithCachedRefreshToken\",\r\n    /**\r\n     * acquireTokenByRefreshToken API in RefreshTokenClient (msal-common).\r\n     */\r\n    RefreshTokenClientAcquireTokenByRefreshToken: \"refreshTokenClientAcquireTokenByRefreshToken\",\r\n    /**\r\n     * Helper function to create token request body in RefreshTokenClient (msal-common).\r\n     */\r\n    RefreshTokenClientCreateTokenRequestBody: \"refreshTokenClientCreateTokenRequestBody\",\r\n    /**\r\n     * acquireTokenFromCache (msal-browser).\r\n     * Internal API for acquiring token from cache\r\n     */\r\n    AcquireTokenFromCache: \"acquireTokenFromCache\",\r\n    SilentFlowClientAcquireCachedToken: \"silentFlowClientAcquireCachedToken\",\r\n    SilentFlowClientGenerateResultFromCacheRecord: \"silentFlowClientGenerateResultFromCacheRecord\",\r\n    /**\r\n     * acquireTokenBySilentIframe (msal-browser).\r\n     * Internal API for acquiring token by silent Iframe\r\n     */\r\n    AcquireTokenBySilentIframe: \"acquireTokenBySilentIframe\",\r\n    /**\r\n     * Internal API for initializing base request in BaseInteractionClient (msal-browser)\r\n     */\r\n    InitializeBaseRequest: \"initializeBaseRequest\",\r\n    /**\r\n     * Internal API for initializing silent request in SilentCacheClient (msal-browser)\r\n     */\r\n    InitializeSilentRequest: \"initializeSilentRequest\",\r\n    InitializeClientApplication: \"initializeClientApplication\",\r\n    InitializeCache: \"initializeCache\",\r\n    /**\r\n     * Helper function in SilentIframeClient class (msal-browser).\r\n     */\r\n    SilentIframeClientTokenHelper: \"silentIframeClientTokenHelper\",\r\n    /**\r\n     * SilentHandler\r\n     */\r\n    SilentHandlerInitiateAuthRequest: \"silentHandlerInitiateAuthRequest\",\r\n    SilentHandlerMonitorIframeForHash: \"silentHandlerMonitorIframeForHash\",\r\n    SilentHandlerLoadFrame: \"silentHandlerLoadFrame\",\r\n    SilentHandlerLoadFrameSync: \"silentHandlerLoadFrameSync\",\r\n    /**\r\n     * Helper functions in StandardInteractionClient class (msal-browser)\r\n     */\r\n    StandardInteractionClientCreateAuthCodeClient: \"standardInteractionClientCreateAuthCodeClient\",\r\n    StandardInteractionClientGetClientConfiguration: \"standardInteractionClientGetClientConfiguration\",\r\n    StandardInteractionClientInitializeAuthorizationRequest: \"standardInteractionClientInitializeAuthorizationRequest\",\r\n    /**\r\n     * getAuthCodeUrl API (msal-browser and msal-node).\r\n     */\r\n    GetAuthCodeUrl: \"getAuthCodeUrl\",\r\n    GetStandardParams: \"getStandardParams\",\r\n    /**\r\n     * Functions from InteractionHandler (msal-browser)\r\n     */\r\n    HandleCodeResponseFromServer: \"handleCodeResponseFromServer\",\r\n    HandleCodeResponse: \"handleCodeResponse\",\r\n    HandleResponseEar: \"handleResponseEar\",\r\n    HandleResponsePlatformBroker: \"handleResponsePlatformBroker\",\r\n    HandleResponseCode: \"handleResponseCode\",\r\n    UpdateTokenEndpointAuthority: \"updateTokenEndpointAuthority\",\r\n    /**\r\n     * APIs in Authorization Code Client (msal-common)\r\n     */\r\n    AuthClientAcquireToken: \"authClientAcquireToken\",\r\n    AuthClientExecuteTokenRequest: \"authClientExecuteTokenRequest\",\r\n    AuthClientCreateTokenRequestBody: \"authClientCreateTokenRequestBody\",\r\n    /**\r\n     * Generate functions in PopTokenGenerator (msal-common)\r\n     */\r\n    PopTokenGenerateCnf: \"popTokenGenerateCnf\",\r\n    PopTokenGenerateKid: \"popTokenGenerateKid\",\r\n    /**\r\n     * handleServerTokenResponse API in ResponseHandler (msal-common)\r\n     */\r\n    HandleServerTokenResponse: \"handleServerTokenResponse\",\r\n    DeserializeResponse: \"deserializeResponse\",\r\n    /**\r\n     * Authority functions\r\n     */\r\n    AuthorityFactoryCreateDiscoveredInstance: \"authorityFactoryCreateDiscoveredInstance\",\r\n    AuthorityResolveEndpointsAsync: \"authorityResolveEndpointsAsync\",\r\n    AuthorityResolveEndpointsFromLocalSources: \"authorityResolveEndpointsFromLocalSources\",\r\n    AuthorityGetCloudDiscoveryMetadataFromNetwork: \"authorityGetCloudDiscoveryMetadataFromNetwork\",\r\n    AuthorityUpdateCloudDiscoveryMetadata: \"authorityUpdateCloudDiscoveryMetadata\",\r\n    AuthorityGetEndpointMetadataFromNetwork: \"authorityGetEndpointMetadataFromNetwork\",\r\n    AuthorityUpdateEndpointMetadata: \"authorityUpdateEndpointMetadata\",\r\n    AuthorityUpdateMetadataWithRegionalInformation: \"authorityUpdateMetadataWithRegionalInformation\",\r\n    /**\r\n     * Region Discovery functions\r\n     */\r\n    RegionDiscoveryDetectRegion: \"regionDiscoveryDetectRegion\",\r\n    RegionDiscoveryGetRegionFromIMDS: \"regionDiscoveryGetRegionFromIMDS\",\r\n    RegionDiscoveryGetCurrentVersion: \"regionDiscoveryGetCurrentVersion\",\r\n    AcquireTokenByCodeAsync: \"acquireTokenByCodeAsync\",\r\n    GetEndpointMetadataFromNetwork: \"getEndpointMetadataFromNetwork\",\r\n    GetCloudDiscoveryMetadataFromNetworkMeasurement: \"getCloudDiscoveryMetadataFromNetworkMeasurement\",\r\n    HandleRedirectPromiseMeasurement: \"handleRedirectPromise\",\r\n    HandleNativeRedirectPromiseMeasurement: \"handleNativeRedirectPromise\",\r\n    UpdateCloudDiscoveryMetadataMeasurement: \"updateCloudDiscoveryMetadataMeasurement\",\r\n    UsernamePasswordClientAcquireToken: \"usernamePasswordClientAcquireToken\",\r\n    NativeMessageHandlerHandshake: \"nativeMessageHandlerHandshake\",\r\n    NativeGenerateAuthResult: \"nativeGenerateAuthResult\",\r\n    RemoveHiddenIframe: \"removeHiddenIframe\",\r\n    /**\r\n     * Cache operations\r\n     */\r\n    ClearTokensAndKeysWithClaims: \"clearTokensAndKeysWithClaims\",\r\n    CacheManagerGetRefreshToken: \"cacheManagerGetRefreshToken\",\r\n    ImportExistingCache: \"importExistingCache\",\r\n    SetUserData: \"setUserData\",\r\n    LocalStorageUpdated: \"localStorageUpdated\",\r\n    /**\r\n     * Crypto Operations\r\n     */\r\n    GeneratePkceCodes: \"generatePkceCodes\",\r\n    GenerateCodeVerifier: \"generateCodeVerifier\",\r\n    GenerateCodeChallengeFromVerifier: \"generateCodeChallengeFromVerifier\",\r\n    Sha256Digest: \"sha256Digest\",\r\n    GetRandomValues: \"getRandomValues\",\r\n    GenerateHKDF: \"generateHKDF\",\r\n    GenerateBaseKey: \"generateBaseKey\",\r\n    Base64Decode: \"base64Decode\",\r\n    UrlEncodeArr: \"urlEncodeArr\",\r\n    Encrypt: \"encrypt\",\r\n    Decrypt: \"decrypt\",\r\n    GenerateEarKey: \"generateEarKey\",\r\n    DecryptEarResponse: \"decryptEarResponse\",\r\n    LoadExternalTokens: \"LoadExternalTokens\",\r\n    LoadAccount: \"loadAccount\",\r\n    LoadIdToken: \"loadIdToken\",\r\n    LoadAccessToken: \"loadAccessToken\",\r\n    LoadRefreshToken: \"loadRefreshToken\",\r\n    /**\r\n     * SSO capability verification call (msal-browser).\r\n     * Fire-and-forget SSO verification call made after interactive authentication completes.\r\n     */\r\n    SsoCapable: \"ssoCapable\",\r\n};\r\nconst PerformanceEventAbbreviations = new Map([\r\n    [PerformanceEvents.AcquireTokenByCode, \"ATByCode\"],\r\n    [PerformanceEvents.AcquireTokenByRefreshToken, \"ATByRT\"],\r\n    [PerformanceEvents.AcquireTokenSilent, \"ATS\"],\r\n    [PerformanceEvents.AcquireTokenSilentAsync, \"ATSAsync\"],\r\n    [PerformanceEvents.AcquireTokenPopup, \"ATPopup\"],\r\n    [PerformanceEvents.AcquireTokenRedirect, \"ATRedirect\"],\r\n    [\r\n        PerformanceEvents.CryptoOptsGetPublicKeyThumbprint,\r\n        \"CryptoGetPKThumb\",\r\n    ],\r\n    [PerformanceEvents.CryptoOptsSignJwt, \"CryptoSignJwt\"],\r\n    [PerformanceEvents.SilentCacheClientAcquireToken, \"SltCacheClientAT\"],\r\n    [PerformanceEvents.SilentIframeClientAcquireToken, \"SltIframeClientAT\"],\r\n    [PerformanceEvents.SilentRefreshClientAcquireToken, \"SltRClientAT\"],\r\n    [PerformanceEvents.SsoSilent, \"SsoSlt\"],\r\n    [\r\n        PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority,\r\n        \"StdIntClientGetDiscAuth\",\r\n    ],\r\n    [\r\n        PerformanceEvents.FetchAccountIdWithNativeBroker,\r\n        \"FetchAccIdWithNtvBroker\",\r\n    ],\r\n    [\r\n        PerformanceEvents.NativeInteractionClientAcquireToken,\r\n        \"NtvIntClientAT\",\r\n    ],\r\n    [\r\n        PerformanceEvents.BaseClientCreateTokenRequestHeaders,\r\n        \"BaseClientCreateTReqHead\",\r\n    ],\r\n    [\r\n        PerformanceEvents.NetworkClientSendPostRequestAsync,\r\n        \"NetClientSendPost\",\r\n    ],\r\n    [\r\n        PerformanceEvents.RefreshTokenClientExecutePostToTokenEndpoint,\r\n        \"RTClientExecPost\",\r\n    ],\r\n    [\r\n        PerformanceEvents.AuthorizationCodeClientExecutePostToTokenEndpoint,\r\n        \"AuthCodeClientExecPost\",\r\n    ],\r\n    [PerformanceEvents.BrokerHandhshake, \"BrokerHandshake\"],\r\n    [\r\n        PerformanceEvents.AcquireTokenByRefreshTokenInBroker,\r\n        \"ATByRTInBroker\",\r\n    ],\r\n    [PerformanceEvents.AcquireTokenByBroker, \"ATByBroker\"],\r\n    [\r\n        PerformanceEvents.RefreshTokenClientExecuteTokenRequest,\r\n        \"RTClientExecTReq\",\r\n    ],\r\n    [PerformanceEvents.RefreshTokenClientAcquireToken, \"RTClientAT\"],\r\n    [\r\n        PerformanceEvents.RefreshTokenClientAcquireTokenWithCachedRefreshToken,\r\n        \"RTClientATWithCachedRT\",\r\n    ],\r\n    [\r\n        PerformanceEvents.RefreshTokenClientAcquireTokenByRefreshToken,\r\n        \"RTClientATByRT\",\r\n    ],\r\n    [\r\n        PerformanceEvents.RefreshTokenClientCreateTokenRequestBody,\r\n        \"RTClientCreateTReqBody\",\r\n    ],\r\n    [PerformanceEvents.AcquireTokenFromCache, \"ATFromCache\"],\r\n    [\r\n        PerformanceEvents.SilentFlowClientAcquireCachedToken,\r\n        \"SltFlowClientATCached\",\r\n    ],\r\n    [\r\n        PerformanceEvents.SilentFlowClientGenerateResultFromCacheRecord,\r\n        \"SltFlowClientGenResFromCache\",\r\n    ],\r\n    [PerformanceEvents.AcquireTokenBySilentIframe, \"ATBySltIframe\"],\r\n    [PerformanceEvents.InitializeBaseRequest, \"InitBaseReq\"],\r\n    [PerformanceEvents.InitializeSilentRequest, \"InitSltReq\"],\r\n    [\r\n        PerformanceEvents.InitializeClientApplication,\r\n        \"InitClientApplication\",\r\n    ],\r\n    [PerformanceEvents.InitializeCache, \"InitCache\"],\r\n    [PerformanceEvents.ImportExistingCache, \"importCache\"],\r\n    [PerformanceEvents.SetUserData, \"setUserData\"],\r\n    [PerformanceEvents.LocalStorageUpdated, \"localStorageUpdated\"],\r\n    [PerformanceEvents.SilentIframeClientTokenHelper, \"SIClientTHelper\"],\r\n    [\r\n        PerformanceEvents.SilentHandlerInitiateAuthRequest,\r\n        \"SHandlerInitAuthReq\",\r\n    ],\r\n    [\r\n        PerformanceEvents.SilentHandlerMonitorIframeForHash,\r\n        \"SltHandlerMonitorIframeForHash\",\r\n    ],\r\n    [PerformanceEvents.SilentHandlerLoadFrame, \"SHandlerLoadFrame\"],\r\n    [PerformanceEvents.SilentHandlerLoadFrameSync, \"SHandlerLoadFrameSync\"],\r\n    [\r\n        PerformanceEvents.StandardInteractionClientCreateAuthCodeClient,\r\n        \"StdIntClientCreateAuthCodeClient\",\r\n    ],\r\n    [\r\n        PerformanceEvents.StandardInteractionClientGetClientConfiguration,\r\n        \"StdIntClientGetClientConf\",\r\n    ],\r\n    [\r\n        PerformanceEvents.StandardInteractionClientInitializeAuthorizationRequest,\r\n        \"StdIntClientInitAuthReq\",\r\n    ],\r\n    [PerformanceEvents.GetAuthCodeUrl, \"GetAuthCodeUrl\"],\r\n    [\r\n        PerformanceEvents.HandleCodeResponseFromServer,\r\n        \"HandleCodeResFromServer\",\r\n    ],\r\n    [PerformanceEvents.HandleCodeResponse, \"HandleCodeResp\"],\r\n    [PerformanceEvents.HandleResponseEar, \"HandleRespEar\"],\r\n    [PerformanceEvents.HandleResponseCode, \"HandleRespCode\"],\r\n    [\r\n        PerformanceEvents.HandleResponsePlatformBroker,\r\n        \"HandleRespPlatBroker\",\r\n    ],\r\n    [PerformanceEvents.UpdateTokenEndpointAuthority, \"UpdTEndpointAuth\"],\r\n    [PerformanceEvents.AuthClientAcquireToken, \"AuthClientAT\"],\r\n    [PerformanceEvents.AuthClientExecuteTokenRequest, \"AuthClientExecTReq\"],\r\n    [\r\n        PerformanceEvents.AuthClientCreateTokenRequestBody,\r\n        \"AuthClientCreateTReqBody\",\r\n    ],\r\n    [PerformanceEvents.PopTokenGenerateCnf, \"PopTGenCnf\"],\r\n    [PerformanceEvents.PopTokenGenerateKid, \"PopTGenKid\"],\r\n    [PerformanceEvents.HandleServerTokenResponse, \"HandleServerTRes\"],\r\n    [PerformanceEvents.DeserializeResponse, \"DeserializeRes\"],\r\n    [\r\n        PerformanceEvents.AuthorityFactoryCreateDiscoveredInstance,\r\n        \"AuthFactCreateDiscInst\",\r\n    ],\r\n    [\r\n        PerformanceEvents.AuthorityResolveEndpointsAsync,\r\n        \"AuthResolveEndpointsAsync\",\r\n    ],\r\n    [\r\n        PerformanceEvents.AuthorityResolveEndpointsFromLocalSources,\r\n        \"AuthResolveEndpointsFromLocal\",\r\n    ],\r\n    [\r\n        PerformanceEvents.AuthorityGetCloudDiscoveryMetadataFromNetwork,\r\n        \"AuthGetCDMetaFromNet\",\r\n    ],\r\n    [\r\n        PerformanceEvents.AuthorityUpdateCloudDiscoveryMetadata,\r\n        \"AuthUpdCDMeta\",\r\n    ],\r\n    [\r\n        PerformanceEvents.AuthorityGetEndpointMetadataFromNetwork,\r\n        \"AuthUpdCDMetaFromNet\",\r\n    ],\r\n    [\r\n        PerformanceEvents.AuthorityUpdateEndpointMetadata,\r\n        \"AuthUpdEndpointMeta\",\r\n    ],\r\n    [\r\n        PerformanceEvents.AuthorityUpdateMetadataWithRegionalInformation,\r\n        \"AuthUpdMetaWithRegInfo\",\r\n    ],\r\n    [PerformanceEvents.RegionDiscoveryDetectRegion, \"RegDiscDetectReg\"],\r\n    [\r\n        PerformanceEvents.RegionDiscoveryGetRegionFromIMDS,\r\n        \"RegDiscGetRegFromIMDS\",\r\n    ],\r\n    [\r\n        PerformanceEvents.RegionDiscoveryGetCurrentVersion,\r\n        \"RegDiscGetCurrentVer\",\r\n    ],\r\n    [PerformanceEvents.AcquireTokenByCodeAsync, \"ATByCodeAsync\"],\r\n    [\r\n        PerformanceEvents.GetEndpointMetadataFromNetwork,\r\n        \"GetEndpointMetaFromNet\",\r\n    ],\r\n    [\r\n        PerformanceEvents.GetCloudDiscoveryMetadataFromNetworkMeasurement,\r\n        \"GetCDMetaFromNet\",\r\n    ],\r\n    [\r\n        PerformanceEvents.HandleRedirectPromiseMeasurement,\r\n        \"HandleRedirectPromise\",\r\n    ],\r\n    [\r\n        PerformanceEvents.HandleNativeRedirectPromiseMeasurement,\r\n        \"HandleNtvRedirectPromise\",\r\n    ],\r\n    [\r\n        PerformanceEvents.UpdateCloudDiscoveryMetadataMeasurement,\r\n        \"UpdateCDMeta\",\r\n    ],\r\n    [\r\n        PerformanceEvents.UsernamePasswordClientAcquireToken,\r\n        \"UserPassClientAT\",\r\n    ],\r\n    [\r\n        PerformanceEvents.NativeMessageHandlerHandshake,\r\n        \"NtvMsgHandlerHandshake\",\r\n    ],\r\n    [PerformanceEvents.NativeGenerateAuthResult, \"NtvGenAuthRes\"],\r\n    [PerformanceEvents.RemoveHiddenIframe, \"RemoveHiddenIframe\"],\r\n    [\r\n        PerformanceEvents.ClearTokensAndKeysWithClaims,\r\n        \"ClearTAndKeysWithClaims\",\r\n    ],\r\n    [PerformanceEvents.CacheManagerGetRefreshToken, \"CacheManagerGetRT\"],\r\n    [PerformanceEvents.GeneratePkceCodes, \"GenPkceCodes\"],\r\n    [PerformanceEvents.GenerateCodeVerifier, \"GenCodeVerifier\"],\r\n    [\r\n        PerformanceEvents.GenerateCodeChallengeFromVerifier,\r\n        \"GenCodeChallengeFromVerifier\",\r\n    ],\r\n    [PerformanceEvents.Sha256Digest, \"Sha256Digest\"],\r\n    [PerformanceEvents.GetRandomValues, \"GetRandomValues\"],\r\n    [PerformanceEvents.GenerateHKDF, \"genHKDF\"],\r\n    [PerformanceEvents.GenerateBaseKey, \"genBaseKey\"],\r\n    [PerformanceEvents.Base64Decode, \"b64Decode\"],\r\n    [PerformanceEvents.UrlEncodeArr, \"urlEncArr\"],\r\n    [PerformanceEvents.Encrypt, \"encrypt\"],\r\n    [PerformanceEvents.Decrypt, \"decrypt\"],\r\n    [PerformanceEvents.GenerateEarKey, \"genEarKey\"],\r\n    [PerformanceEvents.DecryptEarResponse, \"decryptEarResp\"],\r\n    [PerformanceEvents.SsoCapable, \"SsoCapable\"],\r\n]);\r\n/**\r\n * State of the performance event.\r\n *\r\n * @export\r\n * @enum {number}\r\n */\r\nconst PerformanceEventStatus = {\r\n    NotStarted: 0,\r\n    InProgress: 1,\r\n    Completed: 2,\r\n};\r\nconst IntFields = new Set([\r\n    \"accessTokenSize\",\r\n    \"durationMs\",\r\n    \"idTokenSize\",\r\n    \"matsSilentStatus\",\r\n    \"matsHttpStatus\",\r\n    \"refreshTokenSize\",\r\n    \"queuedTimeMs\",\r\n    \"startTimeMs\",\r\n    \"status\",\r\n    \"multiMatchedAT\",\r\n    \"multiMatchedID\",\r\n    \"multiMatchedRT\",\r\n    \"unencryptedCacheCount\",\r\n    \"encryptedCacheExpiredCount\",\r\n    \"oldAccountCount\",\r\n    \"oldAccessCount\",\r\n    \"oldIdCount\",\r\n    \"oldRefreshCount\",\r\n    \"currAccountCount\",\r\n    \"currAccessCount\",\r\n    \"currIdCount\",\r\n    \"currRefreshCount\",\r\n    \"expiredCacheRemovedCount\",\r\n    \"upgradedCacheCount\",\r\n    \"networkRtt\",\r\n    \"iframePollIntervalMs\",\r\n    \"iframeTimeoutMs\",\r\n    \"iframeTickCount\",\r\n    \"crossOriginTickCount\",\r\n]);\n\nexport { IntFields, PerformanceEventAbbreviations, PerformanceEventStatus, PerformanceEvents };\n//# sourceMappingURL=PerformanceEvent.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\nimport { PerformanceEventStatus } from './PerformanceEvent.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass StubPerformanceMeasurement {\r\n    startMeasurement() {\r\n        return;\r\n    }\r\n    endMeasurement() {\r\n        return;\r\n    }\r\n    flushMeasurement() {\r\n        return null;\r\n    }\r\n}\r\nclass StubPerformanceClient {\r\n    generateId() {\r\n        return \"callback-id\";\r\n    }\r\n    startMeasurement(measureName, correlationId) {\r\n        return {\r\n            end: () => null,\r\n            discard: () => { },\r\n            add: () => { },\r\n            increment: () => { },\r\n            event: {\r\n                eventId: this.generateId(),\r\n                status: PerformanceEventStatus.InProgress,\r\n                authority: \"\",\r\n                libraryName: \"\",\r\n                libraryVersion: \"\",\r\n                clientId: \"\",\r\n                name: measureName,\r\n                startTimeMs: Date.now(),\r\n                correlationId: correlationId || \"\",\r\n            },\r\n            measurement: new StubPerformanceMeasurement(),\r\n        };\r\n    }\r\n    startPerformanceMeasurement() {\r\n        return new StubPerformanceMeasurement();\r\n    }\r\n    calculateQueuedTime() {\r\n        return 0;\r\n    }\r\n    addQueueMeasurement() {\r\n        return;\r\n    }\r\n    setPreQueueTime() {\r\n        return;\r\n    }\r\n    endMeasurement() {\r\n        return null;\r\n    }\r\n    discardMeasurements() {\r\n        return;\r\n    }\r\n    removePerformanceCallback() {\r\n        return true;\r\n    }\r\n    addPerformanceCallback() {\r\n        return \"\";\r\n    }\r\n    emitEvents() {\r\n        return;\r\n    }\r\n    addFields() {\r\n        return;\r\n    }\r\n    incrementFields() {\r\n        return;\r\n    }\r\n    cacheEventByCorrelationId() {\r\n        return;\r\n    }\r\n}\n\nexport { StubPerformanceClient, StubPerformanceMeasurement };\n//# sourceMappingURL=StubPerformanceClient.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\nimport { DEFAULT_CRYPTO_IMPLEMENTATION } from '../crypto/ICrypto.mjs';\nimport { LogLevel, Logger } from '../logger/Logger.mjs';\nimport { DEFAULT_TOKEN_RENEWAL_OFFSET_SEC, Constants } from '../utils/Constants.mjs';\nimport { version } from '../packageMetadata.mjs';\nimport { AzureCloudInstance } from '../authority/AuthorityOptions.mjs';\nimport { DefaultStorageClass } from '../cache/CacheManager.mjs';\nimport { ProtocolMode } from '../authority/ProtocolMode.mjs';\nimport { createClientAuthError } from '../error/ClientAuthError.mjs';\nimport { StubPerformanceClient } from '../telemetry/performance/StubPerformanceClient.mjs';\nimport { methodNotImplemented } from '../error/ClientAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst DEFAULT_SYSTEM_OPTIONS = {\r\n    tokenRenewalOffsetSeconds: DEFAULT_TOKEN_RENEWAL_OFFSET_SEC,\r\n    preventCorsPreflight: false,\r\n};\r\nconst DEFAULT_LOGGER_IMPLEMENTATION = {\r\n    loggerCallback: () => {\r\n        // allow users to not set loggerCallback\r\n    },\r\n    piiLoggingEnabled: false,\r\n    logLevel: LogLevel.Info,\r\n    correlationId: Constants.EMPTY_STRING,\r\n};\r\nconst DEFAULT_CACHE_OPTIONS = {\r\n    claimsBasedCachingEnabled: false,\r\n};\r\nconst DEFAULT_NETWORK_IMPLEMENTATION = {\r\n    async sendGetRequestAsync() {\r\n        throw createClientAuthError(methodNotImplemented);\r\n    },\r\n    async sendPostRequestAsync() {\r\n        throw createClientAuthError(methodNotImplemented);\r\n    },\r\n};\r\nconst DEFAULT_LIBRARY_INFO = {\r\n    sku: Constants.SKU,\r\n    version: version,\r\n    cpu: Constants.EMPTY_STRING,\r\n    os: Constants.EMPTY_STRING,\r\n};\r\nconst DEFAULT_CLIENT_CREDENTIALS = {\r\n    clientSecret: Constants.EMPTY_STRING,\r\n    clientAssertion: undefined,\r\n};\r\nconst DEFAULT_AZURE_CLOUD_OPTIONS = {\r\n    azureCloudInstance: AzureCloudInstance.None,\r\n    tenant: `${Constants.DEFAULT_COMMON_TENANT}`,\r\n};\r\nconst DEFAULT_TELEMETRY_OPTIONS = {\r\n    application: {\r\n        appName: \"\",\r\n        appVersion: \"\",\r\n    },\r\n};\r\n/**\r\n * Function that sets the default options when not explicitly configured from app developer\r\n *\r\n * @param Configuration\r\n *\r\n * @returns Configuration\r\n */\r\nfunction buildClientConfiguration({ authOptions: userAuthOptions, systemOptions: userSystemOptions, loggerOptions: userLoggerOption, cacheOptions: userCacheOptions, storageInterface: storageImplementation, networkInterface: networkImplementation, cryptoInterface: cryptoImplementation, clientCredentials: clientCredentials, libraryInfo: libraryInfo, telemetry: telemetry, serverTelemetryManager: serverTelemetryManager, persistencePlugin: persistencePlugin, serializableCache: serializableCache, }) {\r\n    const loggerOptions = {\r\n        ...DEFAULT_LOGGER_IMPLEMENTATION,\r\n        ...userLoggerOption,\r\n    };\r\n    return {\r\n        authOptions: buildAuthOptions(userAuthOptions),\r\n        systemOptions: { ...DEFAULT_SYSTEM_OPTIONS, ...userSystemOptions },\r\n        loggerOptions: loggerOptions,\r\n        cacheOptions: { ...DEFAULT_CACHE_OPTIONS, ...userCacheOptions },\r\n        storageInterface: storageImplementation ||\r\n            new DefaultStorageClass(userAuthOptions.clientId, DEFAULT_CRYPTO_IMPLEMENTATION, new Logger(loggerOptions), new StubPerformanceClient()),\r\n        networkInterface: networkImplementation || DEFAULT_NETWORK_IMPLEMENTATION,\r\n        cryptoInterface: cryptoImplementation || DEFAULT_CRYPTO_IMPLEMENTATION,\r\n        clientCredentials: clientCredentials || DEFAULT_CLIENT_CREDENTIALS,\r\n        libraryInfo: { ...DEFAULT_LIBRARY_INFO, ...libraryInfo },\r\n        telemetry: { ...DEFAULT_TELEMETRY_OPTIONS, ...telemetry },\r\n        serverTelemetryManager: serverTelemetryManager || null,\r\n        persistencePlugin: persistencePlugin || null,\r\n        serializableCache: serializableCache || null,\r\n    };\r\n}\r\n/**\r\n * Construct authoptions from the client and platform passed values\r\n * @param authOptions\r\n */\r\nfunction buildAuthOptions(authOptions) {\r\n    return {\r\n        clientCapabilities: [],\r\n        azureCloudOptions: DEFAULT_AZURE_CLOUD_OPTIONS,\r\n        skipAuthorityMetadataCache: false,\r\n        instanceAware: false,\r\n        encodeExtraQueryParams: false,\r\n        ...authOptions,\r\n    };\r\n}\r\n/**\r\n * Returns true if config has protocolMode set to ProtocolMode.OIDC, false otherwise\r\n * @param ClientConfiguration\r\n */\r\nfunction isOidcProtocolMode(config) {\r\n    return (config.authOptions.authority.options.protocolMode === ProtocolMode.OIDC);\r\n}\n\nexport { DEFAULT_SYSTEM_OPTIONS, buildClientConfiguration, isOidcProtocolMode };\n//# sourceMappingURL=ClientConfiguration.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst CcsCredentialType = {\r\n    HOME_ACCOUNT_ID: \"home_account_id\",\r\n    UPN: \"UPN\",\r\n};\n\nexport { CcsCredentialType };\n//# sourceMappingURL=CcsCredential.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst CLIENT_ID = \"client_id\";\r\nconst REDIRECT_URI = \"redirect_uri\";\r\nconst RESPONSE_TYPE = \"response_type\";\r\nconst RESPONSE_MODE = \"response_mode\";\r\nconst GRANT_TYPE = \"grant_type\";\r\nconst CLAIMS = \"claims\";\r\nconst SCOPE = \"scope\";\r\nconst ERROR = \"error\";\r\nconst ERROR_DESCRIPTION = \"error_description\";\r\nconst ACCESS_TOKEN = \"access_token\";\r\nconst ID_TOKEN = \"id_token\";\r\nconst REFRESH_TOKEN = \"refresh_token\";\r\nconst EXPIRES_IN = \"expires_in\";\r\nconst REFRESH_TOKEN_EXPIRES_IN = \"refresh_token_expires_in\";\r\nconst STATE = \"state\";\r\nconst NONCE = \"nonce\";\r\nconst PROMPT = \"prompt\";\r\nconst SESSION_STATE = \"session_state\";\r\nconst CLIENT_INFO = \"client_info\";\r\nconst CODE = \"code\";\r\nconst CODE_CHALLENGE = \"code_challenge\";\r\nconst CODE_CHALLENGE_METHOD = \"code_challenge_method\";\r\nconst CODE_VERIFIER = \"code_verifier\";\r\nconst CLIENT_REQUEST_ID = \"client-request-id\";\r\nconst X_CLIENT_SKU = \"x-client-SKU\";\r\nconst X_CLIENT_VER = \"x-client-VER\";\r\nconst X_CLIENT_OS = \"x-client-OS\";\r\nconst X_CLIENT_CPU = \"x-client-CPU\";\r\nconst X_CLIENT_CURR_TELEM = \"x-client-current-telemetry\";\r\nconst X_CLIENT_LAST_TELEM = \"x-client-last-telemetry\";\r\nconst X_MS_LIB_CAPABILITY = \"x-ms-lib-capability\";\r\nconst X_APP_NAME = \"x-app-name\";\r\nconst X_APP_VER = \"x-app-ver\";\r\nconst POST_LOGOUT_URI = \"post_logout_redirect_uri\";\r\nconst ID_TOKEN_HINT = \"id_token_hint\";\r\nconst DEVICE_CODE = \"device_code\";\r\nconst CLIENT_SECRET = \"client_secret\";\r\nconst CLIENT_ASSERTION = \"client_assertion\";\r\nconst CLIENT_ASSERTION_TYPE = \"client_assertion_type\";\r\nconst TOKEN_TYPE = \"token_type\";\r\nconst REQ_CNF = \"req_cnf\";\r\nconst OBO_ASSERTION = \"assertion\";\r\nconst REQUESTED_TOKEN_USE = \"requested_token_use\";\r\nconst ON_BEHALF_OF = \"on_behalf_of\";\r\nconst FOCI = \"foci\";\r\nconst CCS_HEADER = \"X-AnchorMailbox\";\r\nconst RETURN_SPA_CODE = \"return_spa_code\";\r\nconst NATIVE_BROKER = \"nativebroker\";\r\nconst LOGOUT_HINT = \"logout_hint\";\r\nconst SID = \"sid\";\r\nconst LOGIN_HINT = \"login_hint\";\r\nconst DOMAIN_HINT = \"domain_hint\";\r\nconst X_CLIENT_EXTRA_SKU = \"x-client-xtra-sku\";\r\nconst BROKER_CLIENT_ID = \"brk_client_id\";\r\nconst BROKER_REDIRECT_URI = \"brk_redirect_uri\";\r\nconst INSTANCE_AWARE = \"instance_aware\";\r\nconst EAR_JWK = \"ear_jwk\";\r\nconst EAR_JWE_CRYPTO = \"ear_jwe_crypto\";\r\nconst CLI_DATA = \"clidata\";\n\nexport { ACCESS_TOKEN, BROKER_CLIENT_ID, BROKER_REDIRECT_URI, CCS_HEADER, CLAIMS, CLIENT_ASSERTION, CLIENT_ASSERTION_TYPE, CLIENT_ID, CLIENT_INFO, CLIENT_REQUEST_ID, CLIENT_SECRET, CLI_DATA, CODE, CODE_CHALLENGE, CODE_CHALLENGE_METHOD, CODE_VERIFIER, DEVICE_CODE, DOMAIN_HINT, EAR_JWE_CRYPTO, EAR_JWK, ERROR, ERROR_DESCRIPTION, EXPIRES_IN, FOCI, GRANT_TYPE, ID_TOKEN, ID_TOKEN_HINT, INSTANCE_AWARE, LOGIN_HINT, LOGOUT_HINT, NATIVE_BROKER, NONCE, OBO_ASSERTION, ON_BEHALF_OF, POST_LOGOUT_URI, PROMPT, REDIRECT_URI, REFRESH_TOKEN, REFRESH_TOKEN_EXPIRES_IN, REQUESTED_TOKEN_USE, REQ_CNF, RESPONSE_MODE, RESPONSE_TYPE, RETURN_SPA_CODE, SCOPE, SESSION_STATE, SID, STATE, TOKEN_TYPE, X_APP_NAME, X_APP_VER, X_CLIENT_CPU, X_CLIENT_CURR_TELEM, X_CLIENT_EXTRA_SKU, X_CLIENT_LAST_TELEM, X_CLIENT_OS, X_CLIENT_SKU, X_CLIENT_VER, X_MS_LIB_CAPABILITY };\n//# sourceMappingURL=AADServerParamKeys.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\nimport { OIDC_DEFAULT_SCOPES, ResponseMode, HeaderNames, CLIENT_INFO, ClaimsRequestKeys, PasswordGrantConstants, AuthenticationScheme, ThrottlingConstants } from '../utils/Constants.mjs';\nimport { CLIENT_ID, BROKER_CLIENT_ID, REDIRECT_URI, RESPONSE_TYPE, RESPONSE_MODE, NATIVE_BROKER, SCOPE, POST_LOGOUT_URI, ID_TOKEN_HINT, DOMAIN_HINT, LOGIN_HINT, SID, CLAIMS, CLIENT_REQUEST_ID, X_CLIENT_SKU, X_CLIENT_VER, X_CLIENT_OS, X_CLIENT_CPU, X_APP_NAME, X_APP_VER, PROMPT, STATE, NONCE, CODE_CHALLENGE, CODE_CHALLENGE_METHOD, CODE, DEVICE_CODE, REFRESH_TOKEN, CODE_VERIFIER, CLIENT_SECRET, CLIENT_ASSERTION, CLIENT_ASSERTION_TYPE, OBO_ASSERTION, REQUESTED_TOKEN_USE, GRANT_TYPE, CLI_DATA, INSTANCE_AWARE, TOKEN_TYPE, REQ_CNF, X_CLIENT_CURR_TELEM, X_CLIENT_LAST_TELEM, X_MS_LIB_CAPABILITY, LOGOUT_HINT, BROKER_REDIRECT_URI, EAR_JWK, EAR_JWE_CRYPTO } from '../constants/AADServerParamKeys.mjs';\nimport { ScopeSet } from './ScopeSet.mjs';\nimport { createClientConfigurationError } from '../error/ClientConfigurationError.mjs';\nimport { invalidClaims, pkceParamsMissing } from '../error/ClientConfigurationErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nfunction instrumentBrokerParams(parameters, correlationId, performanceClient) {\r\n    if (!correlationId) {\r\n        return;\r\n    }\r\n    const clientId = parameters.get(CLIENT_ID);\r\n    if (clientId && parameters.has(BROKER_CLIENT_ID)) {\r\n        performanceClient?.addFields({\r\n            embeddedClientId: clientId,\r\n            embeddedRedirectUri: parameters.get(REDIRECT_URI),\r\n        }, correlationId);\r\n    }\r\n}\r\n/**\r\n * Add the given response_type\r\n * @param parameters\r\n * @param responseType\r\n */\r\nfunction addResponseType(parameters, responseType) {\r\n    parameters.set(RESPONSE_TYPE, responseType);\r\n}\r\n/**\r\n * add response_mode. defaults to query.\r\n * @param responseMode\r\n */\r\nfunction addResponseMode(parameters, responseMode) {\r\n    parameters.set(RESPONSE_MODE, responseMode ? responseMode : ResponseMode.QUERY);\r\n}\r\n/**\r\n * Add flag to indicate STS should attempt to use WAM if available\r\n */\r\nfunction addNativeBroker(parameters) {\r\n    parameters.set(NATIVE_BROKER, \"1\");\r\n}\r\n/**\r\n * add scopes. set addOidcScopes to false to prevent default scopes in non-user scenarios\r\n * @param scopeSet\r\n * @param addOidcScopes\r\n */\r\nfunction addScopes(parameters, scopes, addOidcScopes = true, defaultScopes = OIDC_DEFAULT_SCOPES) {\r\n    // Always add openid to the scopes when adding OIDC scopes\r\n    if (addOidcScopes &&\r\n        !defaultScopes.includes(\"openid\") &&\r\n        !scopes.includes(\"openid\")) {\r\n        defaultScopes.push(\"openid\");\r\n    }\r\n    const requestScopes = addOidcScopes\r\n        ? [...(scopes || []), ...defaultScopes]\r\n        : scopes || [];\r\n    const scopeSet = new ScopeSet(requestScopes);\r\n    parameters.set(SCOPE, scopeSet.printScopes());\r\n}\r\n/**\r\n * add clientId\r\n * @param clientId\r\n */\r\nfunction addClientId(parameters, clientId) {\r\n    parameters.set(CLIENT_ID, clientId);\r\n}\r\n/**\r\n * add redirect_uri\r\n * @param redirectUri\r\n */\r\nfunction addRedirectUri(parameters, redirectUri) {\r\n    parameters.set(REDIRECT_URI, redirectUri);\r\n}\r\n/**\r\n * add post logout redirectUri\r\n * @param redirectUri\r\n */\r\nfunction addPostLogoutRedirectUri(parameters, redirectUri) {\r\n    parameters.set(POST_LOGOUT_URI, redirectUri);\r\n}\r\n/**\r\n * add id_token_hint to logout request\r\n * @param idTokenHint\r\n */\r\nfunction addIdTokenHint(parameters, idTokenHint) {\r\n    parameters.set(ID_TOKEN_HINT, idTokenHint);\r\n}\r\n/**\r\n * add domain_hint\r\n * @param domainHint\r\n */\r\nfunction addDomainHint(parameters, domainHint) {\r\n    parameters.set(DOMAIN_HINT, domainHint);\r\n}\r\n/**\r\n * add login_hint\r\n * @param loginHint\r\n */\r\nfunction addLoginHint(parameters, loginHint) {\r\n    parameters.set(LOGIN_HINT, loginHint);\r\n}\r\n/**\r\n * Adds the CCS (Cache Credential Service) query parameter for login_hint\r\n * @param loginHint\r\n */\r\nfunction addCcsUpn(parameters, loginHint) {\r\n    parameters.set(HeaderNames.CCS_HEADER, `UPN:${loginHint}`);\r\n}\r\n/**\r\n * Adds the CCS (Cache Credential Service) query parameter for account object\r\n * @param loginHint\r\n */\r\nfunction addCcsOid(parameters, clientInfo) {\r\n    parameters.set(HeaderNames.CCS_HEADER, `Oid:${clientInfo.uid}@${clientInfo.utid}`);\r\n}\r\n/**\r\n * add sid\r\n * @param sid\r\n */\r\nfunction addSid(parameters, sid) {\r\n    parameters.set(SID, sid);\r\n}\r\n/**\r\n * add claims\r\n * @param claims\r\n */\r\nfunction addClaims(parameters, claims, clientCapabilities) {\r\n    const mergedClaims = addClientCapabilitiesToClaims(claims, clientCapabilities);\r\n    try {\r\n        JSON.parse(mergedClaims);\r\n    }\r\n    catch (e) {\r\n        throw createClientConfigurationError(invalidClaims);\r\n    }\r\n    parameters.set(CLAIMS, mergedClaims);\r\n}\r\n/**\r\n * add correlationId\r\n * @param correlationId\r\n */\r\nfunction addCorrelationId(parameters, correlationId) {\r\n    parameters.set(CLIENT_REQUEST_ID, correlationId);\r\n}\r\n/**\r\n * add library info query params\r\n * @param libraryInfo\r\n */\r\nfunction addLibraryInfo(parameters, libraryInfo) {\r\n    // Telemetry Info\r\n    parameters.set(X_CLIENT_SKU, libraryInfo.sku);\r\n    parameters.set(X_CLIENT_VER, libraryInfo.version);\r\n    if (libraryInfo.os) {\r\n        parameters.set(X_CLIENT_OS, libraryInfo.os);\r\n    }\r\n    if (libraryInfo.cpu) {\r\n        parameters.set(X_CLIENT_CPU, libraryInfo.cpu);\r\n    }\r\n}\r\n/**\r\n * Add client telemetry parameters\r\n * @param appTelemetry\r\n */\r\nfunction addApplicationTelemetry(parameters, appTelemetry) {\r\n    if (appTelemetry?.appName) {\r\n        parameters.set(X_APP_NAME, appTelemetry.appName);\r\n    }\r\n    if (appTelemetry?.appVersion) {\r\n        parameters.set(X_APP_VER, appTelemetry.appVersion);\r\n    }\r\n}\r\n/**\r\n * add prompt\r\n * @param prompt\r\n */\r\nfunction addPrompt(parameters, prompt) {\r\n    parameters.set(PROMPT, prompt);\r\n}\r\n/**\r\n * add state\r\n * @param state\r\n */\r\nfunction addState(parameters, state) {\r\n    if (state) {\r\n        parameters.set(STATE, state);\r\n    }\r\n}\r\n/**\r\n * add nonce\r\n * @param nonce\r\n */\r\nfunction addNonce(parameters, nonce) {\r\n    parameters.set(NONCE, nonce);\r\n}\r\n/**\r\n * add code_challenge and code_challenge_method\r\n * - throw if either of them are not passed\r\n * @param codeChallenge\r\n * @param codeChallengeMethod\r\n */\r\nfunction addCodeChallengeParams(parameters, codeChallenge, codeChallengeMethod) {\r\n    if (codeChallenge && codeChallengeMethod) {\r\n        parameters.set(CODE_CHALLENGE, codeChallenge);\r\n        parameters.set(CODE_CHALLENGE_METHOD, codeChallengeMethod);\r\n    }\r\n    else {\r\n        throw createClientConfigurationError(pkceParamsMissing);\r\n    }\r\n}\r\n/**\r\n * add the `authorization_code` passed by the user to exchange for a token\r\n * @param code\r\n */\r\nfunction addAuthorizationCode(parameters, code) {\r\n    parameters.set(CODE, code);\r\n}\r\n/**\r\n * add the `authorization_code` passed by the user to exchange for a token\r\n * @param code\r\n */\r\nfunction addDeviceCode(parameters, code) {\r\n    parameters.set(DEVICE_CODE, code);\r\n}\r\n/**\r\n * add the `refreshToken` passed by the user\r\n * @param refreshToken\r\n */\r\nfunction addRefreshToken(parameters, refreshToken) {\r\n    parameters.set(REFRESH_TOKEN, refreshToken);\r\n}\r\n/**\r\n * add the `code_verifier` passed by the user to exchange for a token\r\n * @param codeVerifier\r\n */\r\nfunction addCodeVerifier(parameters, codeVerifier) {\r\n    parameters.set(CODE_VERIFIER, codeVerifier);\r\n}\r\n/**\r\n * add client_secret\r\n * @param clientSecret\r\n */\r\nfunction addClientSecret(parameters, clientSecret) {\r\n    parameters.set(CLIENT_SECRET, clientSecret);\r\n}\r\n/**\r\n * add clientAssertion for confidential client flows\r\n * @param clientAssertion\r\n */\r\nfunction addClientAssertion(parameters, clientAssertion) {\r\n    if (clientAssertion) {\r\n        parameters.set(CLIENT_ASSERTION, clientAssertion);\r\n    }\r\n}\r\n/**\r\n * add clientAssertionType for confidential client flows\r\n * @param clientAssertionType\r\n */\r\nfunction addClientAssertionType(parameters, clientAssertionType) {\r\n    if (clientAssertionType) {\r\n        parameters.set(CLIENT_ASSERTION_TYPE, clientAssertionType);\r\n    }\r\n}\r\n/**\r\n * add OBO assertion for confidential client flows\r\n * @param clientAssertion\r\n */\r\nfunction addOboAssertion(parameters, oboAssertion) {\r\n    parameters.set(OBO_ASSERTION, oboAssertion);\r\n}\r\n/**\r\n * add grant type\r\n * @param grantType\r\n */\r\nfunction addRequestTokenUse(parameters, tokenUse) {\r\n    parameters.set(REQUESTED_TOKEN_USE, tokenUse);\r\n}\r\n/**\r\n * add grant type\r\n * @param grantType\r\n */\r\nfunction addGrantType(parameters, grantType) {\r\n    parameters.set(GRANT_TYPE, grantType);\r\n}\r\n/**\r\n * add client info\r\n *\r\n */\r\nfunction addClientInfo(parameters) {\r\n    parameters.set(CLIENT_INFO, \"1\");\r\n}\r\n/**\r\n * add clidata=1 to request to indicate client data support\r\n */\r\nfunction addCliData(parameters) {\r\n    parameters.set(CLI_DATA, \"1\");\r\n}\r\nfunction addInstanceAware(parameters) {\r\n    if (!parameters.has(INSTANCE_AWARE)) {\r\n        parameters.set(INSTANCE_AWARE, \"true\");\r\n    }\r\n}\r\n/**\r\n * add extraQueryParams\r\n * @param eQParams\r\n */\r\nfunction addExtraQueryParameters(parameters, eQParams) {\r\n    Object.entries(eQParams).forEach(([key, value]) => {\r\n        if (!parameters.has(key) && value) {\r\n            parameters.set(key, value);\r\n        }\r\n    });\r\n}\r\nfunction addClientCapabilitiesToClaims(claims, clientCapabilities) {\r\n    let mergedClaims;\r\n    // Parse provided claims into JSON object or initialize empty object\r\n    if (!claims) {\r\n        mergedClaims = {};\r\n    }\r\n    else {\r\n        try {\r\n            mergedClaims = JSON.parse(claims);\r\n        }\r\n        catch (e) {\r\n            throw createClientConfigurationError(invalidClaims);\r\n        }\r\n    }\r\n    if (clientCapabilities && clientCapabilities.length > 0) {\r\n        if (!mergedClaims.hasOwnProperty(ClaimsRequestKeys.ACCESS_TOKEN)) {\r\n            // Add access_token key to claims object\r\n            mergedClaims[ClaimsRequestKeys.ACCESS_TOKEN] = {};\r\n        }\r\n        // Add xms_cc claim with provided clientCapabilities to access_token key\r\n        mergedClaims[ClaimsRequestKeys.ACCESS_TOKEN][ClaimsRequestKeys.XMS_CC] =\r\n            {\r\n                values: clientCapabilities,\r\n            };\r\n    }\r\n    return JSON.stringify(mergedClaims);\r\n}\r\n/**\r\n * adds `username` for Password Grant flow\r\n * @param username\r\n */\r\nfunction addUsername(parameters, username) {\r\n    parameters.set(PasswordGrantConstants.username, username);\r\n}\r\n/**\r\n * adds `password` for Password Grant flow\r\n * @param password\r\n */\r\nfunction addPassword(parameters, password) {\r\n    parameters.set(PasswordGrantConstants.password, password);\r\n}\r\n/**\r\n * add pop_jwk to query params\r\n * @param cnfString\r\n */\r\nfunction addPopToken(parameters, cnfString) {\r\n    if (cnfString) {\r\n        parameters.set(TOKEN_TYPE, AuthenticationScheme.POP);\r\n        parameters.set(REQ_CNF, cnfString);\r\n    }\r\n}\r\n/**\r\n * add SSH JWK and key ID to query params\r\n */\r\nfunction addSshJwk(parameters, sshJwkString) {\r\n    if (sshJwkString) {\r\n        parameters.set(TOKEN_TYPE, AuthenticationScheme.SSH);\r\n        parameters.set(REQ_CNF, sshJwkString);\r\n    }\r\n}\r\n/**\r\n * add server telemetry fields\r\n * @param serverTelemetryManager\r\n */\r\nfunction addServerTelemetry(parameters, serverTelemetryManager) {\r\n    parameters.set(X_CLIENT_CURR_TELEM, serverTelemetryManager.generateCurrentRequestHeaderValue());\r\n    parameters.set(X_CLIENT_LAST_TELEM, serverTelemetryManager.generateLastRequestHeaderValue());\r\n}\r\n/**\r\n * Adds parameter that indicates to the server that throttling is supported\r\n */\r\nfunction addThrottling(parameters) {\r\n    parameters.set(X_MS_LIB_CAPABILITY, ThrottlingConstants.X_MS_LIB_CAPABILITY_VALUE);\r\n}\r\n/**\r\n * Adds logout_hint parameter for \"silent\" logout which prevent server account picker\r\n */\r\nfunction addLogoutHint(parameters, logoutHint) {\r\n    parameters.set(LOGOUT_HINT, logoutHint);\r\n}\r\nfunction addBrokerParameters(parameters, brokerClientId, brokerRedirectUri) {\r\n    if (!parameters.has(BROKER_CLIENT_ID)) {\r\n        parameters.set(BROKER_CLIENT_ID, brokerClientId);\r\n    }\r\n    if (!parameters.has(BROKER_REDIRECT_URI)) {\r\n        parameters.set(BROKER_REDIRECT_URI, brokerRedirectUri);\r\n    }\r\n}\r\n/**\r\n * Add EAR (Encrypted Authorize Response) request parameters\r\n * @param parameters\r\n * @param jwk\r\n */\r\nfunction addEARParameters(parameters, jwk) {\r\n    parameters.set(EAR_JWK, encodeURIComponent(jwk));\r\n    // ear_jwe_crypto will always have value: {\"alg\":\"dir\",\"enc\":\"A256GCM\"} so we can hardcode this\r\n    const jweCryptoB64Encoded = \"eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0\";\r\n    parameters.set(EAR_JWE_CRYPTO, jweCryptoB64Encoded);\r\n}\r\n/**\r\n * Adds authorize body parameters to the request parameters\r\n * @param parameters\r\n * @param bodyParameters\r\n */\r\nfunction addPostBodyParameters(parameters, bodyParameters) {\r\n    Object.entries(bodyParameters).forEach(([key, value]) => {\r\n        if (value) {\r\n            parameters.set(key, value);\r\n        }\r\n    });\r\n}\n\nexport { addApplicationTelemetry, addAuthorizationCode, addBrokerParameters, addCcsOid, addCcsUpn, addClaims, addCliData, addClientAssertion, addClientAssertionType, addClientCapabilitiesToClaims, addClientId, addClientInfo, addClientSecret, addCodeChallengeParams, addCodeVerifier, addCorrelationId, addDeviceCode, addDomainHint, addEARParameters, addExtraQueryParameters, addGrantType, addIdTokenHint, addInstanceAware, addLibraryInfo, addLoginHint, addLogoutHint, addNativeBroker, addNonce, addOboAssertion, addPassword, addPopToken, addPostBodyParameters, addPostLogoutRedirectUri, addPrompt, addRedirectUri, addRefreshToken, addRequestTokenUse, addResponseMode, addResponseType, addScopes, addServerTelemetry, addSid, addSshJwk, addState, addThrottling, addUsername, instrumentBrokerParams };\n//# sourceMappingURL=RequestParameterBuilder.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nfunction isOpenIdConfigResponse(response) {\r\n    return (response.hasOwnProperty(\"authorization_endpoint\") &&\r\n        response.hasOwnProperty(\"token_endpoint\") &&\r\n        response.hasOwnProperty(\"issuer\") &&\r\n        response.hasOwnProperty(\"jwks_uri\"));\r\n}\n\nexport { isOpenIdConfigResponse };\n//# sourceMappingURL=OpenIdConfigResponse.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nfunction isCloudInstanceDiscoveryResponse(response) {\r\n    return (response.hasOwnProperty(\"tenant_discovery_endpoint\") &&\r\n        response.hasOwnProperty(\"metadata\"));\r\n}\n\nexport { isCloudInstanceDiscoveryResponse };\n//# sourceMappingURL=CloudInstanceDiscoveryResponse.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nfunction isCloudInstanceDiscoveryErrorResponse(response) {\r\n    return (response.hasOwnProperty(\"error\") &&\r\n        response.hasOwnProperty(\"error_description\"));\r\n}\n\nexport { isCloudInstanceDiscoveryErrorResponse };\n//# sourceMappingURL=CloudInstanceDiscoveryErrorResponse.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Wraps a function with a performance measurement.\r\n * Usage: invoke(functionToCall, performanceClient, \"EventName\", \"correlationId\")(...argsToPassToFunction)\r\n * @param callback\r\n * @param eventName\r\n * @param logger\r\n * @param telemetryClient\r\n * @param correlationId\r\n * @returns\r\n * @internal\r\n */\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nconst invoke = (callback, eventName, logger, telemetryClient, correlationId) => {\r\n    return (...args) => {\r\n        logger.trace(`Executing function ${eventName}`);\r\n        const inProgressEvent = telemetryClient?.startMeasurement(eventName, correlationId);\r\n        if (correlationId) {\r\n            // Track number of times this API is called in a single request\r\n            const eventCount = eventName + \"CallCount\";\r\n            telemetryClient?.incrementFields({ [eventCount]: 1 }, correlationId);\r\n        }\r\n        try {\r\n            const result = callback(...args);\r\n            inProgressEvent?.end({\r\n                success: true,\r\n            });\r\n            logger.trace(`Returning result from ${eventName}`);\r\n            return result;\r\n        }\r\n        catch (e) {\r\n            logger.trace(`Error occurred in ${eventName}`);\r\n            try {\r\n                logger.trace(JSON.stringify(e));\r\n            }\r\n            catch (e) {\r\n                logger.trace(\"Unable to print error message.\");\r\n            }\r\n            inProgressEvent?.end({\r\n                success: false,\r\n            }, e);\r\n            throw e;\r\n        }\r\n    };\r\n};\r\n/**\r\n * Wraps an async function with a performance measurement.\r\n * Usage: invokeAsync(functionToCall, performanceClient, \"EventName\", \"correlationId\")(...argsToPassToFunction)\r\n * @param callback\r\n * @param eventName\r\n * @param logger\r\n * @param telemetryClient\r\n * @param correlationId\r\n * @returns\r\n * @internal\r\n *\r\n */\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nconst invokeAsync = (callback, eventName, logger, telemetryClient, correlationId) => {\r\n    return (...args) => {\r\n        logger.trace(`Executing function ${eventName}`);\r\n        const inProgressEvent = telemetryClient?.startMeasurement(eventName, correlationId);\r\n        if (correlationId) {\r\n            // Track number of times this API is called in a single request\r\n            const eventCount = eventName + \"CallCount\";\r\n            telemetryClient?.incrementFields({ [eventCount]: 1 }, correlationId);\r\n        }\r\n        telemetryClient?.setPreQueueTime(eventName, correlationId);\r\n        return callback(...args)\r\n            .then((response) => {\r\n            logger.trace(`Returning result from ${eventName}`);\r\n            inProgressEvent?.end({\r\n                success: true,\r\n            });\r\n            return response;\r\n        })\r\n            .catch((e) => {\r\n            logger.trace(`Error occurred in ${eventName}`);\r\n            try {\r\n                logger.trace(JSON.stringify(e));\r\n            }\r\n            catch (e) {\r\n                logger.trace(\"Unable to print error message.\");\r\n            }\r\n            inProgressEvent?.end({\r\n                success: false,\r\n            }, e);\r\n            throw e;\r\n        });\r\n    };\r\n};\n\nexport { invoke, invokeAsync };\n//# sourceMappingURL=FunctionWrappers.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\nimport { Constants, HttpStatus, RegionDiscoverySources } from '../utils/Constants.mjs';\nimport { PerformanceEvents } from '../telemetry/performance/PerformanceEvent.mjs';\nimport { invokeAsync } from '../utils/FunctionWrappers.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass RegionDiscovery {\r\n    constructor(networkInterface, logger, performanceClient, correlationId) {\r\n        this.networkInterface = networkInterface;\r\n        this.logger = logger;\r\n        this.performanceClient = performanceClient;\r\n        this.correlationId = correlationId;\r\n    }\r\n    /**\r\n     * Detect the region from the application's environment.\r\n     *\r\n     * @returns Promise<string | null>\r\n     */\r\n    async detectRegion(environmentRegion, regionDiscoveryMetadata) {\r\n        this.performanceClient?.addQueueMeasurement(PerformanceEvents.RegionDiscoveryDetectRegion, this.correlationId);\r\n        // Initialize auto detected region with the region from the envrionment\r\n        let autodetectedRegionName = environmentRegion;\r\n        // Check if a region was detected from the environment, if not, attempt to get the region from IMDS\r\n        if (!autodetectedRegionName) {\r\n            const options = RegionDiscovery.IMDS_OPTIONS;\r\n            try {\r\n                const localIMDSVersionResponse = await invokeAsync(this.getRegionFromIMDS.bind(this), PerformanceEvents.RegionDiscoveryGetRegionFromIMDS, this.logger, this.performanceClient, this.correlationId)(Constants.IMDS_VERSION, options);\r\n                if (localIMDSVersionResponse.status === HttpStatus.SUCCESS) {\r\n                    autodetectedRegionName = localIMDSVersionResponse.body;\r\n                    regionDiscoveryMetadata.region_source =\r\n                        RegionDiscoverySources.IMDS;\r\n                }\r\n                // If the response using the local IMDS version failed, try to fetch the current version of IMDS and retry.\r\n                if (localIMDSVersionResponse.status === HttpStatus.BAD_REQUEST) {\r\n                    const currentIMDSVersion = await invokeAsync(this.getCurrentVersion.bind(this), PerformanceEvents.RegionDiscoveryGetCurrentVersion, this.logger, this.performanceClient, this.correlationId)(options);\r\n                    if (!currentIMDSVersion) {\r\n                        regionDiscoveryMetadata.region_source =\r\n                            RegionDiscoverySources.FAILED_AUTO_DETECTION;\r\n                        return null;\r\n                    }\r\n                    const currentIMDSVersionResponse = await invokeAsync(this.getRegionFromIMDS.bind(this), PerformanceEvents.RegionDiscoveryGetRegionFromIMDS, this.logger, this.performanceClient, this.correlationId)(currentIMDSVersion, options);\r\n                    if (currentIMDSVersionResponse.status === HttpStatus.SUCCESS) {\r\n                        autodetectedRegionName =\r\n                            currentIMDSVersionResponse.body;\r\n                        regionDiscoveryMetadata.region_source =\r\n                            RegionDiscoverySources.IMDS;\r\n                    }\r\n                }\r\n            }\r\n            catch (e) {\r\n                regionDiscoveryMetadata.region_source =\r\n                    RegionDiscoverySources.FAILED_AUTO_DETECTION;\r\n                return null;\r\n            }\r\n        }\r\n        else {\r\n            regionDiscoveryMetadata.region_source =\r\n                RegionDiscoverySources.ENVIRONMENT_VARIABLE;\r\n        }\r\n        // If no region was auto detected from the environment or from the IMDS endpoint, mark the attempt as a FAILED_AUTO_DETECTION\r\n        if (!autodetectedRegionName) {\r\n            regionDiscoveryMetadata.region_source =\r\n                RegionDiscoverySources.FAILED_AUTO_DETECTION;\r\n        }\r\n        return autodetectedRegionName || null;\r\n    }\r\n    /**\r\n     * Make the call to the IMDS endpoint\r\n     *\r\n     * @param imdsEndpointUrl\r\n     * @returns Promise<NetworkResponse<string>>\r\n     */\r\n    async getRegionFromIMDS(version, options) {\r\n        this.performanceClient?.addQueueMeasurement(PerformanceEvents.RegionDiscoveryGetRegionFromIMDS, this.correlationId);\r\n        return this.networkInterface.sendGetRequestAsync(`${Constants.IMDS_ENDPOINT}?api-version=${version}&format=text`, options, Constants.IMDS_TIMEOUT);\r\n    }\r\n    /**\r\n     * Get the most recent version of the IMDS endpoint available\r\n     *\r\n     * @returns Promise<string | null>\r\n     */\r\n    async getCurrentVersion(options) {\r\n        this.performanceClient?.addQueueMeasurement(PerformanceEvents.RegionDiscoveryGetCurrentVersion, this.correlationId);\r\n        try {\r\n            const response = await this.networkInterface.sendGetRequestAsync(`${Constants.IMDS_ENDPOINT}?format=json`, options);\r\n            // When IMDS endpoint is called without the api version query param, bad request response comes back with latest version.\r\n            if (response.status === HttpStatus.BAD_REQUEST &&\r\n                response.body &&\r\n                response.body[\"newest-versions\"] &&\r\n                response.body[\"newest-versions\"].length > 0) {\r\n                return response.body[\"newest-versions\"][0];\r\n            }\r\n            return null;\r\n        }\r\n        catch (e) {\r\n            return null;\r\n        }\r\n    }\r\n}\r\n// Options for the IMDS endpoint request\r\nRegionDiscovery.IMDS_OPTIONS = {\r\n    headers: {\r\n        Metadata: \"true\",\r\n    },\r\n};\n\nexport { RegionDiscovery };\n//# sourceMappingURL=RegionDiscovery.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Utility functions for managing date and time operations.\r\n */\r\n/**\r\n * return the current time in Unix time (seconds).\r\n */\r\nfunction nowSeconds() {\r\n    // Date.getTime() returns in milliseconds.\r\n    return Math.round(new Date().getTime() / 1000.0);\r\n}\r\n/**\r\n * Converts JS Date object to seconds\r\n * @param date Date\r\n */\r\nfunction toSecondsFromDate(date) {\r\n    // Convert date to seconds\r\n    return date.getTime() / 1000;\r\n}\r\n/**\r\n * Convert seconds to JS Date object. Seconds can be in a number or string format or undefined (will still return a date).\r\n * @param seconds\r\n */\r\nfunction toDateFromSeconds(seconds) {\r\n    if (seconds) {\r\n        return new Date(Number(seconds) * 1000);\r\n    }\r\n    return new Date();\r\n}\r\n/**\r\n * check if a token is expired based on given UTC time in seconds.\r\n * @param expiresOn\r\n */\r\nfunction isTokenExpired(expiresOn, offset) {\r\n    // check for access token expiry\r\n    const expirationSec = Number(expiresOn) || 0;\r\n    const offsetCurrentTimeSec = nowSeconds() + offset;\r\n    // If current time + offset is greater than token expiration time, then token is expired.\r\n    return offsetCurrentTimeSec > expirationSec;\r\n}\r\n/**\r\n * Checks if a cache entry is expired based on the last updated time and cache retention days.\r\n * @param lastUpdatedAt\r\n * @param cacheRetentionDays\r\n * @returns\r\n */\r\nfunction isCacheExpired(lastUpdatedAt, cacheRetentionDays) {\r\n    const cacheExpirationTimestamp = Number(lastUpdatedAt) + cacheRetentionDays * 24 * 60 * 60 * 1000;\r\n    return Date.now() > cacheExpirationTimestamp;\r\n}\r\n/**\r\n * If the current time is earlier than the time that a token was cached at, we must discard the token\r\n * i.e. The system clock was turned back after acquiring the cached token\r\n * @param cachedAt\r\n * @param offset\r\n */\r\nfunction wasClockTurnedBack(cachedAt) {\r\n    const cachedAtSec = Number(cachedAt);\r\n    return cachedAtSec > nowSeconds();\r\n}\r\n/**\r\n * Waits for t number of milliseconds\r\n * @param t number\r\n * @param value T\r\n */\r\nfunction delay(t, value) {\r\n    return new Promise((resolve) => setTimeout(() => resolve(value), t));\r\n}\n\nexport { delay, isCacheExpired, isTokenExpired, nowSeconds, toDateFromSeconds, toSecondsFromDate, wasClockTurnedBack };\n//# sourceMappingURL=TimeUtils.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\nimport { extractTokenClaims } from '../../account/AuthToken.mjs';\nimport { createClientAuthError } from '../../error/ClientAuthError.mjs';\nimport { CredentialType, AuthenticationScheme, SERVER_TELEM_CONSTANTS, ThrottlingConstants, APP_METADATA, Separators, AUTHORITY_METADATA_CONSTANTS } from '../../utils/Constants.mjs';\nimport { nowSeconds } from '../../utils/TimeUtils.mjs';\nimport { tokenClaimsCnfRequiredForSignedJwt } from '../../error/ClientAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Create IdTokenEntity\r\n * @param homeAccountId\r\n * @param authenticationResult\r\n * @param clientId\r\n * @param authority\r\n */\r\nfunction createIdTokenEntity(homeAccountId, environment, idToken, clientId, tenantId) {\r\n    const idTokenEntity = {\r\n        credentialType: CredentialType.ID_TOKEN,\r\n        homeAccountId: homeAccountId,\r\n        environment: environment,\r\n        clientId: clientId,\r\n        secret: idToken,\r\n        realm: tenantId,\r\n        lastUpdatedAt: Date.now().toString(), // Set the last updated time to now\r\n    };\r\n    return idTokenEntity;\r\n}\r\n/**\r\n * Create AccessTokenEntity\r\n * @param homeAccountId\r\n * @param environment\r\n * @param accessToken\r\n * @param clientId\r\n * @param tenantId\r\n * @param scopes\r\n * @param expiresOn\r\n * @param extExpiresOn\r\n */\r\nfunction createAccessTokenEntity(homeAccountId, environment, accessToken, clientId, tenantId, scopes, expiresOn, extExpiresOn, base64Decode, refreshOn, tokenType, userAssertionHash, keyId, requestedClaims, requestedClaimsHash) {\r\n    const atEntity = {\r\n        homeAccountId: homeAccountId,\r\n        credentialType: CredentialType.ACCESS_TOKEN,\r\n        secret: accessToken,\r\n        cachedAt: nowSeconds().toString(),\r\n        expiresOn: expiresOn.toString(),\r\n        extendedExpiresOn: extExpiresOn.toString(),\r\n        environment: environment,\r\n        clientId: clientId,\r\n        realm: tenantId,\r\n        target: scopes,\r\n        tokenType: tokenType || AuthenticationScheme.BEARER,\r\n        lastUpdatedAt: Date.now().toString(), // Set the last updated time to now\r\n    };\r\n    if (userAssertionHash) {\r\n        atEntity.userAssertionHash = userAssertionHash;\r\n    }\r\n    if (refreshOn) {\r\n        atEntity.refreshOn = refreshOn.toString();\r\n    }\r\n    if (requestedClaims) {\r\n        atEntity.requestedClaims = requestedClaims;\r\n        atEntity.requestedClaimsHash = requestedClaimsHash;\r\n    }\r\n    /*\r\n     * Create Access Token With Auth Scheme instead of regular access token\r\n     * Cast to lower to handle \"bearer\" from ADFS\r\n     */\r\n    if (atEntity.tokenType?.toLowerCase() !==\r\n        AuthenticationScheme.BEARER.toLowerCase()) {\r\n        atEntity.credentialType = CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME;\r\n        switch (atEntity.tokenType) {\r\n            case AuthenticationScheme.POP:\r\n                // Make sure keyId is present and add it to credential\r\n                const tokenClaims = extractTokenClaims(accessToken, base64Decode);\r\n                if (!tokenClaims?.cnf?.kid) {\r\n                    throw createClientAuthError(tokenClaimsCnfRequiredForSignedJwt);\r\n                }\r\n                atEntity.keyId = tokenClaims.cnf.kid;\r\n                break;\r\n            case AuthenticationScheme.SSH:\r\n                atEntity.keyId = keyId;\r\n        }\r\n    }\r\n    return atEntity;\r\n}\r\n/**\r\n * Create RefreshTokenEntity\r\n * @param homeAccountId\r\n * @param authenticationResult\r\n * @param clientId\r\n * @param authority\r\n */\r\nfunction createRefreshTokenEntity(homeAccountId, environment, refreshToken, clientId, familyId, userAssertionHash, expiresOn) {\r\n    const rtEntity = {\r\n        credentialType: CredentialType.REFRESH_TOKEN,\r\n        homeAccountId: homeAccountId,\r\n        environment: environment,\r\n        clientId: clientId,\r\n        secret: refreshToken,\r\n        lastUpdatedAt: Date.now().toString(),\r\n    };\r\n    if (userAssertionHash) {\r\n        rtEntity.userAssertionHash = userAssertionHash;\r\n    }\r\n    if (familyId) {\r\n        rtEntity.familyId = familyId;\r\n    }\r\n    if (expiresOn) {\r\n        rtEntity.expiresOn = expiresOn.toString();\r\n    }\r\n    return rtEntity;\r\n}\r\nfunction isCredentialEntity(entity) {\r\n    return (entity.hasOwnProperty(\"homeAccountId\") &&\r\n        entity.hasOwnProperty(\"environment\") &&\r\n        entity.hasOwnProperty(\"credentialType\") &&\r\n        entity.hasOwnProperty(\"clientId\") &&\r\n        entity.hasOwnProperty(\"secret\"));\r\n}\r\n/**\r\n * Validates an entity: checks for all expected params\r\n * @param entity\r\n */\r\nfunction isAccessTokenEntity(entity) {\r\n    if (!entity) {\r\n        return false;\r\n    }\r\n    return (isCredentialEntity(entity) &&\r\n        entity.hasOwnProperty(\"realm\") &&\r\n        entity.hasOwnProperty(\"target\") &&\r\n        (entity[\"credentialType\"] === CredentialType.ACCESS_TOKEN ||\r\n            entity[\"credentialType\"] ===\r\n                CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME));\r\n}\r\n/**\r\n * Validates an entity: checks for all expected params\r\n * @param entity\r\n */\r\nfunction isIdTokenEntity(entity) {\r\n    if (!entity) {\r\n        return false;\r\n    }\r\n    return (isCredentialEntity(entity) &&\r\n        entity.hasOwnProperty(\"realm\") &&\r\n        entity[\"credentialType\"] === CredentialType.ID_TOKEN);\r\n}\r\n/**\r\n * Validates an entity: checks for all expected params\r\n * @param entity\r\n */\r\nfunction isRefreshTokenEntity(entity) {\r\n    if (!entity) {\r\n        return false;\r\n    }\r\n    return (isCredentialEntity(entity) &&\r\n        entity[\"credentialType\"] === CredentialType.REFRESH_TOKEN);\r\n}\r\n/**\r\n * validates if a given cache entry is \"Telemetry\", parses <key,value>\r\n * @param key\r\n * @param entity\r\n */\r\nfunction isServerTelemetryEntity(key, entity) {\r\n    const validateKey = key.indexOf(SERVER_TELEM_CONSTANTS.CACHE_KEY) === 0;\r\n    let validateEntity = true;\r\n    if (entity) {\r\n        validateEntity =\r\n            entity.hasOwnProperty(\"failedRequests\") &&\r\n                entity.hasOwnProperty(\"errors\") &&\r\n                entity.hasOwnProperty(\"cacheHits\");\r\n    }\r\n    return validateKey && validateEntity;\r\n}\r\n/**\r\n * validates if a given cache entry is \"Throttling\", parses <key,value>\r\n * @param key\r\n * @param entity\r\n */\r\nfunction isThrottlingEntity(key, entity) {\r\n    let validateKey = false;\r\n    if (key) {\r\n        validateKey = key.indexOf(ThrottlingConstants.THROTTLING_PREFIX) === 0;\r\n    }\r\n    let validateEntity = true;\r\n    if (entity) {\r\n        validateEntity = entity.hasOwnProperty(\"throttleTime\");\r\n    }\r\n    return validateKey && validateEntity;\r\n}\r\n/**\r\n * Generate AppMetadata Cache Key as per the schema: appmetadata-<environment>-<client_id>\r\n */\r\nfunction generateAppMetadataKey({ environment, clientId, }) {\r\n    const appMetaDataKeyArray = [\r\n        APP_METADATA,\r\n        environment,\r\n        clientId,\r\n    ];\r\n    return appMetaDataKeyArray\r\n        .join(Separators.CACHE_KEY_SEPARATOR)\r\n        .toLowerCase();\r\n}\r\n/*\r\n * Validates an entity: checks for all expected params\r\n * @param entity\r\n */\r\nfunction isAppMetadataEntity(key, entity) {\r\n    if (!entity) {\r\n        return false;\r\n    }\r\n    return (key.indexOf(APP_METADATA) === 0 &&\r\n        entity.hasOwnProperty(\"clientId\") &&\r\n        entity.hasOwnProperty(\"environment\"));\r\n}\r\n/**\r\n * Validates an entity: checks for all expected params\r\n * @param entity\r\n */\r\nfunction isAuthorityMetadataEntity(key, entity) {\r\n    if (!entity) {\r\n        return false;\r\n    }\r\n    return (key.indexOf(AUTHORITY_METADATA_CONSTANTS.CACHE_KEY) === 0 &&\r\n        entity.hasOwnProperty(\"aliases\") &&\r\n        entity.hasOwnProperty(\"preferred_cache\") &&\r\n        entity.hasOwnProperty(\"preferred_network\") &&\r\n        entity.hasOwnProperty(\"canonical_authority\") &&\r\n        entity.hasOwnProperty(\"authorization_endpoint\") &&\r\n        entity.hasOwnProperty(\"token_endpoint\") &&\r\n        entity.hasOwnProperty(\"issuer\") &&\r\n        entity.hasOwnProperty(\"aliasesFromNetwork\") &&\r\n        entity.hasOwnProperty(\"endpointsFromNetwork\") &&\r\n        entity.hasOwnProperty(\"expiresAt\") &&\r\n        entity.hasOwnProperty(\"jwks_uri\"));\r\n}\r\n/**\r\n * Reset the exiresAt value\r\n */\r\nfunction generateAuthorityMetadataExpiresAt() {\r\n    return (nowSeconds() +\r\n        AUTHORITY_METADATA_CONSTANTS.REFRESH_TIME_SECONDS);\r\n}\r\nfunction updateAuthorityEndpointMetadata(authorityMetadata, updatedValues, fromNetwork) {\r\n    authorityMetadata.authorization_endpoint =\r\n        updatedValues.authorization_endpoint;\r\n    authorityMetadata.token_endpoint = updatedValues.token_endpoint;\r\n    authorityMetadata.end_session_endpoint = updatedValues.end_session_endpoint;\r\n    authorityMetadata.issuer = updatedValues.issuer;\r\n    authorityMetadata.endpointsFromNetwork = fromNetwork;\r\n    authorityMetadata.jwks_uri = updatedValues.jwks_uri;\r\n}\r\nfunction updateCloudDiscoveryMetadata(authorityMetadata, updatedValues, fromNetwork) {\r\n    authorityMetadata.aliases = updatedValues.aliases;\r\n    authorityMetadata.preferred_cache = updatedValues.preferred_cache;\r\n    authorityMetadata.preferred_network = updatedValues.preferred_network;\r\n    authorityMetadata.aliasesFromNetwork = fromNetwork;\r\n}\r\n/**\r\n * Returns whether or not the data needs to be refreshed\r\n */\r\nfunction isAuthorityMetadataExpired(metadata) {\r\n    return metadata.expiresAt <= nowSeconds();\r\n}\n\nexport { createAccessTokenEntity, createIdTokenEntity, createRefreshTokenEntity, generateAppMetadataKey, generateAuthorityMetadataExpiresAt, isAccessTokenEntity, isAppMetadataEntity, isAuthorityMetadataEntity, isAuthorityMetadataExpired, isCredentialEntity, isIdTokenEntity, isRefreshTokenEntity, isServerTelemetryEntity, isThrottlingEntity, updateAuthorityEndpointMetadata, updateCloudDiscoveryMetadata };\n//# sourceMappingURL=CacheHelpers.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\nimport { AuthorityType } from './AuthorityType.mjs';\nimport { isOpenIdConfigResponse } from './OpenIdConfigResponse.mjs';\nimport { UrlString } from '../url/UrlString.mjs';\nimport { createClientAuthError } from '../error/ClientAuthError.mjs';\nimport { Constants, AuthorityMetadataSource, RegionDiscoveryOutcomes, AADAuthorityConstants } from '../utils/Constants.mjs';\nimport { EndpointMetadata, getCloudDiscoveryMetadataFromHardcodedValues, getCloudDiscoveryMetadataFromNetworkResponse, InstanceDiscoveryMetadataAliases } from './AuthorityMetadata.mjs';\nimport { createClientConfigurationError } from '../error/ClientConfigurationError.mjs';\nimport { ProtocolMode } from './ProtocolMode.mjs';\nimport { AzureCloudInstance } from './AuthorityOptions.mjs';\nimport { isCloudInstanceDiscoveryResponse } from './CloudInstanceDiscoveryResponse.mjs';\nimport { isCloudInstanceDiscoveryErrorResponse } from './CloudInstanceDiscoveryErrorResponse.mjs';\nimport { RegionDiscovery } from './RegionDiscovery.mjs';\nimport { AuthError } from '../error/AuthError.mjs';\nimport { PerformanceEvents } from '../telemetry/performance/PerformanceEvent.mjs';\nimport { invokeAsync } from '../utils/FunctionWrappers.mjs';\nimport { generateAuthorityMetadataExpiresAt, updateAuthorityEndpointMetadata, isAuthorityMetadataExpired, updateCloudDiscoveryMetadata } from '../cache/utils/CacheHelpers.mjs';\nimport { endpointResolutionError, endSessionEndpointNotSupported, openIdConfigError } from '../error/ClientAuthErrorCodes.mjs';\nimport { invalidAuthorityMetadata, untrustedAuthority, invalidCloudDiscoveryMetadata } from '../error/ClientConfigurationErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * The authority class validates the authority URIs used by the user, and retrieves the OpenID Configuration Data from the\r\n * endpoint. It will store the pertinent config data in this object for use during token calls.\r\n * @internal\r\n */\r\nclass Authority {\r\n    constructor(authority, networkInterface, cacheManager, authorityOptions, logger, correlationId, performanceClient, managedIdentity) {\r\n        this.canonicalAuthority = authority;\r\n        this._canonicalAuthority.validateAsUri();\r\n        this.networkInterface = networkInterface;\r\n        this.cacheManager = cacheManager;\r\n        this.authorityOptions = authorityOptions;\r\n        this.regionDiscoveryMetadata = {\r\n            region_used: undefined,\r\n            region_source: undefined,\r\n            region_outcome: undefined,\r\n        };\r\n        this.logger = logger;\r\n        this.performanceClient = performanceClient;\r\n        this.correlationId = correlationId;\r\n        this.managedIdentity = managedIdentity || false;\r\n        this.regionDiscovery = new RegionDiscovery(networkInterface, this.logger, this.performanceClient, this.correlationId);\r\n    }\r\n    /**\r\n     * Get {@link AuthorityType}\r\n     * @param authorityUri {@link IUri}\r\n     * @private\r\n     */\r\n    getAuthorityType(authorityUri) {\r\n        // CIAM auth url pattern is being standardized as: <tenant>.ciamlogin.com\r\n        if (authorityUri.HostNameAndPort.endsWith(Constants.CIAM_AUTH_URL)) {\r\n            return AuthorityType.Ciam;\r\n        }\r\n        const pathSegments = authorityUri.PathSegments;\r\n        if (pathSegments.length) {\r\n            switch (pathSegments[0].toLowerCase()) {\r\n                case Constants.ADFS:\r\n                    return AuthorityType.Adfs;\r\n                case Constants.DSTS:\r\n                    return AuthorityType.Dsts;\r\n            }\r\n        }\r\n        return AuthorityType.Default;\r\n    }\r\n    // See above for AuthorityType\r\n    get authorityType() {\r\n        return this.getAuthorityType(this.canonicalAuthorityUrlComponents);\r\n    }\r\n    /**\r\n     * ProtocolMode enum representing the way endpoints are constructed.\r\n     */\r\n    get protocolMode() {\r\n        return this.authorityOptions.protocolMode;\r\n    }\r\n    /**\r\n     * Returns authorityOptions which can be used to reinstantiate a new authority instance\r\n     */\r\n    get options() {\r\n        return this.authorityOptions;\r\n    }\r\n    /**\r\n     * A URL that is the authority set by the developer\r\n     */\r\n    get canonicalAuthority() {\r\n        return this._canonicalAuthority.urlString;\r\n    }\r\n    /**\r\n     * Sets canonical authority.\r\n     */\r\n    set canonicalAuthority(url) {\r\n        this._canonicalAuthority = new UrlString(url);\r\n        this._canonicalAuthority.validateAsUri();\r\n        this._canonicalAuthorityUrlComponents = null;\r\n    }\r\n    /**\r\n     * Get authority components.\r\n     */\r\n    get canonicalAuthorityUrlComponents() {\r\n        if (!this._canonicalAuthorityUrlComponents) {\r\n            this._canonicalAuthorityUrlComponents =\r\n                this._canonicalAuthority.getUrlComponents();\r\n        }\r\n        return this._canonicalAuthorityUrlComponents;\r\n    }\r\n    /**\r\n     * Get hostname and port i.e. login.microsoftonline.com\r\n     */\r\n    get hostnameAndPort() {\r\n        return this.canonicalAuthorityUrlComponents.HostNameAndPort.toLowerCase();\r\n    }\r\n    /**\r\n     * Get tenant for authority.\r\n     */\r\n    get tenant() {\r\n        return this.canonicalAuthorityUrlComponents.PathSegments[0];\r\n    }\r\n    /**\r\n     * OAuth /authorize endpoint for requests\r\n     */\r\n    get authorizationEndpoint() {\r\n        if (this.discoveryComplete()) {\r\n            return this.replacePath(this.metadata.authorization_endpoint);\r\n        }\r\n        else {\r\n            throw createClientAuthError(endpointResolutionError);\r\n        }\r\n    }\r\n    /**\r\n     * OAuth /token endpoint for requests\r\n     */\r\n    get tokenEndpoint() {\r\n        if (this.discoveryComplete()) {\r\n            return this.replacePath(this.metadata.token_endpoint);\r\n        }\r\n        else {\r\n            throw createClientAuthError(endpointResolutionError);\r\n        }\r\n    }\r\n    get deviceCodeEndpoint() {\r\n        if (this.discoveryComplete()) {\r\n            return this.replacePath(this.metadata.token_endpoint.replace(\"/token\", \"/devicecode\"));\r\n        }\r\n        else {\r\n            throw createClientAuthError(endpointResolutionError);\r\n        }\r\n    }\r\n    /**\r\n     * OAuth logout endpoint for requests\r\n     */\r\n    get endSessionEndpoint() {\r\n        if (this.discoveryComplete()) {\r\n            // ROPC policies may not have end_session_endpoint set\r\n            if (!this.metadata.end_session_endpoint) {\r\n                throw createClientAuthError(endSessionEndpointNotSupported);\r\n            }\r\n            return this.replacePath(this.metadata.end_session_endpoint);\r\n        }\r\n        else {\r\n            throw createClientAuthError(endpointResolutionError);\r\n        }\r\n    }\r\n    /**\r\n     * OAuth issuer for requests\r\n     */\r\n    get selfSignedJwtAudience() {\r\n        if (this.discoveryComplete()) {\r\n            return this.replacePath(this.metadata.issuer);\r\n        }\r\n        else {\r\n            throw createClientAuthError(endpointResolutionError);\r\n        }\r\n    }\r\n    /**\r\n     * Jwks_uri for token signing keys\r\n     */\r\n    get jwksUri() {\r\n        if (this.discoveryComplete()) {\r\n            return this.replacePath(this.metadata.jwks_uri);\r\n        }\r\n        else {\r\n            throw createClientAuthError(endpointResolutionError);\r\n        }\r\n    }\r\n    /**\r\n     * Returns a flag indicating that tenant name can be replaced in authority {@link IUri}\r\n     * @param authorityUri {@link IUri}\r\n     * @private\r\n     */\r\n    canReplaceTenant(authorityUri) {\r\n        return (authorityUri.PathSegments.length === 1 &&\r\n            !Authority.reservedTenantDomains.has(authorityUri.PathSegments[0]) &&\r\n            this.getAuthorityType(authorityUri) === AuthorityType.Default &&\r\n            this.protocolMode !== ProtocolMode.OIDC);\r\n    }\r\n    /**\r\n     * Replaces tenant in url path with current tenant. Defaults to common.\r\n     * @param urlString\r\n     */\r\n    replaceTenant(urlString) {\r\n        return urlString.replace(/{tenant}|{tenantid}/g, this.tenant);\r\n    }\r\n    /**\r\n     * Replaces path such as tenant or policy with the current tenant or policy.\r\n     * @param urlString\r\n     */\r\n    replacePath(urlString) {\r\n        let endpoint = urlString;\r\n        const cachedAuthorityUrl = new UrlString(this.metadata.canonical_authority);\r\n        const cachedAuthorityUrlComponents = cachedAuthorityUrl.getUrlComponents();\r\n        const cachedAuthorityParts = cachedAuthorityUrlComponents.PathSegments;\r\n        const currentAuthorityParts = this.canonicalAuthorityUrlComponents.PathSegments;\r\n        currentAuthorityParts.forEach((currentPart, index) => {\r\n            let cachedPart = cachedAuthorityParts[index];\r\n            if (index === 0 &&\r\n                this.canReplaceTenant(cachedAuthorityUrlComponents)) {\r\n                const tenantId = new UrlString(this.metadata.authorization_endpoint).getUrlComponents().PathSegments[0];\r\n                /**\r\n                 * Check if AAD canonical authority contains tenant domain name, for example \"testdomain.onmicrosoft.com\",\r\n                 * by comparing its first path segment to the corresponding authorization endpoint path segment, which is\r\n                 * always resolved with tenant id by OIDC.\r\n                 */\r\n                if (cachedPart !== tenantId) {\r\n                    this.logger.verbose(`Replacing tenant domain name ${cachedPart} with id ${tenantId}`);\r\n                    cachedPart = tenantId;\r\n                }\r\n            }\r\n            if (currentPart !== cachedPart) {\r\n                endpoint = endpoint.replace(`/${cachedPart}/`, `/${currentPart}/`);\r\n            }\r\n        });\r\n        return this.replaceTenant(endpoint);\r\n    }\r\n    /**\r\n     * The default open id configuration endpoint for any canonical authority.\r\n     */\r\n    get defaultOpenIdConfigurationEndpoint() {\r\n        const canonicalAuthorityHost = this.hostnameAndPort;\r\n        if (this.canonicalAuthority.endsWith(\"v2.0/\") ||\r\n            this.authorityType === AuthorityType.Adfs ||\r\n            (this.protocolMode === ProtocolMode.OIDC &&\r\n                !this.isAliasOfKnownMicrosoftAuthority(canonicalAuthorityHost))) {\r\n            return `${this.canonicalAuthority}.well-known/openid-configuration`;\r\n        }\r\n        return `${this.canonicalAuthority}v2.0/.well-known/openid-configuration`;\r\n    }\r\n    /**\r\n     * Boolean that returns whether or not tenant discovery has been completed.\r\n     */\r\n    discoveryComplete() {\r\n        return !!this.metadata;\r\n    }\r\n    /**\r\n     * Perform endpoint discovery to discover aliases, preferred_cache, preferred_network\r\n     * and the /authorize, /token and logout endpoints.\r\n     */\r\n    async resolveEndpointsAsync() {\r\n        this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthorityResolveEndpointsAsync, this.correlationId);\r\n        const metadataEntity = this.getCurrentMetadataEntity();\r\n        const cloudDiscoverySource = await invokeAsync(this.updateCloudDiscoveryMetadata.bind(this), PerformanceEvents.AuthorityUpdateCloudDiscoveryMetadata, this.logger, this.performanceClient, this.correlationId)(metadataEntity);\r\n        this.canonicalAuthority = this.canonicalAuthority.replace(this.hostnameAndPort, metadataEntity.preferred_network);\r\n        const endpointSource = await invokeAsync(this.updateEndpointMetadata.bind(this), PerformanceEvents.AuthorityUpdateEndpointMetadata, this.logger, this.performanceClient, this.correlationId)(metadataEntity);\r\n        this.updateCachedMetadata(metadataEntity, cloudDiscoverySource, {\r\n            source: endpointSource,\r\n        });\r\n        this.performanceClient?.addFields({\r\n            cloudDiscoverySource: cloudDiscoverySource,\r\n            authorityEndpointSource: endpointSource,\r\n        }, this.correlationId);\r\n    }\r\n    /**\r\n     * Returns metadata entity from cache if it exists, otherwiser returns a new metadata entity built\r\n     * from the configured canonical authority\r\n     * @returns\r\n     */\r\n    getCurrentMetadataEntity() {\r\n        let metadataEntity = this.cacheManager.getAuthorityMetadataByAlias(this.hostnameAndPort);\r\n        if (!metadataEntity) {\r\n            metadataEntity = {\r\n                aliases: [],\r\n                preferred_cache: this.hostnameAndPort,\r\n                preferred_network: this.hostnameAndPort,\r\n                canonical_authority: this.canonicalAuthority,\r\n                authorization_endpoint: \"\",\r\n                token_endpoint: \"\",\r\n                end_session_endpoint: \"\",\r\n                issuer: \"\",\r\n                aliasesFromNetwork: false,\r\n                endpointsFromNetwork: false,\r\n                expiresAt: generateAuthorityMetadataExpiresAt(),\r\n                jwks_uri: \"\",\r\n            };\r\n        }\r\n        return metadataEntity;\r\n    }\r\n    /**\r\n     * Updates cached metadata based on metadata source and sets the instance's metadata\r\n     * property to the same value\r\n     * @param metadataEntity\r\n     * @param cloudDiscoverySource\r\n     * @param endpointMetadataResult\r\n     */\r\n    updateCachedMetadata(metadataEntity, cloudDiscoverySource, endpointMetadataResult) {\r\n        if (cloudDiscoverySource !== AuthorityMetadataSource.CACHE &&\r\n            endpointMetadataResult?.source !== AuthorityMetadataSource.CACHE) {\r\n            // Reset the expiration time unless both values came from a successful cache lookup\r\n            metadataEntity.expiresAt =\r\n                generateAuthorityMetadataExpiresAt();\r\n            metadataEntity.canonical_authority = this.canonicalAuthority;\r\n        }\r\n        const cacheKey = this.cacheManager.generateAuthorityMetadataCacheKey(metadataEntity.preferred_cache);\r\n        this.cacheManager.setAuthorityMetadata(cacheKey, metadataEntity);\r\n        this.metadata = metadataEntity;\r\n    }\r\n    /**\r\n     * Update AuthorityMetadataEntity with new endpoints and return where the information came from\r\n     * @param metadataEntity\r\n     */\r\n    async updateEndpointMetadata(metadataEntity) {\r\n        this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthorityUpdateEndpointMetadata, this.correlationId);\r\n        const localMetadata = this.updateEndpointMetadataFromLocalSources(metadataEntity);\r\n        // Further update may be required for hardcoded metadata if regional metadata is preferred\r\n        if (localMetadata) {\r\n            if (localMetadata.source ===\r\n                AuthorityMetadataSource.HARDCODED_VALUES) {\r\n                // If the user prefers to use an azure region replace the global endpoints with regional information.\r\n                if (this.authorityOptions.azureRegionConfiguration?.azureRegion) {\r\n                    if (localMetadata.metadata) {\r\n                        const hardcodedMetadata = await invokeAsync(this.updateMetadataWithRegionalInformation.bind(this), PerformanceEvents.AuthorityUpdateMetadataWithRegionalInformation, this.logger, this.performanceClient, this.correlationId)(localMetadata.metadata);\r\n                        updateAuthorityEndpointMetadata(metadataEntity, hardcodedMetadata, false);\r\n                        metadataEntity.canonical_authority =\r\n                            this.canonicalAuthority;\r\n                    }\r\n                }\r\n            }\r\n            return localMetadata.source;\r\n        }\r\n        // Get metadata from network if local sources aren't available\r\n        let metadata = await invokeAsync(this.getEndpointMetadataFromNetwork.bind(this), PerformanceEvents.AuthorityGetEndpointMetadataFromNetwork, this.logger, this.performanceClient, this.correlationId)();\r\n        if (metadata) {\r\n            // If the user prefers to use an azure region replace the global endpoints with regional information.\r\n            if (this.authorityOptions.azureRegionConfiguration?.azureRegion) {\r\n                metadata = await invokeAsync(this.updateMetadataWithRegionalInformation.bind(this), PerformanceEvents.AuthorityUpdateMetadataWithRegionalInformation, this.logger, this.performanceClient, this.correlationId)(metadata);\r\n            }\r\n            updateAuthorityEndpointMetadata(metadataEntity, metadata, true);\r\n            return AuthorityMetadataSource.NETWORK;\r\n        }\r\n        else {\r\n            // Metadata could not be obtained from the config, cache, network or hardcoded values\r\n            throw createClientAuthError(openIdConfigError, this.defaultOpenIdConfigurationEndpoint);\r\n        }\r\n    }\r\n    /**\r\n     * Updates endpoint metadata from local sources and returns where the information was retrieved from and the metadata config\r\n     * response if the source is hardcoded metadata\r\n     * @param metadataEntity\r\n     * @returns\r\n     */\r\n    updateEndpointMetadataFromLocalSources(metadataEntity) {\r\n        this.logger.verbose(\"Attempting to get endpoint metadata from authority configuration\");\r\n        const configMetadata = this.getEndpointMetadataFromConfig();\r\n        if (configMetadata) {\r\n            this.logger.verbose(\"Found endpoint metadata in authority configuration\");\r\n            updateAuthorityEndpointMetadata(metadataEntity, configMetadata, false);\r\n            return {\r\n                source: AuthorityMetadataSource.CONFIG,\r\n            };\r\n        }\r\n        this.logger.verbose(\"Did not find endpoint metadata in the config... Attempting to get endpoint metadata from the hardcoded values.\");\r\n        // skipAuthorityMetadataCache is used to bypass hardcoded authority metadata and force a network metadata cache lookup and network metadata request if no cached response is available.\r\n        if (this.authorityOptions.skipAuthorityMetadataCache) {\r\n            this.logger.verbose(\"Skipping hardcoded metadata cache since skipAuthorityMetadataCache is set to true. Attempting to get endpoint metadata from the network metadata cache.\");\r\n        }\r\n        else {\r\n            const hardcodedMetadata = this.getEndpointMetadataFromHardcodedValues();\r\n            if (hardcodedMetadata) {\r\n                updateAuthorityEndpointMetadata(metadataEntity, hardcodedMetadata, false);\r\n                return {\r\n                    source: AuthorityMetadataSource.HARDCODED_VALUES,\r\n                    metadata: hardcodedMetadata,\r\n                };\r\n            }\r\n            else {\r\n                this.logger.verbose(\"Did not find endpoint metadata in hardcoded values... Attempting to get endpoint metadata from the network metadata cache.\");\r\n            }\r\n        }\r\n        // Check cached metadata entity expiration status\r\n        const metadataEntityExpired = isAuthorityMetadataExpired(metadataEntity);\r\n        if (this.isAuthoritySameType(metadataEntity) &&\r\n            metadataEntity.endpointsFromNetwork &&\r\n            !metadataEntityExpired) {\r\n            // No need to update\r\n            this.logger.verbose(\"Found endpoint metadata in the cache.\");\r\n            return { source: AuthorityMetadataSource.CACHE };\r\n        }\r\n        else if (metadataEntityExpired) {\r\n            this.logger.verbose(\"The metadata entity is expired.\");\r\n        }\r\n        return null;\r\n    }\r\n    /**\r\n     * Compares the number of url components after the domain to determine if the cached\r\n     * authority metadata can be used for the requested authority. Protects against same domain different\r\n     * authority such as login.microsoftonline.com/tenant and login.microsoftonline.com/tfp/tenant/policy\r\n     * @param metadataEntity\r\n     */\r\n    isAuthoritySameType(metadataEntity) {\r\n        const cachedAuthorityUrl = new UrlString(metadataEntity.canonical_authority);\r\n        const cachedParts = cachedAuthorityUrl.getUrlComponents().PathSegments;\r\n        return (cachedParts.length ===\r\n            this.canonicalAuthorityUrlComponents.PathSegments.length);\r\n    }\r\n    /**\r\n     * Parse authorityMetadata config option\r\n     */\r\n    getEndpointMetadataFromConfig() {\r\n        if (this.authorityOptions.authorityMetadata) {\r\n            try {\r\n                return JSON.parse(this.authorityOptions.authorityMetadata);\r\n            }\r\n            catch (e) {\r\n                throw createClientConfigurationError(invalidAuthorityMetadata);\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n    /**\r\n     * Gets OAuth endpoints from the given OpenID configuration endpoint.\r\n     *\r\n     * @param hasHardcodedMetadata boolean\r\n     */\r\n    async getEndpointMetadataFromNetwork() {\r\n        this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthorityGetEndpointMetadataFromNetwork, this.correlationId);\r\n        const options = {};\r\n        /*\r\n         * TODO: Add a timeout if the authority exists in our library's\r\n         * hardcoded list of metadata\r\n         */\r\n        const openIdConfigurationEndpoint = this.defaultOpenIdConfigurationEndpoint;\r\n        this.logger.verbose(`Authority.getEndpointMetadataFromNetwork: attempting to retrieve OAuth endpoints from ${openIdConfigurationEndpoint}`);\r\n        try {\r\n            const response = await this.networkInterface.sendGetRequestAsync(openIdConfigurationEndpoint, options);\r\n            const isValidResponse = isOpenIdConfigResponse(response.body);\r\n            if (isValidResponse) {\r\n                return response.body;\r\n            }\r\n            else {\r\n                this.logger.verbose(`Authority.getEndpointMetadataFromNetwork: could not parse response as OpenID configuration`);\r\n                return null;\r\n            }\r\n        }\r\n        catch (e) {\r\n            this.logger.verbose(`Authority.getEndpointMetadataFromNetwork: ${e}`);\r\n            return null;\r\n        }\r\n    }\r\n    /**\r\n     * Get OAuth endpoints for common authorities.\r\n     */\r\n    getEndpointMetadataFromHardcodedValues() {\r\n        if (this.hostnameAndPort in EndpointMetadata) {\r\n            return EndpointMetadata[this.hostnameAndPort];\r\n        }\r\n        return null;\r\n    }\r\n    /**\r\n     * Update the retrieved metadata with regional information.\r\n     * User selected Azure region will be used if configured.\r\n     */\r\n    async updateMetadataWithRegionalInformation(metadata) {\r\n        this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthorityUpdateMetadataWithRegionalInformation, this.correlationId);\r\n        const userConfiguredAzureRegion = this.authorityOptions.azureRegionConfiguration?.azureRegion;\r\n        if (userConfiguredAzureRegion) {\r\n            if (userConfiguredAzureRegion !==\r\n                Constants.AZURE_REGION_AUTO_DISCOVER_FLAG) {\r\n                this.regionDiscoveryMetadata.region_outcome =\r\n                    RegionDiscoveryOutcomes.CONFIGURED_NO_AUTO_DETECTION;\r\n                this.regionDiscoveryMetadata.region_used =\r\n                    userConfiguredAzureRegion;\r\n                return Authority.replaceWithRegionalInformation(metadata, userConfiguredAzureRegion);\r\n            }\r\n            const autodetectedRegionName = await invokeAsync(this.regionDiscovery.detectRegion.bind(this.regionDiscovery), PerformanceEvents.RegionDiscoveryDetectRegion, this.logger, this.performanceClient, this.correlationId)(this.authorityOptions.azureRegionConfiguration\r\n                ?.environmentRegion, this.regionDiscoveryMetadata);\r\n            if (autodetectedRegionName) {\r\n                this.regionDiscoveryMetadata.region_outcome =\r\n                    RegionDiscoveryOutcomes.AUTO_DETECTION_REQUESTED_SUCCESSFUL;\r\n                this.regionDiscoveryMetadata.region_used =\r\n                    autodetectedRegionName;\r\n                return Authority.replaceWithRegionalInformation(metadata, autodetectedRegionName);\r\n            }\r\n            this.regionDiscoveryMetadata.region_outcome =\r\n                RegionDiscoveryOutcomes.AUTO_DETECTION_REQUESTED_FAILED;\r\n        }\r\n        return metadata;\r\n    }\r\n    /**\r\n     * Updates the AuthorityMetadataEntity with new aliases, preferred_network and preferred_cache\r\n     * and returns where the information was retrieved from\r\n     * @param metadataEntity\r\n     * @returns AuthorityMetadataSource\r\n     */\r\n    async updateCloudDiscoveryMetadata(metadataEntity) {\r\n        this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthorityUpdateCloudDiscoveryMetadata, this.correlationId);\r\n        const localMetadataSource = this.updateCloudDiscoveryMetadataFromLocalSources(metadataEntity);\r\n        if (localMetadataSource) {\r\n            return localMetadataSource;\r\n        }\r\n        // Fallback to network as metadata source\r\n        const metadata = await invokeAsync(this.getCloudDiscoveryMetadataFromNetwork.bind(this), PerformanceEvents.AuthorityGetCloudDiscoveryMetadataFromNetwork, this.logger, this.performanceClient, this.correlationId)();\r\n        if (metadata) {\r\n            updateCloudDiscoveryMetadata(metadataEntity, metadata, true);\r\n            return AuthorityMetadataSource.NETWORK;\r\n        }\r\n        // Metadata could not be obtained from the config, cache, network or hardcoded values\r\n        throw createClientConfigurationError(untrustedAuthority);\r\n    }\r\n    updateCloudDiscoveryMetadataFromLocalSources(metadataEntity) {\r\n        this.logger.verbose(\"Attempting to get cloud discovery metadata  from authority configuration\");\r\n        this.logger.verbosePii(`Known Authorities: ${this.authorityOptions.knownAuthorities ||\r\n            Constants.NOT_APPLICABLE}`);\r\n        this.logger.verbosePii(`Authority Metadata: ${this.authorityOptions.authorityMetadata ||\r\n            Constants.NOT_APPLICABLE}`);\r\n        this.logger.verbosePii(`Canonical Authority: ${metadataEntity.canonical_authority || Constants.NOT_APPLICABLE}`);\r\n        const metadata = this.getCloudDiscoveryMetadataFromConfig();\r\n        if (metadata) {\r\n            this.logger.verbose(\"Found cloud discovery metadata in authority configuration\");\r\n            updateCloudDiscoveryMetadata(metadataEntity, metadata, false);\r\n            return AuthorityMetadataSource.CONFIG;\r\n        }\r\n        // If the cached metadata came from config but that config was not passed to this instance, we must go to hardcoded values\r\n        this.logger.verbose(\"Did not find cloud discovery metadata in the config... Attempting to get cloud discovery metadata from the hardcoded values.\");\r\n        if (this.options.skipAuthorityMetadataCache) {\r\n            this.logger.verbose(\"Skipping hardcoded cloud discovery metadata cache since skipAuthorityMetadataCache is set to true. Attempting to get cloud discovery metadata from the network metadata cache.\");\r\n        }\r\n        else {\r\n            const hardcodedMetadata = getCloudDiscoveryMetadataFromHardcodedValues(this.hostnameAndPort);\r\n            if (hardcodedMetadata) {\r\n                this.logger.verbose(\"Found cloud discovery metadata from hardcoded values.\");\r\n                updateCloudDiscoveryMetadata(metadataEntity, hardcodedMetadata, false);\r\n                return AuthorityMetadataSource.HARDCODED_VALUES;\r\n            }\r\n            this.logger.verbose(\"Did not find cloud discovery metadata in hardcoded values... Attempting to get cloud discovery metadata from the network metadata cache.\");\r\n        }\r\n        const metadataEntityExpired = isAuthorityMetadataExpired(metadataEntity);\r\n        if (this.isAuthoritySameType(metadataEntity) &&\r\n            metadataEntity.aliasesFromNetwork &&\r\n            !metadataEntityExpired) {\r\n            this.logger.verbose(\"Found cloud discovery metadata in the cache.\");\r\n            // No need to update\r\n            return AuthorityMetadataSource.CACHE;\r\n        }\r\n        else if (metadataEntityExpired) {\r\n            this.logger.verbose(\"The metadata entity is expired.\");\r\n        }\r\n        return null;\r\n    }\r\n    /**\r\n     * Parse cloudDiscoveryMetadata config or check knownAuthorities\r\n     */\r\n    getCloudDiscoveryMetadataFromConfig() {\r\n        // CIAM does not support cloud discovery metadata\r\n        if (this.authorityType === AuthorityType.Ciam) {\r\n            this.logger.verbose(\"CIAM authorities do not support cloud discovery metadata, generate the aliases from authority host.\");\r\n            return Authority.createCloudDiscoveryMetadataFromHost(this.hostnameAndPort);\r\n        }\r\n        // Check if network response was provided in config\r\n        if (this.authorityOptions.cloudDiscoveryMetadata) {\r\n            this.logger.verbose(\"The cloud discovery metadata has been provided as a network response, in the config.\");\r\n            try {\r\n                this.logger.verbose(\"Attempting to parse the cloud discovery metadata.\");\r\n                const parsedResponse = JSON.parse(this.authorityOptions.cloudDiscoveryMetadata);\r\n                const metadata = getCloudDiscoveryMetadataFromNetworkResponse(parsedResponse.metadata, this.hostnameAndPort);\r\n                this.logger.verbose(\"Parsed the cloud discovery metadata.\");\r\n                if (metadata) {\r\n                    this.logger.verbose(\"There is returnable metadata attached to the parsed cloud discovery metadata.\");\r\n                    return metadata;\r\n                }\r\n                else {\r\n                    this.logger.verbose(\"There is no metadata attached to the parsed cloud discovery metadata.\");\r\n                }\r\n            }\r\n            catch (e) {\r\n                this.logger.verbose(\"Unable to parse the cloud discovery metadata. Throwing Invalid Cloud Discovery Metadata Error.\");\r\n                throw createClientConfigurationError(invalidCloudDiscoveryMetadata);\r\n            }\r\n        }\r\n        // If cloudDiscoveryMetadata is empty or does not contain the host, check knownAuthorities\r\n        if (this.isInKnownAuthorities()) {\r\n            this.logger.verbose(\"The host is included in knownAuthorities. Creating new cloud discovery metadata from the host.\");\r\n            return Authority.createCloudDiscoveryMetadataFromHost(this.hostnameAndPort);\r\n        }\r\n        return null;\r\n    }\r\n    /**\r\n     * Called to get metadata from network if CloudDiscoveryMetadata was not populated by config\r\n     *\r\n     * @param hasHardcodedMetadata boolean\r\n     */\r\n    async getCloudDiscoveryMetadataFromNetwork() {\r\n        this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthorityGetCloudDiscoveryMetadataFromNetwork, this.correlationId);\r\n        const instanceDiscoveryEndpoint = `${Constants.AAD_INSTANCE_DISCOVERY_ENDPT}${this.canonicalAuthority}oauth2/v2.0/authorize`;\r\n        const options = {};\r\n        /*\r\n         * TODO: Add a timeout if the authority exists in our library's\r\n         * hardcoded list of metadata\r\n         */\r\n        let match = null;\r\n        try {\r\n            const response = await this.networkInterface.sendGetRequestAsync(instanceDiscoveryEndpoint, options);\r\n            let typedResponseBody;\r\n            let metadata;\r\n            if (isCloudInstanceDiscoveryResponse(response.body)) {\r\n                typedResponseBody =\r\n                    response.body;\r\n                metadata = typedResponseBody.metadata;\r\n                this.logger.verbosePii(`tenant_discovery_endpoint is: ${typedResponseBody.tenant_discovery_endpoint}`);\r\n            }\r\n            else if (isCloudInstanceDiscoveryErrorResponse(response.body)) {\r\n                this.logger.warning(`A CloudInstanceDiscoveryErrorResponse was returned. The cloud instance discovery network request's status code is: ${response.status}`);\r\n                typedResponseBody =\r\n                    response.body;\r\n                if (typedResponseBody.error === Constants.INVALID_INSTANCE) {\r\n                    this.logger.error(\"The CloudInstanceDiscoveryErrorResponse error is invalid_instance.\");\r\n                    return null;\r\n                }\r\n                this.logger.warning(`The CloudInstanceDiscoveryErrorResponse error is ${typedResponseBody.error}`);\r\n                this.logger.warning(`The CloudInstanceDiscoveryErrorResponse error description is ${typedResponseBody.error_description}`);\r\n                this.logger.warning(\"Setting the value of the CloudInstanceDiscoveryMetadata (returned from the network) to []\");\r\n                metadata = [];\r\n            }\r\n            else {\r\n                this.logger.error(\"AAD did not return a CloudInstanceDiscoveryResponse or CloudInstanceDiscoveryErrorResponse\");\r\n                return null;\r\n            }\r\n            this.logger.verbose(\"Attempting to find a match between the developer's authority and the CloudInstanceDiscoveryMetadata returned from the network request.\");\r\n            match = getCloudDiscoveryMetadataFromNetworkResponse(metadata, this.hostnameAndPort);\r\n        }\r\n        catch (error) {\r\n            if (error instanceof AuthError) {\r\n                this.logger.error(`There was a network error while attempting to get the cloud discovery instance metadata.\\nError: ${error.errorCode}\\nError Description: ${error.errorMessage}`);\r\n            }\r\n            else {\r\n                const typedError = error;\r\n                this.logger.error(`A non-MSALJS error was thrown while attempting to get the cloud instance discovery metadata.\\nError: ${typedError.name}\\nError Description: ${typedError.message}`);\r\n            }\r\n            return null;\r\n        }\r\n        // Custom Domain scenario, host is trusted because Instance Discovery call succeeded\r\n        if (!match) {\r\n            this.logger.warning(\"The developer's authority was not found within the CloudInstanceDiscoveryMetadata returned from the network request.\");\r\n            this.logger.verbose(\"Creating custom Authority for custom domain scenario.\");\r\n            match = Authority.createCloudDiscoveryMetadataFromHost(this.hostnameAndPort);\r\n        }\r\n        return match;\r\n    }\r\n    /**\r\n     * Helper function to determine if this host is included in the knownAuthorities config option\r\n     */\r\n    isInKnownAuthorities() {\r\n        const matches = this.authorityOptions.knownAuthorities.filter((authority) => {\r\n            return (authority &&\r\n                UrlString.getDomainFromUrl(authority).toLowerCase() ===\r\n                    this.hostnameAndPort);\r\n        });\r\n        return matches.length > 0;\r\n    }\r\n    /**\r\n     * helper function to populate the authority based on azureCloudOptions\r\n     * @param authorityString\r\n     * @param azureCloudOptions\r\n     */\r\n    static generateAuthority(authorityString, azureCloudOptions) {\r\n        let authorityAzureCloudInstance;\r\n        if (azureCloudOptions &&\r\n            azureCloudOptions.azureCloudInstance !== AzureCloudInstance.None) {\r\n            const tenant = azureCloudOptions.tenant\r\n                ? azureCloudOptions.tenant\r\n                : Constants.DEFAULT_COMMON_TENANT;\r\n            authorityAzureCloudInstance = `${azureCloudOptions.azureCloudInstance}/${tenant}/`;\r\n        }\r\n        return authorityAzureCloudInstance\r\n            ? authorityAzureCloudInstance\r\n            : authorityString;\r\n    }\r\n    /**\r\n     * Creates cloud discovery metadata object from a given host\r\n     * @param host\r\n     */\r\n    static createCloudDiscoveryMetadataFromHost(host) {\r\n        return {\r\n            preferred_network: host,\r\n            preferred_cache: host,\r\n            aliases: [host],\r\n        };\r\n    }\r\n    /**\r\n     * helper function to generate environment from authority object\r\n     */\r\n    getPreferredCache() {\r\n        if (this.managedIdentity) {\r\n            return Constants.DEFAULT_AUTHORITY_HOST;\r\n        }\r\n        else if (this.discoveryComplete()) {\r\n            return this.metadata.preferred_cache;\r\n        }\r\n        else {\r\n            throw createClientAuthError(endpointResolutionError);\r\n        }\r\n    }\r\n    /**\r\n     * Returns whether or not the provided host is an alias of this authority instance\r\n     * @param host\r\n     */\r\n    isAlias(host) {\r\n        return this.metadata.aliases.indexOf(host) > -1;\r\n    }\r\n    /**\r\n     * Returns whether or not the provided host is an alias of a known Microsoft authority for purposes of endpoint discovery\r\n     * @param host\r\n     */\r\n    isAliasOfKnownMicrosoftAuthority(host) {\r\n        return InstanceDiscoveryMetadataAliases.has(host);\r\n    }\r\n    /**\r\n     * Checks whether the provided host is that of a public cloud authority\r\n     *\r\n     * @param authority string\r\n     * @returns bool\r\n     */\r\n    static isPublicCloudAuthority(host) {\r\n        return Constants.KNOWN_PUBLIC_CLOUDS.indexOf(host) >= 0;\r\n    }\r\n    /**\r\n     * Rebuild the authority string with the region\r\n     *\r\n     * @param host string\r\n     * @param region string\r\n     */\r\n    static buildRegionalAuthorityString(host, region, queryString) {\r\n        // Create and validate a Url string object with the initial authority string\r\n        const authorityUrlInstance = new UrlString(host);\r\n        authorityUrlInstance.validateAsUri();\r\n        const authorityUrlParts = authorityUrlInstance.getUrlComponents();\r\n        let hostNameAndPort = `${region}.${authorityUrlParts.HostNameAndPort}`;\r\n        if (this.isPublicCloudAuthority(authorityUrlParts.HostNameAndPort)) {\r\n            hostNameAndPort = `${region}.${Constants.REGIONAL_AUTH_PUBLIC_CLOUD_SUFFIX}`;\r\n        }\r\n        // Include the query string portion of the url\r\n        const url = UrlString.constructAuthorityUriFromObject({\r\n            ...authorityUrlInstance.getUrlComponents(),\r\n            HostNameAndPort: hostNameAndPort,\r\n        }).urlString;\r\n        // Add the query string if a query string was provided\r\n        if (queryString)\r\n            return `${url}?${queryString}`;\r\n        return url;\r\n    }\r\n    /**\r\n     * Replace the endpoints in the metadata object with their regional equivalents.\r\n     *\r\n     * @param metadata OpenIdConfigResponse\r\n     * @param azureRegion string\r\n     */\r\n    static replaceWithRegionalInformation(metadata, azureRegion) {\r\n        const regionalMetadata = { ...metadata };\r\n        regionalMetadata.authorization_endpoint =\r\n            Authority.buildRegionalAuthorityString(regionalMetadata.authorization_endpoint, azureRegion);\r\n        regionalMetadata.token_endpoint =\r\n            Authority.buildRegionalAuthorityString(regionalMetadata.token_endpoint, azureRegion);\r\n        if (regionalMetadata.end_session_endpoint) {\r\n            regionalMetadata.end_session_endpoint =\r\n                Authority.buildRegionalAuthorityString(regionalMetadata.end_session_endpoint, azureRegion);\r\n        }\r\n        return regionalMetadata;\r\n    }\r\n    /**\r\n     * Transform CIAM_AUTHORIY as per the below rules:\r\n     * If no path segments found and it is a CIAM authority (hostname ends with .ciamlogin.com), then transform it\r\n     *\r\n     * NOTE: The transformation path should go away once STS supports CIAM with the format: `tenantIdorDomain.ciamlogin.com`\r\n     * `ciamlogin.com` can also change in the future and we should accommodate the same\r\n     *\r\n     * @param authority\r\n     */\r\n    static transformCIAMAuthority(authority) {\r\n        let ciamAuthority = authority;\r\n        const authorityUrl = new UrlString(authority);\r\n        const authorityUrlComponents = authorityUrl.getUrlComponents();\r\n        // check if transformation is needed\r\n        if (authorityUrlComponents.PathSegments.length === 0 &&\r\n            authorityUrlComponents.HostNameAndPort.endsWith(Constants.CIAM_AUTH_URL)) {\r\n            const tenantIdOrDomain = authorityUrlComponents.HostNameAndPort.split(\".\")[0];\r\n            ciamAuthority = `${ciamAuthority}${tenantIdOrDomain}${Constants.AAD_TENANT_DOMAIN_SUFFIX}`;\r\n        }\r\n        return ciamAuthority;\r\n    }\r\n}\r\n// Reserved tenant domain names that will not be replaced with tenant id\r\nAuthority.reservedTenantDomains = new Set([\r\n    \"{tenant}\",\r\n    \"{tenantid}\",\r\n    AADAuthorityConstants.COMMON,\r\n    AADAuthorityConstants.CONSUMERS,\r\n    AADAuthorityConstants.ORGANIZATIONS,\r\n]);\r\n/**\r\n * Extract tenantId from authority\r\n */\r\nfunction getTenantFromAuthorityString(authority) {\r\n    const authorityUrl = new UrlString(authority);\r\n    const authorityUrlComponents = authorityUrl.getUrlComponents();\r\n    /**\r\n     * For credential matching purposes, tenantId is the last path segment of the authority URL:\r\n     *  AAD Authority - domain/tenantId -> Credentials are cached with realm = tenantId\r\n     *  B2C Authority - domain/{tenantId}?/.../policy -> Credentials are cached with realm = policy\r\n     *  tenantId is downcased because B2C policies can have mixed case but tfp claim is downcased\r\n     *\r\n     * Note that we may not have any path segments in certain OIDC scenarios.\r\n     */\r\n    const tenantId = authorityUrlComponents.PathSegments.slice(-1)[0]?.toLowerCase();\r\n    switch (tenantId) {\r\n        case AADAuthorityConstants.COMMON:\r\n        case AADAuthorityConstants.ORGANIZATIONS:\r\n        case AADAuthorityConstants.CONSUMERS:\r\n            return undefined;\r\n        default:\r\n            return tenantId;\r\n    }\r\n}\r\nfunction formatAuthorityUri(authorityUri) {\r\n    return authorityUri.endsWith(Constants.FORWARD_SLASH)\r\n        ? authorityUri\r\n        : `${authorityUri}${Constants.FORWARD_SLASH}`;\r\n}\r\nfunction buildStaticAuthorityOptions(authOptions) {\r\n    const rawCloudDiscoveryMetadata = authOptions.cloudDiscoveryMetadata;\r\n    let cloudDiscoveryMetadata = undefined;\r\n    if (rawCloudDiscoveryMetadata) {\r\n        try {\r\n            cloudDiscoveryMetadata = JSON.parse(rawCloudDiscoveryMetadata);\r\n        }\r\n        catch (e) {\r\n            throw createClientConfigurationError(invalidCloudDiscoveryMetadata);\r\n        }\r\n    }\r\n    return {\r\n        canonicalAuthority: authOptions.authority\r\n            ? formatAuthorityUri(authOptions.authority)\r\n            : undefined,\r\n        knownAuthorities: authOptions.knownAuthorities,\r\n        cloudDiscoveryMetadata: cloudDiscoveryMetadata,\r\n    };\r\n}\n\nexport { Authority, buildStaticAuthorityOptions, formatAuthorityUri, getTenantFromAuthorityString };\n//# sourceMappingURL=Authority.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\nimport { Authority, formatAuthorityUri } from './Authority.mjs';\nimport { createClientAuthError } from '../error/ClientAuthError.mjs';\nimport { PerformanceEvents } from '../telemetry/performance/PerformanceEvent.mjs';\nimport { invokeAsync } from '../utils/FunctionWrappers.mjs';\nimport { endpointResolutionError } from '../error/ClientAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Create an authority object of the correct type based on the url\r\n * Performs basic authority validation - checks to see if the authority is of a valid type (i.e. aad, b2c, adfs)\r\n *\r\n * Also performs endpoint discovery.\r\n *\r\n * @param authorityUri\r\n * @param networkClient\r\n * @param protocolMode\r\n * @internal\r\n */\r\nasync function createDiscoveredInstance(authorityUri, networkClient, cacheManager, authorityOptions, logger, correlationId, performanceClient) {\r\n    performanceClient?.addQueueMeasurement(PerformanceEvents.AuthorityFactoryCreateDiscoveredInstance, correlationId);\r\n    const authorityUriFinal = Authority.transformCIAMAuthority(formatAuthorityUri(authorityUri));\r\n    // Initialize authority and perform discovery endpoint check.\r\n    const acquireTokenAuthority = new Authority(authorityUriFinal, networkClient, cacheManager, authorityOptions, logger, correlationId, performanceClient);\r\n    try {\r\n        await invokeAsync(acquireTokenAuthority.resolveEndpointsAsync.bind(acquireTokenAuthority), PerformanceEvents.AuthorityResolveEndpointsAsync, logger, performanceClient, correlationId)();\r\n        return acquireTokenAuthority;\r\n    }\r\n    catch (e) {\r\n        throw createClientAuthError(endpointResolutionError);\r\n    }\r\n}\n\nexport { createDiscoveredInstance };\n//# sourceMappingURL=AuthorityFactory.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\nimport { AuthError } from './AuthError.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Error thrown when there is an error with the server code, for example, unavailability.\r\n */\r\nclass ServerError extends AuthError {\r\n    constructor(errorCode, errorMessage, subError, errorNo, status) {\r\n        super(errorCode, errorMessage, subError);\r\n        this.name = \"ServerError\";\r\n        this.errorNo = errorNo;\r\n        this.status = status;\r\n        Object.setPrototypeOf(this, ServerError.prototype);\r\n    }\r\n}\n\nexport { ServerError };\n//# sourceMappingURL=ServerError.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nfunction getRequestThumbprint(clientId, request, homeAccountId) {\r\n    return {\r\n        clientId: clientId,\r\n        authority: request.authority,\r\n        scopes: request.scopes,\r\n        homeAccountIdentifier: homeAccountId,\r\n        claims: request.claims,\r\n        authenticationScheme: request.authenticationScheme,\r\n        resourceRequestMethod: request.resourceRequestMethod,\r\n        resourceRequestUri: request.resourceRequestUri,\r\n        shrClaims: request.shrClaims,\r\n        sshKid: request.sshKid,\r\n        embeddedClientId: request.embeddedClientId || request.tokenBodyParameters?.clientId,\r\n    };\r\n}\n\nexport { getRequestThumbprint };\n//# sourceMappingURL=RequestThumbprint.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\nimport { ThrottlingConstants, Constants, HeaderNames } from '../utils/Constants.mjs';\nimport { ServerError } from '../error/ServerError.mjs';\nimport { getRequestThumbprint } from './RequestThumbprint.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/** @internal */\r\nclass ThrottlingUtils {\r\n    /**\r\n     * Prepares a RequestThumbprint to be stored as a key.\r\n     * @param thumbprint\r\n     */\r\n    static generateThrottlingStorageKey(thumbprint) {\r\n        return `${ThrottlingConstants.THROTTLING_PREFIX}.${JSON.stringify(thumbprint)}`;\r\n    }\r\n    /**\r\n     * Performs necessary throttling checks before a network request.\r\n     * @param cacheManager\r\n     * @param thumbprint\r\n     */\r\n    static preProcess(cacheManager, thumbprint, correlationId) {\r\n        const key = ThrottlingUtils.generateThrottlingStorageKey(thumbprint);\r\n        const value = cacheManager.getThrottlingCache(key);\r\n        if (value) {\r\n            if (value.throttleTime < Date.now()) {\r\n                cacheManager.removeItem(key, correlationId);\r\n                return;\r\n            }\r\n            throw new ServerError(value.errorCodes?.join(\" \") || Constants.EMPTY_STRING, value.errorMessage, value.subError);\r\n        }\r\n    }\r\n    /**\r\n     * Performs necessary throttling checks after a network request.\r\n     * @param cacheManager\r\n     * @param thumbprint\r\n     * @param response\r\n     */\r\n    static postProcess(cacheManager, thumbprint, response, correlationId) {\r\n        if (ThrottlingUtils.checkResponseStatus(response) ||\r\n            ThrottlingUtils.checkResponseForRetryAfter(response)) {\r\n            const thumbprintValue = {\r\n                throttleTime: ThrottlingUtils.calculateThrottleTime(parseInt(response.headers[HeaderNames.RETRY_AFTER])),\r\n                error: response.body.error,\r\n                errorCodes: response.body.error_codes,\r\n                errorMessage: response.body.error_description,\r\n                subError: response.body.suberror,\r\n            };\r\n            cacheManager.setThrottlingCache(ThrottlingUtils.generateThrottlingStorageKey(thumbprint), thumbprintValue, correlationId);\r\n        }\r\n    }\r\n    /**\r\n     * Checks a NetworkResponse object's status codes against 429 or 5xx\r\n     * @param response\r\n     */\r\n    static checkResponseStatus(response) {\r\n        return (response.status === 429 ||\r\n            (response.status >= 500 && response.status < 600));\r\n    }\r\n    /**\r\n     * Checks a NetworkResponse object's RetryAfter header\r\n     * @param response\r\n     */\r\n    static checkResponseForRetryAfter(response) {\r\n        if (response.headers) {\r\n            return (response.headers.hasOwnProperty(HeaderNames.RETRY_AFTER) &&\r\n                (response.status < 200 || response.status >= 300));\r\n        }\r\n        return false;\r\n    }\r\n    /**\r\n     * Calculates the Unix-time value for a throttle to expire given throttleTime in seconds.\r\n     * @param throttleTime\r\n     */\r\n    static calculateThrottleTime(throttleTime) {\r\n        const time = throttleTime <= 0 ? 0 : throttleTime;\r\n        const currentSeconds = Date.now() / 1000;\r\n        return Math.floor(Math.min(currentSeconds +\r\n            (time || ThrottlingConstants.DEFAULT_THROTTLE_TIME_SECONDS), currentSeconds +\r\n            ThrottlingConstants.DEFAULT_MAX_THROTTLE_TIME_SECONDS) * 1000);\r\n    }\r\n    static removeThrottle(cacheManager, clientId, request, homeAccountIdentifier) {\r\n        const thumbprint = getRequestThumbprint(clientId, request, homeAccountIdentifier);\r\n        const key = this.generateThrottlingStorageKey(thumbprint);\r\n        cacheManager.removeItem(key, request.correlationId);\r\n    }\r\n}\n\nexport { ThrottlingUtils };\n//# sourceMappingURL=ThrottlingUtils.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\nimport { AuthError } from './AuthError.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Represents network related errors\r\n */\r\nclass NetworkError extends AuthError {\r\n    constructor(error, httpStatus, responseHeaders) {\r\n        super(error.errorCode, error.errorMessage, error.subError);\r\n        Object.setPrototypeOf(this, NetworkError.prototype);\r\n        this.name = \"NetworkError\";\r\n        this.error = error;\r\n        this.httpStatus = httpStatus;\r\n        this.responseHeaders = responseHeaders;\r\n    }\r\n}\r\n/**\r\n * Creates NetworkError object for a failed network request\r\n * @param error - Error to be thrown back to the caller\r\n * @param httpStatus - Status code of the network request\r\n * @param responseHeaders - Response headers of the network request, when available\r\n * @returns NetworkError object\r\n */\r\nfunction createNetworkError(error, httpStatus, responseHeaders, additionalError) {\r\n    error.errorMessage = `${error.errorMessage}, additionalErrorInfo: error.name:${additionalError?.name}, error.message:${additionalError?.message}`;\r\n    return new NetworkError(error, httpStatus, responseHeaders);\r\n}\n\nexport { NetworkError, createNetworkError };\n//# sourceMappingURL=NetworkError.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\nimport { buildClientConfiguration } from '../config/ClientConfiguration.mjs';\nimport { Logger } from '../logger/Logger.mjs';\nimport { Constants, HeaderNames } from '../utils/Constants.mjs';\nimport { name, version } from '../packageMetadata.mjs';\nimport { CcsCredentialType } from '../account/CcsCredential.mjs';\nimport { buildClientInfoFromHomeAccountId } from '../account/ClientInfo.mjs';\nimport { addBrokerParameters, addExtraQueryParameters, addCorrelationId, instrumentBrokerParams } from '../request/RequestParameterBuilder.mjs';\nimport { mapToQueryString } from '../utils/UrlUtils.mjs';\nimport { createDiscoveredInstance } from '../authority/AuthorityFactory.mjs';\nimport { PerformanceEvents } from '../telemetry/performance/PerformanceEvent.mjs';\nimport { ThrottlingUtils } from '../network/ThrottlingUtils.mjs';\nimport { AuthError } from '../error/AuthError.mjs';\nimport { createClientAuthError } from '../error/ClientAuthError.mjs';\nimport { NetworkError } from '../error/NetworkError.mjs';\nimport { invokeAsync } from '../utils/FunctionWrappers.mjs';\nimport { networkError } from '../error/ClientAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Base application class which will construct requests to send to and handle responses from the Microsoft STS using the authorization code flow.\r\n * @internal\r\n */\r\nclass BaseClient {\r\n    constructor(configuration, performanceClient) {\r\n        // Set the configuration\r\n        this.config = buildClientConfiguration(configuration);\r\n        // Initialize the logger\r\n        this.logger = new Logger(this.config.loggerOptions, name, version);\r\n        // Initialize crypto\r\n        this.cryptoUtils = this.config.cryptoInterface;\r\n        // Initialize storage interface\r\n        this.cacheManager = this.config.storageInterface;\r\n        // Set the network interface\r\n        this.networkClient = this.config.networkInterface;\r\n        // Set TelemetryManager\r\n        this.serverTelemetryManager = this.config.serverTelemetryManager;\r\n        // set Authority\r\n        this.authority = this.config.authOptions.authority;\r\n        // set performance telemetry client\r\n        this.performanceClient = performanceClient;\r\n    }\r\n    /**\r\n     * Creates default headers for requests to token endpoint\r\n     */\r\n    createTokenRequestHeaders(ccsCred) {\r\n        const headers = {};\r\n        headers[HeaderNames.CONTENT_TYPE] = Constants.URL_FORM_CONTENT_TYPE;\r\n        if (!this.config.systemOptions.preventCorsPreflight && ccsCred) {\r\n            switch (ccsCred.type) {\r\n                case CcsCredentialType.HOME_ACCOUNT_ID:\r\n                    try {\r\n                        const clientInfo = buildClientInfoFromHomeAccountId(ccsCred.credential);\r\n                        headers[HeaderNames.CCS_HEADER] = `Oid:${clientInfo.uid}@${clientInfo.utid}`;\r\n                    }\r\n                    catch (e) {\r\n                        this.logger.verbose(\"Could not parse home account ID for CCS Header: \" +\r\n                            e);\r\n                    }\r\n                    break;\r\n                case CcsCredentialType.UPN:\r\n                    headers[HeaderNames.CCS_HEADER] = `UPN: ${ccsCred.credential}`;\r\n                    break;\r\n            }\r\n        }\r\n        return headers;\r\n    }\r\n    /**\r\n     * Http post to token endpoint\r\n     * @param tokenEndpoint\r\n     * @param queryString\r\n     * @param headers\r\n     * @param thumbprint\r\n     */\r\n    async executePostToTokenEndpoint(tokenEndpoint, queryString, headers, thumbprint, correlationId, queuedEvent) {\r\n        if (queuedEvent) {\r\n            this.performanceClient?.addQueueMeasurement(queuedEvent, correlationId);\r\n        }\r\n        const response = await this.sendPostRequest(thumbprint, tokenEndpoint, { body: queryString, headers: headers }, correlationId);\r\n        if (this.config.serverTelemetryManager &&\r\n            response.status < 500 &&\r\n            response.status !== 429) {\r\n            // Telemetry data successfully logged by server, clear Telemetry cache\r\n            this.config.serverTelemetryManager.clearTelemetryCache();\r\n        }\r\n        return response;\r\n    }\r\n    /**\r\n     * Wraps sendPostRequestAsync with necessary preflight and postflight logic\r\n     * @param thumbprint - Request thumbprint for throttling\r\n     * @param tokenEndpoint - Endpoint to make the POST to\r\n     * @param options - Body and Headers to include on the POST request\r\n     * @param correlationId - CorrelationId for telemetry\r\n     */\r\n    async sendPostRequest(thumbprint, tokenEndpoint, options, correlationId) {\r\n        ThrottlingUtils.preProcess(this.cacheManager, thumbprint, correlationId);\r\n        let response;\r\n        try {\r\n            response = await invokeAsync((this.networkClient.sendPostRequestAsync.bind(this.networkClient)), PerformanceEvents.NetworkClientSendPostRequestAsync, this.logger, this.performanceClient, correlationId)(tokenEndpoint, options);\r\n            const responseHeaders = response.headers || {};\r\n            this.performanceClient?.addFields({\r\n                refreshTokenSize: response.body.refresh_token?.length || 0,\r\n                httpVerToken: responseHeaders[HeaderNames.X_MS_HTTP_VERSION] || \"\",\r\n                requestId: responseHeaders[HeaderNames.X_MS_REQUEST_ID] || \"\",\r\n            }, correlationId);\r\n        }\r\n        catch (e) {\r\n            if (e instanceof NetworkError) {\r\n                const responseHeaders = e.responseHeaders;\r\n                if (responseHeaders) {\r\n                    this.performanceClient?.addFields({\r\n                        httpVerToken: responseHeaders[HeaderNames.X_MS_HTTP_VERSION] || \"\",\r\n                        requestId: responseHeaders[HeaderNames.X_MS_REQUEST_ID] ||\r\n                            \"\",\r\n                        contentTypeHeader: responseHeaders[HeaderNames.CONTENT_TYPE] ||\r\n                            undefined,\r\n                        contentLengthHeader: responseHeaders[HeaderNames.CONTENT_LENGTH] ||\r\n                            undefined,\r\n                        httpStatus: e.httpStatus,\r\n                    }, correlationId);\r\n                }\r\n                throw e.error;\r\n            }\r\n            if (e instanceof AuthError) {\r\n                throw e;\r\n            }\r\n            else {\r\n                throw createClientAuthError(networkError);\r\n            }\r\n        }\r\n        ThrottlingUtils.postProcess(this.cacheManager, thumbprint, response, correlationId);\r\n        return response;\r\n    }\r\n    /**\r\n     * Updates the authority object of the client. Endpoint discovery must be completed.\r\n     * @param updatedAuthority\r\n     */\r\n    async updateAuthority(cloudInstanceHostname, correlationId) {\r\n        this.performanceClient?.addQueueMeasurement(PerformanceEvents.UpdateTokenEndpointAuthority, correlationId);\r\n        const cloudInstanceAuthorityUri = `https://${cloudInstanceHostname}/${this.authority.tenant}/`;\r\n        const cloudInstanceAuthority = await createDiscoveredInstance(cloudInstanceAuthorityUri, this.networkClient, this.cacheManager, this.authority.options, this.logger, correlationId, this.performanceClient);\r\n        this.authority = cloudInstanceAuthority;\r\n    }\r\n    /**\r\n     * Creates query string for the /token request\r\n     * @param request\r\n     */\r\n    createTokenQueryParameters(request) {\r\n        const parameters = new Map();\r\n        if (request.embeddedClientId) {\r\n            addBrokerParameters(parameters, this.config.authOptions.clientId, this.config.authOptions.redirectUri);\r\n        }\r\n        if (request.tokenQueryParameters) {\r\n            addExtraQueryParameters(parameters, request.tokenQueryParameters);\r\n        }\r\n        addCorrelationId(parameters, request.correlationId);\r\n        instrumentBrokerParams(parameters, request.correlationId, this.performanceClient);\r\n        return mapToQueryString(parameters);\r\n    }\r\n}\n\nexport { BaseClient };\n//# sourceMappingURL=BaseClient.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * MSAL-defined interaction required error code indicating no tokens are found in cache.\r\n * @public\r\n */\r\nconst noTokensFound = \"no_tokens_found\";\r\n/**\r\n * MSAL-defined error code indicating a native account is unavailable on the platform.\r\n * @public\r\n */\r\nconst nativeAccountUnavailable = \"native_account_unavailable\";\r\n/**\r\n * MSAL-defined error code indicating the refresh token has expired and user interaction is needed.\r\n * @public\r\n */\r\nconst refreshTokenExpired = \"refresh_token_expired\";\r\n/**\r\n * MSAL-defined error code indicating UI/UX is not allowed (e.g., blocked by policy), requiring alternate interaction.\r\n * @public\r\n */\r\nconst uxNotAllowed = \"ux_not_allowed\";\r\n/**\r\n * Server-originated error code indicating interaction is required to complete the request.\r\n * @public\r\n */\r\nconst interactionRequired = \"interaction_required\";\r\n/**\r\n * Server-originated error code indicating user consent is required.\r\n * @public\r\n */\r\nconst consentRequired = \"consent_required\";\r\n/**\r\n * Server-originated error code indicating user login is required.\r\n * @public\r\n */\r\nconst loginRequired = \"login_required\";\r\n/**\r\n * Server-originated error code indicating the token is invalid or corrupted.\r\n * @public\r\n */\r\nconst badToken = \"bad_token\";\r\n/**\r\n * Server-originated error code indicating the user was interrupted and must reattempt the flow.\r\n * @public\r\n */\r\nconst interruptedUser = \"interrupted_user\";\n\nexport { badToken, consentRequired, interactionRequired, interruptedUser, loginRequired, nativeAccountUnavailable, noTokensFound, refreshTokenExpired, uxNotAllowed };\n//# sourceMappingURL=InteractionRequiredAuthErrorCodes.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\nimport { Constants } from '../utils/Constants.mjs';\nimport { AuthError } from './AuthError.mjs';\nimport { interruptedUser, badToken, nativeAccountUnavailable, noTokensFound, uxNotAllowed, refreshTokenExpired, interactionRequired, consentRequired, loginRequired } from './InteractionRequiredAuthErrorCodes.mjs';\nimport * as InteractionRequiredAuthErrorCodes from './InteractionRequiredAuthErrorCodes.mjs';\nexport { InteractionRequiredAuthErrorCodes };\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * InteractionRequiredServerErrorMessage contains string constants used by error codes and messages returned by the server indicating interaction is required\r\n */\r\nconst InteractionRequiredServerErrorMessage = [\r\n    interactionRequired,\r\n    consentRequired,\r\n    loginRequired,\r\n    badToken,\r\n    uxNotAllowed,\r\n    interruptedUser,\r\n];\r\nconst InteractionRequiredAuthSubErrorMessage = [\r\n    \"message_only\",\r\n    \"additional_action\",\r\n    \"basic_action\",\r\n    \"user_password_expired\",\r\n    \"consent_required\",\r\n    \"bad_token\",\r\n    \"interrupted_user\",\r\n];\r\nconst InteractionRequiredAuthErrorMessages = {\r\n    [noTokensFound]: \"No refresh token found in the cache. Please sign-in.\",\r\n    [nativeAccountUnavailable]: \"The requested account is not available in the native broker. It may have been deleted or logged out. Please sign-in again using an interactive API.\",\r\n    [refreshTokenExpired]: \"Refresh token has expired.\",\r\n    [badToken]: \"Identity provider returned bad_token due to an expired or invalid refresh token. Please invoke an interactive API to resolve.\",\r\n    [uxNotAllowed]: \"`canShowUI` flag in Edge was set to false. User interaction required on web page. Please invoke an interactive API to resolve.\",\r\n    [interruptedUser]: \"The user could not be authenticated due to an interrupted state. Please invoke an interactive API to resolve.\",\r\n};\r\n/**\r\n * Interaction required errors defined by the SDK\r\n * @deprecated Use InteractionRequiredAuthErrorCodes instead\r\n */\r\nconst InteractionRequiredAuthErrorMessage = {\r\n    noTokensFoundError: {\r\n        code: noTokensFound,\r\n        desc: InteractionRequiredAuthErrorMessages[noTokensFound],\r\n    },\r\n    native_account_unavailable: {\r\n        code: nativeAccountUnavailable,\r\n        desc: InteractionRequiredAuthErrorMessages[nativeAccountUnavailable],\r\n    },\r\n    bad_token: {\r\n        code: badToken,\r\n        desc: InteractionRequiredAuthErrorMessages[badToken],\r\n    },\r\n    interrupted_user: {\r\n        code: interruptedUser,\r\n        desc: InteractionRequiredAuthErrorMessages[interruptedUser],\r\n    },\r\n};\r\n/**\r\n * Error thrown when user interaction is required.\r\n */\r\nclass InteractionRequiredAuthError extends AuthError {\r\n    constructor(errorCode, errorMessage, subError, timestamp, traceId, correlationId, claims, errorNo) {\r\n        super(errorCode, errorMessage, subError);\r\n        Object.setPrototypeOf(this, InteractionRequiredAuthError.prototype);\r\n        this.timestamp = timestamp || Constants.EMPTY_STRING;\r\n        this.traceId = traceId || Constants.EMPTY_STRING;\r\n        this.correlationId = correlationId || Constants.EMPTY_STRING;\r\n        this.claims = claims || Constants.EMPTY_STRING;\r\n        this.name = \"InteractionRequiredAuthError\";\r\n        this.errorNo = errorNo;\r\n    }\r\n}\r\n/**\r\n * Helper function used to determine if an error thrown by the server requires interaction to resolve\r\n * @param errorCode\r\n * @param errorString\r\n * @param subError\r\n */\r\nfunction isInteractionRequiredError(errorCode, errorString, subError) {\r\n    const isInteractionRequiredErrorCode = !!errorCode &&\r\n        InteractionRequiredServerErrorMessage.indexOf(errorCode) > -1;\r\n    const isInteractionRequiredSubError = !!subError &&\r\n        InteractionRequiredAuthSubErrorMessage.indexOf(subError) > -1;\r\n    const isInteractionRequiredErrorDesc = !!errorString &&\r\n        InteractionRequiredServerErrorMessage.some((irErrorCode) => {\r\n            return errorString.indexOf(irErrorCode) > -1;\r\n        });\r\n    return (isInteractionRequiredErrorCode ||\r\n        isInteractionRequiredErrorDesc ||\r\n        isInteractionRequiredSubError);\r\n}\r\n/**\r\n * Creates an InteractionRequiredAuthError\r\n */\r\nfunction createInteractionRequiredAuthError(errorCode) {\r\n    return new InteractionRequiredAuthError(errorCode, InteractionRequiredAuthErrorMessages[errorCode]);\r\n}\n\nexport { InteractionRequiredAuthError, InteractionRequiredAuthErrorMessage, InteractionRequiredAuthSubErrorMessage, InteractionRequiredServerErrorMessage, createInteractionRequiredAuthError, isInteractionRequiredError };\n//# sourceMappingURL=InteractionRequiredAuthError.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\nimport { Constants } from './Constants.mjs';\nimport { createClientAuthError } from '../error/ClientAuthError.mjs';\nimport { noCryptoObject, invalidState } from '../error/ClientAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Class which provides helpers for OAuth 2.0 protocol specific values\r\n */\r\nclass ProtocolUtils {\r\n    /**\r\n     * Appends user state with random guid, or returns random guid.\r\n     * @param userState\r\n     * @param randomGuid\r\n     */\r\n    static setRequestState(cryptoObj, userState, meta) {\r\n        const libraryState = ProtocolUtils.generateLibraryState(cryptoObj, meta);\r\n        return userState\r\n            ? `${libraryState}${Constants.RESOURCE_DELIM}${userState}`\r\n            : libraryState;\r\n    }\r\n    /**\r\n     * Generates the state value used by the common library.\r\n     * @param randomGuid\r\n     * @param cryptoObj\r\n     */\r\n    static generateLibraryState(cryptoObj, meta) {\r\n        if (!cryptoObj) {\r\n            throw createClientAuthError(noCryptoObject);\r\n        }\r\n        // Create a state object containing a unique id and the timestamp of the request creation\r\n        const stateObj = {\r\n            id: cryptoObj.createNewGuid(),\r\n        };\r\n        if (meta) {\r\n            stateObj.meta = meta;\r\n        }\r\n        const stateString = JSON.stringify(stateObj);\r\n        return cryptoObj.base64Encode(stateString);\r\n    }\r\n    /**\r\n     * Parses the state into the RequestStateObject, which contains the LibraryState info and the state passed by the user.\r\n     * @param state\r\n     * @param cryptoObj\r\n     */\r\n    static parseRequestState(cryptoObj, state) {\r\n        if (!cryptoObj) {\r\n            throw createClientAuthError(noCryptoObject);\r\n        }\r\n        if (!state) {\r\n            throw createClientAuthError(invalidState);\r\n        }\r\n        try {\r\n            // Split the state between library state and user passed state and decode them separately\r\n            const splitState = state.split(Constants.RESOURCE_DELIM);\r\n            const libraryState = splitState[0];\r\n            const userState = splitState.length > 1\r\n                ? splitState.slice(1).join(Constants.RESOURCE_DELIM)\r\n                : Constants.EMPTY_STRING;\r\n            const libraryStateString = cryptoObj.base64Decode(libraryState);\r\n            const libraryStateObj = JSON.parse(libraryStateString);\r\n            return {\r\n                userRequestState: userState || Constants.EMPTY_STRING,\r\n                libraryState: libraryStateObj,\r\n            };\r\n        }\r\n        catch (e) {\r\n            throw createClientAuthError(invalidState);\r\n        }\r\n    }\r\n}\n\nexport { ProtocolUtils };\n//# sourceMappingURL=ProtocolUtils.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\nimport { nowSeconds } from '../utils/TimeUtils.mjs';\nimport { UrlString } from '../url/UrlString.mjs';\nimport { PerformanceEvents } from '../telemetry/performance/PerformanceEvent.mjs';\nimport { invokeAsync } from '../utils/FunctionWrappers.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst KeyLocation = {\r\n    SW: \"sw\"};\r\n/** @internal */\r\nclass PopTokenGenerator {\r\n    constructor(cryptoUtils, performanceClient) {\r\n        this.cryptoUtils = cryptoUtils;\r\n        this.performanceClient = performanceClient;\r\n    }\r\n    /**\r\n     * Generates the req_cnf validated at the RP in the POP protocol for SHR parameters\r\n     * and returns an object containing the keyid, the full req_cnf string and the req_cnf string hash\r\n     * @param request\r\n     * @returns\r\n     */\r\n    async generateCnf(request, logger) {\r\n        this.performanceClient?.addQueueMeasurement(PerformanceEvents.PopTokenGenerateCnf, request.correlationId);\r\n        const reqCnf = await invokeAsync(this.generateKid.bind(this), PerformanceEvents.PopTokenGenerateCnf, logger, this.performanceClient, request.correlationId)(request);\r\n        const reqCnfString = this.cryptoUtils.base64UrlEncode(JSON.stringify(reqCnf));\r\n        return {\r\n            kid: reqCnf.kid,\r\n            reqCnfString,\r\n        };\r\n    }\r\n    /**\r\n     * Generates key_id for a SHR token request\r\n     * @param request\r\n     * @returns\r\n     */\r\n    async generateKid(request) {\r\n        this.performanceClient?.addQueueMeasurement(PerformanceEvents.PopTokenGenerateKid, request.correlationId);\r\n        const kidThumbprint = await this.cryptoUtils.getPublicKeyThumbprint(request);\r\n        return {\r\n            kid: kidThumbprint,\r\n            xms_ksl: KeyLocation.SW,\r\n        };\r\n    }\r\n    /**\r\n     * Signs the POP access_token with the local generated key-pair\r\n     * @param accessToken\r\n     * @param request\r\n     * @returns\r\n     */\r\n    async signPopToken(accessToken, keyId, request) {\r\n        return this.signPayload(accessToken, keyId, request);\r\n    }\r\n    /**\r\n     * Utility function to generate the signed JWT for an access_token\r\n     * @param payload\r\n     * @param kid\r\n     * @param request\r\n     * @param claims\r\n     * @returns\r\n     */\r\n    async signPayload(payload, keyId, request, claims) {\r\n        // Deconstruct request to extract SHR parameters\r\n        const { resourceRequestMethod, resourceRequestUri, shrClaims, shrNonce, shrOptions, } = request;\r\n        const resourceUrlString = resourceRequestUri\r\n            ? new UrlString(resourceRequestUri)\r\n            : undefined;\r\n        const resourceUrlComponents = resourceUrlString?.getUrlComponents();\r\n        return this.cryptoUtils.signJwt({\r\n            at: payload,\r\n            ts: nowSeconds(),\r\n            m: resourceRequestMethod?.toUpperCase(),\r\n            u: resourceUrlComponents?.HostNameAndPort,\r\n            nonce: shrNonce || this.cryptoUtils.createNewGuid(),\r\n            p: resourceUrlComponents?.AbsolutePath,\r\n            q: resourceUrlComponents?.QueryString\r\n                ? [[], resourceUrlComponents.QueryString]\r\n                : undefined,\r\n            client_claims: shrClaims || undefined,\r\n            ...claims,\r\n        }, keyId, shrOptions, request.correlationId);\r\n    }\r\n}\n\nexport { PopTokenGenerator };\n//# sourceMappingURL=PopTokenGenerator.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * This class instance helps track the memory changes facilitating\r\n * decisions to read from and write to the persistent cache\r\n */ class TokenCacheContext {\r\n    constructor(tokenCache, hasChanged) {\r\n        this.cache = tokenCache;\r\n        this.hasChanged = hasChanged;\r\n    }\r\n    /**\r\n     * boolean which indicates the changes in cache\r\n     */\r\n    get cacheHasChanged() {\r\n        return this.hasChanged;\r\n    }\r\n    /**\r\n     * function to retrieve the token cache\r\n     */\r\n    get tokenCache() {\r\n        return this.cache;\r\n    }\r\n}\n\nexport { TokenCacheContext };\n//# sourceMappingURL=TokenCacheContext.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\nimport { createClientAuthError } from '../error/ClientAuthError.mjs';\nimport { ServerError } from '../error/ServerError.mjs';\nimport { ScopeSet } from '../request/ScopeSet.mjs';\nimport { AccountEntity } from '../cache/entities/AccountEntity.mjs';\nimport { isInteractionRequiredError, InteractionRequiredAuthError } from '../error/InteractionRequiredAuthError.mjs';\nimport { ProtocolUtils } from '../utils/ProtocolUtils.mjs';\nimport { Constants, HttpStatus, AuthenticationScheme, THE_FAMILY_ID } from '../utils/Constants.mjs';\nimport { PopTokenGenerator } from '../crypto/PopTokenGenerator.mjs';\nimport { TokenCacheContext } from '../cache/persistence/TokenCacheContext.mjs';\nimport { PerformanceEvents } from '../telemetry/performance/PerformanceEvent.mjs';\nimport { extractTokenClaims, checkMaxAge, isKmsi } from '../account/AuthToken.mjs';\nimport { getTenantIdFromIdTokenClaims } from '../account/TokenClaims.mjs';\nimport { updateAccountTenantProfileData, buildTenantProfile } from '../account/AccountInfo.mjs';\nimport { createIdTokenEntity, createAccessTokenEntity, createRefreshTokenEntity } from '../cache/utils/CacheHelpers.mjs';\nimport { toDateFromSeconds } from '../utils/TimeUtils.mjs';\nimport { nonceMismatch, authTimeNotFound, invalidCacheEnvironment, keyIdMissing } from '../error/ClientAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Class that handles response parsing.\r\n * @internal\r\n */\r\nclass ResponseHandler {\r\n    constructor(clientId, cacheStorage, cryptoObj, logger, serializableCache, persistencePlugin, performanceClient) {\r\n        this.clientId = clientId;\r\n        this.cacheStorage = cacheStorage;\r\n        this.cryptoObj = cryptoObj;\r\n        this.logger = logger;\r\n        this.serializableCache = serializableCache;\r\n        this.persistencePlugin = persistencePlugin;\r\n        this.performanceClient = performanceClient;\r\n    }\r\n    /**\r\n     * Function which validates server authorization token response.\r\n     * @param serverResponse\r\n     * @param refreshAccessToken\r\n     */\r\n    validateTokenResponse(serverResponse, refreshAccessToken) {\r\n        // Check for error\r\n        if (serverResponse.error ||\r\n            serverResponse.error_description ||\r\n            serverResponse.suberror) {\r\n            const errString = `Error(s): ${serverResponse.error_codes || Constants.NOT_AVAILABLE} - Timestamp: ${serverResponse.timestamp || Constants.NOT_AVAILABLE} - Description: ${serverResponse.error_description || Constants.NOT_AVAILABLE} - Correlation ID: ${serverResponse.correlation_id || Constants.NOT_AVAILABLE} - Trace ID: ${serverResponse.trace_id || Constants.NOT_AVAILABLE}`;\r\n            const serverErrorNo = serverResponse.error_codes?.length\r\n                ? serverResponse.error_codes[0]\r\n                : undefined;\r\n            const serverError = new ServerError(serverResponse.error, errString, serverResponse.suberror, serverErrorNo, serverResponse.status);\r\n            // check if 500 error\r\n            if (refreshAccessToken &&\r\n                serverResponse.status &&\r\n                serverResponse.status >= HttpStatus.SERVER_ERROR_RANGE_START &&\r\n                serverResponse.status <= HttpStatus.SERVER_ERROR_RANGE_END) {\r\n                this.logger.warning(`executeTokenRequest:validateTokenResponse - AAD is currently unavailable and the access token is unable to be refreshed.\\n${serverError}`);\r\n                // don't throw an exception, but alert the user via a log that the token was unable to be refreshed\r\n                return;\r\n                // check if 400 error\r\n            }\r\n            else if (refreshAccessToken &&\r\n                serverResponse.status &&\r\n                serverResponse.status >= HttpStatus.CLIENT_ERROR_RANGE_START &&\r\n                serverResponse.status <= HttpStatus.CLIENT_ERROR_RANGE_END) {\r\n                this.logger.warning(`executeTokenRequest:validateTokenResponse - AAD is currently available but is unable to refresh the access token.\\n${serverError}`);\r\n                // don't throw an exception, but alert the user via a log that the token was unable to be refreshed\r\n                return;\r\n            }\r\n            if (isInteractionRequiredError(serverResponse.error, serverResponse.error_description, serverResponse.suberror)) {\r\n                throw new InteractionRequiredAuthError(serverResponse.error, serverResponse.error_description, serverResponse.suberror, serverResponse.timestamp || Constants.EMPTY_STRING, serverResponse.trace_id || Constants.EMPTY_STRING, serverResponse.correlation_id || Constants.EMPTY_STRING, serverResponse.claims || Constants.EMPTY_STRING, serverErrorNo);\r\n            }\r\n            throw serverError;\r\n        }\r\n    }\r\n    /**\r\n     * Returns a constructed token response based on given string. Also manages the cache updates and cleanups.\r\n     * @param serverTokenResponse\r\n     * @param authority\r\n     */\r\n    async handleServerTokenResponse(serverTokenResponse, authority, reqTimestamp, request, apiId, authCodePayload, userAssertionHash, handlingRefreshTokenResponse, forceCacheRefreshTokenResponse, serverRequestId) {\r\n        this.performanceClient?.addQueueMeasurement(PerformanceEvents.HandleServerTokenResponse, serverTokenResponse.correlation_id);\r\n        // create an idToken object (not entity)\r\n        let idTokenClaims;\r\n        if (serverTokenResponse.id_token) {\r\n            idTokenClaims = extractTokenClaims(serverTokenResponse.id_token || Constants.EMPTY_STRING, this.cryptoObj.base64Decode);\r\n            // token nonce check (TODO: Add a warning if no nonce is given?)\r\n            if (authCodePayload && authCodePayload.nonce) {\r\n                if (idTokenClaims.nonce !== authCodePayload.nonce) {\r\n                    throw createClientAuthError(nonceMismatch);\r\n                }\r\n            }\r\n            // token max_age check\r\n            if (request.maxAge || request.maxAge === 0) {\r\n                const authTime = idTokenClaims.auth_time;\r\n                if (!authTime) {\r\n                    throw createClientAuthError(authTimeNotFound);\r\n                }\r\n                checkMaxAge(authTime, request.maxAge);\r\n            }\r\n        }\r\n        // generate homeAccountId\r\n        this.homeAccountIdentifier = AccountEntity.generateHomeAccountId(serverTokenResponse.client_info || Constants.EMPTY_STRING, authority.authorityType, this.logger, this.cryptoObj, idTokenClaims);\r\n        // save the response tokens\r\n        let requestStateObj;\r\n        if (!!authCodePayload && !!authCodePayload.state) {\r\n            requestStateObj = ProtocolUtils.parseRequestState(this.cryptoObj, authCodePayload.state);\r\n        }\r\n        // Add keyId from request to serverTokenResponse if defined\r\n        serverTokenResponse.key_id =\r\n            serverTokenResponse.key_id || request.sshKid || undefined;\r\n        const cacheRecord = this.generateCacheRecord(serverTokenResponse, authority, reqTimestamp, request, idTokenClaims, userAssertionHash, authCodePayload);\r\n        let cacheContext;\r\n        try {\r\n            if (this.persistencePlugin && this.serializableCache) {\r\n                this.logger.verbose(\"Persistence enabled, calling beforeCacheAccess\");\r\n                cacheContext = new TokenCacheContext(this.serializableCache, true);\r\n                await this.persistencePlugin.beforeCacheAccess(cacheContext);\r\n            }\r\n            /*\r\n             * When saving a refreshed tokens to the cache, it is expected that the account that was used is present in the cache.\r\n             * If not present, we should return null, as it's the case that another application called removeAccount in between\r\n             * the calls to getAllAccounts and acquireTokenSilent. We should not overwrite that removal, unless explicitly flagged by\r\n             * the developer, as in the case of refresh token flow used in ADAL Node to MSAL Node migration.\r\n             */\r\n            if (handlingRefreshTokenResponse &&\r\n                !forceCacheRefreshTokenResponse &&\r\n                cacheRecord.account) {\r\n                const cachedAccounts = this.cacheStorage.getAllAccounts({\r\n                    homeAccountId: cacheRecord.account.homeAccountId,\r\n                    environment: cacheRecord.account.environment,\r\n                }, request.correlationId);\r\n                if (cachedAccounts.length < 1) {\r\n                    this.logger.warning(\"Account used to refresh tokens not in persistence, refreshed tokens will not be stored in the cache\");\r\n                    this.performanceClient?.addFields({\r\n                        acntLoggedOut: true,\r\n                    }, request.correlationId);\r\n                    return await ResponseHandler.generateAuthenticationResult(this.cryptoObj, authority, cacheRecord, false, request, idTokenClaims, requestStateObj, undefined, serverRequestId);\r\n                }\r\n            }\r\n            await this.cacheStorage.saveCacheRecord(cacheRecord, request.correlationId, isKmsi(idTokenClaims || {}), apiId, request.storeInCache);\r\n        }\r\n        finally {\r\n            if (this.persistencePlugin &&\r\n                this.serializableCache &&\r\n                cacheContext) {\r\n                this.logger.verbose(\"Persistence enabled, calling afterCacheAccess\");\r\n                await this.persistencePlugin.afterCacheAccess(cacheContext);\r\n            }\r\n        }\r\n        return ResponseHandler.generateAuthenticationResult(this.cryptoObj, authority, cacheRecord, false, request, idTokenClaims, requestStateObj, serverTokenResponse, serverRequestId);\r\n    }\r\n    /**\r\n     * Generates CacheRecord\r\n     * @param serverTokenResponse\r\n     * @param idTokenObj\r\n     * @param authority\r\n     */\r\n    generateCacheRecord(serverTokenResponse, authority, reqTimestamp, request, idTokenClaims, userAssertionHash, authCodePayload) {\r\n        const env = authority.getPreferredCache();\r\n        if (!env) {\r\n            throw createClientAuthError(invalidCacheEnvironment);\r\n        }\r\n        const claimsTenantId = getTenantIdFromIdTokenClaims(idTokenClaims);\r\n        // IdToken: non AAD scenarios can have empty realm\r\n        let cachedIdToken;\r\n        let cachedAccount;\r\n        if (serverTokenResponse.id_token && !!idTokenClaims) {\r\n            cachedIdToken = createIdTokenEntity(this.homeAccountIdentifier, env, serverTokenResponse.id_token, this.clientId, claimsTenantId || \"\");\r\n            cachedAccount = buildAccountToCache(this.cacheStorage, authority, this.homeAccountIdentifier, this.cryptoObj.base64Decode, request.correlationId, idTokenClaims, serverTokenResponse.client_info, env, claimsTenantId, authCodePayload, undefined, // nativeAccountId\r\n            this.logger);\r\n        }\r\n        // AccessToken\r\n        let cachedAccessToken = null;\r\n        if (serverTokenResponse.access_token) {\r\n            // If scopes not returned in server response, use request scopes\r\n            const responseScopes = serverTokenResponse.scope\r\n                ? ScopeSet.fromString(serverTokenResponse.scope)\r\n                : new ScopeSet(request.scopes || []);\r\n            /*\r\n             * Use timestamp calculated before request\r\n             * Server may return timestamps as strings, parse to numbers if so.\r\n             */\r\n            const expiresIn = (typeof serverTokenResponse.expires_in === \"string\"\r\n                ? parseInt(serverTokenResponse.expires_in, 10)\r\n                : serverTokenResponse.expires_in) || 0;\r\n            const extExpiresIn = (typeof serverTokenResponse.ext_expires_in === \"string\"\r\n                ? parseInt(serverTokenResponse.ext_expires_in, 10)\r\n                : serverTokenResponse.ext_expires_in) || 0;\r\n            const refreshIn = (typeof serverTokenResponse.refresh_in === \"string\"\r\n                ? parseInt(serverTokenResponse.refresh_in, 10)\r\n                : serverTokenResponse.refresh_in) || undefined;\r\n            const tokenExpirationSeconds = reqTimestamp + expiresIn;\r\n            const extendedTokenExpirationSeconds = tokenExpirationSeconds + extExpiresIn;\r\n            const refreshOnSeconds = refreshIn && refreshIn > 0\r\n                ? reqTimestamp + refreshIn\r\n                : undefined;\r\n            // non AAD scenarios can have empty realm\r\n            cachedAccessToken = createAccessTokenEntity(this.homeAccountIdentifier, env, serverTokenResponse.access_token, this.clientId, claimsTenantId || authority.tenant || \"\", responseScopes.printScopes(), tokenExpirationSeconds, extendedTokenExpirationSeconds, this.cryptoObj.base64Decode, refreshOnSeconds, serverTokenResponse.token_type, userAssertionHash, serverTokenResponse.key_id, request.claims, request.requestedClaimsHash);\r\n        }\r\n        // refreshToken\r\n        let cachedRefreshToken = null;\r\n        if (serverTokenResponse.refresh_token) {\r\n            let rtExpiresOn;\r\n            if (serverTokenResponse.refresh_token_expires_in) {\r\n                const rtExpiresIn = typeof serverTokenResponse.refresh_token_expires_in ===\r\n                    \"string\"\r\n                    ? parseInt(serverTokenResponse.refresh_token_expires_in, 10)\r\n                    : serverTokenResponse.refresh_token_expires_in;\r\n                rtExpiresOn = reqTimestamp + rtExpiresIn;\r\n                this.performanceClient?.addFields({\r\n                    ntwkRtExpiresOnSeconds: rtExpiresOn,\r\n                }, request.correlationId);\r\n            }\r\n            cachedRefreshToken = createRefreshTokenEntity(this.homeAccountIdentifier, env, serverTokenResponse.refresh_token, this.clientId, serverTokenResponse.foci, userAssertionHash, rtExpiresOn);\r\n        }\r\n        // appMetadata\r\n        let cachedAppMetadata = null;\r\n        if (serverTokenResponse.foci) {\r\n            cachedAppMetadata = {\r\n                clientId: this.clientId,\r\n                environment: env,\r\n                familyId: serverTokenResponse.foci,\r\n            };\r\n        }\r\n        return {\r\n            account: cachedAccount,\r\n            idToken: cachedIdToken,\r\n            accessToken: cachedAccessToken,\r\n            refreshToken: cachedRefreshToken,\r\n            appMetadata: cachedAppMetadata,\r\n        };\r\n    }\r\n    /**\r\n     * Creates an @AuthenticationResult from @CacheRecord , @IdToken , and a boolean that states whether or not the result is from cache.\r\n     *\r\n     * Optionally takes a state string that is set as-is in the response.\r\n     *\r\n     * @param cacheRecord\r\n     * @param idTokenObj\r\n     * @param fromTokenCache\r\n     * @param stateString\r\n     */\r\n    static async generateAuthenticationResult(cryptoObj, authority, cacheRecord, fromTokenCache, request, idTokenClaims, requestState, serverTokenResponse, requestId) {\r\n        let accessToken = Constants.EMPTY_STRING;\r\n        let responseScopes = [];\r\n        let expiresOn = null;\r\n        let extExpiresOn;\r\n        let refreshOn;\r\n        let familyId = Constants.EMPTY_STRING;\r\n        if (cacheRecord.accessToken) {\r\n            /*\r\n             * if the request object has `popKid` property, `signPopToken` will be set to false and\r\n             * the token will be returned unsigned\r\n             */\r\n            if (cacheRecord.accessToken.tokenType ===\r\n                AuthenticationScheme.POP &&\r\n                !request.popKid) {\r\n                const popTokenGenerator = new PopTokenGenerator(cryptoObj);\r\n                const { secret, keyId } = cacheRecord.accessToken;\r\n                if (!keyId) {\r\n                    throw createClientAuthError(keyIdMissing);\r\n                }\r\n                accessToken = await popTokenGenerator.signPopToken(secret, keyId, request);\r\n            }\r\n            else {\r\n                accessToken = cacheRecord.accessToken.secret;\r\n            }\r\n            responseScopes = ScopeSet.fromString(cacheRecord.accessToken.target).asArray();\r\n            // Access token expiresOn cached in seconds, converting to Date for AuthenticationResult\r\n            expiresOn = toDateFromSeconds(cacheRecord.accessToken.expiresOn);\r\n            extExpiresOn = toDateFromSeconds(cacheRecord.accessToken.extendedExpiresOn);\r\n            if (cacheRecord.accessToken.refreshOn) {\r\n                refreshOn = toDateFromSeconds(cacheRecord.accessToken.refreshOn);\r\n            }\r\n        }\r\n        if (cacheRecord.appMetadata) {\r\n            familyId =\r\n                cacheRecord.appMetadata.familyId === THE_FAMILY_ID\r\n                    ? THE_FAMILY_ID\r\n                    : \"\";\r\n        }\r\n        const uid = idTokenClaims?.oid || idTokenClaims?.sub || \"\";\r\n        const tid = idTokenClaims?.tid || \"\";\r\n        // for hybrid + native bridge enablement, send back the native account Id\r\n        if (serverTokenResponse?.spa_accountid && !!cacheRecord.account) {\r\n            cacheRecord.account.nativeAccountId =\r\n                serverTokenResponse?.spa_accountid;\r\n        }\r\n        const accountInfo = cacheRecord.account\r\n            ? updateAccountTenantProfileData(AccountEntity.getAccountInfo(cacheRecord.account), undefined, // tenantProfile optional\r\n            idTokenClaims, cacheRecord.idToken?.secret)\r\n            : null;\r\n        return {\r\n            authority: authority.canonicalAuthority,\r\n            uniqueId: uid,\r\n            tenantId: tid,\r\n            scopes: responseScopes,\r\n            account: accountInfo,\r\n            idToken: cacheRecord?.idToken?.secret || \"\",\r\n            idTokenClaims: idTokenClaims || {},\r\n            accessToken: accessToken,\r\n            fromCache: fromTokenCache,\r\n            expiresOn: expiresOn,\r\n            extExpiresOn: extExpiresOn,\r\n            refreshOn: refreshOn,\r\n            correlationId: request.correlationId,\r\n            requestId: requestId || Constants.EMPTY_STRING,\r\n            familyId: familyId,\r\n            tokenType: cacheRecord.accessToken?.tokenType || Constants.EMPTY_STRING,\r\n            state: requestState\r\n                ? requestState.userRequestState\r\n                : Constants.EMPTY_STRING,\r\n            cloudGraphHostName: cacheRecord.account?.cloudGraphHostName ||\r\n                Constants.EMPTY_STRING,\r\n            msGraphHost: cacheRecord.account?.msGraphHost || Constants.EMPTY_STRING,\r\n            code: serverTokenResponse?.spa_code,\r\n            fromNativeBroker: false,\r\n        };\r\n    }\r\n}\r\nfunction buildAccountToCache(cacheStorage, authority, homeAccountId, base64Decode, correlationId, idTokenClaims, clientInfo, environment, claimsTenantId, authCodePayload, nativeAccountId, logger) {\r\n    logger?.verbose(\"setCachedAccount called\");\r\n    // Check if base account is already cached\r\n    const accountKeys = cacheStorage.getAccountKeys();\r\n    const baseAccountKey = accountKeys.find((accountKey) => {\r\n        return accountKey.startsWith(homeAccountId);\r\n    });\r\n    let cachedAccount = null;\r\n    if (baseAccountKey) {\r\n        cachedAccount = cacheStorage.getAccount(baseAccountKey, correlationId);\r\n    }\r\n    const baseAccount = cachedAccount ||\r\n        AccountEntity.createAccount({\r\n            homeAccountId,\r\n            idTokenClaims,\r\n            clientInfo,\r\n            environment,\r\n            cloudGraphHostName: authCodePayload?.cloud_graph_host_name,\r\n            msGraphHost: authCodePayload?.msgraph_host,\r\n            nativeAccountId: nativeAccountId,\r\n        }, authority, base64Decode);\r\n    const tenantProfiles = baseAccount.tenantProfiles || [];\r\n    const tenantId = claimsTenantId || baseAccount.realm;\r\n    if (tenantId &&\r\n        !tenantProfiles.find((tenantProfile) => {\r\n            return tenantProfile.tenantId === tenantId;\r\n        })) {\r\n        const newTenantProfile = buildTenantProfile(homeAccountId, baseAccount.localAccountId, tenantId, idTokenClaims);\r\n        tenantProfiles.push(newTenantProfile);\r\n    }\r\n    baseAccount.tenantProfiles = tenantProfiles;\r\n    return baseAccount;\r\n}\n\nexport { ResponseHandler, buildAccountToCache };\n//# sourceMappingURL=ResponseHandler.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nasync function getClientAssertion(clientAssertion, clientId, tokenEndpoint) {\r\n    if (typeof clientAssertion === \"string\") {\r\n        return clientAssertion;\r\n    }\r\n    else {\r\n        const config = {\r\n            clientId: clientId,\r\n            tokenEndpoint: tokenEndpoint,\r\n        };\r\n        return clientAssertion(config);\r\n    }\r\n}\n\nexport { getClientAssertion };\n//# sourceMappingURL=ClientAssertionUtils.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\nimport { BaseClient } from './BaseClient.mjs';\nimport { addClientId, addRedirectUri, addScopes, addAuthorizationCode, addLibraryInfo, addApplicationTelemetry, addThrottling, addServerTelemetry, addCodeVerifier, addClientSecret, addClientAssertion, addClientAssertionType, addGrantType, addClientInfo, addPopToken, addSshJwk, addCcsUpn, addCcsOid, addBrokerParameters, addExtraQueryParameters, instrumentBrokerParams, addClaims, addPostLogoutRedirectUri, addCorrelationId, addIdTokenHint, addState, addLogoutHint, addInstanceAware } from '../request/RequestParameterBuilder.mjs';\nimport { mapToQueryString } from '../utils/UrlUtils.mjs';\nimport { Separators, AuthenticationScheme, HeaderNames, GrantType } from '../utils/Constants.mjs';\nimport { RETURN_SPA_CODE, BROKER_CLIENT_ID, CLIENT_ID } from '../constants/AADServerParamKeys.mjs';\nimport { isOidcProtocolMode } from '../config/ClientConfiguration.mjs';\nimport { ResponseHandler } from '../response/ResponseHandler.mjs';\nimport { StringUtils } from '../utils/StringUtils.mjs';\nimport { createClientAuthError } from '../error/ClientAuthError.mjs';\nimport { UrlString } from '../url/UrlString.mjs';\nimport { PopTokenGenerator } from '../crypto/PopTokenGenerator.mjs';\nimport { nowSeconds } from '../utils/TimeUtils.mjs';\nimport { buildClientInfo, buildClientInfoFromHomeAccountId } from '../account/ClientInfo.mjs';\nimport { CcsCredentialType } from '../account/CcsCredential.mjs';\nimport { createClientConfigurationError } from '../error/ClientConfigurationError.mjs';\nimport { PerformanceEvents } from '../telemetry/performance/PerformanceEvent.mjs';\nimport { invokeAsync } from '../utils/FunctionWrappers.mjs';\nimport { getClientAssertion } from '../utils/ClientAssertionUtils.mjs';\nimport { getRequestThumbprint } from '../network/RequestThumbprint.mjs';\nimport { requestCannotBeMade } from '../error/ClientAuthErrorCodes.mjs';\nimport { logoutRequestEmpty, redirectUriEmpty, missingSshJwk } from '../error/ClientConfigurationErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Oauth2.0 Authorization Code client\r\n * @internal\r\n */\r\nclass AuthorizationCodeClient extends BaseClient {\r\n    constructor(configuration, performanceClient) {\r\n        super(configuration, performanceClient);\r\n        // Flag to indicate if client is for hybrid spa auth code redemption\r\n        this.includeRedirectUri = true;\r\n        this.oidcDefaultScopes =\r\n            this.config.authOptions.authority.options.OIDCOptions?.defaultScopes;\r\n    }\r\n    /**\r\n     * API to acquire a token in exchange of 'authorization_code` acquired by the user in the first leg of the\r\n     * authorization_code_grant\r\n     * @param request\r\n     * @param apiId - API identifier for telemetry tracking\r\n     */\r\n    async acquireToken(request, apiId, authCodePayload) {\r\n        this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthClientAcquireToken, request.correlationId);\r\n        if (!request.code) {\r\n            throw createClientAuthError(requestCannotBeMade);\r\n        }\r\n        const reqTimestamp = nowSeconds();\r\n        const response = await invokeAsync(this.executeTokenRequest.bind(this), PerformanceEvents.AuthClientExecuteTokenRequest, this.logger, this.performanceClient, request.correlationId)(this.authority, request);\r\n        // Retrieve requestId from response headers\r\n        const requestId = response.headers?.[HeaderNames.X_MS_REQUEST_ID];\r\n        const responseHandler = new ResponseHandler(this.config.authOptions.clientId, this.cacheManager, this.cryptoUtils, this.logger, this.config.serializableCache, this.config.persistencePlugin, this.performanceClient);\r\n        // Validate response. This function throws a server error if an error is returned by the server.\r\n        responseHandler.validateTokenResponse(response.body);\r\n        return invokeAsync(responseHandler.handleServerTokenResponse.bind(responseHandler), PerformanceEvents.HandleServerTokenResponse, this.logger, this.performanceClient, request.correlationId)(response.body, this.authority, reqTimestamp, request, apiId, authCodePayload, undefined, undefined, undefined, requestId);\r\n    }\r\n    /**\r\n     * Used to log out the current user, and redirect the user to the postLogoutRedirectUri.\r\n     * Default behaviour is to redirect the user to `window.location.href`.\r\n     * @param authorityUri\r\n     */\r\n    getLogoutUri(logoutRequest) {\r\n        // Throw error if logoutRequest is null/undefined\r\n        if (!logoutRequest) {\r\n            throw createClientConfigurationError(logoutRequestEmpty);\r\n        }\r\n        const queryString = this.createLogoutUrlQueryString(logoutRequest);\r\n        // Construct logout URI\r\n        return UrlString.appendQueryString(this.authority.endSessionEndpoint, queryString);\r\n    }\r\n    /**\r\n     * Executes POST request to token endpoint\r\n     * @param authority\r\n     * @param request\r\n     */\r\n    async executeTokenRequest(authority, request) {\r\n        this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthClientExecuteTokenRequest, request.correlationId);\r\n        const queryParametersString = this.createTokenQueryParameters(request);\r\n        const endpoint = UrlString.appendQueryString(authority.tokenEndpoint, queryParametersString);\r\n        const requestBody = await invokeAsync(this.createTokenRequestBody.bind(this), PerformanceEvents.AuthClientCreateTokenRequestBody, this.logger, this.performanceClient, request.correlationId)(request);\r\n        let ccsCredential = undefined;\r\n        if (request.clientInfo) {\r\n            try {\r\n                const clientInfo = buildClientInfo(request.clientInfo, this.cryptoUtils.base64Decode);\r\n                ccsCredential = {\r\n                    credential: `${clientInfo.uid}${Separators.CLIENT_INFO_SEPARATOR}${clientInfo.utid}`,\r\n                    type: CcsCredentialType.HOME_ACCOUNT_ID,\r\n                };\r\n            }\r\n            catch (e) {\r\n                this.logger.verbose(\"Could not parse client info for CCS Header: \" + e);\r\n            }\r\n        }\r\n        const headers = this.createTokenRequestHeaders(ccsCredential || request.ccsCredential);\r\n        const thumbprint = getRequestThumbprint(this.config.authOptions.clientId, request);\r\n        return invokeAsync(this.executePostToTokenEndpoint.bind(this), PerformanceEvents.AuthorizationCodeClientExecutePostToTokenEndpoint, this.logger, this.performanceClient, request.correlationId)(endpoint, requestBody, headers, thumbprint, request.correlationId, PerformanceEvents.AuthorizationCodeClientExecutePostToTokenEndpoint);\r\n    }\r\n    /**\r\n     * Generates a map for all the params to be sent to the service\r\n     * @param request\r\n     */\r\n    async createTokenRequestBody(request) {\r\n        this.performanceClient?.addQueueMeasurement(PerformanceEvents.AuthClientCreateTokenRequestBody, request.correlationId);\r\n        const parameters = new Map();\r\n        addClientId(parameters, request.embeddedClientId ||\r\n            request.tokenBodyParameters?.[CLIENT_ID] ||\r\n            this.config.authOptions.clientId);\r\n        /*\r\n         * For hybrid spa flow, there will be a code but no verifier\r\n         * In this scenario, don't include redirect uri as auth code will not be bound to redirect URI\r\n         */\r\n        if (!this.includeRedirectUri) {\r\n            // Just validate\r\n            if (!request.redirectUri) {\r\n                throw createClientConfigurationError(redirectUriEmpty);\r\n            }\r\n        }\r\n        else {\r\n            // Validate and include redirect uri\r\n            addRedirectUri(parameters, request.redirectUri);\r\n        }\r\n        // Add scope array, parameter builder will add default scopes and dedupe\r\n        addScopes(parameters, request.scopes, true, this.oidcDefaultScopes);\r\n        // add code: user set, not validated\r\n        addAuthorizationCode(parameters, request.code);\r\n        // Add library metadata\r\n        addLibraryInfo(parameters, this.config.libraryInfo);\r\n        addApplicationTelemetry(parameters, this.config.telemetry.application);\r\n        addThrottling(parameters);\r\n        if (this.serverTelemetryManager && !isOidcProtocolMode(this.config)) {\r\n            addServerTelemetry(parameters, this.serverTelemetryManager);\r\n        }\r\n        // add code_verifier if passed\r\n        if (request.codeVerifier) {\r\n            addCodeVerifier(parameters, request.codeVerifier);\r\n        }\r\n        if (this.config.clientCredentials.clientSecret) {\r\n            addClientSecret(parameters, this.config.clientCredentials.clientSecret);\r\n        }\r\n        if (this.config.clientCredentials.clientAssertion) {\r\n            const clientAssertion = this.config.clientCredentials.clientAssertion;\r\n            addClientAssertion(parameters, await getClientAssertion(clientAssertion.assertion, this.config.authOptions.clientId, request.resourceRequestUri));\r\n            addClientAssertionType(parameters, clientAssertion.assertionType);\r\n        }\r\n        addGrantType(parameters, GrantType.AUTHORIZATION_CODE_GRANT);\r\n        addClientInfo(parameters);\r\n        if (request.authenticationScheme === AuthenticationScheme.POP) {\r\n            const popTokenGenerator = new PopTokenGenerator(this.cryptoUtils, this.performanceClient);\r\n            let reqCnfData;\r\n            if (!request.popKid) {\r\n                const generatedReqCnfData = await invokeAsync(popTokenGenerator.generateCnf.bind(popTokenGenerator), PerformanceEvents.PopTokenGenerateCnf, this.logger, this.performanceClient, request.correlationId)(request, this.logger);\r\n                reqCnfData = generatedReqCnfData.reqCnfString;\r\n            }\r\n            else {\r\n                reqCnfData = this.cryptoUtils.encodeKid(request.popKid);\r\n            }\r\n            // SPA PoP requires full Base64Url encoded req_cnf string (unhashed)\r\n            addPopToken(parameters, reqCnfData);\r\n        }\r\n        else if (request.authenticationScheme === AuthenticationScheme.SSH) {\r\n            if (request.sshJwk) {\r\n                addSshJwk(parameters, request.sshJwk);\r\n            }\r\n            else {\r\n                throw createClientConfigurationError(missingSshJwk);\r\n            }\r\n        }\r\n        let ccsCred = undefined;\r\n        if (request.clientInfo) {\r\n            try {\r\n                const clientInfo = buildClientInfo(request.clientInfo, this.cryptoUtils.base64Decode);\r\n                ccsCred = {\r\n                    credential: `${clientInfo.uid}${Separators.CLIENT_INFO_SEPARATOR}${clientInfo.utid}`,\r\n                    type: CcsCredentialType.HOME_ACCOUNT_ID,\r\n                };\r\n            }\r\n            catch (e) {\r\n                this.logger.verbose(\"Could not parse client info for CCS Header: \" + e);\r\n            }\r\n        }\r\n        else {\r\n            ccsCred = request.ccsCredential;\r\n        }\r\n        // Adds these as parameters in the request instead of headers to prevent CORS preflight request\r\n        if (this.config.systemOptions.preventCorsPreflight && ccsCred) {\r\n            switch (ccsCred.type) {\r\n                case CcsCredentialType.HOME_ACCOUNT_ID:\r\n                    try {\r\n                        const clientInfo = buildClientInfoFromHomeAccountId(ccsCred.credential);\r\n                        addCcsOid(parameters, clientInfo);\r\n                    }\r\n                    catch (e) {\r\n                        this.logger.verbose(\"Could not parse home account ID for CCS Header: \" +\r\n                            e);\r\n                    }\r\n                    break;\r\n                case CcsCredentialType.UPN:\r\n                    addCcsUpn(parameters, ccsCred.credential);\r\n                    break;\r\n            }\r\n        }\r\n        if (request.embeddedClientId) {\r\n            addBrokerParameters(parameters, this.config.authOptions.clientId, this.config.authOptions.redirectUri);\r\n        }\r\n        if (request.tokenBodyParameters) {\r\n            addExtraQueryParameters(parameters, request.tokenBodyParameters);\r\n        }\r\n        // Add hybrid spa parameters if not already provided\r\n        if (request.enableSpaAuthorizationCode &&\r\n            (!request.tokenBodyParameters ||\r\n                !request.tokenBodyParameters[RETURN_SPA_CODE])) {\r\n            addExtraQueryParameters(parameters, {\r\n                [RETURN_SPA_CODE]: \"1\",\r\n            });\r\n        }\r\n        instrumentBrokerParams(parameters, request.correlationId, this.performanceClient);\r\n        // ignore config claims if skipBrokerClaims is set to true and this is a brokered authentication flow\r\n        const configClaims = request.skipBrokerClaims &&\r\n            parameters.has(BROKER_CLIENT_ID)\r\n            ? undefined\r\n            : this.config.authOptions.clientCapabilities;\r\n        if (!StringUtils.isEmptyObj(request.claims) ||\r\n            (configClaims && configClaims.length > 0)) {\r\n            addClaims(parameters, request.claims, configClaims);\r\n        }\r\n        return mapToQueryString(parameters);\r\n    }\r\n    /**\r\n     * This API validates the `EndSessionRequest` and creates a URL\r\n     * @param request\r\n     */\r\n    createLogoutUrlQueryString(request) {\r\n        const parameters = new Map();\r\n        if (request.postLogoutRedirectUri) {\r\n            addPostLogoutRedirectUri(parameters, request.postLogoutRedirectUri);\r\n        }\r\n        if (request.correlationId) {\r\n            addCorrelationId(parameters, request.correlationId);\r\n        }\r\n        if (request.idTokenHint) {\r\n            addIdTokenHint(parameters, request.idTokenHint);\r\n        }\r\n        if (request.state) {\r\n            addState(parameters, request.state);\r\n        }\r\n        if (request.logoutHint) {\r\n            addLogoutHint(parameters, request.logoutHint);\r\n        }\r\n        if (request.extraQueryParameters) {\r\n            addExtraQueryParameters(parameters, request.extraQueryParameters);\r\n        }\r\n        if (this.config.authOptions.instanceAware) {\r\n            addInstanceAware(parameters);\r\n        }\r\n        return mapToQueryString(parameters, this.config.authOptions.encodeExtraQueryParams, request.extraQueryParameters);\r\n    }\r\n}\n\nexport { AuthorizationCodeClient };\n//# sourceMappingURL=AuthorizationCodeClient.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\nimport { isOidcProtocolMode } from '../config/ClientConfiguration.mjs';\nimport { BaseClient } from './BaseClient.mjs';\nimport { addClientId, addRedirectUri, addScopes, addGrantType, addClientInfo, addLibraryInfo, addApplicationTelemetry, addThrottling, addServerTelemetry, addRefreshToken, addClientSecret, addClientAssertion, addClientAssertionType, addPopToken, addSshJwk, addCcsUpn, addCcsOid, addBrokerParameters, addExtraQueryParameters, instrumentBrokerParams, addClaims } from '../request/RequestParameterBuilder.mjs';\nimport { mapToQueryString } from '../utils/UrlUtils.mjs';\nimport { AuthenticationScheme, HeaderNames, Errors, GrantType } from '../utils/Constants.mjs';\nimport { BROKER_CLIENT_ID, CLIENT_ID } from '../constants/AADServerParamKeys.mjs';\nimport { ResponseHandler } from '../response/ResponseHandler.mjs';\nimport { PopTokenGenerator } from '../crypto/PopTokenGenerator.mjs';\nimport { StringUtils } from '../utils/StringUtils.mjs';\nimport { createClientConfigurationError } from '../error/ClientConfigurationError.mjs';\nimport { createClientAuthError } from '../error/ClientAuthError.mjs';\nimport { ServerError } from '../error/ServerError.mjs';\nimport { nowSeconds, isTokenExpired } from '../utils/TimeUtils.mjs';\nimport { UrlString } from '../url/UrlString.mjs';\nimport { CcsCredentialType } from '../account/CcsCredential.mjs';\nimport { buildClientInfoFromHomeAccountId } from '../account/ClientInfo.mjs';\nimport { createInteractionRequiredAuthError, InteractionRequiredAuthError } from '../error/InteractionRequiredAuthError.mjs';\nimport { PerformanceEvents } from '../telemetry/performance/PerformanceEvent.mjs';\nimport { invokeAsync, invoke } from '../utils/FunctionWrappers.mjs';\nimport { getClientAssertion } from '../utils/ClientAssertionUtils.mjs';\nimport { getRequestThumbprint } from '../network/RequestThumbprint.mjs';\nimport { badToken, noTokensFound, refreshTokenExpired } from '../error/InteractionRequiredAuthErrorCodes.mjs';\nimport { tokenRequestEmpty, missingSshJwk } from '../error/ClientConfigurationErrorCodes.mjs';\nimport { noAccountInSilentRequest } from '../error/ClientAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst DEFAULT_REFRESH_TOKEN_EXPIRATION_OFFSET_SECONDS = 300; // 5 Minutes\r\n/**\r\n * OAuth2.0 refresh token client\r\n * @internal\r\n */\r\nclass RefreshTokenClient extends BaseClient {\r\n    constructor(configuration, performanceClient) {\r\n        super(configuration, performanceClient);\r\n    }\r\n    async acquireToken(request, apiId) {\r\n        this.performanceClient?.addQueueMeasurement(PerformanceEvents.RefreshTokenClientAcquireToken, request.correlationId);\r\n        const reqTimestamp = nowSeconds();\r\n        const response = await invokeAsync(this.executeTokenRequest.bind(this), PerformanceEvents.RefreshTokenClientExecuteTokenRequest, this.logger, this.performanceClient, request.correlationId)(request, this.authority);\r\n        // Retrieve requestId from response headers\r\n        const requestId = response.headers?.[HeaderNames.X_MS_REQUEST_ID];\r\n        const responseHandler = new ResponseHandler(this.config.authOptions.clientId, this.cacheManager, this.cryptoUtils, this.logger, this.config.serializableCache, this.config.persistencePlugin);\r\n        responseHandler.validateTokenResponse(response.body);\r\n        return invokeAsync(responseHandler.handleServerTokenResponse.bind(responseHandler), PerformanceEvents.HandleServerTokenResponse, this.logger, this.performanceClient, request.correlationId)(response.body, this.authority, reqTimestamp, request, apiId, undefined, undefined, true, request.forceCache, requestId);\r\n    }\r\n    /**\r\n     * Gets cached refresh token and attaches to request, then calls acquireToken API\r\n     * @param request\r\n     */\r\n    async acquireTokenByRefreshToken(request, apiId) {\r\n        // Cannot renew token if no request object is given.\r\n        if (!request) {\r\n            throw createClientConfigurationError(tokenRequestEmpty);\r\n        }\r\n        this.performanceClient?.addQueueMeasurement(PerformanceEvents.RefreshTokenClientAcquireTokenByRefreshToken, request.correlationId);\r\n        // We currently do not support silent flow for account === null use cases; This will be revisited for confidential flow usecases\r\n        if (!request.account) {\r\n            throw createClientAuthError(noAccountInSilentRequest);\r\n        }\r\n        // try checking if FOCI is enabled for the given application\r\n        const isFOCI = this.cacheManager.isAppMetadataFOCI(request.account.environment);\r\n        // if the app is part of the family, retrive a Family refresh token if present and make a refreshTokenRequest\r\n        if (isFOCI) {\r\n            try {\r\n                return await invokeAsync(this.acquireTokenWithCachedRefreshToken.bind(this), PerformanceEvents.RefreshTokenClientAcquireTokenWithCachedRefreshToken, this.logger, this.performanceClient, request.correlationId)(request, true, apiId);\r\n            }\r\n            catch (e) {\r\n                const noFamilyRTInCache = e instanceof InteractionRequiredAuthError &&\r\n                    e.errorCode ===\r\n                        noTokensFound;\r\n                const clientMismatchErrorWithFamilyRT = e instanceof ServerError &&\r\n                    e.errorCode === Errors.INVALID_GRANT_ERROR &&\r\n                    e.subError === Errors.CLIENT_MISMATCH_ERROR;\r\n                // if family Refresh Token (FRT) cache acquisition fails or if client_mismatch error is seen with FRT, reattempt with application Refresh Token (ART)\r\n                if (noFamilyRTInCache || clientMismatchErrorWithFamilyRT) {\r\n                    return invokeAsync(this.acquireTokenWithCachedRefreshToken.bind(this), PerformanceEvents.RefreshTokenClientAcquireTokenWithCachedRefreshToken, this.logger, this.performanceClient, request.correlationId)(request, false, apiId);\r\n                    // throw in all other cases\r\n                }\r\n                else {\r\n                    throw e;\r\n                }\r\n            }\r\n        }\r\n        // fall back to application refresh token acquisition\r\n        return invokeAsync(this.acquireTokenWithCachedRefreshToken.bind(this), PerformanceEvents.RefreshTokenClientAcquireTokenWithCachedRefreshToken, this.logger, this.performanceClient, request.correlationId)(request, false, apiId);\r\n    }\r\n    /**\r\n     * makes a network call to acquire tokens by exchanging RefreshToken available in userCache; throws if refresh token is not cached\r\n     * @param request\r\n     */\r\n    async acquireTokenWithCachedRefreshToken(request, foci, apiId) {\r\n        this.performanceClient?.addQueueMeasurement(PerformanceEvents.RefreshTokenClientAcquireTokenWithCachedRefreshToken, request.correlationId);\r\n        // fetches family RT or application RT based on FOCI value\r\n        const refreshToken = invoke(this.cacheManager.getRefreshToken.bind(this.cacheManager), PerformanceEvents.CacheManagerGetRefreshToken, this.logger, this.performanceClient, request.correlationId)(request.account, foci, request.correlationId, undefined, this.performanceClient);\r\n        if (!refreshToken) {\r\n            throw createInteractionRequiredAuthError(noTokensFound);\r\n        }\r\n        if (refreshToken.expiresOn) {\r\n            const offset = request.refreshTokenExpirationOffsetSeconds ||\r\n                DEFAULT_REFRESH_TOKEN_EXPIRATION_OFFSET_SECONDS;\r\n            this.performanceClient?.addFields({\r\n                cacheRtExpiresOnSeconds: Number(refreshToken.expiresOn),\r\n                rtOffsetSeconds: offset,\r\n            }, request.correlationId);\r\n            if (isTokenExpired(refreshToken.expiresOn, offset)) {\r\n                throw createInteractionRequiredAuthError(refreshTokenExpired);\r\n            }\r\n        }\r\n        const refreshTokenRequest = {\r\n            ...request,\r\n            refreshToken: refreshToken.secret,\r\n            authenticationScheme: request.authenticationScheme || AuthenticationScheme.BEARER,\r\n            ccsCredential: {\r\n                credential: request.account.homeAccountId,\r\n                type: CcsCredentialType.HOME_ACCOUNT_ID,\r\n            },\r\n        };\r\n        try {\r\n            return await invokeAsync(this.acquireToken.bind(this), PerformanceEvents.RefreshTokenClientAcquireToken, this.logger, this.performanceClient, request.correlationId)(refreshTokenRequest, apiId);\r\n        }\r\n        catch (e) {\r\n            if (e instanceof InteractionRequiredAuthError) {\r\n                if (e.subError === badToken) {\r\n                    // Remove bad refresh token from cache\r\n                    this.logger.verbose(\"acquireTokenWithRefreshToken: bad refresh token, removing from cache\");\r\n                    const badRefreshTokenKey = this.cacheManager.generateCredentialKey(refreshToken);\r\n                    this.cacheManager.removeRefreshToken(badRefreshTokenKey, request.correlationId);\r\n                }\r\n            }\r\n            throw e;\r\n        }\r\n    }\r\n    /**\r\n     * Constructs the network message and makes a NW call to the underlying secure token service\r\n     * @param request\r\n     * @param authority\r\n     */\r\n    async executeTokenRequest(request, authority) {\r\n        this.performanceClient?.addQueueMeasurement(PerformanceEvents.RefreshTokenClientExecuteTokenRequest, request.correlationId);\r\n        const queryParametersString = this.createTokenQueryParameters(request);\r\n        const endpoint = UrlString.appendQueryString(authority.tokenEndpoint, queryParametersString);\r\n        const requestBody = await invokeAsync(this.createTokenRequestBody.bind(this), PerformanceEvents.RefreshTokenClientCreateTokenRequestBody, this.logger, this.performanceClient, request.correlationId)(request);\r\n        const headers = this.createTokenRequestHeaders(request.ccsCredential);\r\n        const thumbprint = getRequestThumbprint(this.config.authOptions.clientId, request);\r\n        return invokeAsync(this.executePostToTokenEndpoint.bind(this), PerformanceEvents.RefreshTokenClientExecutePostToTokenEndpoint, this.logger, this.performanceClient, request.correlationId)(endpoint, requestBody, headers, thumbprint, request.correlationId, PerformanceEvents.RefreshTokenClientExecutePostToTokenEndpoint);\r\n    }\r\n    /**\r\n     * Helper function to create the token request body\r\n     * @param request\r\n     */\r\n    async createTokenRequestBody(request) {\r\n        this.performanceClient?.addQueueMeasurement(PerformanceEvents.RefreshTokenClientCreateTokenRequestBody, request.correlationId);\r\n        const parameters = new Map();\r\n        addClientId(parameters, request.embeddedClientId ||\r\n            request.tokenBodyParameters?.[CLIENT_ID] ||\r\n            this.config.authOptions.clientId);\r\n        if (request.redirectUri) {\r\n            addRedirectUri(parameters, request.redirectUri);\r\n        }\r\n        addScopes(parameters, request.scopes, true, this.config.authOptions.authority.options.OIDCOptions?.defaultScopes);\r\n        addGrantType(parameters, GrantType.REFRESH_TOKEN_GRANT);\r\n        addClientInfo(parameters);\r\n        addLibraryInfo(parameters, this.config.libraryInfo);\r\n        addApplicationTelemetry(parameters, this.config.telemetry.application);\r\n        addThrottling(parameters);\r\n        if (this.serverTelemetryManager && !isOidcProtocolMode(this.config)) {\r\n            addServerTelemetry(parameters, this.serverTelemetryManager);\r\n        }\r\n        addRefreshToken(parameters, request.refreshToken);\r\n        if (this.config.clientCredentials.clientSecret) {\r\n            addClientSecret(parameters, this.config.clientCredentials.clientSecret);\r\n        }\r\n        if (this.config.clientCredentials.clientAssertion) {\r\n            const clientAssertion = this.config.clientCredentials.clientAssertion;\r\n            addClientAssertion(parameters, await getClientAssertion(clientAssertion.assertion, this.config.authOptions.clientId, request.resourceRequestUri));\r\n            addClientAssertionType(parameters, clientAssertion.assertionType);\r\n        }\r\n        if (request.authenticationScheme === AuthenticationScheme.POP) {\r\n            const popTokenGenerator = new PopTokenGenerator(this.cryptoUtils, this.performanceClient);\r\n            let reqCnfData;\r\n            if (!request.popKid) {\r\n                const generatedReqCnfData = await invokeAsync(popTokenGenerator.generateCnf.bind(popTokenGenerator), PerformanceEvents.PopTokenGenerateCnf, this.logger, this.performanceClient, request.correlationId)(request, this.logger);\r\n                reqCnfData = generatedReqCnfData.reqCnfString;\r\n            }\r\n            else {\r\n                reqCnfData = this.cryptoUtils.encodeKid(request.popKid);\r\n            }\r\n            // SPA PoP requires full Base64Url encoded req_cnf string (unhashed)\r\n            addPopToken(parameters, reqCnfData);\r\n        }\r\n        else if (request.authenticationScheme === AuthenticationScheme.SSH) {\r\n            if (request.sshJwk) {\r\n                addSshJwk(parameters, request.sshJwk);\r\n            }\r\n            else {\r\n                throw createClientConfigurationError(missingSshJwk);\r\n            }\r\n        }\r\n        if (this.config.systemOptions.preventCorsPreflight &&\r\n            request.ccsCredential) {\r\n            switch (request.ccsCredential.type) {\r\n                case CcsCredentialType.HOME_ACCOUNT_ID:\r\n                    try {\r\n                        const clientInfo = buildClientInfoFromHomeAccountId(request.ccsCredential.credential);\r\n                        addCcsOid(parameters, clientInfo);\r\n                    }\r\n                    catch (e) {\r\n                        this.logger.verbose(\"Could not parse home account ID for CCS Header: \" +\r\n                            e);\r\n                    }\r\n                    break;\r\n                case CcsCredentialType.UPN:\r\n                    addCcsUpn(parameters, request.ccsCredential.credential);\r\n                    break;\r\n            }\r\n        }\r\n        if (request.embeddedClientId) {\r\n            addBrokerParameters(parameters, this.config.authOptions.clientId, this.config.authOptions.redirectUri);\r\n        }\r\n        if (request.tokenBodyParameters) {\r\n            addExtraQueryParameters(parameters, request.tokenBodyParameters);\r\n        }\r\n        instrumentBrokerParams(parameters, request.correlationId, this.performanceClient);\r\n        // ignore config claims if skipBrokerClaims is set to true and this is a brokered authentication flow\r\n        const configClaims = request.skipBrokerClaims &&\r\n            parameters.has(BROKER_CLIENT_ID)\r\n            ? undefined\r\n            : this.config.authOptions.clientCapabilities;\r\n        if (!StringUtils.isEmptyObj(request.claims) ||\r\n            (configClaims && configClaims.length > 0)) {\r\n            addClaims(parameters, request.claims, configClaims);\r\n        }\r\n        return mapToQueryString(parameters);\r\n    }\r\n}\n\nexport { RefreshTokenClient };\n//# sourceMappingURL=RefreshTokenClient.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\nimport { BaseClient } from './BaseClient.mjs';\nimport { wasClockTurnedBack, isTokenExpired } from '../utils/TimeUtils.mjs';\nimport { createClientAuthError } from '../error/ClientAuthError.mjs';\nimport { ResponseHandler } from '../response/ResponseHandler.mjs';\nimport { CacheOutcome } from '../utils/Constants.mjs';\nimport { StringUtils } from '../utils/StringUtils.mjs';\nimport { extractTokenClaims, checkMaxAge } from '../account/AuthToken.mjs';\nimport { PerformanceEvents } from '../telemetry/performance/PerformanceEvent.mjs';\nimport { invokeAsync } from '../utils/FunctionWrappers.mjs';\nimport { getTenantFromAuthorityString } from '../authority/Authority.mjs';\nimport { tokenRefreshRequired, noAccountInSilentRequest, authTimeNotFound } from '../error/ClientAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/** @internal */\r\nclass SilentFlowClient extends BaseClient {\r\n    constructor(configuration, performanceClient) {\r\n        super(configuration, performanceClient);\r\n    }\r\n    /**\r\n     * Retrieves token from cache or throws an error if it must be refreshed.\r\n     * @param request\r\n     */\r\n    async acquireCachedToken(request) {\r\n        this.performanceClient?.addQueueMeasurement(PerformanceEvents.SilentFlowClientAcquireCachedToken, request.correlationId);\r\n        let lastCacheOutcome = CacheOutcome.NOT_APPLICABLE;\r\n        if (request.forceRefresh ||\r\n            (!this.config.cacheOptions.claimsBasedCachingEnabled &&\r\n                !StringUtils.isEmptyObj(request.claims))) {\r\n            // Must refresh due to present force_refresh flag.\r\n            this.setCacheOutcome(CacheOutcome.FORCE_REFRESH_OR_CLAIMS, request.correlationId);\r\n            throw createClientAuthError(tokenRefreshRequired);\r\n        }\r\n        // We currently do not support silent flow for account === null use cases; This will be revisited for confidential flow usecases\r\n        if (!request.account) {\r\n            throw createClientAuthError(noAccountInSilentRequest);\r\n        }\r\n        const requestTenantId = request.account.tenantId ||\r\n            getTenantFromAuthorityString(request.authority);\r\n        const tokenKeys = this.cacheManager.getTokenKeys();\r\n        const cachedAccessToken = this.cacheManager.getAccessToken(request.account, request, tokenKeys, requestTenantId);\r\n        if (!cachedAccessToken) {\r\n            // must refresh due to non-existent access_token\r\n            this.setCacheOutcome(CacheOutcome.NO_CACHED_ACCESS_TOKEN, request.correlationId);\r\n            throw createClientAuthError(tokenRefreshRequired);\r\n        }\r\n        else if (wasClockTurnedBack(cachedAccessToken.cachedAt) ||\r\n            isTokenExpired(cachedAccessToken.expiresOn, this.config.systemOptions.tokenRenewalOffsetSeconds)) {\r\n            // must refresh due to the expires_in value\r\n            this.setCacheOutcome(CacheOutcome.CACHED_ACCESS_TOKEN_EXPIRED, request.correlationId);\r\n            throw createClientAuthError(tokenRefreshRequired);\r\n        }\r\n        else if (cachedAccessToken.refreshOn &&\r\n            isTokenExpired(cachedAccessToken.refreshOn, 0)) {\r\n            // must refresh (in the background) due to the refresh_in value\r\n            lastCacheOutcome = CacheOutcome.PROACTIVELY_REFRESHED;\r\n            // don't throw ClientAuthError.createRefreshRequiredError(), return cached token instead\r\n        }\r\n        const environment = request.authority || this.authority.getPreferredCache();\r\n        const cacheRecord = {\r\n            account: this.cacheManager.getAccount(this.cacheManager.generateAccountKey(request.account), request.correlationId),\r\n            accessToken: cachedAccessToken,\r\n            idToken: this.cacheManager.getIdToken(request.account, request.correlationId, tokenKeys, requestTenantId, this.performanceClient),\r\n            refreshToken: null,\r\n            appMetadata: this.cacheManager.readAppMetadataFromCache(environment),\r\n        };\r\n        this.setCacheOutcome(lastCacheOutcome, request.correlationId);\r\n        if (this.config.serverTelemetryManager) {\r\n            this.config.serverTelemetryManager.incrementCacheHits();\r\n        }\r\n        return [\r\n            await invokeAsync(this.generateResultFromCacheRecord.bind(this), PerformanceEvents.SilentFlowClientGenerateResultFromCacheRecord, this.logger, this.performanceClient, request.correlationId)(cacheRecord, request),\r\n            lastCacheOutcome,\r\n        ];\r\n    }\r\n    setCacheOutcome(cacheOutcome, correlationId) {\r\n        this.serverTelemetryManager?.setCacheOutcome(cacheOutcome);\r\n        this.performanceClient?.addFields({\r\n            cacheOutcome: cacheOutcome,\r\n        }, correlationId);\r\n        if (cacheOutcome !== CacheOutcome.NOT_APPLICABLE) {\r\n            this.logger.info(`Token refresh is required due to cache outcome: ${cacheOutcome}`);\r\n        }\r\n    }\r\n    /**\r\n     * Helper function to build response object from the CacheRecord\r\n     * @param cacheRecord\r\n     */\r\n    async generateResultFromCacheRecord(cacheRecord, request) {\r\n        this.performanceClient?.addQueueMeasurement(PerformanceEvents.SilentFlowClientGenerateResultFromCacheRecord, request.correlationId);\r\n        let idTokenClaims;\r\n        if (cacheRecord.idToken) {\r\n            idTokenClaims = extractTokenClaims(cacheRecord.idToken.secret, this.config.cryptoInterface.base64Decode);\r\n        }\r\n        // token max_age check\r\n        if (request.maxAge || request.maxAge === 0) {\r\n            const authTime = idTokenClaims?.auth_time;\r\n            if (!authTime) {\r\n                throw createClientAuthError(authTimeNotFound);\r\n            }\r\n            checkMaxAge(authTime, request.maxAge);\r\n        }\r\n        return ResponseHandler.generateAuthenticationResult(this.cryptoUtils, this.authority, cacheRecord, true, request, idTokenClaims);\r\n    }\r\n}\n\nexport { SilentFlowClient };\n//# sourceMappingURL=SilentFlowClient.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\nimport { createClientAuthError } from '../error/ClientAuthError.mjs';\nimport { methodNotImplemented } from '../error/ClientAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst StubbedNetworkModule = {\r\n    sendGetRequestAsync: () => {\r\n        return Promise.reject(createClientAuthError(methodNotImplemented));\r\n    },\r\n    sendPostRequestAsync: () => {\r\n        return Promise.reject(createClientAuthError(methodNotImplemented));\r\n    },\r\n};\n\nexport { StubbedNetworkModule };\n//# sourceMappingURL=INetworkModule.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\nimport { addClientId, addScopes, addRedirectUri, addCorrelationId, addResponseMode, addClientInfo, addCliData, addPrompt, addDomainHint, addSid, addLoginHint, addCcsOid, addCcsUpn, addNonce, addState, addBrokerParameters, addClaims, addInstanceAware } from '../request/RequestParameterBuilder.mjs';\nimport { BROKER_CLIENT_ID, INSTANCE_AWARE, CLIENT_ID } from '../constants/AADServerParamKeys.mjs';\nimport { PromptValue } from '../utils/Constants.mjs';\nimport { buildClientInfoFromHomeAccountId } from '../account/ClientInfo.mjs';\nimport { mapToQueryString } from '../utils/UrlUtils.mjs';\nimport { UrlString } from '../url/UrlString.mjs';\nimport { createClientAuthError } from '../error/ClientAuthError.mjs';\nimport { isInteractionRequiredError, InteractionRequiredAuthError } from '../error/InteractionRequiredAuthError.mjs';\nimport { ServerError } from '../error/ServerError.mjs';\nimport { authorizationCodeMissingFromServerResponse, stateNotFound, invalidState, stateMismatch } from '../error/ClientAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Returns map of parameters that are applicable to all calls to /authorize whether using PKCE or EAR\r\n * @param config\r\n * @param request\r\n * @param logger\r\n * @param performanceClient\r\n * @returns\r\n */\r\nfunction getStandardAuthorizeRequestParameters(authOptions, request, logger, performanceClient) {\r\n    // generate the correlationId if not set by the user and add\r\n    const correlationId = request.correlationId;\r\n    const parameters = new Map();\r\n    addClientId(parameters, request.embeddedClientId ||\r\n        request.extraQueryParameters?.[CLIENT_ID] ||\r\n        authOptions.clientId);\r\n    const requestScopes = [\r\n        ...(request.scopes || []),\r\n        ...(request.extraScopesToConsent || []),\r\n    ];\r\n    addScopes(parameters, requestScopes, true, authOptions.authority.options.OIDCOptions?.defaultScopes);\r\n    addRedirectUri(parameters, request.redirectUri);\r\n    addCorrelationId(parameters, correlationId);\r\n    // add response_mode. If not passed in it defaults to query.\r\n    addResponseMode(parameters, request.responseMode);\r\n    // add client_info=1\r\n    addClientInfo(parameters);\r\n    // add clidata=1\r\n    addCliData(parameters);\r\n    if (request.prompt) {\r\n        addPrompt(parameters, request.prompt);\r\n        performanceClient?.addFields({ prompt: request.prompt }, correlationId);\r\n    }\r\n    if (request.domainHint) {\r\n        addDomainHint(parameters, request.domainHint);\r\n        performanceClient?.addFields({ domainHintFromRequest: true }, correlationId);\r\n    }\r\n    // Add sid or loginHint with preference for login_hint claim (in request) -> sid -> loginHint (upn/email) -> username of AccountInfo object\r\n    if (request.prompt !== PromptValue.SELECT_ACCOUNT) {\r\n        // AAD will throw if prompt=select_account is passed with an account hint\r\n        if (request.sid && request.prompt === PromptValue.NONE) {\r\n            // SessionID is only used in silent calls\r\n            logger.verbose(\"createAuthCodeUrlQueryString: Prompt is none, adding sid from request\");\r\n            addSid(parameters, request.sid);\r\n            performanceClient?.addFields({ sidFromRequest: true }, correlationId);\r\n        }\r\n        else if (request.account) {\r\n            const accountSid = extractAccountSid(request.account);\r\n            let accountLoginHintClaim = extractLoginHint(request.account);\r\n            if (accountLoginHintClaim && request.domainHint) {\r\n                logger.warning(`AuthorizationCodeClient.createAuthCodeUrlQueryString: \"domainHint\" param is set, skipping opaque \"login_hint\" claim. Please consider not passing domainHint`);\r\n                accountLoginHintClaim = null;\r\n            }\r\n            // If login_hint claim is present, use it over sid/username\r\n            if (accountLoginHintClaim) {\r\n                logger.verbose(\"createAuthCodeUrlQueryString: login_hint claim present on account\");\r\n                addLoginHint(parameters, accountLoginHintClaim);\r\n                performanceClient?.addFields({ loginHintFromClaim: true }, correlationId);\r\n                try {\r\n                    const clientInfo = buildClientInfoFromHomeAccountId(request.account.homeAccountId);\r\n                    addCcsOid(parameters, clientInfo);\r\n                }\r\n                catch (e) {\r\n                    logger.verbose(\"createAuthCodeUrlQueryString: Could not parse home account ID for CCS Header\");\r\n                }\r\n            }\r\n            else if (accountSid && request.prompt === PromptValue.NONE) {\r\n                /*\r\n                 * If account and loginHint are provided, we will check account first for sid before adding loginHint\r\n                 * SessionId is only used in silent calls\r\n                 */\r\n                logger.verbose(\"createAuthCodeUrlQueryString: Prompt is none, adding sid from account\");\r\n                addSid(parameters, accountSid);\r\n                performanceClient?.addFields({ sidFromClaim: true }, correlationId);\r\n                try {\r\n                    const clientInfo = buildClientInfoFromHomeAccountId(request.account.homeAccountId);\r\n                    addCcsOid(parameters, clientInfo);\r\n                }\r\n                catch (e) {\r\n                    logger.verbose(\"createAuthCodeUrlQueryString: Could not parse home account ID for CCS Header\");\r\n                }\r\n            }\r\n            else if (request.loginHint) {\r\n                logger.verbose(\"createAuthCodeUrlQueryString: Adding login_hint from request\");\r\n                addLoginHint(parameters, request.loginHint);\r\n                addCcsUpn(parameters, request.loginHint);\r\n                performanceClient?.addFields({ loginHintFromRequest: true }, correlationId);\r\n            }\r\n            else if (request.account.username) {\r\n                // Fallback to account username if provided\r\n                logger.verbose(\"createAuthCodeUrlQueryString: Adding login_hint from account\");\r\n                addLoginHint(parameters, request.account.username);\r\n                performanceClient?.addFields({ loginHintFromUpn: true }, correlationId);\r\n                try {\r\n                    const clientInfo = buildClientInfoFromHomeAccountId(request.account.homeAccountId);\r\n                    addCcsOid(parameters, clientInfo);\r\n                }\r\n                catch (e) {\r\n                    logger.verbose(\"createAuthCodeUrlQueryString: Could not parse home account ID for CCS Header\");\r\n                }\r\n            }\r\n        }\r\n        else if (request.loginHint) {\r\n            logger.verbose(\"createAuthCodeUrlQueryString: No account, adding login_hint from request\");\r\n            addLoginHint(parameters, request.loginHint);\r\n            addCcsUpn(parameters, request.loginHint);\r\n            performanceClient?.addFields({ loginHintFromRequest: true }, correlationId);\r\n        }\r\n    }\r\n    else {\r\n        logger.verbose(\"createAuthCodeUrlQueryString: Prompt is select_account, ignoring account hints\");\r\n    }\r\n    if (request.nonce) {\r\n        addNonce(parameters, request.nonce);\r\n    }\r\n    if (request.state) {\r\n        addState(parameters, request.state);\r\n    }\r\n    if (request.embeddedClientId) {\r\n        addBrokerParameters(parameters, authOptions.clientId, authOptions.redirectUri);\r\n    }\r\n    // ignore config claims if skipBrokerClaims is set to true and this is a brokered authentication flow\r\n    const configClaims = request.skipBrokerClaims &&\r\n        parameters.has(BROKER_CLIENT_ID)\r\n        ? undefined\r\n        : authOptions.clientCapabilities;\r\n    if (request.claims || (configClaims && configClaims.length > 0)) {\r\n        addClaims(parameters, request.claims, configClaims);\r\n    }\r\n    // If extraQueryParameters includes instance_aware its value will be added when extraQueryParameters are added\r\n    if (authOptions.instanceAware &&\r\n        (!request.extraQueryParameters ||\r\n            !Object.keys(request.extraQueryParameters).includes(INSTANCE_AWARE))) {\r\n        addInstanceAware(parameters);\r\n    }\r\n    return parameters;\r\n}\r\n/**\r\n * Returns authorize endpoint with given request parameters in the query string\r\n * @param authority\r\n * @param requestParameters\r\n * @returns\r\n */\r\nfunction getAuthorizeUrl(authority, requestParameters, encodeParams, extraQueryParameters) {\r\n    const queryString = mapToQueryString(requestParameters, encodeParams, extraQueryParameters);\r\n    return UrlString.appendQueryString(authority.authorizationEndpoint, queryString);\r\n}\r\n/**\r\n * Handles the hash fragment response from public client code request. Returns a code response used by\r\n * the client to exchange for a token in acquireToken.\r\n * @param serverParams\r\n * @param cachedState\r\n */\r\nfunction getAuthorizationCodePayload(serverParams, cachedState) {\r\n    // Get code response\r\n    validateAuthorizationResponse(serverParams, cachedState);\r\n    // throw when there is no auth code in the response\r\n    if (!serverParams.code) {\r\n        throw createClientAuthError(authorizationCodeMissingFromServerResponse);\r\n    }\r\n    return serverParams;\r\n}\r\n/**\r\n * Function which validates server authorization code response.\r\n * @param serverResponseHash\r\n * @param requestState\r\n */\r\nfunction validateAuthorizationResponse(serverResponse, requestState) {\r\n    if (!serverResponse.state || !requestState) {\r\n        throw serverResponse.state\r\n            ? createClientAuthError(stateNotFound, \"Cached State\")\r\n            : createClientAuthError(stateNotFound, \"Server State\");\r\n    }\r\n    let decodedServerResponseState;\r\n    let decodedRequestState;\r\n    try {\r\n        decodedServerResponseState = decodeURIComponent(serverResponse.state);\r\n    }\r\n    catch (e) {\r\n        throw createClientAuthError(invalidState, serverResponse.state);\r\n    }\r\n    try {\r\n        decodedRequestState = decodeURIComponent(requestState);\r\n    }\r\n    catch (e) {\r\n        throw createClientAuthError(invalidState, serverResponse.state);\r\n    }\r\n    if (decodedServerResponseState !== decodedRequestState) {\r\n        throw createClientAuthError(stateMismatch);\r\n    }\r\n    // Check for error\r\n    if (serverResponse.error ||\r\n        serverResponse.error_description ||\r\n        serverResponse.suberror) {\r\n        const serverErrorNo = parseServerErrorNo(serverResponse);\r\n        if (isInteractionRequiredError(serverResponse.error, serverResponse.error_description, serverResponse.suberror)) {\r\n            throw new InteractionRequiredAuthError(serverResponse.error || \"\", serverResponse.error_description, serverResponse.suberror, serverResponse.timestamp || \"\", serverResponse.trace_id || \"\", serverResponse.correlation_id || \"\", serverResponse.claims || \"\", serverErrorNo);\r\n        }\r\n        throw new ServerError(serverResponse.error || \"\", serverResponse.error_description, serverResponse.suberror, serverErrorNo);\r\n    }\r\n}\r\n/**\r\n * Get server error No from the error_uri\r\n * @param serverResponse\r\n * @returns\r\n */\r\nfunction parseServerErrorNo(serverResponse) {\r\n    const errorCodePrefix = \"code=\";\r\n    const errorCodePrefixIndex = serverResponse.error_uri?.lastIndexOf(errorCodePrefix);\r\n    return errorCodePrefixIndex && errorCodePrefixIndex >= 0\r\n        ? serverResponse.error_uri?.substring(errorCodePrefixIndex + errorCodePrefix.length)\r\n        : undefined;\r\n}\r\n/**\r\n * Helper to get sid from account. Returns null if idTokenClaims are not present or sid is not present.\r\n * @param account\r\n */\r\nfunction extractAccountSid(account) {\r\n    return account.idTokenClaims?.sid || null;\r\n}\r\nfunction extractLoginHint(account) {\r\n    return account.loginHint || account.idTokenClaims?.login_hint || null;\r\n}\n\nexport { getAuthorizationCodePayload, getAuthorizeUrl, getStandardAuthorizeRequestParameters, validateAuthorizationResponse };\n//# sourceMappingURL=Authorize.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\nimport { CacheOutcome, Constants, SERVER_TELEM_CONSTANTS, Separators } from '../../utils/Constants.mjs';\nimport { AuthError } from '../../error/AuthError.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst skuGroupSeparator = \",\";\r\nconst skuValueSeparator = \"|\";\r\nfunction makeExtraSkuString(params) {\r\n    const { skus, libraryName, libraryVersion, extensionName, extensionVersion, } = params;\r\n    const skuMap = new Map([\r\n        [0, [libraryName, libraryVersion]],\r\n        [2, [extensionName, extensionVersion]],\r\n    ]);\r\n    let skuArr = [];\r\n    if (skus?.length) {\r\n        skuArr = skus.split(skuGroupSeparator);\r\n        // Ignore invalid input sku param\r\n        if (skuArr.length < 4) {\r\n            return skus;\r\n        }\r\n    }\r\n    else {\r\n        skuArr = Array.from({ length: 4 }, () => skuValueSeparator);\r\n    }\r\n    skuMap.forEach((value, key) => {\r\n        if (value.length === 2 && value[0]?.length && value[1]?.length) {\r\n            setSku({\r\n                skuArr,\r\n                index: key,\r\n                skuName: value[0],\r\n                skuVersion: value[1],\r\n            });\r\n        }\r\n    });\r\n    return skuArr.join(skuGroupSeparator);\r\n}\r\nfunction setSku(params) {\r\n    const { skuArr, index, skuName, skuVersion } = params;\r\n    if (index >= skuArr.length) {\r\n        return;\r\n    }\r\n    skuArr[index] = [skuName, skuVersion].join(skuValueSeparator);\r\n}\r\n/** @internal */\r\nclass ServerTelemetryManager {\r\n    constructor(telemetryRequest, cacheManager) {\r\n        this.cacheOutcome = CacheOutcome.NOT_APPLICABLE;\r\n        this.cacheManager = cacheManager;\r\n        this.apiId = telemetryRequest.apiId;\r\n        this.correlationId = telemetryRequest.correlationId;\r\n        this.wrapperSKU = telemetryRequest.wrapperSKU || Constants.EMPTY_STRING;\r\n        this.wrapperVer = telemetryRequest.wrapperVer || Constants.EMPTY_STRING;\r\n        this.telemetryCacheKey =\r\n            SERVER_TELEM_CONSTANTS.CACHE_KEY +\r\n                Separators.CACHE_KEY_SEPARATOR +\r\n                telemetryRequest.clientId;\r\n    }\r\n    /**\r\n     * API to add MSER Telemetry to request\r\n     */\r\n    generateCurrentRequestHeaderValue() {\r\n        const request = `${this.apiId}${SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR}${this.cacheOutcome}`;\r\n        const platformFieldsArr = [this.wrapperSKU, this.wrapperVer];\r\n        const nativeBrokerErrorCode = this.getNativeBrokerErrorCode();\r\n        if (nativeBrokerErrorCode?.length) {\r\n            platformFieldsArr.push(`broker_error=${nativeBrokerErrorCode}`);\r\n        }\r\n        const platformFields = platformFieldsArr.join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR);\r\n        const regionDiscoveryFields = this.getRegionDiscoveryFields();\r\n        const requestWithRegionDiscoveryFields = [\r\n            request,\r\n            regionDiscoveryFields,\r\n        ].join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR);\r\n        return [\r\n            SERVER_TELEM_CONSTANTS.SCHEMA_VERSION,\r\n            requestWithRegionDiscoveryFields,\r\n            platformFields,\r\n        ].join(SERVER_TELEM_CONSTANTS.CATEGORY_SEPARATOR);\r\n    }\r\n    /**\r\n     * API to add MSER Telemetry for the last failed request\r\n     */\r\n    generateLastRequestHeaderValue() {\r\n        const lastRequests = this.getLastRequests();\r\n        const maxErrors = ServerTelemetryManager.maxErrorsToSend(lastRequests);\r\n        const failedRequests = lastRequests.failedRequests\r\n            .slice(0, 2 * maxErrors)\r\n            .join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR);\r\n        const errors = lastRequests.errors\r\n            .slice(0, maxErrors)\r\n            .join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR);\r\n        const errorCount = lastRequests.errors.length;\r\n        // Indicate whether this header contains all data or partial data\r\n        const overflow = maxErrors < errorCount\r\n            ? SERVER_TELEM_CONSTANTS.OVERFLOW_TRUE\r\n            : SERVER_TELEM_CONSTANTS.OVERFLOW_FALSE;\r\n        const platformFields = [errorCount, overflow].join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR);\r\n        return [\r\n            SERVER_TELEM_CONSTANTS.SCHEMA_VERSION,\r\n            lastRequests.cacheHits,\r\n            failedRequests,\r\n            errors,\r\n            platformFields,\r\n        ].join(SERVER_TELEM_CONSTANTS.CATEGORY_SEPARATOR);\r\n    }\r\n    /**\r\n     * API to cache token failures for MSER data capture\r\n     * @param error\r\n     */\r\n    cacheFailedRequest(error) {\r\n        const lastRequests = this.getLastRequests();\r\n        if (lastRequests.errors.length >=\r\n            SERVER_TELEM_CONSTANTS.MAX_CACHED_ERRORS) {\r\n            // Remove a cached error to make room, first in first out\r\n            lastRequests.failedRequests.shift(); // apiId\r\n            lastRequests.failedRequests.shift(); // correlationId\r\n            lastRequests.errors.shift();\r\n        }\r\n        lastRequests.failedRequests.push(this.apiId, this.correlationId);\r\n        if (error instanceof Error && !!error && error.toString()) {\r\n            if (error instanceof AuthError) {\r\n                if (error.subError) {\r\n                    lastRequests.errors.push(error.subError);\r\n                }\r\n                else if (error.errorCode) {\r\n                    lastRequests.errors.push(error.errorCode);\r\n                }\r\n                else {\r\n                    lastRequests.errors.push(error.toString());\r\n                }\r\n            }\r\n            else {\r\n                lastRequests.errors.push(error.toString());\r\n            }\r\n        }\r\n        else {\r\n            lastRequests.errors.push(SERVER_TELEM_CONSTANTS.UNKNOWN_ERROR);\r\n        }\r\n        this.cacheManager.setServerTelemetry(this.telemetryCacheKey, lastRequests, this.correlationId);\r\n        return;\r\n    }\r\n    /**\r\n     * Update server telemetry cache entry by incrementing cache hit counter\r\n     */\r\n    incrementCacheHits() {\r\n        const lastRequests = this.getLastRequests();\r\n        lastRequests.cacheHits += 1;\r\n        this.cacheManager.setServerTelemetry(this.telemetryCacheKey, lastRequests, this.correlationId);\r\n        return lastRequests.cacheHits;\r\n    }\r\n    /**\r\n     * Get the server telemetry entity from cache or initialize a new one\r\n     */\r\n    getLastRequests() {\r\n        const initialValue = {\r\n            failedRequests: [],\r\n            errors: [],\r\n            cacheHits: 0,\r\n        };\r\n        const lastRequests = this.cacheManager.getServerTelemetry(this.telemetryCacheKey);\r\n        return lastRequests || initialValue;\r\n    }\r\n    /**\r\n     * Remove server telemetry cache entry\r\n     */\r\n    clearTelemetryCache() {\r\n        const lastRequests = this.getLastRequests();\r\n        const numErrorsFlushed = ServerTelemetryManager.maxErrorsToSend(lastRequests);\r\n        const errorCount = lastRequests.errors.length;\r\n        if (numErrorsFlushed === errorCount) {\r\n            // All errors were sent on last request, clear Telemetry cache\r\n            this.cacheManager.removeItem(this.telemetryCacheKey, this.correlationId);\r\n        }\r\n        else {\r\n            // Partial data was flushed to server, construct a new telemetry cache item with errors that were not flushed\r\n            const serverTelemEntity = {\r\n                failedRequests: lastRequests.failedRequests.slice(numErrorsFlushed * 2),\r\n                errors: lastRequests.errors.slice(numErrorsFlushed),\r\n                cacheHits: 0,\r\n            };\r\n            this.cacheManager.setServerTelemetry(this.telemetryCacheKey, serverTelemEntity, this.correlationId);\r\n        }\r\n    }\r\n    /**\r\n     * Returns the maximum number of errors that can be flushed to the server in the next network request\r\n     * @param serverTelemetryEntity\r\n     */\r\n    static maxErrorsToSend(serverTelemetryEntity) {\r\n        let i;\r\n        let maxErrors = 0;\r\n        let dataSize = 0;\r\n        const errorCount = serverTelemetryEntity.errors.length;\r\n        for (i = 0; i < errorCount; i++) {\r\n            // failedRequests parameter contains pairs of apiId and correlationId, multiply index by 2 to preserve pairs\r\n            const apiId = serverTelemetryEntity.failedRequests[2 * i] ||\r\n                Constants.EMPTY_STRING;\r\n            const correlationId = serverTelemetryEntity.failedRequests[2 * i + 1] ||\r\n                Constants.EMPTY_STRING;\r\n            const errorCode = serverTelemetryEntity.errors[i] || Constants.EMPTY_STRING;\r\n            // Count number of characters that would be added to header, each character is 1 byte. Add 3 at the end to account for separators\r\n            dataSize +=\r\n                apiId.toString().length +\r\n                    correlationId.toString().length +\r\n                    errorCode.length +\r\n                    3;\r\n            if (dataSize < SERVER_TELEM_CONSTANTS.MAX_LAST_HEADER_BYTES) {\r\n                // Adding this entry to the header would still keep header size below the limit\r\n                maxErrors += 1;\r\n            }\r\n            else {\r\n                break;\r\n            }\r\n        }\r\n        return maxErrors;\r\n    }\r\n    /**\r\n     * Get the region discovery fields\r\n     *\r\n     * @returns string\r\n     */\r\n    getRegionDiscoveryFields() {\r\n        const regionDiscoveryFields = [];\r\n        regionDiscoveryFields.push(this.regionUsed || Constants.EMPTY_STRING);\r\n        regionDiscoveryFields.push(this.regionSource || Constants.EMPTY_STRING);\r\n        regionDiscoveryFields.push(this.regionOutcome || Constants.EMPTY_STRING);\r\n        return regionDiscoveryFields.join(\",\");\r\n    }\r\n    /**\r\n     * Update the region discovery metadata\r\n     *\r\n     * @param regionDiscoveryMetadata\r\n     * @returns void\r\n     */\r\n    updateRegionDiscoveryMetadata(regionDiscoveryMetadata) {\r\n        this.regionUsed = regionDiscoveryMetadata.region_used;\r\n        this.regionSource = regionDiscoveryMetadata.region_source;\r\n        this.regionOutcome = regionDiscoveryMetadata.region_outcome;\r\n    }\r\n    /**\r\n     * Set cache outcome\r\n     */\r\n    setCacheOutcome(cacheOutcome) {\r\n        this.cacheOutcome = cacheOutcome;\r\n    }\r\n    setNativeBrokerErrorCode(errorCode) {\r\n        const lastRequests = this.getLastRequests();\r\n        lastRequests.nativeBrokerErrorCode = errorCode;\r\n        this.cacheManager.setServerTelemetry(this.telemetryCacheKey, lastRequests, this.correlationId);\r\n    }\r\n    getNativeBrokerErrorCode() {\r\n        return this.getLastRequests().nativeBrokerErrorCode;\r\n    }\r\n    clearNativeBrokerErrorCode() {\r\n        const lastRequests = this.getLastRequests();\r\n        delete lastRequests.nativeBrokerErrorCode;\r\n        this.cacheManager.setServerTelemetry(this.telemetryCacheKey, lastRequests, this.correlationId);\r\n    }\r\n    static makeExtraSkuString(params) {\r\n        return makeExtraSkuString(params);\r\n    }\r\n}\n\nexport { ServerTelemetryManager };\n//# sourceMappingURL=ServerTelemetryManager.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst missingKidError = \"missing_kid_error\";\r\nconst missingAlgError = \"missing_alg_error\";\n\nexport { missingAlgError, missingKidError };\n//# sourceMappingURL=JoseHeaderErrorCodes.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\nimport { AuthError } from './AuthError.mjs';\nimport { missingAlgError, missingKidError } from './JoseHeaderErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst JoseHeaderErrorMessages = {\r\n    [missingKidError]: \"The JOSE Header for the requested JWT, JWS or JWK object requires a keyId to be configured as the 'kid' header claim. No 'kid' value was provided.\",\r\n    [missingAlgError]: \"The JOSE Header for the requested JWT, JWS or JWK object requires an algorithm to be specified as the 'alg' header claim. No 'alg' value was provided.\",\r\n};\r\n/**\r\n * Error thrown when there is an error in the client code running on the browser.\r\n */\r\nclass JoseHeaderError extends AuthError {\r\n    constructor(errorCode, errorMessage) {\r\n        super(errorCode, errorMessage);\r\n        this.name = \"JoseHeaderError\";\r\n        Object.setPrototypeOf(this, JoseHeaderError.prototype);\r\n    }\r\n}\r\n/** Returns JoseHeaderError object */\r\nfunction createJoseHeaderError(code) {\r\n    return new JoseHeaderError(code, JoseHeaderErrorMessages[code]);\r\n}\n\nexport { JoseHeaderError, JoseHeaderErrorMessages, createJoseHeaderError };\n//# sourceMappingURL=JoseHeaderError.mjs.map\n","/*! @azure/msal-common v15.17.0 2026-03-18 */\n'use strict';\nimport { createJoseHeaderError } from '../error/JoseHeaderError.mjs';\nimport { JsonWebTokenTypes } from '../utils/Constants.mjs';\nimport { missingKidError, missingAlgError } from '../error/JoseHeaderErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/** @internal */\r\nclass JoseHeader {\r\n    constructor(options) {\r\n        this.typ = options.typ;\r\n        this.alg = options.alg;\r\n        this.kid = options.kid;\r\n    }\r\n    /**\r\n     * Builds SignedHttpRequest formatted JOSE Header from the\r\n     * JOSE Header options provided or previously set on the object and returns\r\n     * the stringified header object.\r\n     * Throws if keyId or algorithm aren't provided since they are required for Access Token Binding.\r\n     * @param shrHeaderOptions\r\n     * @returns\r\n     */\r\n    static getShrHeaderString(shrHeaderOptions) {\r\n        // KeyID is required on the SHR header\r\n        if (!shrHeaderOptions.kid) {\r\n            throw createJoseHeaderError(missingKidError);\r\n        }\r\n        // Alg is required on the SHR header\r\n        if (!shrHeaderOptions.alg) {\r\n            throw createJoseHeaderError(missingAlgError);\r\n        }\r\n        const shrHeader = new JoseHeader({\r\n            // Access Token PoP headers must have type pop, but the type header can be overriden for special cases\r\n            typ: shrHeaderOptions.typ || JsonWebTokenTypes.Pop,\r\n            kid: shrHeaderOptions.kid,\r\n            alg: shrHeaderOptions.alg,\r\n        });\r\n        return JSON.stringify(shrHeader);\r\n    }\r\n}\n\nexport { JoseHeader };\n//# sourceMappingURL=JoseHeader.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst pkceNotCreated = \"pkce_not_created\";\r\nconst earJwkEmpty = \"ear_jwk_empty\";\r\nconst earJweEmpty = \"ear_jwe_empty\";\r\nconst cryptoNonExistent = \"crypto_nonexistent\";\r\nconst emptyNavigateUri = \"empty_navigate_uri\";\r\nconst hashEmptyError = \"hash_empty_error\";\r\nconst noStateInHash = \"no_state_in_hash\";\r\nconst hashDoesNotContainKnownProperties = \"hash_does_not_contain_known_properties\";\r\nconst unableToParseState = \"unable_to_parse_state\";\r\nconst stateInteractionTypeMismatch = \"state_interaction_type_mismatch\";\r\nconst interactionInProgress = \"interaction_in_progress\";\r\nconst popupWindowError = \"popup_window_error\";\r\nconst emptyWindowError = \"empty_window_error\";\r\nconst userCancelled = \"user_cancelled\";\r\nconst monitorPopupTimeout = \"monitor_popup_timeout\";\r\nconst monitorWindowTimeout = \"monitor_window_timeout\";\r\nconst redirectInIframe = \"redirect_in_iframe\";\r\nconst blockIframeReload = \"block_iframe_reload\";\r\nconst blockNestedPopups = \"block_nested_popups\";\r\nconst iframeClosedPrematurely = \"iframe_closed_prematurely\";\r\nconst silentLogoutUnsupported = \"silent_logout_unsupported\";\r\nconst noAccountError = \"no_account_error\";\r\nconst silentPromptValueError = \"silent_prompt_value_error\";\r\nconst noTokenRequestCacheError = \"no_token_request_cache_error\";\r\nconst unableToParseTokenRequestCacheError = \"unable_to_parse_token_request_cache_error\";\r\nconst authRequestNotSetError = \"auth_request_not_set_error\";\r\nconst invalidCacheType = \"invalid_cache_type\";\r\nconst nonBrowserEnvironment = \"non_browser_environment\";\r\nconst databaseNotOpen = \"database_not_open\";\r\nconst noNetworkConnectivity = \"no_network_connectivity\";\r\nconst postRequestFailed = \"post_request_failed\";\r\nconst getRequestFailed = \"get_request_failed\";\r\nconst failedToParseResponse = \"failed_to_parse_response\";\r\nconst unableToLoadToken = \"unable_to_load_token\";\r\nconst cryptoKeyNotFound = \"crypto_key_not_found\";\r\nconst authCodeRequired = \"auth_code_required\";\r\nconst authCodeOrNativeAccountIdRequired = \"auth_code_or_nativeAccountId_required\";\r\nconst spaCodeAndNativeAccountIdPresent = \"spa_code_and_nativeAccountId_present\";\r\nconst databaseUnavailable = \"database_unavailable\";\r\nconst unableToAcquireTokenFromNativePlatform = \"unable_to_acquire_token_from_native_platform\";\r\nconst nativeHandshakeTimeout = \"native_handshake_timeout\";\r\nconst nativeExtensionNotInstalled = \"native_extension_not_installed\";\r\nconst nativeConnectionNotEstablished = \"native_connection_not_established\";\r\nconst uninitializedPublicClientApplication = \"uninitialized_public_client_application\";\r\nconst nativePromptNotSupported = \"native_prompt_not_supported\";\r\nconst invalidBase64String = \"invalid_base64_string\";\r\nconst invalidPopTokenRequest = \"invalid_pop_token_request\";\r\nconst failedToBuildHeaders = \"failed_to_build_headers\";\r\nconst failedToParseHeaders = \"failed_to_parse_headers\";\r\nconst failedToDecryptEarResponse = \"failed_to_decrypt_ear_response\";\r\nconst timedOut = \"timed_out\";\n\nexport { authCodeOrNativeAccountIdRequired, authCodeRequired, authRequestNotSetError, blockIframeReload, blockNestedPopups, cryptoKeyNotFound, cryptoNonExistent, databaseNotOpen, databaseUnavailable, earJweEmpty, earJwkEmpty, emptyNavigateUri, emptyWindowError, failedToBuildHeaders, failedToDecryptEarResponse, failedToParseHeaders, failedToParseResponse, getRequestFailed, hashDoesNotContainKnownProperties, hashEmptyError, iframeClosedPrematurely, interactionInProgress, invalidBase64String, invalidCacheType, invalidPopTokenRequest, monitorPopupTimeout, monitorWindowTimeout, nativeConnectionNotEstablished, nativeExtensionNotInstalled, nativeHandshakeTimeout, nativePromptNotSupported, noAccountError, noNetworkConnectivity, noStateInHash, noTokenRequestCacheError, nonBrowserEnvironment, pkceNotCreated, popupWindowError, postRequestFailed, redirectInIframe, silentLogoutUnsupported, silentPromptValueError, spaCodeAndNativeAccountIdPresent, stateInteractionTypeMismatch, timedOut, unableToAcquireTokenFromNativePlatform, unableToLoadToken, unableToParseState, unableToParseTokenRequestCacheError, uninitializedPublicClientApplication, userCancelled };\n//# sourceMappingURL=BrowserAuthErrorCodes.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { AuthError } from '@azure/msal-common/browser';\nimport { invalidPopTokenRequest, invalidBase64String, nativePromptNotSupported, uninitializedPublicClientApplication, nativeConnectionNotEstablished, nativeExtensionNotInstalled, nativeHandshakeTimeout, unableToAcquireTokenFromNativePlatform, databaseUnavailable, spaCodeAndNativeAccountIdPresent, authCodeOrNativeAccountIdRequired, authCodeRequired, cryptoKeyNotFound, unableToLoadToken, failedToParseResponse, getRequestFailed, postRequestFailed, noNetworkConnectivity, databaseNotOpen, nonBrowserEnvironment, invalidCacheType, authRequestNotSetError, unableToParseTokenRequestCacheError, noTokenRequestCacheError, silentPromptValueError, noAccountError, silentLogoutUnsupported, iframeClosedPrematurely, blockNestedPopups, blockIframeReload, redirectInIframe, monitorWindowTimeout, monitorPopupTimeout, userCancelled, emptyWindowError, popupWindowError, interactionInProgress, stateInteractionTypeMismatch, unableToParseState, hashDoesNotContainKnownProperties, noStateInHash, hashEmptyError, emptyNavigateUri, cryptoNonExistent, pkceNotCreated, timedOut, failedToDecryptEarResponse, failedToParseHeaders, failedToBuildHeaders, earJweEmpty, earJwkEmpty } from './BrowserAuthErrorCodes.mjs';\nimport * as BrowserAuthErrorCodes from './BrowserAuthErrorCodes.mjs';\nexport { BrowserAuthErrorCodes };\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst ErrorLink = \"For more visit: aka.ms/msaljs/browser-errors\";\r\n/**\r\n * BrowserAuthErrorMessage class containing string constants used by error codes and messages.\r\n */\r\nconst BrowserAuthErrorMessages = {\r\n    [pkceNotCreated]: \"The PKCE code challenge and verifier could not be generated.\",\r\n    [earJwkEmpty]: \"No EAR encryption key provided. This is unexpected.\",\r\n    [earJweEmpty]: \"Server response does not contain ear_jwe property. This is unexpected.\",\r\n    [cryptoNonExistent]: \"The crypto object or function is not available.\",\r\n    [emptyNavigateUri]: \"Navigation URI is empty. Please check stack trace for more info.\",\r\n    [hashEmptyError]: `Hash value cannot be processed because it is empty. Please verify that your redirectUri is not clearing the hash. ${ErrorLink}`,\r\n    [noStateInHash]: \"Hash does not contain state. Please verify that the request originated from msal.\",\r\n    [hashDoesNotContainKnownProperties]: `Hash does not contain known properites. Please verify that your redirectUri is not changing the hash.  ${ErrorLink}`,\r\n    [unableToParseState]: \"Unable to parse state. Please verify that the request originated from msal.\",\r\n    [stateInteractionTypeMismatch]: \"Hash contains state but the interaction type does not match the caller.\",\r\n    [interactionInProgress]: `Interaction is currently in progress. Please ensure that this interaction has been completed before calling an interactive API.   ${ErrorLink}`,\r\n    [popupWindowError]: \"Error opening popup window. This can happen if you are using IE or if popups are blocked in the browser.\",\r\n    [emptyWindowError]: \"window.open returned null or undefined window object.\",\r\n    [userCancelled]: \"User cancelled the flow.\",\r\n    [monitorPopupTimeout]: `Token acquisition in popup failed due to timeout.  ${ErrorLink}`,\r\n    [monitorWindowTimeout]: `Token acquisition in iframe failed due to timeout.  ${ErrorLink}`,\r\n    [redirectInIframe]: \"Redirects are not supported for iframed or brokered applications. Please ensure you are using MSAL.js in a top frame of the window if using the redirect APIs, or use the popup APIs.\",\r\n    [blockIframeReload]: `Request was blocked inside an iframe because MSAL detected an authentication response.  ${ErrorLink}`,\r\n    [blockNestedPopups]: \"Request was blocked inside a popup because MSAL detected it was running in a popup.\",\r\n    [iframeClosedPrematurely]: \"The iframe being monitored was closed prematurely.\",\r\n    [silentLogoutUnsupported]: \"Silent logout not supported. Please call logoutRedirect or logoutPopup instead.\",\r\n    [noAccountError]: \"No account object provided to acquireTokenSilent and no active account has been set. Please call setActiveAccount or provide an account on the request.\",\r\n    [silentPromptValueError]: \"The value given for the prompt value is not valid for silent requests - must be set to 'none' or 'no_session'.\",\r\n    [noTokenRequestCacheError]: \"No token request found in cache.\",\r\n    [unableToParseTokenRequestCacheError]: \"The cached token request could not be parsed.\",\r\n    [authRequestNotSetError]: \"Auth Request not set. Please ensure initiateAuthRequest was called from the InteractionHandler\",\r\n    [invalidCacheType]: \"Invalid cache type\",\r\n    [nonBrowserEnvironment]: \"Login and token requests are not supported in non-browser environments.\",\r\n    [databaseNotOpen]: \"Database is not open!\",\r\n    [noNetworkConnectivity]: \"No network connectivity. Check your internet connection.\",\r\n    [postRequestFailed]: \"Network request failed: If the browser threw a CORS error, check that the redirectUri is registered in the Azure App Portal as type 'SPA'\",\r\n    [getRequestFailed]: \"Network request failed. Please check the network trace to determine root cause.\",\r\n    [failedToParseResponse]: \"Failed to parse network response. Check network trace.\",\r\n    [unableToLoadToken]: \"Error loading token to cache.\",\r\n    [cryptoKeyNotFound]: \"Cryptographic Key or Keypair not found in browser storage.\",\r\n    [authCodeRequired]: \"An authorization code must be provided (as the `code` property on the request) to this flow.\",\r\n    [authCodeOrNativeAccountIdRequired]: \"An authorization code or nativeAccountId must be provided to this flow.\",\r\n    [spaCodeAndNativeAccountIdPresent]: \"Request cannot contain both spa code and native account id.\",\r\n    [databaseUnavailable]: \"IndexedDB, which is required for persistent cryptographic key storage, is unavailable. This may be caused by browser privacy features which block persistent storage in third-party contexts.\",\r\n    [unableToAcquireTokenFromNativePlatform]: `Unable to acquire token from native platform.  ${ErrorLink}`,\r\n    [nativeHandshakeTimeout]: \"Timed out while attempting to establish connection to browser extension\",\r\n    [nativeExtensionNotInstalled]: \"Native extension is not installed. If you think this is a mistake call the initialize function.\",\r\n    [nativeConnectionNotEstablished]: `Connection to native platform has not been established. Please install a compatible browser extension and run initialize().  ${ErrorLink}`,\r\n    [uninitializedPublicClientApplication]: `You must call and await the initialize function before attempting to call any other MSAL API.  ${ErrorLink}`,\r\n    [nativePromptNotSupported]: \"The provided prompt is not supported by the native platform. This request should be routed to the web based flow.\",\r\n    [invalidBase64String]: \"Invalid base64 encoded string.\",\r\n    [invalidPopTokenRequest]: \"Invalid PoP token request. The request should not have both a popKid value and signPopToken set to true.\",\r\n    [failedToBuildHeaders]: \"Failed to build request headers object.\",\r\n    [failedToParseHeaders]: \"Failed to parse response headers\",\r\n    [failedToDecryptEarResponse]: \"Failed to decrypt ear response\",\r\n    [timedOut]: \"The request timed out.\",\r\n};\r\n/**\r\n * BrowserAuthErrorMessage class containing string constants used by error codes and messages.\r\n * @deprecated Use exported BrowserAuthErrorCodes instead.\r\n * In your app you can do :\r\n * ```\r\n * import { BrowserAuthErrorCodes } from \"@azure/msal-browser\";\r\n * ```\r\n */\r\nconst BrowserAuthErrorMessage = {\r\n    pkceNotGenerated: {\r\n        code: pkceNotCreated,\r\n        desc: BrowserAuthErrorMessages[pkceNotCreated],\r\n    },\r\n    cryptoDoesNotExist: {\r\n        code: cryptoNonExistent,\r\n        desc: BrowserAuthErrorMessages[cryptoNonExistent],\r\n    },\r\n    emptyNavigateUriError: {\r\n        code: emptyNavigateUri,\r\n        desc: BrowserAuthErrorMessages[emptyNavigateUri],\r\n    },\r\n    hashEmptyError: {\r\n        code: hashEmptyError,\r\n        desc: BrowserAuthErrorMessages[hashEmptyError],\r\n    },\r\n    hashDoesNotContainStateError: {\r\n        code: noStateInHash,\r\n        desc: BrowserAuthErrorMessages[noStateInHash],\r\n    },\r\n    hashDoesNotContainKnownPropertiesError: {\r\n        code: hashDoesNotContainKnownProperties,\r\n        desc: BrowserAuthErrorMessages[hashDoesNotContainKnownProperties],\r\n    },\r\n    unableToParseStateError: {\r\n        code: unableToParseState,\r\n        desc: BrowserAuthErrorMessages[unableToParseState],\r\n    },\r\n    stateInteractionTypeMismatchError: {\r\n        code: stateInteractionTypeMismatch,\r\n        desc: BrowserAuthErrorMessages[stateInteractionTypeMismatch],\r\n    },\r\n    interactionInProgress: {\r\n        code: interactionInProgress,\r\n        desc: BrowserAuthErrorMessages[interactionInProgress],\r\n    },\r\n    popupWindowError: {\r\n        code: popupWindowError,\r\n        desc: BrowserAuthErrorMessages[popupWindowError],\r\n    },\r\n    emptyWindowError: {\r\n        code: emptyWindowError,\r\n        desc: BrowserAuthErrorMessages[emptyWindowError],\r\n    },\r\n    userCancelledError: {\r\n        code: userCancelled,\r\n        desc: BrowserAuthErrorMessages[userCancelled],\r\n    },\r\n    monitorPopupTimeoutError: {\r\n        code: monitorPopupTimeout,\r\n        desc: BrowserAuthErrorMessages[monitorPopupTimeout],\r\n    },\r\n    monitorIframeTimeoutError: {\r\n        code: monitorWindowTimeout,\r\n        desc: BrowserAuthErrorMessages[monitorWindowTimeout],\r\n    },\r\n    redirectInIframeError: {\r\n        code: redirectInIframe,\r\n        desc: BrowserAuthErrorMessages[redirectInIframe],\r\n    },\r\n    blockTokenRequestsInHiddenIframeError: {\r\n        code: blockIframeReload,\r\n        desc: BrowserAuthErrorMessages[blockIframeReload],\r\n    },\r\n    blockAcquireTokenInPopupsError: {\r\n        code: blockNestedPopups,\r\n        desc: BrowserAuthErrorMessages[blockNestedPopups],\r\n    },\r\n    iframeClosedPrematurelyError: {\r\n        code: iframeClosedPrematurely,\r\n        desc: BrowserAuthErrorMessages[iframeClosedPrematurely],\r\n    },\r\n    silentLogoutUnsupportedError: {\r\n        code: silentLogoutUnsupported,\r\n        desc: BrowserAuthErrorMessages[silentLogoutUnsupported],\r\n    },\r\n    noAccountError: {\r\n        code: noAccountError,\r\n        desc: BrowserAuthErrorMessages[noAccountError],\r\n    },\r\n    silentPromptValueError: {\r\n        code: silentPromptValueError,\r\n        desc: BrowserAuthErrorMessages[silentPromptValueError],\r\n    },\r\n    noTokenRequestCacheError: {\r\n        code: noTokenRequestCacheError,\r\n        desc: BrowserAuthErrorMessages[noTokenRequestCacheError],\r\n    },\r\n    unableToParseTokenRequestCacheError: {\r\n        code: unableToParseTokenRequestCacheError,\r\n        desc: BrowserAuthErrorMessages[unableToParseTokenRequestCacheError],\r\n    },\r\n    authRequestNotSet: {\r\n        code: authRequestNotSetError,\r\n        desc: BrowserAuthErrorMessages[authRequestNotSetError],\r\n    },\r\n    invalidCacheType: {\r\n        code: invalidCacheType,\r\n        desc: BrowserAuthErrorMessages[invalidCacheType],\r\n    },\r\n    notInBrowserEnvironment: {\r\n        code: nonBrowserEnvironment,\r\n        desc: BrowserAuthErrorMessages[nonBrowserEnvironment],\r\n    },\r\n    databaseNotOpen: {\r\n        code: databaseNotOpen,\r\n        desc: BrowserAuthErrorMessages[databaseNotOpen],\r\n    },\r\n    noNetworkConnectivity: {\r\n        code: noNetworkConnectivity,\r\n        desc: BrowserAuthErrorMessages[noNetworkConnectivity],\r\n    },\r\n    postRequestFailed: {\r\n        code: postRequestFailed,\r\n        desc: BrowserAuthErrorMessages[postRequestFailed],\r\n    },\r\n    getRequestFailed: {\r\n        code: getRequestFailed,\r\n        desc: BrowserAuthErrorMessages[getRequestFailed],\r\n    },\r\n    failedToParseNetworkResponse: {\r\n        code: failedToParseResponse,\r\n        desc: BrowserAuthErrorMessages[failedToParseResponse],\r\n    },\r\n    unableToLoadTokenError: {\r\n        code: unableToLoadToken,\r\n        desc: BrowserAuthErrorMessages[unableToLoadToken],\r\n    },\r\n    signingKeyNotFoundInStorage: {\r\n        code: cryptoKeyNotFound,\r\n        desc: BrowserAuthErrorMessages[cryptoKeyNotFound],\r\n    },\r\n    authCodeRequired: {\r\n        code: authCodeRequired,\r\n        desc: BrowserAuthErrorMessages[authCodeRequired],\r\n    },\r\n    authCodeOrNativeAccountRequired: {\r\n        code: authCodeOrNativeAccountIdRequired,\r\n        desc: BrowserAuthErrorMessages[authCodeOrNativeAccountIdRequired],\r\n    },\r\n    spaCodeAndNativeAccountPresent: {\r\n        code: spaCodeAndNativeAccountIdPresent,\r\n        desc: BrowserAuthErrorMessages[spaCodeAndNativeAccountIdPresent],\r\n    },\r\n    databaseUnavailable: {\r\n        code: databaseUnavailable,\r\n        desc: BrowserAuthErrorMessages[databaseUnavailable],\r\n    },\r\n    unableToAcquireTokenFromNativePlatform: {\r\n        code: unableToAcquireTokenFromNativePlatform,\r\n        desc: BrowserAuthErrorMessages[unableToAcquireTokenFromNativePlatform],\r\n    },\r\n    nativeHandshakeTimeout: {\r\n        code: nativeHandshakeTimeout,\r\n        desc: BrowserAuthErrorMessages[nativeHandshakeTimeout],\r\n    },\r\n    nativeExtensionNotInstalled: {\r\n        code: nativeExtensionNotInstalled,\r\n        desc: BrowserAuthErrorMessages[nativeExtensionNotInstalled],\r\n    },\r\n    nativeConnectionNotEstablished: {\r\n        code: nativeConnectionNotEstablished,\r\n        desc: BrowserAuthErrorMessages[nativeConnectionNotEstablished],\r\n    },\r\n    uninitializedPublicClientApplication: {\r\n        code: uninitializedPublicClientApplication,\r\n        desc: BrowserAuthErrorMessages[uninitializedPublicClientApplication],\r\n    },\r\n    nativePromptNotSupported: {\r\n        code: nativePromptNotSupported,\r\n        desc: BrowserAuthErrorMessages[nativePromptNotSupported],\r\n    },\r\n    invalidBase64StringError: {\r\n        code: invalidBase64String,\r\n        desc: BrowserAuthErrorMessages[invalidBase64String],\r\n    },\r\n    invalidPopTokenRequest: {\r\n        code: invalidPopTokenRequest,\r\n        desc: BrowserAuthErrorMessages[invalidPopTokenRequest],\r\n    },\r\n};\r\n/**\r\n * Browser library error class thrown by the MSAL.js library for SPAs\r\n */\r\nclass BrowserAuthError extends AuthError {\r\n    constructor(errorCode, subError) {\r\n        super(errorCode, BrowserAuthErrorMessages[errorCode], subError);\r\n        Object.setPrototypeOf(this, BrowserAuthError.prototype);\r\n        this.name = \"BrowserAuthError\";\r\n    }\r\n}\r\nfunction createBrowserAuthError(errorCode, subError) {\r\n    return new BrowserAuthError(errorCode, subError);\r\n}\n\nexport { BrowserAuthError, BrowserAuthErrorMessage, BrowserAuthErrorMessages, createBrowserAuthError };\n//# sourceMappingURL=BrowserAuthError.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { OIDC_DEFAULT_SCOPES } from '@azure/msal-common/browser';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Constants\r\n */\r\nconst BrowserConstants = {\r\n    /**\r\n     * Invalid grant error code\r\n     */\r\n    INVALID_GRANT_ERROR: \"invalid_grant\",\r\n    /**\r\n     * Default popup window width\r\n     */\r\n    POPUP_WIDTH: 483,\r\n    /**\r\n     * Default popup window height\r\n     */\r\n    POPUP_HEIGHT: 600,\r\n    /**\r\n     * Name of the popup window starts with\r\n     */\r\n    POPUP_NAME_PREFIX: \"msal\",\r\n    /**\r\n     * Default popup monitor poll interval in milliseconds\r\n     */\r\n    DEFAULT_POLL_INTERVAL_MS: 30,\r\n    /**\r\n     * Msal-browser SKU\r\n     */\r\n    MSAL_SKU: \"msal.js.browser\",\r\n};\r\nconst PlatformAuthConstants = {\r\n    CHANNEL_ID: \"53ee284d-920a-4b59-9d30-a60315b26836\",\r\n    PREFERRED_EXTENSION_ID: \"ppnbnpeolgkicgegkbkbjmhlideopiji\",\r\n    MATS_TELEMETRY: \"MATS\",\r\n    MICROSOFT_ENTRA_BROKERID: \"MicrosoftEntra\",\r\n    DOM_API_NAME: \"DOM API\",\r\n    PLATFORM_DOM_APIS: \"get-token-and-sign-out\",\r\n    PLATFORM_DOM_PROVIDER: \"PlatformAuthDOMHandler\",\r\n    PLATFORM_EXTENSION_PROVIDER: \"PlatformAuthExtensionHandler\",\r\n};\r\nconst NativeExtensionMethod = {\r\n    HandshakeRequest: \"Handshake\",\r\n    HandshakeResponse: \"HandshakeResponse\",\r\n    GetToken: \"GetToken\",\r\n    Response: \"Response\",\r\n};\r\nconst BrowserCacheLocation = {\r\n    LocalStorage: \"localStorage\",\r\n    SessionStorage: \"sessionStorage\",\r\n    MemoryStorage: \"memoryStorage\",\r\n};\r\n/**\r\n * HTTP Request types supported by MSAL.\r\n */\r\nconst HTTP_REQUEST_TYPE = {\r\n    GET: \"GET\",\r\n    POST: \"POST\",\r\n};\r\nconst INTERACTION_TYPE = {\r\n    SIGNIN: \"signin\",\r\n    SIGNOUT: \"signout\",\r\n};\r\n/**\r\n * Temporary cache keys for MSAL, deleted after any request.\r\n */\r\nconst TemporaryCacheKeys = {\r\n    ORIGIN_URI: \"request.origin\",\r\n    URL_HASH: \"urlHash\",\r\n    REQUEST_PARAMS: \"request.params\",\r\n    VERIFIER: \"code.verifier\",\r\n    INTERACTION_STATUS_KEY: \"interaction.status\",\r\n    NATIVE_REQUEST: \"request.native\",\r\n};\r\n/**\r\n * Cache keys stored in-memory\r\n */\r\nconst InMemoryCacheKeys = {\r\n    WRAPPER_SKU: \"wrapper.sku\",\r\n    WRAPPER_VER: \"wrapper.version\",\r\n};\r\n/**\r\n * API Codes for Telemetry purposes.\r\n * 0-99 Silent Flow\r\n * 800-899 Auth Code Flow\r\n * 900-999 Miscellaneous\r\n */\r\nconst ApiId = {\r\n    acquireTokenRedirect: 861,\r\n    acquireTokenPopup: 862,\r\n    ssoSilent: 863,\r\n    acquireTokenSilent_authCode: 864,\r\n    handleRedirectPromise: 865,\r\n    acquireTokenByCode: 866,\r\n    acquireTokenSilent_silentFlow: 61,\r\n    logout: 961,\r\n    logoutPopup: 962,\r\n    hydrateCache: 963,\r\n    loadExternalTokens: 964,\r\n};\r\n/**\r\n * API Names for Telemetry purposes.\r\n */\r\nconst ApiName = {\r\n    861: \"acquireTokenRedirect\",\r\n    862: \"acquireTokenPopup\",\r\n    863: \"ssoSilent\",\r\n    864: \"acquireTokenSilent_authCode\",\r\n    865: \"handleRedirectPromise\",\r\n    866: \"acquireTokenByCode\",\r\n    61: \"acquireTokenSilent_silentFlow\",\r\n    961: \"logout\",\r\n    962: \"logoutPopup\",\r\n    963: \"hydrateCache\",\r\n    964: \"loadExternalTokens\",\r\n};\r\nconst apiIdToName = (id) => {\r\n    if (typeof id === \"number\" && id in ApiName) {\r\n        return ApiName[id];\r\n    }\r\n    return \"unknown\";\r\n};\r\n/*\r\n * Interaction type of the API - used for state and telemetry\r\n */\r\nvar InteractionType;\r\n(function (InteractionType) {\r\n    InteractionType[\"Redirect\"] = \"redirect\";\r\n    InteractionType[\"Popup\"] = \"popup\";\r\n    InteractionType[\"Silent\"] = \"silent\";\r\n    InteractionType[\"None\"] = \"none\";\r\n})(InteractionType || (InteractionType = {}));\r\n/**\r\n * Types of interaction currently in progress.\r\n * Used in events in wrapper libraries to invoke functions when certain interaction is in progress or all interactions are complete.\r\n */\r\nconst InteractionStatus = {\r\n    /**\r\n     * Initial status before interaction occurs\r\n     */\r\n    Startup: \"startup\",\r\n    /**\r\n     * Status set when all login calls occuring\r\n     */\r\n    Login: \"login\",\r\n    /**\r\n     * Status set when logout call occuring\r\n     */\r\n    Logout: \"logout\",\r\n    /**\r\n     * Status set for acquireToken calls\r\n     */\r\n    AcquireToken: \"acquireToken\",\r\n    /**\r\n     * Status set for ssoSilent calls\r\n     */\r\n    SsoSilent: \"ssoSilent\",\r\n    /**\r\n     * Status set when handleRedirect in progress\r\n     */\r\n    HandleRedirect: \"handleRedirect\",\r\n    /**\r\n     * Status set when interaction is complete\r\n     */\r\n    None: \"none\",\r\n};\r\nconst DEFAULT_REQUEST = {\r\n    scopes: OIDC_DEFAULT_SCOPES,\r\n};\r\n/**\r\n * JWK Key Format string (Type MUST be defined for window crypto APIs)\r\n */\r\nconst KEY_FORMAT_JWK = \"jwk\";\r\n// Supported wrapper SKUs\r\nconst WrapperSKU = {\r\n    React: \"@azure/msal-react\",\r\n    Angular: \"@azure/msal-angular\",\r\n};\r\n// DatabaseStorage Constants\r\nconst DB_NAME = \"msal.db\";\r\nconst DB_VERSION = 1;\r\nconst DB_TABLE_NAME = `${DB_NAME}.keys`;\r\nconst CacheLookupPolicy = {\r\n    /*\r\n     * acquireTokenSilent will attempt to retrieve an access token from the cache. If the access token is expired\r\n     * or cannot be found the refresh token will be used to acquire a new one. Finally, if the refresh token\r\n     * is expired acquireTokenSilent will attempt to acquire new access and refresh tokens.\r\n     */\r\n    Default: 0,\r\n    /*\r\n     * acquireTokenSilent will only look for access tokens in the cache. It will not attempt to renew access or\r\n     * refresh tokens.\r\n     */\r\n    AccessToken: 1,\r\n    /*\r\n     * acquireTokenSilent will attempt to retrieve an access token from the cache. If the access token is expired or\r\n     * cannot be found, the refresh token will be used to acquire a new one. If the refresh token is expired, it\r\n     * will not be renewed and acquireTokenSilent will fail.\r\n     */\r\n    AccessTokenAndRefreshToken: 2,\r\n    /*\r\n     * acquireTokenSilent will not attempt to retrieve access tokens from the cache and will instead attempt to\r\n     * exchange the cached refresh token for a new access token. If the refresh token is expired, it will not be\r\n     * renewed and acquireTokenSilent will fail.\r\n     */\r\n    RefreshToken: 3,\r\n    /*\r\n     * acquireTokenSilent will not look in the cache for the access token. It will go directly to network with the\r\n     * cached refresh token. If the refresh token is expired an attempt will be made to renew it. This is equivalent to\r\n     * setting \"forceRefresh: true\".\r\n     */\r\n    RefreshTokenAndNetwork: 4,\r\n    /*\r\n     * acquireTokenSilent will attempt to renew both access and refresh tokens. It will not look in the cache. This will\r\n     * always fail if 3rd party cookies are blocked by the browser.\r\n     */\r\n    Skip: 5,\r\n};\r\nconst iFrameRenewalPolicies = [\r\n    CacheLookupPolicy.Default,\r\n    CacheLookupPolicy.Skip,\r\n    CacheLookupPolicy.RefreshTokenAndNetwork,\r\n];\n\nexport { ApiId, ApiName, BrowserCacheLocation, BrowserConstants, CacheLookupPolicy, DB_NAME, DB_TABLE_NAME, DB_VERSION, DEFAULT_REQUEST, HTTP_REQUEST_TYPE, INTERACTION_TYPE, InMemoryCacheKeys, InteractionStatus, InteractionType, KEY_FORMAT_JWK, NativeExtensionMethod, PlatformAuthConstants, TemporaryCacheKeys, WrapperSKU, apiIdToName, iFrameRenewalPolicies };\n//# sourceMappingURL=BrowserConstants.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Class which exposes APIs to encode plaintext to base64 encoded string. See here for implementation details:\r\n * https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#Solution_2_%E2%80%93_JavaScript's_UTF-16_%3E_UTF-8_%3E_base64\r\n */\r\n/**\r\n * Returns URL Safe b64 encoded string from a plaintext string.\r\n * @param input\r\n */\r\nfunction urlEncode(input) {\r\n    return encodeURIComponent(base64Encode(input)\r\n        .replace(/=/g, \"\")\r\n        .replace(/\\+/g, \"-\")\r\n        .replace(/\\//g, \"_\"));\r\n}\r\n/**\r\n * Returns URL Safe b64 encoded string from an int8Array.\r\n * @param inputArr\r\n */\r\nfunction urlEncodeArr(inputArr) {\r\n    return base64EncArr(inputArr)\r\n        .replace(/=/g, \"\")\r\n        .replace(/\\+/g, \"-\")\r\n        .replace(/\\//g, \"_\");\r\n}\r\n/**\r\n * Returns b64 encoded string from plaintext string.\r\n * @param input\r\n */\r\nfunction base64Encode(input) {\r\n    return base64EncArr(new TextEncoder().encode(input));\r\n}\r\n/**\r\n * Base64 encode byte array\r\n * @param aBytes\r\n */\r\nfunction base64EncArr(aBytes) {\r\n    const binString = Array.from(aBytes, (x) => String.fromCodePoint(x)).join(\"\");\r\n    return btoa(binString);\r\n}\n\nexport { base64Encode, urlEncode, urlEncodeArr };\n//# sourceMappingURL=Base64Encode.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { createBrowserAuthError } from '../error/BrowserAuthError.mjs';\nimport { invalidBase64String } from '../error/BrowserAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Class which exposes APIs to decode base64 strings to plaintext. See here for implementation details:\r\n * https://developer.mozilla.org/en-US/docs/Glossary/Base64#the_unicode_problem\r\n */\r\n/**\r\n * Returns a URL-safe plaintext decoded string from b64 encoded input.\r\n * @param input\r\n */\r\nfunction base64Decode(input) {\r\n    return new TextDecoder().decode(base64DecToArr(input));\r\n}\r\n/**\r\n * Decodes base64 into Uint8Array\r\n * @param base64String\r\n */\r\nfunction base64DecToArr(base64String) {\r\n    let encodedString = base64String.replace(/-/g, \"+\").replace(/_/g, \"/\");\r\n    switch (encodedString.length % 4) {\r\n        case 0:\r\n            break;\r\n        case 2:\r\n            encodedString += \"==\";\r\n            break;\r\n        case 3:\r\n            encodedString += \"=\";\r\n            break;\r\n        default:\r\n            throw createBrowserAuthError(invalidBase64String);\r\n    }\r\n    const binString = atob(encodedString);\r\n    return Uint8Array.from(binString, (m) => m.codePointAt(0) || 0);\r\n}\n\nexport { base64DecToArr, base64Decode };\n//# sourceMappingURL=Base64Decode.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { createBrowserAuthError } from '../error/BrowserAuthError.mjs';\nimport { PerformanceEvents } from '@azure/msal-common/browser';\nimport { KEY_FORMAT_JWK } from '../utils/BrowserConstants.mjs';\nimport { urlEncodeArr, base64Encode } from '../encode/Base64Encode.mjs';\nimport { base64DecToArr, base64Decode } from '../encode/Base64Decode.mjs';\nimport { nonBrowserEnvironment, cryptoNonExistent, failedToDecryptEarResponse } from '../error/BrowserAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * This file defines functions used by the browser library to perform cryptography operations such as\r\n * hashing and encoding. It also has helper functions to validate the availability of specific APIs.\r\n */\r\n/**\r\n * See here for more info on RsaHashedKeyGenParams: https://developer.mozilla.org/en-US/docs/Web/API/RsaHashedKeyGenParams\r\n */\r\n// Algorithms\r\nconst PKCS1_V15_KEYGEN_ALG = \"RSASSA-PKCS1-v1_5\";\r\nconst AES_GCM = \"AES-GCM\";\r\nconst HKDF = \"HKDF\";\r\n// SHA-256 hashing algorithm\r\nconst S256_HASH_ALG = \"SHA-256\";\r\n// MOD length for PoP tokens\r\nconst MODULUS_LENGTH = 2048;\r\n// Public Exponent\r\nconst PUBLIC_EXPONENT = new Uint8Array([0x01, 0x00, 0x01]);\r\n// UUID hex digits\r\nconst UUID_CHARS = \"0123456789abcdef\";\r\n// Array to store UINT32 random value\r\nconst UINT32_ARR = new Uint32Array(1);\r\n// Key Format\r\nconst RAW = \"raw\";\r\n// Key Usages\r\nconst ENCRYPT = \"encrypt\";\r\nconst DECRYPT = \"decrypt\";\r\nconst DERIVE_KEY = \"deriveKey\";\r\n// Suberror\r\nconst SUBTLE_SUBERROR = \"crypto_subtle_undefined\";\r\nconst keygenAlgorithmOptions = {\r\n    name: PKCS1_V15_KEYGEN_ALG,\r\n    hash: S256_HASH_ALG,\r\n    modulusLength: MODULUS_LENGTH,\r\n    publicExponent: PUBLIC_EXPONENT,\r\n};\r\n/**\r\n * Check whether browser crypto is available.\r\n */\r\nfunction validateCryptoAvailable(skipValidateSubtleCrypto) {\r\n    if (!window) {\r\n        throw createBrowserAuthError(nonBrowserEnvironment);\r\n    }\r\n    if (!window.crypto) {\r\n        throw createBrowserAuthError(cryptoNonExistent);\r\n    }\r\n    if (!skipValidateSubtleCrypto && !window.crypto.subtle) {\r\n        throw createBrowserAuthError(cryptoNonExistent, SUBTLE_SUBERROR);\r\n    }\r\n}\r\n/**\r\n * Returns a sha-256 hash of the given dataString as an ArrayBuffer.\r\n * @param dataString {string} data string\r\n * @param performanceClient {?IPerformanceClient}\r\n * @param correlationId {?string} correlation id\r\n */\r\nasync function sha256Digest(dataString, performanceClient, correlationId) {\r\n    performanceClient?.addQueueMeasurement(PerformanceEvents.Sha256Digest, correlationId);\r\n    const encoder = new TextEncoder();\r\n    const data = encoder.encode(dataString);\r\n    return window.crypto.subtle.digest(S256_HASH_ALG, data);\r\n}\r\n/**\r\n * Populates buffer with cryptographically random values.\r\n * @param dataBuffer\r\n */\r\nfunction getRandomValues(dataBuffer) {\r\n    return window.crypto.getRandomValues(dataBuffer);\r\n}\r\n/**\r\n * Returns random Uint32 value.\r\n * @returns {number}\r\n */\r\nfunction getRandomUint32() {\r\n    window.crypto.getRandomValues(UINT32_ARR);\r\n    return UINT32_ARR[0];\r\n}\r\n/**\r\n * Creates a UUID v7 from the current timestamp.\r\n * Implementation relies on the system clock to guarantee increasing order of generated identifiers.\r\n * @returns {number}\r\n */\r\nfunction createNewGuid() {\r\n    const currentTimestamp = Date.now();\r\n    const baseRand = getRandomUint32() * 0x400 + (getRandomUint32() & 0x3ff);\r\n    // Result byte array\r\n    const bytes = new Uint8Array(16);\r\n    // A 12-bit `rand_a` field value\r\n    const randA = Math.trunc(baseRand / 2 ** 30);\r\n    // The higher 30 bits of 62-bit `rand_b` field value\r\n    const randBHi = baseRand & (2 ** 30 - 1);\r\n    // The lower 32 bits of 62-bit `rand_b` field value\r\n    const randBLo = getRandomUint32();\r\n    bytes[0] = currentTimestamp / 2 ** 40;\r\n    bytes[1] = currentTimestamp / 2 ** 32;\r\n    bytes[2] = currentTimestamp / 2 ** 24;\r\n    bytes[3] = currentTimestamp / 2 ** 16;\r\n    bytes[4] = currentTimestamp / 2 ** 8;\r\n    bytes[5] = currentTimestamp;\r\n    bytes[6] = 0x70 | (randA >>> 8);\r\n    bytes[7] = randA;\r\n    bytes[8] = 0x80 | (randBHi >>> 24);\r\n    bytes[9] = randBHi >>> 16;\r\n    bytes[10] = randBHi >>> 8;\r\n    bytes[11] = randBHi;\r\n    bytes[12] = randBLo >>> 24;\r\n    bytes[13] = randBLo >>> 16;\r\n    bytes[14] = randBLo >>> 8;\r\n    bytes[15] = randBLo;\r\n    let text = \"\";\r\n    for (let i = 0; i < bytes.length; i++) {\r\n        text += UUID_CHARS.charAt(bytes[i] >>> 4);\r\n        text += UUID_CHARS.charAt(bytes[i] & 0xf);\r\n        if (i === 3 || i === 5 || i === 7 || i === 9) {\r\n            text += \"-\";\r\n        }\r\n    }\r\n    return text;\r\n}\r\n/**\r\n * Generates a keypair based on current keygen algorithm config.\r\n * @param extractable\r\n * @param usages\r\n */\r\nasync function generateKeyPair(extractable, usages) {\r\n    return window.crypto.subtle.generateKey(keygenAlgorithmOptions, extractable, usages);\r\n}\r\n/**\r\n * Export key as Json Web Key (JWK)\r\n * @param key\r\n */\r\nasync function exportJwk(key) {\r\n    return window.crypto.subtle.exportKey(KEY_FORMAT_JWK, key);\r\n}\r\n/**\r\n * Imports key as Json Web Key (JWK), can set extractable and usages.\r\n * @param key\r\n * @param extractable\r\n * @param usages\r\n */\r\nasync function importJwk(key, extractable, usages) {\r\n    return window.crypto.subtle.importKey(KEY_FORMAT_JWK, key, keygenAlgorithmOptions, extractable, usages);\r\n}\r\n/**\r\n * Signs given data with given key\r\n * @param key\r\n * @param data\r\n */\r\nasync function sign(key, data) {\r\n    return window.crypto.subtle.sign(keygenAlgorithmOptions, key, data);\r\n}\r\n/**\r\n * Generates Base64 encoded jwk used in the Encrypted Authorize Response (EAR) flow\r\n */\r\nasync function generateEarKey() {\r\n    const key = await generateBaseKey();\r\n    const keyStr = urlEncodeArr(new Uint8Array(key));\r\n    const jwk = {\r\n        alg: \"dir\",\r\n        kty: \"oct\",\r\n        k: keyStr,\r\n    };\r\n    return base64Encode(JSON.stringify(jwk));\r\n}\r\n/**\r\n * Parses earJwk for encryption key and returns CryptoKey object\r\n * @param earJwk\r\n * @returns\r\n */\r\nasync function importEarKey(earJwk) {\r\n    const b64DecodedJwk = base64Decode(earJwk);\r\n    const jwkJson = JSON.parse(b64DecodedJwk);\r\n    const rawKey = jwkJson.k;\r\n    const keyBuffer = base64DecToArr(rawKey);\r\n    return window.crypto.subtle.importKey(RAW, keyBuffer, AES_GCM, false, [\r\n        DECRYPT,\r\n    ]);\r\n}\r\n/**\r\n * Decrypt ear_jwe response returned in the Encrypted Authorize Response (EAR) flow\r\n * @param earJwk\r\n * @param earJwe\r\n * @returns\r\n */\r\nasync function decryptEarResponse(earJwk, earJwe) {\r\n    const earJweParts = earJwe.split(\".\");\r\n    if (earJweParts.length !== 5) {\r\n        throw createBrowserAuthError(failedToDecryptEarResponse, \"jwe_length\");\r\n    }\r\n    const key = await importEarKey(earJwk).catch(() => {\r\n        throw createBrowserAuthError(failedToDecryptEarResponse, \"import_key\");\r\n    });\r\n    try {\r\n        const header = new TextEncoder().encode(earJweParts[0]);\r\n        const iv = base64DecToArr(earJweParts[2]);\r\n        const ciphertext = base64DecToArr(earJweParts[3]);\r\n        const tag = base64DecToArr(earJweParts[4]);\r\n        const tagLengthBits = tag.byteLength * 8;\r\n        // Concat ciphertext and tag\r\n        const encryptedData = new Uint8Array(ciphertext.length + tag.length);\r\n        encryptedData.set(ciphertext);\r\n        encryptedData.set(tag, ciphertext.length);\r\n        const decryptedData = await window.crypto.subtle.decrypt({\r\n            name: AES_GCM,\r\n            iv: iv,\r\n            tagLength: tagLengthBits,\r\n            additionalData: header,\r\n        }, key, encryptedData);\r\n        return new TextDecoder().decode(decryptedData);\r\n    }\r\n    catch (e) {\r\n        throw createBrowserAuthError(failedToDecryptEarResponse, \"decrypt\");\r\n    }\r\n}\r\n/**\r\n * Generates symmetric base encryption key. This may be stored as all encryption/decryption keys will be derived from this one.\r\n */\r\nasync function generateBaseKey() {\r\n    const key = await window.crypto.subtle.generateKey({\r\n        name: AES_GCM,\r\n        length: 256,\r\n    }, true, [ENCRYPT, DECRYPT]);\r\n    return window.crypto.subtle.exportKey(RAW, key);\r\n}\r\n/**\r\n * Returns the raw key to be passed into the key derivation function\r\n * @param baseKey\r\n * @returns\r\n */\r\nasync function generateHKDF(baseKey) {\r\n    return window.crypto.subtle.importKey(RAW, baseKey, HKDF, false, [\r\n        DERIVE_KEY,\r\n    ]);\r\n}\r\n/**\r\n * Given a base key and a nonce generates a derived key to be used in encryption and decryption.\r\n * Note: every time we encrypt a new key is derived\r\n * @param baseKey\r\n * @param nonce\r\n * @returns\r\n */\r\nasync function deriveKey(baseKey, nonce, context) {\r\n    return window.crypto.subtle.deriveKey({\r\n        name: HKDF,\r\n        salt: nonce,\r\n        hash: S256_HASH_ALG,\r\n        info: new TextEncoder().encode(context),\r\n    }, baseKey, { name: AES_GCM, length: 256 }, false, [ENCRYPT, DECRYPT]);\r\n}\r\n/**\r\n * Encrypt the given data given a base key. Returns encrypted data and a nonce that must be provided during decryption\r\n * @param key\r\n * @param rawData\r\n */\r\nasync function encrypt(baseKey, rawData, context) {\r\n    const encodedData = new TextEncoder().encode(rawData);\r\n    // The nonce must never be reused with a given key.\r\n    const nonce = window.crypto.getRandomValues(new Uint8Array(16));\r\n    const derivedKey = await deriveKey(baseKey, nonce, context);\r\n    const encryptedData = await window.crypto.subtle.encrypt({\r\n        name: AES_GCM,\r\n        iv: new Uint8Array(12), // New key is derived for every encrypt so we don't need a new nonce\r\n    }, derivedKey, encodedData);\r\n    return {\r\n        data: urlEncodeArr(new Uint8Array(encryptedData)),\r\n        nonce: urlEncodeArr(nonce),\r\n    };\r\n}\r\n/**\r\n * Decrypt data with the given key and nonce\r\n * @param key\r\n * @param nonce\r\n * @param encryptedData\r\n * @returns\r\n */\r\nasync function decrypt(baseKey, nonce, context, encryptedData) {\r\n    const encodedData = base64DecToArr(encryptedData);\r\n    const derivedKey = await deriveKey(baseKey, base64DecToArr(nonce), context);\r\n    const decryptedData = await window.crypto.subtle.decrypt({\r\n        name: AES_GCM,\r\n        iv: new Uint8Array(12), // New key is derived for every encrypt so we don't need a new nonce\r\n    }, derivedKey, encodedData);\r\n    return new TextDecoder().decode(decryptedData);\r\n}\r\n/**\r\n * Returns the SHA-256 hash of an input string\r\n * @param plainText\r\n */\r\nasync function hashString(plainText) {\r\n    const hashBuffer = await sha256Digest(plainText);\r\n    const hashBytes = new Uint8Array(hashBuffer);\r\n    return urlEncodeArr(hashBytes);\r\n}\n\nexport { createNewGuid, decrypt, decryptEarResponse, encrypt, exportJwk, generateBaseKey, generateEarKey, generateHKDF, generateKeyPair, getRandomValues, hashString, importEarKey, importJwk, sha256Digest, sign, validateCryptoAvailable };\n//# sourceMappingURL=BrowserCrypto.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst storageNotSupported = \"storage_not_supported\";\r\nconst stubbedPublicClientApplicationCalled = \"stubbed_public_client_application_called\";\r\nconst inMemRedirectUnavailable = \"in_mem_redirect_unavailable\";\n\nexport { inMemRedirectUnavailable, storageNotSupported, stubbedPublicClientApplicationCalled };\n//# sourceMappingURL=BrowserConfigurationAuthErrorCodes.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { AuthError } from '@azure/msal-common/browser';\nimport { inMemRedirectUnavailable, stubbedPublicClientApplicationCalled, storageNotSupported } from './BrowserConfigurationAuthErrorCodes.mjs';\nimport * as BrowserConfigurationAuthErrorCodes from './BrowserConfigurationAuthErrorCodes.mjs';\nexport { BrowserConfigurationAuthErrorCodes };\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst BrowserConfigurationAuthErrorMessages = {\r\n    [storageNotSupported]: \"Given storage configuration option was not supported.\",\r\n    [stubbedPublicClientApplicationCalled]: \"Stub instance of Public Client Application was called. If using msal-react, please ensure context is not used without a provider. For more visit: aka.ms/msaljs/browser-errors\",\r\n    [inMemRedirectUnavailable]: \"Redirect cannot be supported. In-memory storage was selected and storeAuthStateInCookie=false, which would cause the library to be unable to handle the incoming hash. If you would like to use the redirect API, please use session/localStorage or set storeAuthStateInCookie=true.\",\r\n};\r\n/**\r\n * BrowserAuthErrorMessage class containing string constants used by error codes and messages.\r\n * @deprecated Use BrowserAuthErrorCodes instead\r\n */\r\nconst BrowserConfigurationAuthErrorMessage = {\r\n    storageNotSupportedError: {\r\n        code: storageNotSupported,\r\n        desc: BrowserConfigurationAuthErrorMessages[storageNotSupported],\r\n    },\r\n    stubPcaInstanceCalled: {\r\n        code: stubbedPublicClientApplicationCalled,\r\n        desc: BrowserConfigurationAuthErrorMessages[stubbedPublicClientApplicationCalled],\r\n    },\r\n    inMemRedirectUnavailable: {\r\n        code: inMemRedirectUnavailable,\r\n        desc: BrowserConfigurationAuthErrorMessages[inMemRedirectUnavailable],\r\n    },\r\n};\r\n/**\r\n * Browser library error class thrown by the MSAL.js library for SPAs\r\n */\r\nclass BrowserConfigurationAuthError extends AuthError {\r\n    constructor(errorCode, errorMessage) {\r\n        super(errorCode, errorMessage);\r\n        this.name = \"BrowserConfigurationAuthError\";\r\n        Object.setPrototypeOf(this, BrowserConfigurationAuthError.prototype);\r\n    }\r\n}\r\nfunction createBrowserConfigurationAuthError(errorCode) {\r\n    return new BrowserConfigurationAuthError(errorCode, BrowserConfigurationAuthErrorMessages[errorCode]);\r\n}\n\nexport { BrowserConfigurationAuthError, BrowserConfigurationAuthErrorMessage, BrowserConfigurationAuthErrorMessages, createBrowserConfigurationAuthError };\n//# sourceMappingURL=BrowserConfigurationAuthError.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { RequestParameterBuilder, UrlString } from '@azure/msal-common/browser';\nexport { invoke, invokeAsync } from '@azure/msal-common/browser';\nimport { createBrowserAuthError } from '../error/BrowserAuthError.mjs';\nimport { BrowserConstants, BrowserCacheLocation } from './BrowserConstants.mjs';\nimport { createNewGuid } from '../crypto/BrowserCrypto.mjs';\nimport { createBrowserConfigurationAuthError } from '../error/BrowserConfigurationAuthError.mjs';\nimport { blockIframeReload, redirectInIframe, blockNestedPopups, nonBrowserEnvironment, uninitializedPublicClientApplication } from '../error/BrowserAuthErrorCodes.mjs';\nimport { inMemRedirectUnavailable } from '../error/BrowserConfigurationAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Clears hash from window url.\r\n */\r\nfunction clearHash(contentWindow) {\r\n    // Office.js sets history.replaceState to null\r\n    contentWindow.location.hash = \"\";\r\n    if (typeof contentWindow.history.replaceState === \"function\") {\r\n        // Full removes \"#\" from url\r\n        contentWindow.history.replaceState(null, \"\", `${contentWindow.location.origin}${contentWindow.location.pathname}${contentWindow.location.search}`);\r\n    }\r\n}\r\n/**\r\n * Replaces current hash with hash from provided url\r\n */\r\nfunction replaceHash(url) {\r\n    const urlParts = url.split(\"#\");\r\n    urlParts.shift(); // Remove part before the hash\r\n    window.location.hash = urlParts.length > 0 ? urlParts.join(\"#\") : \"\";\r\n}\r\n/**\r\n * Returns boolean of whether the current window is in an iframe or not.\r\n */\r\nfunction isInIframe() {\r\n    return window.parent !== window;\r\n}\r\n/**\r\n * Returns boolean of whether or not the current window is a popup opened by msal\r\n */\r\nfunction isInPopup() {\r\n    return (typeof window !== \"undefined\" &&\r\n        !!window.opener &&\r\n        window.opener !== window &&\r\n        typeof window.name === \"string\" &&\r\n        window.name.indexOf(`${BrowserConstants.POPUP_NAME_PREFIX}.`) === 0);\r\n}\r\n// #endregion\r\n/**\r\n * Returns current window URL as redirect uri\r\n */\r\nfunction getCurrentUri() {\r\n    return typeof window !== \"undefined\" && window.location\r\n        ? window.location.href.split(\"?\")[0].split(\"#\")[0]\r\n        : \"\";\r\n}\r\n/**\r\n * Gets the homepage url for the current window location.\r\n */\r\nfunction getHomepage() {\r\n    const currentUrl = new UrlString(window.location.href);\r\n    const urlComponents = currentUrl.getUrlComponents();\r\n    return `${urlComponents.Protocol}//${urlComponents.HostNameAndPort}/`;\r\n}\r\n/**\r\n * Throws error if we have completed an auth and are\r\n * attempting another auth request inside an iframe.\r\n */\r\nfunction blockReloadInHiddenIframes() {\r\n    const isResponseHash = UrlString.hashContainsKnownProperties(window.location.hash);\r\n    // return an error if called from the hidden iframe created by the msal js silent calls\r\n    if (isResponseHash && isInIframe()) {\r\n        throw createBrowserAuthError(blockIframeReload);\r\n    }\r\n}\r\n/**\r\n * Block redirect operations in iframes unless explicitly allowed\r\n * @param interactionType Interaction type for the request\r\n * @param allowRedirectInIframe Config value to allow redirects when app is inside an iframe\r\n */\r\nfunction blockRedirectInIframe(allowRedirectInIframe) {\r\n    if (isInIframe() && !allowRedirectInIframe) {\r\n        // If we are not in top frame, we shouldn't redirect. This is also handled by the service.\r\n        throw createBrowserAuthError(redirectInIframe);\r\n    }\r\n}\r\n/**\r\n * Block redirectUri loaded in popup from calling AcquireToken APIs\r\n */\r\nfunction blockAcquireTokenInPopups() {\r\n    // Popups opened by msal popup APIs are given a name that starts with \"msal.\"\r\n    if (isInPopup()) {\r\n        throw createBrowserAuthError(blockNestedPopups);\r\n    }\r\n}\r\n/**\r\n * Throws error if token requests are made in non-browser environment\r\n * @param isBrowserEnvironment Flag indicating if environment is a browser.\r\n */\r\nfunction blockNonBrowserEnvironment() {\r\n    if (typeof window === \"undefined\") {\r\n        throw createBrowserAuthError(nonBrowserEnvironment);\r\n    }\r\n}\r\n/**\r\n * Throws error if initialize hasn't been called\r\n * @param initialized\r\n */\r\nfunction blockAPICallsBeforeInitialize(initialized) {\r\n    if (!initialized) {\r\n        throw createBrowserAuthError(uninitializedPublicClientApplication);\r\n    }\r\n}\r\n/**\r\n * Helper to validate app environment before making an auth request\r\n * @param initialized\r\n */\r\nfunction preflightCheck(initialized) {\r\n    // Block request if not in browser environment\r\n    blockNonBrowserEnvironment();\r\n    // Block auth requests inside a hidden iframe\r\n    blockReloadInHiddenIframes();\r\n    // Block redirectUri opened in a popup from calling MSAL APIs\r\n    blockAcquireTokenInPopups();\r\n    // Block token acquisition before initialize has been called\r\n    blockAPICallsBeforeInitialize(initialized);\r\n}\r\n/**\r\n * Helper to validate app enviornment before making redirect request\r\n * @param initialized\r\n * @param config\r\n */\r\nfunction redirectPreflightCheck(initialized, config) {\r\n    preflightCheck(initialized);\r\n    blockRedirectInIframe(config.system.allowRedirectInIframe);\r\n    // Block redirects if memory storage is enabled but storeAuthStateInCookie is not\r\n    if (config.cache.cacheLocation === BrowserCacheLocation.MemoryStorage &&\r\n        !config.cache.storeAuthStateInCookie) {\r\n        throw createBrowserConfigurationAuthError(inMemRedirectUnavailable);\r\n    }\r\n}\r\n/**\r\n * Adds a preconnect link element to the header which begins DNS resolution and SSL connection in anticipation of the /token request\r\n * @param loginDomain Authority domain, including https protocol e.g. https://login.microsoftonline.com\r\n * @returns\r\n */\r\nfunction preconnect(authority) {\r\n    const link = document.createElement(\"link\");\r\n    link.rel = \"preconnect\";\r\n    link.href = new URL(authority).origin;\r\n    link.crossOrigin = \"anonymous\";\r\n    document.head.appendChild(link);\r\n    // The browser will close connection if not used within a few seconds, remove element from the header after 10s\r\n    window.setTimeout(() => {\r\n        try {\r\n            document.head.removeChild(link);\r\n        }\r\n        catch { }\r\n    }, 10000); // 10s Timeout\r\n}\r\n/**\r\n * Wrapper function that creates a UUID v7 from the current timestamp.\r\n * @returns {string}\r\n */\r\nfunction createGuid() {\r\n    return createNewGuid();\r\n}\r\nconst addClientCapabilitiesToClaims = RequestParameterBuilder.addClientCapabilitiesToClaims;\n\nexport { addClientCapabilitiesToClaims, blockAPICallsBeforeInitialize, blockAcquireTokenInPopups, blockNonBrowserEnvironment, blockRedirectInIframe, blockReloadInHiddenIframes, clearHash, createGuid, getCurrentUri, getHomepage, isInIframe, isInPopup, preconnect, preflightCheck, redirectPreflightCheck, replaceHash };\n//# sourceMappingURL=BrowserUtils.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { createBrowserAuthError } from '../error/BrowserAuthError.mjs';\nimport { timedOut } from '../error/BrowserAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass NavigationClient {\r\n    /**\r\n     * Navigates to other pages within the same web application\r\n     * @param url\r\n     * @param options\r\n     */\r\n    navigateInternal(url, options) {\r\n        return NavigationClient.defaultNavigateWindow(url, options);\r\n    }\r\n    /**\r\n     * Navigates to other pages outside the web application i.e. the Identity Provider\r\n     * @param url\r\n     * @param options\r\n     */\r\n    navigateExternal(url, options) {\r\n        return NavigationClient.defaultNavigateWindow(url, options);\r\n    }\r\n    /**\r\n     * Default navigation implementation invoked by the internal and external functions\r\n     * @param url\r\n     * @param options\r\n     */\r\n    static defaultNavigateWindow(url, options) {\r\n        if (options.noHistory) {\r\n            window.location.replace(url); // CodeQL [SM03712] Application owner controls the URL. User can't change it.\r\n        }\r\n        else {\r\n            window.location.assign(url); // CodeQL [SM03712] Application owner controls the URL. User can't change it.\r\n        }\r\n        return new Promise((resolve, reject) => {\r\n            setTimeout(() => {\r\n                reject(createBrowserAuthError(timedOut, \"failed_to_redirect\"));\r\n            }, options.timeout);\r\n        });\r\n    }\r\n}\n\nexport { NavigationClient };\n//# sourceMappingURL=NavigationClient.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { createNetworkError } from '@azure/msal-common/browser';\nimport { createBrowserAuthError } from '../error/BrowserAuthError.mjs';\nimport { HTTP_REQUEST_TYPE } from '../utils/BrowserConstants.mjs';\nimport { getRequestFailed, noNetworkConnectivity, failedToParseResponse, postRequestFailed, failedToBuildHeaders, failedToParseHeaders } from '../error/BrowserAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * This class implements the Fetch API for GET and POST requests. See more here: https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API\r\n */\r\nclass FetchClient {\r\n    /**\r\n     * Fetch Client for REST endpoints - Get request\r\n     * @param url\r\n     * @param headers\r\n     * @param body\r\n     */\r\n    async sendGetRequestAsync(url, options) {\r\n        let response;\r\n        let responseHeaders = {};\r\n        let responseStatus = 0;\r\n        const reqHeaders = getFetchHeaders(options);\r\n        try {\r\n            response = await fetch(url, {\r\n                method: HTTP_REQUEST_TYPE.GET,\r\n                headers: reqHeaders,\r\n            });\r\n        }\r\n        catch (e) {\r\n            throw createNetworkError(createBrowserAuthError(window.navigator.onLine\r\n                ? getRequestFailed\r\n                : noNetworkConnectivity), undefined, undefined, e);\r\n        }\r\n        responseHeaders = getHeaderDict(response.headers);\r\n        try {\r\n            responseStatus = response.status;\r\n            return {\r\n                headers: responseHeaders,\r\n                body: (await response.json()),\r\n                status: responseStatus,\r\n            };\r\n        }\r\n        catch (e) {\r\n            throw createNetworkError(createBrowserAuthError(failedToParseResponse), responseStatus, responseHeaders, e);\r\n        }\r\n    }\r\n    /**\r\n     * Fetch Client for REST endpoints - Post request\r\n     * @param url\r\n     * @param headers\r\n     * @param body\r\n     */\r\n    async sendPostRequestAsync(url, options) {\r\n        const reqBody = (options && options.body) || \"\";\r\n        const reqHeaders = getFetchHeaders(options);\r\n        let response;\r\n        let responseStatus = 0;\r\n        let responseHeaders = {};\r\n        try {\r\n            response = await fetch(url, {\r\n                method: HTTP_REQUEST_TYPE.POST,\r\n                headers: reqHeaders,\r\n                body: reqBody,\r\n            });\r\n        }\r\n        catch (e) {\r\n            throw createNetworkError(createBrowserAuthError(window.navigator.onLine\r\n                ? postRequestFailed\r\n                : noNetworkConnectivity), undefined, undefined, e);\r\n        }\r\n        responseHeaders = getHeaderDict(response.headers);\r\n        try {\r\n            responseStatus = response.status;\r\n            return {\r\n                headers: responseHeaders,\r\n                body: (await response.json()),\r\n                status: responseStatus,\r\n            };\r\n        }\r\n        catch (e) {\r\n            throw createNetworkError(createBrowserAuthError(failedToParseResponse), responseStatus, responseHeaders, e);\r\n        }\r\n    }\r\n}\r\n/**\r\n * Get Fetch API Headers object from string map\r\n * @param inputHeaders\r\n */\r\nfunction getFetchHeaders(options) {\r\n    try {\r\n        const headers = new Headers();\r\n        if (!(options && options.headers)) {\r\n            return headers;\r\n        }\r\n        const optionsHeaders = options.headers;\r\n        Object.entries(optionsHeaders).forEach(([key, value]) => {\r\n            headers.append(key, value);\r\n        });\r\n        return headers;\r\n    }\r\n    catch (e) {\r\n        throw createNetworkError(createBrowserAuthError(failedToBuildHeaders), undefined, undefined, e);\r\n    }\r\n}\r\n/**\r\n * Returns object representing response headers\r\n * @param headers\r\n * @returns\r\n */\r\nfunction getHeaderDict(headers) {\r\n    try {\r\n        const headerDict = {};\r\n        headers.forEach((value, key) => {\r\n            headerDict[key] = value;\r\n        });\r\n        return headerDict;\r\n    }\r\n    catch (e) {\r\n        throw createBrowserAuthError(failedToParseHeaders);\r\n    }\r\n}\n\nexport { FetchClient };\n//# sourceMappingURL=FetchClient.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { StubPerformanceClient, ProtocolMode, Logger, LogLevel, createClientConfigurationError, ClientConfigurationErrorCodes, StubbedNetworkModule, DEFAULT_SYSTEM_OPTIONS, Constants, ServerResponseType, AzureCloudInstance } from '@azure/msal-common/browser';\nimport { BrowserConstants, BrowserCacheLocation } from '../utils/BrowserConstants.mjs';\nimport { NavigationClient } from '../navigation/NavigationClient.mjs';\nimport { FetchClient } from '../network/FetchClient.mjs';\nimport { getCurrentUri } from '../utils/BrowserUtils.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n// Default timeout for popup windows and iframes in milliseconds\r\nconst DEFAULT_POPUP_TIMEOUT_MS = 60000;\r\nconst DEFAULT_IFRAME_TIMEOUT_MS = 10000;\r\nconst DEFAULT_REDIRECT_TIMEOUT_MS = 30000;\r\nconst DEFAULT_NATIVE_BROKER_HANDSHAKE_TIMEOUT_MS = 2000;\r\n/**\r\n * MSAL function that sets the default options when not explicitly configured from app developer\r\n *\r\n * @param auth\r\n * @param cache\r\n * @param system\r\n *\r\n * @returns Configuration object\r\n */\r\nfunction buildConfiguration({ auth: userInputAuth, cache: userInputCache, system: userInputSystem, telemetry: userInputTelemetry, }, isBrowserEnvironment) {\r\n    // Default auth options for browser\r\n    const DEFAULT_AUTH_OPTIONS = {\r\n        clientId: Constants.EMPTY_STRING,\r\n        authority: `${Constants.DEFAULT_AUTHORITY}`,\r\n        knownAuthorities: [],\r\n        cloudDiscoveryMetadata: Constants.EMPTY_STRING,\r\n        authorityMetadata: Constants.EMPTY_STRING,\r\n        redirectUri: typeof window !== \"undefined\" ? getCurrentUri() : \"\",\r\n        postLogoutRedirectUri: Constants.EMPTY_STRING,\r\n        navigateToLoginRequestUrl: true,\r\n        clientCapabilities: [],\r\n        protocolMode: ProtocolMode.AAD,\r\n        OIDCOptions: {\r\n            serverResponseType: ServerResponseType.FRAGMENT,\r\n            defaultScopes: [\r\n                Constants.OPENID_SCOPE,\r\n                Constants.PROFILE_SCOPE,\r\n                Constants.OFFLINE_ACCESS_SCOPE,\r\n            ],\r\n        },\r\n        azureCloudOptions: {\r\n            azureCloudInstance: AzureCloudInstance.None,\r\n            tenant: Constants.EMPTY_STRING,\r\n        },\r\n        skipAuthorityMetadataCache: false,\r\n        supportsNestedAppAuth: false,\r\n        instanceAware: false,\r\n        encodeExtraQueryParams: false,\r\n        verifySSO: false,\r\n    };\r\n    // Default cache options for browser\r\n    const DEFAULT_CACHE_OPTIONS = {\r\n        cacheLocation: BrowserCacheLocation.SessionStorage,\r\n        cacheRetentionDays: 5,\r\n        temporaryCacheLocation: BrowserCacheLocation.SessionStorage,\r\n        storeAuthStateInCookie: false,\r\n        secureCookies: false,\r\n        // Default cache migration to true if cache location is localStorage since entries are preserved across tabs/windows. Migration has little to no benefit in sessionStorage and memoryStorage\r\n        cacheMigrationEnabled: userInputCache &&\r\n            userInputCache.cacheLocation === BrowserCacheLocation.LocalStorage\r\n            ? true\r\n            : false,\r\n        claimsBasedCachingEnabled: false,\r\n    };\r\n    // Default logger options for browser\r\n    const DEFAULT_LOGGER_OPTIONS = {\r\n        // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n        loggerCallback: () => {\r\n            // allow users to not set logger call back\r\n        },\r\n        logLevel: LogLevel.Info,\r\n        piiLoggingEnabled: false,\r\n    };\r\n    // Default system options for browser\r\n    const DEFAULT_BROWSER_SYSTEM_OPTIONS = {\r\n        ...DEFAULT_SYSTEM_OPTIONS,\r\n        loggerOptions: DEFAULT_LOGGER_OPTIONS,\r\n        networkClient: isBrowserEnvironment\r\n            ? new FetchClient()\r\n            : StubbedNetworkModule,\r\n        navigationClient: new NavigationClient(),\r\n        loadFrameTimeout: 0,\r\n        // If loadFrameTimeout is provided, use that as default.\r\n        windowHashTimeout: userInputSystem?.loadFrameTimeout || DEFAULT_POPUP_TIMEOUT_MS,\r\n        iframeHashTimeout: userInputSystem?.loadFrameTimeout || DEFAULT_IFRAME_TIMEOUT_MS,\r\n        navigateFrameWait: 0,\r\n        redirectNavigationTimeout: DEFAULT_REDIRECT_TIMEOUT_MS,\r\n        asyncPopups: false,\r\n        allowRedirectInIframe: false,\r\n        allowPlatformBroker: false,\r\n        allowPlatformBrokerWithDOM: false,\r\n        nativeBrokerHandshakeTimeout: userInputSystem?.nativeBrokerHandshakeTimeout ||\r\n            DEFAULT_NATIVE_BROKER_HANDSHAKE_TIMEOUT_MS,\r\n        pollIntervalMilliseconds: BrowserConstants.DEFAULT_POLL_INTERVAL_MS,\r\n    };\r\n    const providedSystemOptions = {\r\n        ...DEFAULT_BROWSER_SYSTEM_OPTIONS,\r\n        ...userInputSystem,\r\n        loggerOptions: userInputSystem?.loggerOptions || DEFAULT_LOGGER_OPTIONS,\r\n    };\r\n    const DEFAULT_TELEMETRY_OPTIONS = {\r\n        application: {\r\n            appName: Constants.EMPTY_STRING,\r\n            appVersion: Constants.EMPTY_STRING,\r\n        },\r\n        client: new StubPerformanceClient(),\r\n    };\r\n    // Throw an error if user has set OIDCOptions without being in OIDC protocol mode\r\n    if (userInputAuth?.protocolMode !== ProtocolMode.OIDC &&\r\n        userInputAuth?.OIDCOptions) {\r\n        const logger = new Logger(providedSystemOptions.loggerOptions);\r\n        logger.warning(JSON.stringify(createClientConfigurationError(ClientConfigurationErrorCodes.cannotSetOIDCOptions)));\r\n    }\r\n    // Throw an error if user has set allowPlatformBroker to true with OIDC protocol mode\r\n    if (userInputAuth?.protocolMode &&\r\n        userInputAuth.protocolMode === ProtocolMode.OIDC &&\r\n        providedSystemOptions?.allowPlatformBroker) {\r\n        throw createClientConfigurationError(ClientConfigurationErrorCodes.cannotAllowPlatformBroker);\r\n    }\r\n    const overlayedConfig = {\r\n        auth: {\r\n            ...DEFAULT_AUTH_OPTIONS,\r\n            ...userInputAuth,\r\n            OIDCOptions: {\r\n                ...DEFAULT_AUTH_OPTIONS.OIDCOptions,\r\n                ...userInputAuth?.OIDCOptions,\r\n            },\r\n        },\r\n        cache: { ...DEFAULT_CACHE_OPTIONS, ...userInputCache },\r\n        system: providedSystemOptions,\r\n        telemetry: { ...DEFAULT_TELEMETRY_OPTIONS, ...userInputTelemetry },\r\n    };\r\n    return overlayedConfig;\r\n}\n\nexport { DEFAULT_IFRAME_TIMEOUT_MS, DEFAULT_NATIVE_BROKER_HANDSHAKE_TIMEOUT_MS, DEFAULT_POPUP_TIMEOUT_MS, DEFAULT_REDIRECT_TIMEOUT_MS, buildConfiguration };\n//# sourceMappingURL=Configuration.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\n/* eslint-disable header/header */\r\nconst name = \"@azure/msal-browser\";\r\nconst version = \"4.30.0\";\n\nexport { name, version };\n//# sourceMappingURL=packageMetadata.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst PREFIX = \"msal\";\r\nconst BROWSER_PREFIX = \"browser\";\r\nconst CACHE_KEY_SEPARATOR = \"|\";\r\nconst CREDENTIAL_SCHEMA_VERSION = 2;\r\nconst ACCOUNT_SCHEMA_VERSION = 2;\r\nconst LOG_LEVEL_CACHE_KEY = `${PREFIX}.${BROWSER_PREFIX}.log.level`;\r\nconst LOG_PII_CACHE_KEY = `${PREFIX}.${BROWSER_PREFIX}.log.pii`;\r\nconst BROWSER_PERF_ENABLED_KEY = `${PREFIX}.${BROWSER_PREFIX}.performance.enabled`;\r\nconst VERSION_CACHE_KEY = `${PREFIX}.version`;\r\nconst ACCOUNT_KEYS = \"account.keys\";\r\nconst TOKEN_KEYS = \"token.keys\";\r\nfunction getAccountKeysCacheKey(schema = ACCOUNT_SCHEMA_VERSION) {\r\n    if (schema < 1) {\r\n        return `${PREFIX}.${ACCOUNT_KEYS}`;\r\n    }\r\n    return `${PREFIX}.${schema}.${ACCOUNT_KEYS}`;\r\n}\r\nfunction getTokenKeysCacheKey(clientId, schema = CREDENTIAL_SCHEMA_VERSION) {\r\n    if (schema < 1) {\r\n        return `${PREFIX}.${TOKEN_KEYS}.${clientId}`;\r\n    }\r\n    return `${PREFIX}.${schema}.${TOKEN_KEYS}.${clientId}`;\r\n}\n\nexport { ACCOUNT_KEYS, ACCOUNT_SCHEMA_VERSION, BROWSER_PERF_ENABLED_KEY, CACHE_KEY_SEPARATOR, CREDENTIAL_SCHEMA_VERSION, LOG_LEVEL_CACHE_KEY, LOG_PII_CACHE_KEY, PREFIX, TOKEN_KEYS, VERSION_CACHE_KEY, getAccountKeysCacheKey, getTokenKeysCacheKey };\n//# sourceMappingURL=CacheKeys.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { LogLevel, Logger } from '@azure/msal-common/browser';\nimport { buildConfiguration } from '../config/Configuration.mjs';\nimport { name, version } from '../packageMetadata.mjs';\nimport { BrowserCacheLocation } from '../utils/BrowserConstants.mjs';\nimport { LOG_LEVEL_CACHE_KEY, LOG_PII_CACHE_KEY } from '../cache/CacheKeys.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Base class for operating context\r\n * Operating contexts are contexts in which MSAL.js is being run\r\n * More than one operating context may be available at a time\r\n * It's important from a logging and telemetry point of view for us to be able to identify the operating context.\r\n * For example: Some operating contexts will pre-cache tokens impacting performance telemetry\r\n */\r\nclass BaseOperatingContext {\r\n    static loggerCallback(level, message) {\r\n        switch (level) {\r\n            case LogLevel.Error:\r\n                // eslint-disable-next-line no-console\r\n                console.error(message);\r\n                return;\r\n            case LogLevel.Info:\r\n                // eslint-disable-next-line no-console\r\n                console.info(message);\r\n                return;\r\n            case LogLevel.Verbose:\r\n                // eslint-disable-next-line no-console\r\n                console.debug(message);\r\n                return;\r\n            case LogLevel.Warning:\r\n                // eslint-disable-next-line no-console\r\n                console.warn(message);\r\n                return;\r\n            default:\r\n                // eslint-disable-next-line no-console\r\n                console.log(message);\r\n                return;\r\n        }\r\n    }\r\n    constructor(config) {\r\n        /*\r\n         * If loaded in an environment where window is not available,\r\n         * set internal flag to false so that further requests fail.\r\n         * This is to support server-side rendering environments.\r\n         */\r\n        this.browserEnvironment = typeof window !== \"undefined\";\r\n        this.config = buildConfiguration(config, this.browserEnvironment);\r\n        let sessionStorage;\r\n        try {\r\n            sessionStorage = window[BrowserCacheLocation.SessionStorage];\r\n            // Mute errors if it's a non-browser environment or cookies are blocked.\r\n        }\r\n        catch (e) { }\r\n        const logLevelKey = sessionStorage?.getItem(LOG_LEVEL_CACHE_KEY);\r\n        const piiLoggingKey = sessionStorage\r\n            ?.getItem(LOG_PII_CACHE_KEY)\r\n            ?.toLowerCase();\r\n        const piiLoggingEnabled = piiLoggingKey === \"true\"\r\n            ? true\r\n            : piiLoggingKey === \"false\"\r\n                ? false\r\n                : undefined;\r\n        const loggerOptions = { ...this.config.system.loggerOptions };\r\n        const logLevel = logLevelKey && Object.keys(LogLevel).includes(logLevelKey)\r\n            ? LogLevel[logLevelKey]\r\n            : undefined;\r\n        if (logLevel) {\r\n            loggerOptions.loggerCallback = BaseOperatingContext.loggerCallback;\r\n            loggerOptions.logLevel = logLevel;\r\n        }\r\n        if (piiLoggingEnabled !== undefined) {\r\n            loggerOptions.piiLoggingEnabled = piiLoggingEnabled;\r\n        }\r\n        this.logger = new Logger(loggerOptions, name, version);\r\n        this.available = false;\r\n    }\r\n    /**\r\n     * Return the MSAL config\r\n     * @returns BrowserConfiguration\r\n     */\r\n    getConfig() {\r\n        return this.config;\r\n    }\r\n    /**\r\n     * Returns the MSAL Logger\r\n     * @returns Logger\r\n     */\r\n    getLogger() {\r\n        return this.logger;\r\n    }\r\n    isAvailable() {\r\n        return this.available;\r\n    }\r\n    isBrowserEnvironment() {\r\n        return this.browserEnvironment;\r\n    }\r\n}\n\nexport { BaseOperatingContext };\n//# sourceMappingURL=BaseOperatingContext.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { BaseOperatingContext } from './BaseOperatingContext.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass StandardOperatingContext extends BaseOperatingContext {\r\n    /**\r\n     * Return the module name.  Intended for use with import() to enable dynamic import\r\n     * of the implementation associated with this operating context\r\n     * @returns\r\n     */\r\n    getModuleName() {\r\n        return StandardOperatingContext.MODULE_NAME;\r\n    }\r\n    /**\r\n     * Returns the unique identifier for this operating context\r\n     * @returns string\r\n     */\r\n    getId() {\r\n        return StandardOperatingContext.ID;\r\n    }\r\n    /**\r\n     * Checks whether the operating context is available.\r\n     * Confirms that the code is running a browser rather.  This is required.\r\n     * @returns Promise<boolean> indicating whether this operating context is currently available.\r\n     */\r\n    async initialize() {\r\n        this.available = typeof window !== \"undefined\";\r\n        return this.available;\r\n        /*\r\n         * NOTE: The standard context is available as long as there is a window.  If/when we split out WAM from Browser\r\n         * We can move the current contents of the initialize method to here and verify that the WAM extension is available\r\n         */\r\n    }\r\n}\r\n/*\r\n * TODO: Once we have determine the bundling code return here to specify the name of the bundle\r\n * containing the implementation for this operating context\r\n */\r\nStandardOperatingContext.MODULE_NAME = \"\";\r\n/**\r\n * Unique identifier for the operating context\r\n */\r\nStandardOperatingContext.ID = \"StandardOperatingContext\";\n\nexport { StandardOperatingContext };\n//# sourceMappingURL=StandardOperatingContext.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { createBrowserAuthError } from '../error/BrowserAuthError.mjs';\nimport { DB_NAME, DB_VERSION, DB_TABLE_NAME } from '../utils/BrowserConstants.mjs';\nimport { databaseUnavailable, databaseNotOpen } from '../error/BrowserAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Storage wrapper for IndexedDB storage in browsers: https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API\r\n */\r\nclass DatabaseStorage {\r\n    constructor() {\r\n        this.dbName = DB_NAME;\r\n        this.version = DB_VERSION;\r\n        this.tableName = DB_TABLE_NAME;\r\n        this.dbOpen = false;\r\n    }\r\n    /**\r\n     * Opens IndexedDB instance.\r\n     */\r\n    async open() {\r\n        return new Promise((resolve, reject) => {\r\n            const openDB = window.indexedDB.open(this.dbName, this.version);\r\n            openDB.addEventListener(\"upgradeneeded\", (e) => {\r\n                const event = e;\r\n                event.target.result.createObjectStore(this.tableName);\r\n            });\r\n            openDB.addEventListener(\"success\", (e) => {\r\n                const event = e;\r\n                this.db = event.target.result;\r\n                this.dbOpen = true;\r\n                resolve();\r\n            });\r\n            openDB.addEventListener(\"error\", () => reject(createBrowserAuthError(databaseUnavailable)));\r\n        });\r\n    }\r\n    /**\r\n     * Closes the connection to IndexedDB database when all pending transactions\r\n     * complete.\r\n     */\r\n    closeConnection() {\r\n        const db = this.db;\r\n        if (db && this.dbOpen) {\r\n            db.close();\r\n            this.dbOpen = false;\r\n        }\r\n    }\r\n    /**\r\n     * Opens database if it's not already open\r\n     */\r\n    async validateDbIsOpen() {\r\n        if (!this.dbOpen) {\r\n            return this.open();\r\n        }\r\n    }\r\n    /**\r\n     * Retrieves item from IndexedDB instance.\r\n     * @param key\r\n     */\r\n    async getItem(key) {\r\n        await this.validateDbIsOpen();\r\n        return new Promise((resolve, reject) => {\r\n            // TODO: Add timeouts?\r\n            if (!this.db) {\r\n                return reject(createBrowserAuthError(databaseNotOpen));\r\n            }\r\n            const transaction = this.db.transaction([this.tableName], \"readonly\");\r\n            const objectStore = transaction.objectStore(this.tableName);\r\n            const dbGet = objectStore.get(key);\r\n            dbGet.addEventListener(\"success\", (e) => {\r\n                const event = e;\r\n                this.closeConnection();\r\n                resolve(event.target.result);\r\n            });\r\n            dbGet.addEventListener(\"error\", (e) => {\r\n                this.closeConnection();\r\n                reject(e);\r\n            });\r\n        });\r\n    }\r\n    /**\r\n     * Adds item to IndexedDB under given key\r\n     * @param key\r\n     * @param payload\r\n     */\r\n    async setItem(key, payload) {\r\n        await this.validateDbIsOpen();\r\n        return new Promise((resolve, reject) => {\r\n            // TODO: Add timeouts?\r\n            if (!this.db) {\r\n                return reject(createBrowserAuthError(databaseNotOpen));\r\n            }\r\n            const transaction = this.db.transaction([this.tableName], \"readwrite\");\r\n            const objectStore = transaction.objectStore(this.tableName);\r\n            const dbPut = objectStore.put(payload, key);\r\n            dbPut.addEventListener(\"success\", () => {\r\n                this.closeConnection();\r\n                resolve();\r\n            });\r\n            dbPut.addEventListener(\"error\", (e) => {\r\n                this.closeConnection();\r\n                reject(e);\r\n            });\r\n        });\r\n    }\r\n    /**\r\n     * Removes item from IndexedDB under given key\r\n     * @param key\r\n     */\r\n    async removeItem(key) {\r\n        await this.validateDbIsOpen();\r\n        return new Promise((resolve, reject) => {\r\n            if (!this.db) {\r\n                return reject(createBrowserAuthError(databaseNotOpen));\r\n            }\r\n            const transaction = this.db.transaction([this.tableName], \"readwrite\");\r\n            const objectStore = transaction.objectStore(this.tableName);\r\n            const dbDelete = objectStore.delete(key);\r\n            dbDelete.addEventListener(\"success\", () => {\r\n                this.closeConnection();\r\n                resolve();\r\n            });\r\n            dbDelete.addEventListener(\"error\", (e) => {\r\n                this.closeConnection();\r\n                reject(e);\r\n            });\r\n        });\r\n    }\r\n    /**\r\n     * Get all the keys from the storage object as an iterable array of strings.\r\n     */\r\n    async getKeys() {\r\n        await this.validateDbIsOpen();\r\n        return new Promise((resolve, reject) => {\r\n            if (!this.db) {\r\n                return reject(createBrowserAuthError(databaseNotOpen));\r\n            }\r\n            const transaction = this.db.transaction([this.tableName], \"readonly\");\r\n            const objectStore = transaction.objectStore(this.tableName);\r\n            const dbGetKeys = objectStore.getAllKeys();\r\n            dbGetKeys.addEventListener(\"success\", (e) => {\r\n                const event = e;\r\n                this.closeConnection();\r\n                resolve(event.target.result);\r\n            });\r\n            dbGetKeys.addEventListener(\"error\", (e) => {\r\n                this.closeConnection();\r\n                reject(e);\r\n            });\r\n        });\r\n    }\r\n    /**\r\n     *\r\n     * Checks whether there is an object under the search key in the object store\r\n     */\r\n    async containsKey(key) {\r\n        await this.validateDbIsOpen();\r\n        return new Promise((resolve, reject) => {\r\n            if (!this.db) {\r\n                return reject(createBrowserAuthError(databaseNotOpen));\r\n            }\r\n            const transaction = this.db.transaction([this.tableName], \"readonly\");\r\n            const objectStore = transaction.objectStore(this.tableName);\r\n            const dbContainsKey = objectStore.count(key);\r\n            dbContainsKey.addEventListener(\"success\", (e) => {\r\n                const event = e;\r\n                this.closeConnection();\r\n                resolve(event.target.result === 1);\r\n            });\r\n            dbContainsKey.addEventListener(\"error\", (e) => {\r\n                this.closeConnection();\r\n                reject(e);\r\n            });\r\n        });\r\n    }\r\n    /**\r\n     * Deletes the MSAL database. The database is deleted rather than cleared to make it possible\r\n     * for client applications to downgrade to a previous MSAL version without worrying about forward compatibility issues\r\n     * with IndexedDB database versions.\r\n     */\r\n    async deleteDatabase() {\r\n        // Check if database being deleted exists\r\n        if (this.db && this.dbOpen) {\r\n            this.closeConnection();\r\n        }\r\n        return new Promise((resolve, reject) => {\r\n            const deleteDbRequest = window.indexedDB.deleteDatabase(DB_NAME);\r\n            const id = setTimeout(() => reject(false), 200); // Reject if events aren't raised within 200ms\r\n            deleteDbRequest.addEventListener(\"success\", () => {\r\n                clearTimeout(id);\r\n                return resolve(true);\r\n            });\r\n            deleteDbRequest.addEventListener(\"blocked\", () => {\r\n                clearTimeout(id);\r\n                return resolve(true);\r\n            });\r\n            deleteDbRequest.addEventListener(\"error\", () => {\r\n                clearTimeout(id);\r\n                return reject(false);\r\n            });\r\n        });\r\n    }\r\n}\n\nexport { DatabaseStorage };\n//# sourceMappingURL=DatabaseStorage.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass MemoryStorage {\r\n    constructor() {\r\n        this.cache = new Map();\r\n    }\r\n    async initialize() {\r\n        // Memory storage does not require initialization\r\n    }\r\n    getItem(key) {\r\n        return this.cache.get(key) || null;\r\n    }\r\n    getUserData(key) {\r\n        return this.getItem(key);\r\n    }\r\n    setItem(key, value) {\r\n        this.cache.set(key, value);\r\n    }\r\n    async setUserData(key, value) {\r\n        this.setItem(key, value);\r\n    }\r\n    removeItem(key) {\r\n        this.cache.delete(key);\r\n    }\r\n    getKeys() {\r\n        const cacheKeys = [];\r\n        this.cache.forEach((value, key) => {\r\n            cacheKeys.push(key);\r\n        });\r\n        return cacheKeys;\r\n    }\r\n    containsKey(key) {\r\n        return this.cache.has(key);\r\n    }\r\n    clear() {\r\n        this.cache.clear();\r\n    }\r\n    decryptData() {\r\n        // Memory storage does not support encryption, so this method is a no-op\r\n        return Promise.resolve(null);\r\n    }\r\n}\n\nexport { MemoryStorage };\n//# sourceMappingURL=MemoryStorage.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { BrowserAuthError } from '../error/BrowserAuthError.mjs';\nimport { DatabaseStorage } from './DatabaseStorage.mjs';\nimport { MemoryStorage } from './MemoryStorage.mjs';\nimport { databaseUnavailable } from '../error/BrowserAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * This class allows MSAL to store artifacts asynchronously using the DatabaseStorage IndexedDB wrapper,\r\n * backed up with the more volatile MemoryStorage object for cases in which IndexedDB may be unavailable.\r\n */\r\nclass AsyncMemoryStorage {\r\n    constructor(logger) {\r\n        this.inMemoryCache = new MemoryStorage();\r\n        this.indexedDBCache = new DatabaseStorage();\r\n        this.logger = logger;\r\n    }\r\n    handleDatabaseAccessError(error) {\r\n        if (error instanceof BrowserAuthError &&\r\n            error.errorCode === databaseUnavailable) {\r\n            this.logger.error(\"Could not access persistent storage. This may be caused by browser privacy features which block persistent storage in third-party contexts.\");\r\n        }\r\n        else {\r\n            throw error;\r\n        }\r\n    }\r\n    /**\r\n     * Get the item matching the given key. Tries in-memory cache first, then in the asynchronous\r\n     * storage object if item isn't found in-memory.\r\n     * @param key\r\n     */\r\n    async getItem(key) {\r\n        const item = this.inMemoryCache.getItem(key);\r\n        if (!item) {\r\n            try {\r\n                this.logger.verbose(\"Queried item not found in in-memory cache, now querying persistent storage.\");\r\n                return await this.indexedDBCache.getItem(key);\r\n            }\r\n            catch (e) {\r\n                this.handleDatabaseAccessError(e);\r\n            }\r\n        }\r\n        return item;\r\n    }\r\n    /**\r\n     * Sets the item in the in-memory cache and then tries to set it in the asynchronous\r\n     * storage object with the given key.\r\n     * @param key\r\n     * @param value\r\n     */\r\n    async setItem(key, value) {\r\n        this.inMemoryCache.setItem(key, value);\r\n        try {\r\n            await this.indexedDBCache.setItem(key, value);\r\n        }\r\n        catch (e) {\r\n            this.handleDatabaseAccessError(e);\r\n        }\r\n    }\r\n    /**\r\n     * Removes the item matching the key from the in-memory cache, then tries to remove it from the asynchronous storage object.\r\n     * @param key\r\n     */\r\n    async removeItem(key) {\r\n        this.inMemoryCache.removeItem(key);\r\n        try {\r\n            await this.indexedDBCache.removeItem(key);\r\n        }\r\n        catch (e) {\r\n            this.handleDatabaseAccessError(e);\r\n        }\r\n    }\r\n    /**\r\n     * Get all the keys from the in-memory cache as an iterable array of strings. If no keys are found, query the keys in the\r\n     * asynchronous storage object.\r\n     */\r\n    async getKeys() {\r\n        const cacheKeys = this.inMemoryCache.getKeys();\r\n        if (cacheKeys.length === 0) {\r\n            try {\r\n                this.logger.verbose(\"In-memory cache is empty, now querying persistent storage.\");\r\n                return await this.indexedDBCache.getKeys();\r\n            }\r\n            catch (e) {\r\n                this.handleDatabaseAccessError(e);\r\n            }\r\n        }\r\n        return cacheKeys;\r\n    }\r\n    /**\r\n     * Returns true or false if the given key is present in the cache.\r\n     * @param key\r\n     */\r\n    async containsKey(key) {\r\n        const containsKey = this.inMemoryCache.containsKey(key);\r\n        if (!containsKey) {\r\n            try {\r\n                this.logger.verbose(\"Key not found in in-memory cache, now querying persistent storage.\");\r\n                return await this.indexedDBCache.containsKey(key);\r\n            }\r\n            catch (e) {\r\n                this.handleDatabaseAccessError(e);\r\n            }\r\n        }\r\n        return containsKey;\r\n    }\r\n    /**\r\n     * Clears in-memory Map\r\n     */\r\n    clearInMemory() {\r\n        // InMemory cache is a Map instance, clear is straightforward\r\n        this.logger.verbose(`Deleting in-memory keystore`);\r\n        this.inMemoryCache.clear();\r\n        this.logger.verbose(`In-memory keystore deleted`);\r\n    }\r\n    /**\r\n     * Tries to delete the IndexedDB database\r\n     * @returns\r\n     */\r\n    async clearPersistent() {\r\n        try {\r\n            this.logger.verbose(\"Deleting persistent keystore\");\r\n            const dbDeleted = await this.indexedDBCache.deleteDatabase();\r\n            if (dbDeleted) {\r\n                this.logger.verbose(\"Persistent keystore deleted\");\r\n            }\r\n            return dbDeleted;\r\n        }\r\n        catch (e) {\r\n            this.handleDatabaseAccessError(e);\r\n            return false;\r\n        }\r\n    }\r\n}\n\nexport { AsyncMemoryStorage };\n//# sourceMappingURL=AsyncMemoryStorage.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { PerformanceEvents, createClientAuthError, ClientAuthErrorCodes, JoseHeader } from '@azure/msal-common/browser';\nimport { base64Encode, urlEncode, urlEncodeArr } from '../encode/Base64Encode.mjs';\nimport { base64Decode } from '../encode/Base64Decode.mjs';\nimport { validateCryptoAvailable, createNewGuid, generateKeyPair, exportJwk, importJwk, sign, hashString } from './BrowserCrypto.mjs';\nimport { createBrowserAuthError } from '../error/BrowserAuthError.mjs';\nimport { AsyncMemoryStorage } from '../cache/AsyncMemoryStorage.mjs';\nimport { cryptoKeyNotFound } from '../error/BrowserAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * This class implements MSAL's crypto interface, which allows it to perform base64 encoding and decoding, generating cryptographically random GUIDs and\r\n * implementing Proof Key for Code Exchange specs for the OAuth Authorization Code Flow using PKCE (rfc here: https://tools.ietf.org/html/rfc7636).\r\n */\r\nclass CryptoOps {\r\n    constructor(logger, performanceClient, skipValidateSubtleCrypto) {\r\n        this.logger = logger;\r\n        // Browser crypto needs to be validated first before any other classes can be set.\r\n        validateCryptoAvailable(skipValidateSubtleCrypto ?? false);\r\n        this.cache = new AsyncMemoryStorage(this.logger);\r\n        this.performanceClient = performanceClient;\r\n    }\r\n    /**\r\n     * Creates a new random GUID - used to populate state and nonce.\r\n     * @returns string (GUID)\r\n     */\r\n    createNewGuid() {\r\n        return createNewGuid();\r\n    }\r\n    /**\r\n     * Encodes input string to base64.\r\n     * @param input\r\n     */\r\n    base64Encode(input) {\r\n        return base64Encode(input);\r\n    }\r\n    /**\r\n     * Decodes input string from base64.\r\n     * @param input\r\n     */\r\n    base64Decode(input) {\r\n        return base64Decode(input);\r\n    }\r\n    /**\r\n     * Encodes input string to base64 URL safe string.\r\n     * @param input\r\n     */\r\n    base64UrlEncode(input) {\r\n        return urlEncode(input);\r\n    }\r\n    /**\r\n     * Stringifies and base64Url encodes input public key\r\n     * @param inputKid\r\n     * @returns Base64Url encoded public key\r\n     */\r\n    encodeKid(inputKid) {\r\n        return this.base64UrlEncode(JSON.stringify({ kid: inputKid }));\r\n    }\r\n    /**\r\n     * Generates a keypair, stores it and returns a thumbprint\r\n     * @param request\r\n     */\r\n    async getPublicKeyThumbprint(request) {\r\n        const publicKeyThumbMeasurement = this.performanceClient?.startMeasurement(PerformanceEvents.CryptoOptsGetPublicKeyThumbprint, request.correlationId);\r\n        // Generate Keypair\r\n        const keyPair = await generateKeyPair(CryptoOps.EXTRACTABLE, CryptoOps.POP_KEY_USAGES);\r\n        // Generate Thumbprint for Public Key\r\n        const publicKeyJwk = await exportJwk(keyPair.publicKey);\r\n        const pubKeyThumprintObj = {\r\n            e: publicKeyJwk.e,\r\n            kty: publicKeyJwk.kty,\r\n            n: publicKeyJwk.n,\r\n        };\r\n        const publicJwkString = getSortedObjectString(pubKeyThumprintObj);\r\n        const publicJwkHash = await this.hashString(publicJwkString);\r\n        // Generate Thumbprint for Private Key\r\n        const privateKeyJwk = await exportJwk(keyPair.privateKey);\r\n        // Re-import private key to make it unextractable\r\n        const unextractablePrivateKey = await importJwk(privateKeyJwk, false, [\"sign\"]);\r\n        // Store Keypair data in keystore\r\n        await this.cache.setItem(publicJwkHash, {\r\n            privateKey: unextractablePrivateKey,\r\n            publicKey: keyPair.publicKey,\r\n            requestMethod: request.resourceRequestMethod,\r\n            requestUri: request.resourceRequestUri,\r\n        });\r\n        if (publicKeyThumbMeasurement) {\r\n            publicKeyThumbMeasurement.end({\r\n                success: true,\r\n            });\r\n        }\r\n        return publicJwkHash;\r\n    }\r\n    /**\r\n     * Removes cryptographic keypair from key store matching the keyId passed in\r\n     * @param kid\r\n     */\r\n    async removeTokenBindingKey(kid) {\r\n        await this.cache.removeItem(kid);\r\n        const keyFound = await this.cache.containsKey(kid);\r\n        if (keyFound) {\r\n            throw createClientAuthError(ClientAuthErrorCodes.bindingKeyNotRemoved);\r\n        }\r\n    }\r\n    /**\r\n     * Removes all cryptographic keys from IndexedDB storage\r\n     */\r\n    async clearKeystore() {\r\n        // Delete in-memory keystores\r\n        this.cache.clearInMemory();\r\n        /**\r\n         * There is only one database, so calling clearPersistent on asymmetric keystore takes care of\r\n         * every persistent keystore\r\n         */\r\n        try {\r\n            await this.cache.clearPersistent();\r\n            return true;\r\n        }\r\n        catch (e) {\r\n            if (e instanceof Error) {\r\n                this.logger.error(`Clearing keystore failed with error: ${e.message}`);\r\n            }\r\n            else {\r\n                this.logger.error(\"Clearing keystore failed with unknown error\");\r\n            }\r\n            return false;\r\n        }\r\n    }\r\n    /**\r\n     * Signs the given object as a jwt payload with private key retrieved by given kid.\r\n     * @param payload\r\n     * @param kid\r\n     */\r\n    async signJwt(payload, kid, shrOptions, correlationId) {\r\n        const signJwtMeasurement = this.performanceClient?.startMeasurement(PerformanceEvents.CryptoOptsSignJwt, correlationId);\r\n        const cachedKeyPair = await this.cache.getItem(kid);\r\n        if (!cachedKeyPair) {\r\n            throw createBrowserAuthError(cryptoKeyNotFound);\r\n        }\r\n        // Get public key as JWK\r\n        const publicKeyJwk = await exportJwk(cachedKeyPair.publicKey);\r\n        const publicKeyJwkString = getSortedObjectString(publicKeyJwk);\r\n        // Base64URL encode public key thumbprint with keyId only: BASE64URL({ kid: \"FULL_PUBLIC_KEY_HASH\" })\r\n        const encodedKeyIdThumbprint = urlEncode(JSON.stringify({ kid: kid }));\r\n        // Generate header\r\n        const shrHeader = JoseHeader.getShrHeaderString({\r\n            ...shrOptions?.header,\r\n            alg: publicKeyJwk.alg,\r\n            kid: encodedKeyIdThumbprint,\r\n        });\r\n        const encodedShrHeader = urlEncode(shrHeader);\r\n        // Generate payload\r\n        payload.cnf = {\r\n            jwk: JSON.parse(publicKeyJwkString),\r\n        };\r\n        const encodedPayload = urlEncode(JSON.stringify(payload));\r\n        // Form token string\r\n        const tokenString = `${encodedShrHeader}.${encodedPayload}`;\r\n        // Sign token\r\n        const encoder = new TextEncoder();\r\n        const tokenBuffer = encoder.encode(tokenString);\r\n        const signatureBuffer = await sign(cachedKeyPair.privateKey, tokenBuffer);\r\n        const encodedSignature = urlEncodeArr(new Uint8Array(signatureBuffer));\r\n        const signedJwt = `${tokenString}.${encodedSignature}`;\r\n        if (signJwtMeasurement) {\r\n            signJwtMeasurement.end({\r\n                success: true,\r\n            });\r\n        }\r\n        return signedJwt;\r\n    }\r\n    /**\r\n     * Returns the SHA-256 hash of an input string\r\n     * @param plainText\r\n     */\r\n    async hashString(plainText) {\r\n        return hashString(plainText);\r\n    }\r\n}\r\nCryptoOps.POP_KEY_USAGES = [\"sign\", \"verify\"];\r\nCryptoOps.EXTRACTABLE = true;\r\nfunction getSortedObjectString(obj) {\r\n    return JSON.stringify(obj, Object.keys(obj).sort());\r\n}\n\nexport { CryptoOps };\n//# sourceMappingURL=CryptoOps.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { createClientAuthError, ClientAuthErrorCodes } from '@azure/msal-common/browser';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n// Cookie life calculation (hours * minutes * seconds * ms)\r\nconst COOKIE_LIFE_MULTIPLIER = 24 * 60 * 60 * 1000;\r\nconst SameSiteOptions = {\r\n    Lax: \"Lax\",\r\n    None: \"None\",\r\n};\r\nclass CookieStorage {\r\n    initialize() {\r\n        return Promise.resolve();\r\n    }\r\n    getItem(key) {\r\n        const name = `${encodeURIComponent(key)}`;\r\n        const cookieList = document.cookie.split(\";\");\r\n        for (let i = 0; i < cookieList.length; i++) {\r\n            const cookie = cookieList[i];\r\n            const [key, ...rest] = decodeURIComponent(cookie).trim().split(\"=\");\r\n            const value = rest.join(\"=\");\r\n            if (key === name) {\r\n                return value;\r\n            }\r\n        }\r\n        return \"\";\r\n    }\r\n    getUserData() {\r\n        throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);\r\n    }\r\n    setItem(key, value, cookieLifeDays, secure = true, sameSite = SameSiteOptions.Lax) {\r\n        let cookieStr = `${encodeURIComponent(key)}=${encodeURIComponent(value)};path=/;SameSite=${sameSite};`;\r\n        if (cookieLifeDays) {\r\n            const expireTime = getCookieExpirationTime(cookieLifeDays);\r\n            cookieStr += `expires=${expireTime};`;\r\n        }\r\n        if (secure || sameSite === SameSiteOptions.None) {\r\n            // SameSite None requires Secure flag\r\n            cookieStr += \"Secure;\";\r\n        }\r\n        document.cookie = cookieStr;\r\n    }\r\n    async setUserData() {\r\n        return Promise.reject(createClientAuthError(ClientAuthErrorCodes.methodNotImplemented));\r\n    }\r\n    removeItem(key) {\r\n        // Setting expiration to -1 removes it\r\n        this.setItem(key, \"\", -1);\r\n    }\r\n    getKeys() {\r\n        const cookieList = document.cookie.split(\";\");\r\n        const keys = [];\r\n        cookieList.forEach((cookie) => {\r\n            const cookieParts = decodeURIComponent(cookie).trim().split(\"=\");\r\n            keys.push(cookieParts[0]);\r\n        });\r\n        return keys;\r\n    }\r\n    containsKey(key) {\r\n        return this.getKeys().includes(key);\r\n    }\r\n    decryptData() {\r\n        // Cookie storage does not support encryption, so this method is a no-op\r\n        return Promise.resolve(null);\r\n    }\r\n}\r\n/**\r\n * Get cookie expiration time\r\n * @param cookieLifeDays\r\n */\r\nfunction getCookieExpirationTime(cookieLifeDays) {\r\n    const today = new Date();\r\n    const expr = new Date(today.getTime() + cookieLifeDays * COOKIE_LIFE_MULTIPLIER);\r\n    return expr.toUTCString();\r\n}\n\nexport { CookieStorage, SameSiteOptions, getCookieExpirationTime };\n//# sourceMappingURL=CookieStorage.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { getAccountKeysCacheKey, getTokenKeysCacheKey } from './CacheKeys.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Returns a list of cache keys for all known accounts\r\n * @param storage\r\n * @returns\r\n */\r\nfunction getAccountKeys(storage, schemaVersion) {\r\n    const accountKeys = storage.getItem(getAccountKeysCacheKey(schemaVersion));\r\n    if (accountKeys) {\r\n        return JSON.parse(accountKeys);\r\n    }\r\n    return [];\r\n}\r\n/**\r\n * Returns a list of cache keys for all known tokens\r\n * @param clientId\r\n * @param storage\r\n * @returns\r\n */\r\nfunction getTokenKeys(clientId, storage, schemaVersion) {\r\n    const item = storage.getItem(getTokenKeysCacheKey(clientId, schemaVersion));\r\n    if (item) {\r\n        const tokenKeys = JSON.parse(item);\r\n        if (tokenKeys &&\r\n            tokenKeys.hasOwnProperty(\"idToken\") &&\r\n            tokenKeys.hasOwnProperty(\"accessToken\") &&\r\n            tokenKeys.hasOwnProperty(\"refreshToken\")) {\r\n            return tokenKeys;\r\n        }\r\n    }\r\n    return {\r\n        idToken: [],\r\n        accessToken: [],\r\n        refreshToken: [],\r\n    };\r\n}\n\nexport { getAccountKeys, getTokenKeys };\n//# sourceMappingURL=CacheHelpers.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nfunction isEncrypted(data) {\r\n    return (data.hasOwnProperty(\"id\") &&\r\n        data.hasOwnProperty(\"nonce\") &&\r\n        data.hasOwnProperty(\"data\"));\r\n}\n\nexport { isEncrypted };\n//# sourceMappingURL=EncryptedData.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { invoke, PerformanceEvents, invokeAsync } from '@azure/msal-common/browser';\nimport { generateHKDF, createNewGuid, generateBaseKey, decrypt, encrypt } from '../crypto/BrowserCrypto.mjs';\nimport { base64DecToArr } from '../encode/Base64Decode.mjs';\nimport { urlEncodeArr } from '../encode/Base64Encode.mjs';\nimport { createBrowserAuthError } from '../error/BrowserAuthError.mjs';\nimport { createBrowserConfigurationAuthError } from '../error/BrowserConfigurationAuthError.mjs';\nimport { CookieStorage, SameSiteOptions } from './CookieStorage.mjs';\nimport { MemoryStorage } from './MemoryStorage.mjs';\nimport { getAccountKeys, getTokenKeys } from './CacheHelpers.mjs';\nimport { PREFIX, getAccountKeysCacheKey, getTokenKeysCacheKey } from './CacheKeys.mjs';\nimport { isEncrypted } from './EncryptedData.mjs';\nimport { storageNotSupported } from '../error/BrowserConfigurationAuthErrorCodes.mjs';\nimport { uninitializedPublicClientApplication } from '../error/BrowserAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst ENCRYPTION_KEY = \"msal.cache.encryption\";\r\nconst BROADCAST_CHANNEL_NAME = \"msal.broadcast.cache\";\r\nclass LocalStorage {\r\n    constructor(clientId, logger, performanceClient) {\r\n        if (!window.localStorage) {\r\n            throw createBrowserConfigurationAuthError(storageNotSupported);\r\n        }\r\n        this.memoryStorage = new MemoryStorage();\r\n        this.initialized = false;\r\n        this.clientId = clientId;\r\n        this.logger = logger;\r\n        this.performanceClient = performanceClient;\r\n        this.broadcast = new BroadcastChannel(BROADCAST_CHANNEL_NAME);\r\n    }\r\n    async initialize(correlationId) {\r\n        const cookies = new CookieStorage();\r\n        const cookieString = cookies.getItem(ENCRYPTION_KEY);\r\n        let parsedCookie = { key: \"\", id: \"\" };\r\n        if (cookieString) {\r\n            try {\r\n                parsedCookie = JSON.parse(cookieString);\r\n            }\r\n            catch (e) { }\r\n        }\r\n        if (parsedCookie.key && parsedCookie.id) {\r\n            // Encryption key already exists, import\r\n            const baseKey = invoke(base64DecToArr, PerformanceEvents.Base64Decode, this.logger, this.performanceClient, correlationId)(parsedCookie.key);\r\n            this.encryptionCookie = {\r\n                id: parsedCookie.id,\r\n                key: await invokeAsync(generateHKDF, PerformanceEvents.GenerateHKDF, this.logger, this.performanceClient, correlationId)(baseKey),\r\n            };\r\n        }\r\n        else {\r\n            // Encryption key doesn't exist or is invalid, generate a new one\r\n            const id = createNewGuid();\r\n            const baseKey = await invokeAsync(generateBaseKey, PerformanceEvents.GenerateBaseKey, this.logger, this.performanceClient, correlationId)();\r\n            const keyStr = invoke(urlEncodeArr, PerformanceEvents.UrlEncodeArr, this.logger, this.performanceClient, correlationId)(new Uint8Array(baseKey));\r\n            this.encryptionCookie = {\r\n                id: id,\r\n                key: await invokeAsync(generateHKDF, PerformanceEvents.GenerateHKDF, this.logger, this.performanceClient, correlationId)(baseKey),\r\n            };\r\n            const cookieData = {\r\n                id: id,\r\n                key: keyStr,\r\n            };\r\n            cookies.setItem(ENCRYPTION_KEY, JSON.stringify(cookieData), 0, // Expiration - 0 means cookie will be cleared at the end of the browser session\r\n            true, // Secure flag\r\n            SameSiteOptions.None // SameSite must be None to support iframed apps\r\n            );\r\n        }\r\n        await invokeAsync(this.importExistingCache.bind(this), PerformanceEvents.ImportExistingCache, this.logger, this.performanceClient, correlationId)(correlationId);\r\n        // Register listener for cache updates in other tabs\r\n        this.broadcast.addEventListener(\"message\", this.updateCache.bind(this));\r\n        this.initialized = true;\r\n    }\r\n    getItem(key) {\r\n        return window.localStorage.getItem(key);\r\n    }\r\n    getUserData(key) {\r\n        if (!this.initialized) {\r\n            throw createBrowserAuthError(uninitializedPublicClientApplication);\r\n        }\r\n        return this.memoryStorage.getItem(key);\r\n    }\r\n    async decryptData(key, data, correlationId) {\r\n        if (!this.initialized || !this.encryptionCookie) {\r\n            throw createBrowserAuthError(uninitializedPublicClientApplication);\r\n        }\r\n        if (data.id !== this.encryptionCookie.id) {\r\n            // Data was encrypted with a different key. It must be removed because it is from a previous session.\r\n            this.performanceClient.incrementFields({ encryptedCacheExpiredCount: 1 }, correlationId);\r\n            return null;\r\n        }\r\n        const decryptedData = await invokeAsync(decrypt, PerformanceEvents.Decrypt, this.logger, this.performanceClient, correlationId)(this.encryptionCookie.key, data.nonce, this.getContext(key), data.data);\r\n        if (!decryptedData) {\r\n            return null;\r\n        }\r\n        try {\r\n            return {\r\n                ...JSON.parse(decryptedData),\r\n                lastUpdatedAt: data.lastUpdatedAt,\r\n            };\r\n        }\r\n        catch (e) {\r\n            this.performanceClient.incrementFields({ encryptedCacheCorruptionCount: 1 }, correlationId);\r\n            return null;\r\n        }\r\n    }\r\n    setItem(key, value) {\r\n        window.localStorage.setItem(key, value);\r\n    }\r\n    async setUserData(key, value, correlationId, timestamp, kmsi) {\r\n        if (!this.initialized || !this.encryptionCookie) {\r\n            throw createBrowserAuthError(uninitializedPublicClientApplication);\r\n        }\r\n        if (kmsi) {\r\n            this.setItem(key, value);\r\n        }\r\n        else {\r\n            const { data, nonce } = await invokeAsync(encrypt, PerformanceEvents.Encrypt, this.logger, this.performanceClient, correlationId)(this.encryptionCookie.key, value, this.getContext(key));\r\n            const encryptedData = {\r\n                id: this.encryptionCookie.id,\r\n                nonce: nonce,\r\n                data: data,\r\n                lastUpdatedAt: timestamp,\r\n            };\r\n            this.setItem(key, JSON.stringify(encryptedData));\r\n        }\r\n        this.memoryStorage.setItem(key, value);\r\n        // Notify other frames to update their in-memory cache\r\n        this.broadcast.postMessage({\r\n            key: key,\r\n            value: value,\r\n            context: this.getContext(key),\r\n        });\r\n    }\r\n    removeItem(key) {\r\n        if (this.memoryStorage.containsKey(key)) {\r\n            this.memoryStorage.removeItem(key);\r\n            this.broadcast.postMessage({\r\n                key: key,\r\n                value: null,\r\n                context: this.getContext(key),\r\n            });\r\n        }\r\n        window.localStorage.removeItem(key);\r\n    }\r\n    getKeys() {\r\n        return Object.keys(window.localStorage);\r\n    }\r\n    containsKey(key) {\r\n        return window.localStorage.hasOwnProperty(key);\r\n    }\r\n    /**\r\n     * Removes all known MSAL keys from the cache\r\n     */\r\n    clear() {\r\n        // Removes all remaining MSAL cache items\r\n        this.memoryStorage.clear();\r\n        const accountKeys = getAccountKeys(this);\r\n        accountKeys.forEach((key) => this.removeItem(key));\r\n        const tokenKeys = getTokenKeys(this.clientId, this);\r\n        tokenKeys.idToken.forEach((key) => this.removeItem(key));\r\n        tokenKeys.accessToken.forEach((key) => this.removeItem(key));\r\n        tokenKeys.refreshToken.forEach((key) => this.removeItem(key));\r\n        // Clean up anything left\r\n        this.getKeys().forEach((cacheKey) => {\r\n            if (cacheKey.startsWith(PREFIX) ||\r\n                cacheKey.indexOf(this.clientId) !== -1) {\r\n                this.removeItem(cacheKey);\r\n            }\r\n        });\r\n    }\r\n    /**\r\n     * Helper to decrypt all known MSAL keys in localStorage and save them to inMemory storage\r\n     * @returns\r\n     */\r\n    async importExistingCache(correlationId) {\r\n        if (!this.encryptionCookie) {\r\n            return;\r\n        }\r\n        let accountKeys = getAccountKeys(this);\r\n        accountKeys = await this.importArray(accountKeys, correlationId);\r\n        // Write valid account keys back to map\r\n        if (accountKeys.length) {\r\n            this.setItem(getAccountKeysCacheKey(), JSON.stringify(accountKeys));\r\n        }\r\n        else {\r\n            this.removeItem(getAccountKeysCacheKey());\r\n        }\r\n        const tokenKeys = getTokenKeys(this.clientId, this);\r\n        tokenKeys.idToken = await this.importArray(tokenKeys.idToken, correlationId);\r\n        tokenKeys.accessToken = await this.importArray(tokenKeys.accessToken, correlationId);\r\n        tokenKeys.refreshToken = await this.importArray(tokenKeys.refreshToken, correlationId);\r\n        // Write valid token keys back to map\r\n        if (tokenKeys.idToken.length ||\r\n            tokenKeys.accessToken.length ||\r\n            tokenKeys.refreshToken.length) {\r\n            this.setItem(getTokenKeysCacheKey(this.clientId), JSON.stringify(tokenKeys));\r\n        }\r\n        else {\r\n            this.removeItem(getTokenKeysCacheKey(this.clientId));\r\n        }\r\n    }\r\n    /**\r\n     * Helper to decrypt and save cache entries\r\n     * @param key\r\n     * @returns\r\n     */\r\n    async getItemFromEncryptedCache(key, correlationId) {\r\n        if (!this.encryptionCookie) {\r\n            return null;\r\n        }\r\n        const rawCache = this.getItem(key);\r\n        if (!rawCache) {\r\n            return null;\r\n        }\r\n        let encObj;\r\n        try {\r\n            encObj = JSON.parse(rawCache);\r\n        }\r\n        catch (e) {\r\n            // Not a valid encrypted object, remove\r\n            return null;\r\n        }\r\n        if (!isEncrypted(encObj)) {\r\n            // Data is not encrypted\r\n            this.performanceClient.incrementFields({ unencryptedCacheCount: 1 }, correlationId);\r\n            return rawCache;\r\n        }\r\n        if (encObj.id !== this.encryptionCookie.id) {\r\n            // Data was encrypted with a different key. It must be removed because it is from a previous session.\r\n            this.performanceClient.incrementFields({ encryptedCacheExpiredCount: 1 }, correlationId);\r\n            return null;\r\n        }\r\n        this.performanceClient.incrementFields({ encryptedCacheCount: 1 }, correlationId);\r\n        return invokeAsync(decrypt, PerformanceEvents.Decrypt, this.logger, this.performanceClient, correlationId)(this.encryptionCookie.key, encObj.nonce, this.getContext(key), encObj.data);\r\n    }\r\n    /**\r\n     * Helper to decrypt and save an array of cache keys\r\n     * @param arr\r\n     * @returns Array of keys successfully imported\r\n     */\r\n    async importArray(arr, correlationId) {\r\n        const importedArr = [];\r\n        const promiseArr = [];\r\n        arr.forEach((key) => {\r\n            const promise = this.getItemFromEncryptedCache(key, correlationId).then((value) => {\r\n                if (value) {\r\n                    this.memoryStorage.setItem(key, value);\r\n                    importedArr.push(key);\r\n                }\r\n                else {\r\n                    // If value is empty, unencrypted or expired remove\r\n                    this.removeItem(key);\r\n                }\r\n            });\r\n            promiseArr.push(promise);\r\n        });\r\n        await Promise.all(promiseArr);\r\n        return importedArr;\r\n    }\r\n    /**\r\n     * Gets encryption context for a given cache entry. This is clientId for app specific entries, empty string for shared entries\r\n     * @param key\r\n     * @returns\r\n     */\r\n    getContext(key) {\r\n        let context = \"\";\r\n        if (key.includes(this.clientId)) {\r\n            context = this.clientId; // Used to bind encryption key to this appId\r\n        }\r\n        return context;\r\n    }\r\n    updateCache(event) {\r\n        this.logger.trace(\"Updating internal cache from broadcast event\");\r\n        const perfMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.LocalStorageUpdated);\r\n        perfMeasurement.add({ isBackground: true });\r\n        const { key, value, context } = event.data;\r\n        if (!key) {\r\n            this.logger.error(\"Broadcast event missing key\");\r\n            perfMeasurement.end({ success: false, errorCode: \"noKey\" });\r\n            return;\r\n        }\r\n        if (context && context !== this.clientId) {\r\n            this.logger.trace(`Ignoring broadcast event from clientId: ${context}`);\r\n            perfMeasurement.end({\r\n                success: false,\r\n                errorCode: \"contextMismatch\",\r\n            });\r\n            return;\r\n        }\r\n        if (!value) {\r\n            this.memoryStorage.removeItem(key);\r\n            this.logger.verbose(\"Removed item from internal cache\");\r\n        }\r\n        else {\r\n            this.memoryStorage.setItem(key, value);\r\n            this.logger.verbose(\"Updated item in internal cache\");\r\n        }\r\n        perfMeasurement.end({ success: true });\r\n    }\r\n}\n\nexport { LocalStorage };\n//# sourceMappingURL=LocalStorage.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { createBrowserConfigurationAuthError } from '../error/BrowserConfigurationAuthError.mjs';\nimport { storageNotSupported } from '../error/BrowserConfigurationAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass SessionStorage {\r\n    constructor() {\r\n        if (!window.sessionStorage) {\r\n            throw createBrowserConfigurationAuthError(storageNotSupported);\r\n        }\r\n    }\r\n    async initialize() {\r\n        // Session storage does not require initialization\r\n    }\r\n    getItem(key) {\r\n        return window.sessionStorage.getItem(key);\r\n    }\r\n    getUserData(key) {\r\n        return this.getItem(key);\r\n    }\r\n    setItem(key, value) {\r\n        window.sessionStorage.setItem(key, value);\r\n    }\r\n    async setUserData(key, value) {\r\n        this.setItem(key, value);\r\n    }\r\n    removeItem(key) {\r\n        window.sessionStorage.removeItem(key);\r\n    }\r\n    getKeys() {\r\n        return Object.keys(window.sessionStorage);\r\n    }\r\n    containsKey(key) {\r\n        return window.sessionStorage.hasOwnProperty(key);\r\n    }\r\n    decryptData() {\r\n        // Session storage does not support encryption, so this method is a no-op\r\n        return Promise.resolve(null);\r\n    }\r\n}\n\nexport { SessionStorage };\n//# sourceMappingURL=SessionStorage.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst EventType = {\r\n    INITIALIZE_START: \"msal:initializeStart\",\r\n    INITIALIZE_END: \"msal:initializeEnd\",\r\n    ACCOUNT_ADDED: \"msal:accountAdded\",\r\n    ACCOUNT_REMOVED: \"msal:accountRemoved\",\r\n    ACTIVE_ACCOUNT_CHANGED: \"msal:activeAccountChanged\",\r\n    LOGIN_START: \"msal:loginStart\",\r\n    LOGIN_SUCCESS: \"msal:loginSuccess\",\r\n    LOGIN_FAILURE: \"msal:loginFailure\",\r\n    ACQUIRE_TOKEN_START: \"msal:acquireTokenStart\",\r\n    ACQUIRE_TOKEN_SUCCESS: \"msal:acquireTokenSuccess\",\r\n    ACQUIRE_TOKEN_FAILURE: \"msal:acquireTokenFailure\",\r\n    ACQUIRE_TOKEN_NETWORK_START: \"msal:acquireTokenFromNetworkStart\",\r\n    SSO_SILENT_START: \"msal:ssoSilentStart\",\r\n    SSO_SILENT_SUCCESS: \"msal:ssoSilentSuccess\",\r\n    SSO_SILENT_FAILURE: \"msal:ssoSilentFailure\",\r\n    ACQUIRE_TOKEN_BY_CODE_START: \"msal:acquireTokenByCodeStart\",\r\n    ACQUIRE_TOKEN_BY_CODE_SUCCESS: \"msal:acquireTokenByCodeSuccess\",\r\n    ACQUIRE_TOKEN_BY_CODE_FAILURE: \"msal:acquireTokenByCodeFailure\",\r\n    HANDLE_REDIRECT_START: \"msal:handleRedirectStart\",\r\n    HANDLE_REDIRECT_END: \"msal:handleRedirectEnd\",\r\n    POPUP_OPENED: \"msal:popupOpened\",\r\n    LOGOUT_START: \"msal:logoutStart\",\r\n    LOGOUT_SUCCESS: \"msal:logoutSuccess\",\r\n    LOGOUT_FAILURE: \"msal:logoutFailure\",\r\n    LOGOUT_END: \"msal:logoutEnd\",\r\n    RESTORE_FROM_BFCACHE: \"msal:restoreFromBFCache\",\r\n    BROKER_CONNECTION_ESTABLISHED: \"msal:brokerConnectionEstablished\",\r\n};\n\nexport { EventType };\n//# sourceMappingURL=EventType.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Utility function to remove an element from an array in place.\r\n * @param array - The array from which to remove the element.\r\n * @param element - The element to remove from the array.\r\n */\r\nfunction removeElementFromArray(array, element) {\r\n    const index = array.indexOf(element);\r\n    if (index > -1) {\r\n        array.splice(index, 1);\r\n    }\r\n}\n\nexport { removeElementFromArray };\n//# sourceMappingURL=Helpers.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { CacheManager, TimeUtils, CacheHelpers, DEFAULT_TOKEN_RENEWAL_OFFSET_SEC, AuthToken, getTenantIdFromIdTokenClaims, buildTenantProfile, AccountEntity, createCacheError, CacheErrorCodes, invokeAsync, PerformanceEvents, Constants, PersistentCacheKeys, StringUtils, AuthenticationScheme, CacheError, DEFAULT_CRYPTO_IMPLEMENTATION, CredentialType } from '@azure/msal-common/browser';\nimport { createBrowserAuthError } from '../error/BrowserAuthError.mjs';\nimport { apiIdToName, BrowserCacheLocation, InMemoryCacheKeys, TemporaryCacheKeys, INTERACTION_TYPE, ApiId } from '../utils/BrowserConstants.mjs';\nimport { ACCOUNT_SCHEMA_VERSION, CREDENTIAL_SCHEMA_VERSION, VERSION_CACHE_KEY, getTokenKeysCacheKey, getAccountKeysCacheKey, PREFIX, CACHE_KEY_SEPARATOR } from './CacheKeys.mjs';\nimport { LocalStorage } from './LocalStorage.mjs';\nimport { SessionStorage } from './SessionStorage.mjs';\nimport { MemoryStorage } from './MemoryStorage.mjs';\nimport { base64Decode } from '../encode/Base64Decode.mjs';\nimport { base64Encode } from '../encode/Base64Encode.mjs';\nimport { CookieStorage } from './CookieStorage.mjs';\nimport { getAccountKeys, getTokenKeys } from './CacheHelpers.mjs';\nimport { EventType } from '../event/EventType.mjs';\nimport { clearHash } from '../utils/BrowserUtils.mjs';\nimport { version } from '../packageMetadata.mjs';\nimport { removeElementFromArray } from '../utils/Helpers.mjs';\nimport { isEncrypted } from './EncryptedData.mjs';\nimport { noTokenRequestCacheError, unableToParseTokenRequestCacheError, interactionInProgress } from '../error/BrowserAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * This class implements the cache storage interface for MSAL through browser local or session storage.\r\n * Cookies are only used if storeAuthStateInCookie is true, and are only used for\r\n * parameters such as state and nonce, generally.\r\n */\r\nclass BrowserCacheManager extends CacheManager {\r\n    constructor(clientId, cacheConfig, cryptoImpl, logger, performanceClient, eventHandler, staticAuthorityOptions) {\r\n        super(clientId, cryptoImpl, logger, performanceClient, staticAuthorityOptions);\r\n        this.cacheConfig = cacheConfig;\r\n        this.logger = logger;\r\n        this.internalStorage = new MemoryStorage();\r\n        this.browserStorage = getStorageImplementation(clientId, cacheConfig.cacheLocation, logger, performanceClient);\r\n        this.temporaryCacheStorage = getStorageImplementation(clientId, cacheConfig.temporaryCacheLocation, logger, performanceClient);\r\n        this.cookieStorage = new CookieStorage();\r\n        this.eventHandler = eventHandler;\r\n    }\r\n    async initialize(correlationId) {\r\n        this.performanceClient.addFields({\r\n            cacheLocation: this.cacheConfig.cacheLocation,\r\n            cacheRetentionDays: this.cacheConfig.cacheRetentionDays,\r\n        }, correlationId);\r\n        await this.browserStorage.initialize(correlationId);\r\n        await this.migrateExistingCache(correlationId);\r\n        this.trackVersionChanges(correlationId);\r\n    }\r\n    /**\r\n     * Migrates any existing cache data from previous versions of MSAL.js into the current cache structure.\r\n     */\r\n    async migrateExistingCache(correlationId) {\r\n        let accountKeys = getAccountKeys(this.browserStorage);\r\n        let tokenKeys = getTokenKeys(this.clientId, this.browserStorage);\r\n        this.performanceClient.addFields({\r\n            preMigrateAcntCount: accountKeys.length,\r\n            preMigrateATCount: tokenKeys.accessToken.length,\r\n            preMigrateITCount: tokenKeys.idToken.length,\r\n            preMigrateRTCount: tokenKeys.refreshToken.length,\r\n        }, correlationId);\r\n        for (let i = 0; i < ACCOUNT_SCHEMA_VERSION; i++) {\r\n            const credentialSchema = i; // For now account and credential schemas are the same, but may diverge in future\r\n            await this.removeStaleAccounts(i, credentialSchema, correlationId);\r\n        }\r\n        // Must migrate idTokens first to ensure we have KMSI info for the rest\r\n        for (let i = 0; i < CREDENTIAL_SCHEMA_VERSION; i++) {\r\n            const accountSchema = i; // For now account and credential schemas are the same, but may diverge in future\r\n            await this.migrateIdTokens(i, accountSchema, correlationId);\r\n        }\r\n        const kmsiMap = this.getKMSIValues();\r\n        for (let i = 0; i < CREDENTIAL_SCHEMA_VERSION; i++) {\r\n            await this.migrateAccessTokens(i, kmsiMap, correlationId);\r\n            await this.migrateRefreshTokens(i, kmsiMap, correlationId);\r\n        }\r\n        accountKeys = getAccountKeys(this.browserStorage);\r\n        tokenKeys = getTokenKeys(this.clientId, this.browserStorage);\r\n        this.performanceClient.addFields({\r\n            postMigrateAcntCount: accountKeys.length,\r\n            postMigrateATCount: tokenKeys.accessToken.length,\r\n            postMigrateITCount: tokenKeys.idToken.length,\r\n            postMigrateRTCount: tokenKeys.refreshToken.length,\r\n        }, correlationId);\r\n    }\r\n    /**\r\n     * Parses entry, adds lastUpdatedAt if it doesn't exist, removes entry if expired or invalid\r\n     * @param key\r\n     * @param correlationId\r\n     * @returns\r\n     */\r\n    async updateOldEntry(key, correlationId) {\r\n        const rawValue = this.browserStorage.getItem(key);\r\n        const parsedValue = this.validateAndParseJson(rawValue || \"\");\r\n        if (!parsedValue) {\r\n            this.browserStorage.removeItem(key);\r\n            return null;\r\n        }\r\n        if (!parsedValue.lastUpdatedAt) {\r\n            // Add lastUpdatedAt to the existing v0 entry if it doesnt exist so we know when it's safe to remove it\r\n            parsedValue.lastUpdatedAt = Date.now().toString();\r\n            this.setItem(key, JSON.stringify(parsedValue), correlationId);\r\n        }\r\n        else if (TimeUtils.isCacheExpired(parsedValue.lastUpdatedAt, this.cacheConfig.cacheRetentionDays)) {\r\n            this.browserStorage.removeItem(key);\r\n            this.performanceClient.incrementFields({ expiredCacheRemovedCount: 1 }, correlationId);\r\n            return null;\r\n        }\r\n        const decryptedData = isEncrypted(parsedValue)\r\n            ? await this.browserStorage.decryptData(key, parsedValue, correlationId)\r\n            : parsedValue;\r\n        if (!decryptedData || !CacheHelpers.isCredentialEntity(decryptedData)) {\r\n            this.performanceClient.incrementFields({ invalidCacheCount: 1 }, correlationId);\r\n            return null;\r\n        }\r\n        if ((CacheHelpers.isAccessTokenEntity(decryptedData) ||\r\n            CacheHelpers.isRefreshTokenEntity(decryptedData)) &&\r\n            decryptedData.expiresOn &&\r\n            TimeUtils.isTokenExpired(decryptedData.expiresOn, DEFAULT_TOKEN_RENEWAL_OFFSET_SEC)) {\r\n            this.browserStorage.removeItem(key);\r\n            this.performanceClient.incrementFields({ expiredCacheRemovedCount: 1 }, correlationId);\r\n            return null;\r\n        }\r\n        return decryptedData;\r\n    }\r\n    /**\r\n     * Remove accounts from the cache for older schema versions if they have not been updated in the last cacheRetentionDays\r\n     * @param accountSchema\r\n     * @param credentialSchema\r\n     * @param correlationId\r\n     * @returns\r\n     */\r\n    async removeStaleAccounts(accountSchema, credentialSchema, correlationId) {\r\n        const accountKeysToCheck = getAccountKeys(this.browserStorage, accountSchema);\r\n        if (accountKeysToCheck.length === 0) {\r\n            return;\r\n        }\r\n        for (const accountKey of [...accountKeysToCheck]) {\r\n            this.performanceClient.incrementFields({ oldAcntCount: 1 }, correlationId);\r\n            const rawValue = this.browserStorage.getItem(accountKey);\r\n            const parsedValue = this.validateAndParseJson(rawValue || \"\");\r\n            if (!parsedValue) {\r\n                removeElementFromArray(accountKeysToCheck, accountKey);\r\n                continue;\r\n            }\r\n            if (!parsedValue.lastUpdatedAt) {\r\n                // Add lastUpdatedAt to the existing entry if it doesnt exist so we know when it's safe to remove it\r\n                parsedValue.lastUpdatedAt = Date.now().toString();\r\n                this.setItem(accountKey, JSON.stringify(parsedValue), correlationId);\r\n                continue;\r\n            }\r\n            else if (TimeUtils.isCacheExpired(parsedValue.lastUpdatedAt, this.cacheConfig.cacheRetentionDays)) {\r\n                // Cache expired remove account and associated tokens\r\n                await this.removeAccountOldSchema(accountKey, parsedValue, credentialSchema, correlationId);\r\n                removeElementFromArray(accountKeysToCheck, accountKey);\r\n            }\r\n        }\r\n        this.setAccountKeys(accountKeysToCheck, correlationId, accountSchema);\r\n    }\r\n    /**\r\n     * Remove the given account and all associated tokens from the cache\r\n     * @param accountKey\r\n     * @param rawObject\r\n     * @param credentialSchema\r\n     * @param correlationId\r\n     */\r\n    async removeAccountOldSchema(accountKey, rawObject, credentialSchema, correlationId) {\r\n        const decryptedData = isEncrypted(rawObject)\r\n            ? (await this.browserStorage.decryptData(accountKey, rawObject, correlationId))\r\n            : rawObject;\r\n        const homeAccountId = decryptedData?.homeAccountId;\r\n        if (homeAccountId) {\r\n            const tokenKeys = this.getTokenKeys(credentialSchema);\r\n            [...tokenKeys.idToken]\r\n                .filter((key) => key.includes(homeAccountId))\r\n                .forEach((key) => {\r\n                this.browserStorage.removeItem(key);\r\n                removeElementFromArray(tokenKeys.idToken, key);\r\n            });\r\n            [...tokenKeys.accessToken]\r\n                .filter((key) => key.includes(homeAccountId))\r\n                .forEach((key) => {\r\n                this.browserStorage.removeItem(key);\r\n                removeElementFromArray(tokenKeys.accessToken, key);\r\n            });\r\n            [...tokenKeys.refreshToken]\r\n                .filter((key) => key.includes(homeAccountId))\r\n                .forEach((key) => {\r\n                this.browserStorage.removeItem(key);\r\n                removeElementFromArray(tokenKeys.refreshToken, key);\r\n            });\r\n            this.setTokenKeys(tokenKeys, correlationId, credentialSchema);\r\n        }\r\n        this.performanceClient.incrementFields({ expiredAcntRemovedCount: 1 }, correlationId);\r\n        this.browserStorage.removeItem(accountKey);\r\n    }\r\n    /**\r\n     * Gets key value pair mapping homeAccountId to KMSI value\r\n     * @returns\r\n     */\r\n    getKMSIValues() {\r\n        const kmsiMap = {};\r\n        const tokenKeys = this.getTokenKeys().idToken;\r\n        for (const key of tokenKeys) {\r\n            const rawValue = this.browserStorage.getUserData(key);\r\n            if (rawValue) {\r\n                const idToken = JSON.parse(rawValue);\r\n                const claims = AuthToken.extractTokenClaims(idToken.secret, base64Decode);\r\n                if (claims) {\r\n                    kmsiMap[idToken.homeAccountId] = AuthToken.isKmsi(claims);\r\n                }\r\n            }\r\n        }\r\n        return kmsiMap;\r\n    }\r\n    /**\r\n     * Migrates id tokens from the old schema to the new schema, also migrates associated account object if it doesn't already exist in the new schema\r\n     * @param credentialSchema\r\n     * @param accountSchema\r\n     * @param correlationId\r\n     * @returns\r\n     */\r\n    async migrateIdTokens(credentialSchema, accountSchema, correlationId) {\r\n        const credentialKeysToMigrate = getTokenKeys(this.clientId, this.browserStorage, credentialSchema);\r\n        if (credentialKeysToMigrate.idToken.length === 0) {\r\n            return;\r\n        }\r\n        const currentCredentialKeys = getTokenKeys(this.clientId, this.browserStorage, CREDENTIAL_SCHEMA_VERSION);\r\n        const currentAccountKeys = getAccountKeys(this.browserStorage);\r\n        const previousAccountKeys = getAccountKeys(this.browserStorage, accountSchema);\r\n        for (const idTokenKey of [...credentialKeysToMigrate.idToken]) {\r\n            this.performanceClient.incrementFields({ oldITCount: 1 }, correlationId);\r\n            const oldSchemaData = (await this.updateOldEntry(idTokenKey, correlationId));\r\n            if (!oldSchemaData) {\r\n                removeElementFromArray(credentialKeysToMigrate.idToken, idTokenKey);\r\n                continue;\r\n            }\r\n            const currentAccountKey = currentAccountKeys.find((key) => key.includes(oldSchemaData.homeAccountId));\r\n            const previousAccountKey = previousAccountKeys.find((key) => key.includes(oldSchemaData.homeAccountId));\r\n            let account = null;\r\n            if (currentAccountKey) {\r\n                account = this.getAccount(currentAccountKey, correlationId);\r\n            }\r\n            else if (previousAccountKey) {\r\n                const rawValue = this.browserStorage.getItem(previousAccountKey);\r\n                const parsedValue = this.validateAndParseJson(rawValue || \"\");\r\n                account =\r\n                    parsedValue && isEncrypted(parsedValue)\r\n                        ? (await this.browserStorage.decryptData(previousAccountKey, parsedValue, correlationId))\r\n                        : parsedValue;\r\n            }\r\n            if (!account) {\r\n                // Don't migrate idToken if we don't have an account for it\r\n                this.performanceClient.incrementFields({ skipITMigrateCount: 1 }, correlationId);\r\n                continue;\r\n            }\r\n            const claims = AuthToken.extractTokenClaims(oldSchemaData.secret, base64Decode);\r\n            const newIdTokenKey = this.generateCredentialKey(oldSchemaData);\r\n            const currentIdToken = this.getIdTokenCredential(newIdTokenKey, correlationId);\r\n            const oldTokenHasSignInState = Object.keys(claims).includes(\"signin_state\");\r\n            const currentTokenHasSignInState = currentIdToken &&\r\n                Object.keys(AuthToken.extractTokenClaims(currentIdToken.secret, base64Decode) || {}).includes(\"signin_state\");\r\n            /**\r\n             * Only migrate if:\r\n             * 1. Token doesn't yet exist in current schema\r\n             * 2. Old schema token has been updated more recently than the current one AND migrating it won't result in loss of KMSI state\r\n             */\r\n            if (!currentIdToken ||\r\n                (oldSchemaData.lastUpdatedAt > currentIdToken.lastUpdatedAt &&\r\n                    (oldTokenHasSignInState || !currentTokenHasSignInState))) {\r\n                const tenantProfiles = account.tenantProfiles || [];\r\n                const tenantId = getTenantIdFromIdTokenClaims(claims) || account.realm;\r\n                if (tenantId &&\r\n                    !tenantProfiles.find((tenantProfile) => {\r\n                        return tenantProfile.tenantId === tenantId;\r\n                    })) {\r\n                    const newTenantProfile = buildTenantProfile(account.homeAccountId, account.localAccountId, tenantId, claims);\r\n                    tenantProfiles.push(newTenantProfile);\r\n                }\r\n                account.tenantProfiles = tenantProfiles;\r\n                const newAccountKey = this.generateAccountKey(AccountEntity.getAccountInfo(account));\r\n                const kmsi = AuthToken.isKmsi(claims);\r\n                await this.setUserData(newAccountKey, JSON.stringify(account), correlationId, account.lastUpdatedAt, kmsi);\r\n                if (!currentAccountKeys.includes(newAccountKey)) {\r\n                    currentAccountKeys.push(newAccountKey);\r\n                }\r\n                await this.setUserData(newIdTokenKey, JSON.stringify(oldSchemaData), correlationId, oldSchemaData.lastUpdatedAt, kmsi);\r\n                this.performanceClient.incrementFields({ migratedITCount: 1 }, correlationId);\r\n                currentCredentialKeys.idToken.push(newIdTokenKey);\r\n            }\r\n        }\r\n        this.setTokenKeys(credentialKeysToMigrate, correlationId, credentialSchema);\r\n        this.setTokenKeys(currentCredentialKeys, correlationId);\r\n        this.setAccountKeys(currentAccountKeys, correlationId);\r\n    }\r\n    /**\r\n     * Migrates access tokens from old cache schema to current schema\r\n     * @param credentialSchema\r\n     * @param kmsiMap\r\n     * @param correlationId\r\n     * @returns\r\n     */\r\n    async migrateAccessTokens(credentialSchema, kmsiMap, correlationId) {\r\n        const credentialKeysToMigrate = getTokenKeys(this.clientId, this.browserStorage, credentialSchema);\r\n        if (credentialKeysToMigrate.accessToken.length === 0) {\r\n            return;\r\n        }\r\n        const currentCredentialKeys = getTokenKeys(this.clientId, this.browserStorage, CREDENTIAL_SCHEMA_VERSION);\r\n        for (const accessTokenKey of [...credentialKeysToMigrate.accessToken]) {\r\n            this.performanceClient.incrementFields({ oldATCount: 1 }, correlationId);\r\n            const oldSchemaData = (await this.updateOldEntry(accessTokenKey, correlationId));\r\n            if (!oldSchemaData) {\r\n                removeElementFromArray(credentialKeysToMigrate.accessToken, accessTokenKey);\r\n                continue;\r\n            }\r\n            if (!Object.keys(kmsiMap).includes(oldSchemaData.homeAccountId)) {\r\n                // Don't migrate tokens if we don't have an idToken for them\r\n                this.performanceClient.incrementFields({ skipATMigrateCount: 1 }, correlationId);\r\n                continue;\r\n            }\r\n            const newKey = this.generateCredentialKey(oldSchemaData);\r\n            const kmsi = kmsiMap[oldSchemaData.homeAccountId];\r\n            if (!currentCredentialKeys.accessToken.includes(newKey)) {\r\n                await this.setUserData(newKey, JSON.stringify(oldSchemaData), correlationId, oldSchemaData.lastUpdatedAt, kmsi);\r\n                this.performanceClient.incrementFields({ migratedATCount: 1 }, correlationId);\r\n                currentCredentialKeys.accessToken.push(newKey);\r\n            }\r\n            else {\r\n                const currentToken = this.getAccessTokenCredential(newKey, correlationId);\r\n                if (!currentToken ||\r\n                    oldSchemaData.lastUpdatedAt > currentToken.lastUpdatedAt) {\r\n                    // If the token already exists, only overwrite it if the old token has a more recent lastUpdatedAt\r\n                    await this.setUserData(newKey, JSON.stringify(oldSchemaData), correlationId, oldSchemaData.lastUpdatedAt, kmsi);\r\n                    this.performanceClient.incrementFields({ migratedATCount: 1 }, correlationId);\r\n                }\r\n            }\r\n        }\r\n        this.setTokenKeys(credentialKeysToMigrate, correlationId, credentialSchema);\r\n        this.setTokenKeys(currentCredentialKeys, correlationId);\r\n    }\r\n    /**\r\n     * Migrates refresh tokens from old cache schema to current schema\r\n     * @param credentialSchema\r\n     * @param kmsiMap\r\n     * @param correlationId\r\n     * @returns\r\n     */\r\n    async migrateRefreshTokens(credentialSchema, kmsiMap, correlationId) {\r\n        const credentialKeysToMigrate = getTokenKeys(this.clientId, this.browserStorage, credentialSchema);\r\n        if (credentialKeysToMigrate.refreshToken.length === 0) {\r\n            return;\r\n        }\r\n        const currentCredentialKeys = getTokenKeys(this.clientId, this.browserStorage, CREDENTIAL_SCHEMA_VERSION);\r\n        for (const refreshTokenKey of [\r\n            ...credentialKeysToMigrate.refreshToken,\r\n        ]) {\r\n            this.performanceClient.incrementFields({ oldRTCount: 1 }, correlationId);\r\n            const oldSchemaData = (await this.updateOldEntry(refreshTokenKey, correlationId));\r\n            if (!oldSchemaData) {\r\n                removeElementFromArray(credentialKeysToMigrate.refreshToken, refreshTokenKey);\r\n                continue;\r\n            }\r\n            if (!Object.keys(kmsiMap).includes(oldSchemaData.homeAccountId)) {\r\n                // Don't migrate tokens if we don't have an idToken for them\r\n                this.performanceClient.incrementFields({ skipRTMigrateCount: 1 }, correlationId);\r\n                continue;\r\n            }\r\n            const newKey = this.generateCredentialKey(oldSchemaData);\r\n            const kmsi = kmsiMap[oldSchemaData.homeAccountId];\r\n            if (!currentCredentialKeys.refreshToken.includes(newKey)) {\r\n                await this.setUserData(newKey, JSON.stringify(oldSchemaData), correlationId, oldSchemaData.lastUpdatedAt, kmsi);\r\n                this.performanceClient.incrementFields({ migratedRTCount: 1 }, correlationId);\r\n                currentCredentialKeys.refreshToken.push(newKey);\r\n            }\r\n            else {\r\n                const currentToken = this.getRefreshTokenCredential(newKey, correlationId);\r\n                if (!currentToken ||\r\n                    oldSchemaData.lastUpdatedAt > currentToken.lastUpdatedAt) {\r\n                    // If the token already exists, only overwrite it if the old token has a more recent lastUpdatedAt\r\n                    await this.setUserData(newKey, JSON.stringify(oldSchemaData), correlationId, oldSchemaData.lastUpdatedAt, kmsi);\r\n                    this.performanceClient.incrementFields({ migratedRTCount: 1 }, correlationId);\r\n                }\r\n            }\r\n        }\r\n        this.setTokenKeys(credentialKeysToMigrate, correlationId, credentialSchema);\r\n        this.setTokenKeys(currentCredentialKeys, correlationId);\r\n    }\r\n    /**\r\n     * Tracks upgrades and downgrades for telemetry and debugging purposes\r\n     */\r\n    trackVersionChanges(correlationId) {\r\n        const previousVersion = this.browserStorage.getItem(VERSION_CACHE_KEY);\r\n        if (previousVersion) {\r\n            this.logger.info(`MSAL.js was last initialized by version: ${previousVersion}`);\r\n            this.performanceClient.addFields({ previousLibraryVersion: previousVersion }, correlationId);\r\n        }\r\n        if (previousVersion !== version) {\r\n            this.setItem(VERSION_CACHE_KEY, version, correlationId);\r\n        }\r\n    }\r\n    /**\r\n     * Parses passed value as JSON object, JSON.parse() will throw an error.\r\n     * @param input\r\n     */\r\n    validateAndParseJson(jsonValue) {\r\n        if (!jsonValue) {\r\n            return null;\r\n        }\r\n        try {\r\n            const parsedJson = JSON.parse(jsonValue);\r\n            /**\r\n             * There are edge cases in which JSON.parse will successfully parse a non-valid JSON object\r\n             * (e.g. JSON.parse will parse an escaped string into an unescaped string), so adding a type check\r\n             * of the parsed value is necessary in order to be certain that the string represents a valid JSON object.\r\n             *\r\n             */\r\n            return parsedJson && typeof parsedJson === \"object\"\r\n                ? parsedJson\r\n                : null;\r\n        }\r\n        catch (error) {\r\n            return null;\r\n        }\r\n    }\r\n    /**\r\n     * Helper to setItem in browser storage, with cleanup in case of quota errors\r\n     * @param key\r\n     * @param value\r\n     */\r\n    setItem(key, value, correlationId) {\r\n        const tokenKeysCount = new Array(CREDENTIAL_SCHEMA_VERSION + 1).fill(0); // Array mapping schema version to number of token keys stored for that version\r\n        const accessTokenKeys = []; // Flat map of all access token keys stored, ordered by schema version\r\n        const maxRetries = 20;\r\n        for (let i = 0; i <= maxRetries; i++) {\r\n            // Attempt to store item in cache, if cache is full this call will throw and we'll attempt to clear space by removing access tokens from the cache one by one, starting with tokens stored by previous versions of MSAL.js\r\n            try {\r\n                this.browserStorage.setItem(key, value);\r\n                if (i > 0) {\r\n                    // If any tokens were removed in order to store this item update the token keys array with the tokens removed\r\n                    for (let schemaVersion = 0; schemaVersion <= CREDENTIAL_SCHEMA_VERSION; schemaVersion++) {\r\n                        // Get the sum of all previous token counts to use as start index for this schema version\r\n                        const startIndex = tokenKeysCount\r\n                            .slice(0, schemaVersion)\r\n                            .reduce((sum, count) => sum + count, 0);\r\n                        if (startIndex >= i) {\r\n                            // Done removing tokens\r\n                            break;\r\n                        }\r\n                        const endIndex = i > startIndex + tokenKeysCount[schemaVersion]\r\n                            ? startIndex + tokenKeysCount[schemaVersion]\r\n                            : i;\r\n                        if (i > startIndex &&\r\n                            tokenKeysCount[schemaVersion] > 0) {\r\n                            this.removeAccessTokenKeys(accessTokenKeys.slice(startIndex, endIndex), correlationId, schemaVersion);\r\n                        }\r\n                    }\r\n                }\r\n                break; // If setItem succeeds, exit the loop\r\n            }\r\n            catch (e) {\r\n                const cacheError = createCacheError(e);\r\n                if (cacheError.errorCode ===\r\n                    CacheErrorCodes.cacheQuotaExceeded &&\r\n                    i < maxRetries) {\r\n                    if (!accessTokenKeys.length) {\r\n                        // If we are currently trying to set the token keys, use the value we're trying to set\r\n                        for (let i = 0; i <= CREDENTIAL_SCHEMA_VERSION; i++) {\r\n                            if (key ===\r\n                                getTokenKeysCacheKey(this.clientId, i)) {\r\n                                const tokenKeys = JSON.parse(value).accessToken;\r\n                                accessTokenKeys.push(...tokenKeys);\r\n                                tokenKeysCount[i] = tokenKeys.length;\r\n                            }\r\n                            else {\r\n                                const tokenKeys = this.getTokenKeys(i).accessToken;\r\n                                accessTokenKeys.push(...tokenKeys);\r\n                                tokenKeysCount[i] = tokenKeys.length;\r\n                            }\r\n                        }\r\n                    }\r\n                    if (accessTokenKeys.length <= i) {\r\n                        // Nothing to remove, rethrow the error\r\n                        throw cacheError;\r\n                    }\r\n                    // When cache quota is exceeded, start removing access tokens until we can successfully set the item\r\n                    this.removeAccessToken(accessTokenKeys[i], correlationId, false // Don't save token keys yet, do it at the end\r\n                    );\r\n                }\r\n                else {\r\n                    // If the error is not a quota exceeded error, rethrow it\r\n                    throw cacheError;\r\n                }\r\n            }\r\n        }\r\n    }\r\n    /**\r\n     * Helper to setUserData in browser storage, with cleanup in case of quota errors\r\n     * @param key\r\n     * @param value\r\n     * @param correlationId\r\n     */\r\n    async setUserData(key, value, correlationId, timestamp, kmsi) {\r\n        const tokenKeysCount = new Array(CREDENTIAL_SCHEMA_VERSION + 1).fill(0); // Array mapping schema version to number of token keys stored for that version\r\n        const accessTokenKeys = []; // Flat map of all access token keys stored, ordered by schema version\r\n        const maxRetries = 20;\r\n        for (let i = 0; i <= maxRetries; i++) {\r\n            try {\r\n                // Attempt to store item in cache, if cache is full this call will throw and we'll attempt to clear space by removing access tokens from the cache one by one, starting with tokens stored by previous versions of MSAL.js\r\n                await invokeAsync(this.browserStorage.setUserData.bind(this.browserStorage), PerformanceEvents.SetUserData, this.logger, this.performanceClient)(key, value, correlationId, timestamp, kmsi);\r\n                if (i > 0) {\r\n                    // If any tokens were removed in order to store this item update the token keys array with the tokens removed\r\n                    for (let schemaVersion = 0; schemaVersion <= CREDENTIAL_SCHEMA_VERSION; schemaVersion++) {\r\n                        // Get the sum of all previous token counts to use as start index for this schema version\r\n                        const startIndex = tokenKeysCount\r\n                            .slice(0, schemaVersion)\r\n                            .reduce((sum, count) => sum + count, 0);\r\n                        if (startIndex >= i) {\r\n                            // Done removing tokens\r\n                            break;\r\n                        }\r\n                        const endIndex = i > startIndex + tokenKeysCount[schemaVersion]\r\n                            ? startIndex + tokenKeysCount[schemaVersion]\r\n                            : i;\r\n                        if (i > startIndex &&\r\n                            tokenKeysCount[schemaVersion] > 0) {\r\n                            this.removeAccessTokenKeys(accessTokenKeys.slice(startIndex, endIndex), correlationId, schemaVersion);\r\n                        }\r\n                    }\r\n                }\r\n                break; // If setItem succeeds, exit the loop\r\n            }\r\n            catch (e) {\r\n                const cacheError = createCacheError(e);\r\n                if (cacheError.errorCode ===\r\n                    CacheErrorCodes.cacheQuotaExceeded &&\r\n                    i < maxRetries) {\r\n                    if (!accessTokenKeys.length) {\r\n                        // If we are currently trying to set the token keys, use the value we're trying to set\r\n                        for (let i = 0; i <= CREDENTIAL_SCHEMA_VERSION; i++) {\r\n                            const tokenKeys = this.getTokenKeys(i).accessToken;\r\n                            accessTokenKeys.push(...tokenKeys);\r\n                            tokenKeysCount[i] = tokenKeys.length;\r\n                        }\r\n                    }\r\n                    if (accessTokenKeys.length <= i) {\r\n                        // Nothing left to remove, rethrow the error\r\n                        throw cacheError;\r\n                    }\r\n                    // When cache quota is exceeded, start removing access tokens until we can successfully set the item\r\n                    this.removeAccessToken(accessTokenKeys[i], correlationId, false // Don't save token keys yet, do it at the end\r\n                    );\r\n                }\r\n                else {\r\n                    // If the error is not a quota exceeded error, rethrow it\r\n                    throw cacheError;\r\n                }\r\n            }\r\n        }\r\n    }\r\n    /**\r\n     * Reads account from cache, deserializes it into an account entity and returns it.\r\n     * If account is not found from the key, returns null and removes key from map.\r\n     * @param accountKey\r\n     * @returns\r\n     */\r\n    getAccount(accountKey, correlationId) {\r\n        this.logger.trace(\"BrowserCacheManager.getAccount called\");\r\n        const serializedAccount = this.browserStorage.getUserData(accountKey);\r\n        if (!serializedAccount) {\r\n            this.removeAccountKeyFromMap(accountKey, correlationId);\r\n            return null;\r\n        }\r\n        const parsedAccount = this.validateAndParseJson(serializedAccount);\r\n        if (!parsedAccount || !AccountEntity.isAccountEntity(parsedAccount)) {\r\n            return null;\r\n        }\r\n        this.performanceClient.addFields({\r\n            accountCachedBy: apiIdToName(parsedAccount.cachedByApiId),\r\n        }, correlationId);\r\n        return CacheManager.toObject(new AccountEntity(), parsedAccount);\r\n    }\r\n    /**\r\n     * set account entity in the platform cache\r\n     * @param account\r\n     */\r\n    async setAccount(account, correlationId, kmsi, apiId) {\r\n        this.logger.trace(\"BrowserCacheManager.setAccount called\");\r\n        const key = this.generateAccountKey(AccountEntity.getAccountInfo(account));\r\n        const timestamp = Date.now().toString();\r\n        account.lastUpdatedAt = timestamp;\r\n        account.cachedByApiId = apiId;\r\n        await this.setUserData(key, JSON.stringify(account), correlationId, timestamp, kmsi);\r\n        const wasAdded = this.addAccountKeyToMap(key, correlationId);\r\n        this.performanceClient.addFields({ kmsi: kmsi }, correlationId);\r\n        /**\r\n         * @deprecated - Remove this in next major version in favor of more consistent LOGIN event\r\n         */\r\n        if (this.cacheConfig.cacheLocation ===\r\n            BrowserCacheLocation.LocalStorage &&\r\n            wasAdded) {\r\n            this.eventHandler.emitEvent(EventType.ACCOUNT_ADDED, undefined, AccountEntity.getAccountInfo(account));\r\n        }\r\n    }\r\n    /**\r\n     * Returns the array of account keys currently cached\r\n     * @returns\r\n     */\r\n    getAccountKeys() {\r\n        return getAccountKeys(this.browserStorage);\r\n    }\r\n    setAccountKeys(accountKeys, correlationId, schemaVersion = ACCOUNT_SCHEMA_VERSION) {\r\n        if (accountKeys.length === 0) {\r\n            this.removeItem(getAccountKeysCacheKey(schemaVersion));\r\n        }\r\n        else {\r\n            this.setItem(getAccountKeysCacheKey(schemaVersion), JSON.stringify(accountKeys), correlationId);\r\n        }\r\n    }\r\n    /**\r\n     * Add a new account to the key map\r\n     * @param key\r\n     */\r\n    addAccountKeyToMap(key, correlationId) {\r\n        this.logger.trace(\"BrowserCacheManager.addAccountKeyToMap called\");\r\n        this.logger.tracePii(`BrowserCacheManager.addAccountKeyToMap called with key: ${key}`);\r\n        const accountKeys = this.getAccountKeys();\r\n        if (accountKeys.indexOf(key) === -1) {\r\n            // Only add key if it does not already exist in the map\r\n            accountKeys.push(key);\r\n            this.setItem(getAccountKeysCacheKey(), JSON.stringify(accountKeys), correlationId);\r\n            this.logger.verbose(\"BrowserCacheManager.addAccountKeyToMap account key added\");\r\n            return true;\r\n        }\r\n        else {\r\n            this.logger.verbose(\"BrowserCacheManager.addAccountKeyToMap account key already exists in map\");\r\n            return false;\r\n        }\r\n    }\r\n    /**\r\n     * Remove an account from the key map\r\n     * @param key\r\n     */\r\n    removeAccountKeyFromMap(key, correlationId) {\r\n        this.logger.trace(\"BrowserCacheManager.removeAccountKeyFromMap called\");\r\n        this.logger.tracePii(`BrowserCacheManager.removeAccountKeyFromMap called with key: ${key}`);\r\n        const accountKeys = this.getAccountKeys();\r\n        const removalIndex = accountKeys.indexOf(key);\r\n        if (removalIndex > -1) {\r\n            accountKeys.splice(removalIndex, 1);\r\n            this.setAccountKeys(accountKeys, correlationId);\r\n            this.logger.trace(\"BrowserCacheManager.removeAccountKeyFromMap account key removed\");\r\n        }\r\n        else {\r\n            this.logger.trace(\"BrowserCacheManager.removeAccountKeyFromMap key not found in existing map\");\r\n        }\r\n    }\r\n    /**\r\n     * Extends inherited removeAccount function to include removal of the account key from the map\r\n     * @param key\r\n     */\r\n    removeAccount(account, correlationId) {\r\n        const activeAccount = this.getActiveAccount(correlationId);\r\n        if (activeAccount?.homeAccountId === account.homeAccountId &&\r\n            activeAccount?.environment === account.environment) {\r\n            this.setActiveAccount(null, correlationId);\r\n        }\r\n        super.removeAccount(account, correlationId);\r\n        this.removeAccountKeyFromMap(this.generateAccountKey(account), correlationId);\r\n        // Remove all other associated cache items\r\n        this.browserStorage.getKeys().forEach((key) => {\r\n            if (key.includes(account.homeAccountId) &&\r\n                key.includes(account.environment)) {\r\n                this.browserStorage.removeItem(key);\r\n            }\r\n        });\r\n        /**\r\n         * @deprecated - Remove this in next major version in favor of more consistent LOGOUT event\r\n         */\r\n        if (this.cacheConfig.cacheLocation === BrowserCacheLocation.LocalStorage) {\r\n            this.eventHandler.emitEvent(EventType.ACCOUNT_REMOVED, undefined, account);\r\n        }\r\n    }\r\n    /**\r\n     * Removes given idToken from the cache and from the key map\r\n     * @param key\r\n     */\r\n    removeIdToken(key, correlationId) {\r\n        super.removeIdToken(key, correlationId);\r\n        const tokenKeys = this.getTokenKeys();\r\n        const idRemoval = tokenKeys.idToken.indexOf(key);\r\n        if (idRemoval > -1) {\r\n            this.logger.info(\"idToken removed from tokenKeys map\");\r\n            tokenKeys.idToken.splice(idRemoval, 1);\r\n            this.setTokenKeys(tokenKeys, correlationId);\r\n        }\r\n    }\r\n    /**\r\n     * Removes given accessToken from the cache and from the key map\r\n     * @param key\r\n     */\r\n    removeAccessToken(key, correlationId, updateTokenKeys = true) {\r\n        super.removeAccessToken(key, correlationId);\r\n        updateTokenKeys && this.removeAccessTokenKeys([key], correlationId);\r\n    }\r\n    /**\r\n     * Remove access token key from the key map\r\n     * @param key\r\n     * @param correlationId\r\n     * @param tokenKeys\r\n     */\r\n    removeAccessTokenKeys(keys, correlationId, schemaVersion = CREDENTIAL_SCHEMA_VERSION) {\r\n        this.logger.trace(\"removeAccessTokenKey called\");\r\n        const tokenKeys = this.getTokenKeys(schemaVersion);\r\n        let keysRemoved = 0;\r\n        keys.forEach((key) => {\r\n            const accessRemoval = tokenKeys.accessToken.indexOf(key);\r\n            if (accessRemoval > -1) {\r\n                tokenKeys.accessToken.splice(accessRemoval, 1);\r\n                keysRemoved++;\r\n            }\r\n        });\r\n        if (keysRemoved > 0) {\r\n            this.logger.info(`removed ${keysRemoved} accessToken keys from tokenKeys map`);\r\n            this.setTokenKeys(tokenKeys, correlationId, schemaVersion);\r\n            return;\r\n        }\r\n    }\r\n    /**\r\n     * Removes given refreshToken from the cache and from the key map\r\n     * @param key\r\n     */\r\n    removeRefreshToken(key, correlationId) {\r\n        super.removeRefreshToken(key, correlationId);\r\n        const tokenKeys = this.getTokenKeys();\r\n        const refreshRemoval = tokenKeys.refreshToken.indexOf(key);\r\n        if (refreshRemoval > -1) {\r\n            this.logger.info(\"refreshToken removed from tokenKeys map\");\r\n            tokenKeys.refreshToken.splice(refreshRemoval, 1);\r\n            this.setTokenKeys(tokenKeys, correlationId);\r\n        }\r\n    }\r\n    /**\r\n     * Gets the keys for the cached tokens associated with this clientId\r\n     * @returns\r\n     */\r\n    getTokenKeys(schemaVersion = CREDENTIAL_SCHEMA_VERSION) {\r\n        return getTokenKeys(this.clientId, this.browserStorage, schemaVersion);\r\n    }\r\n    /**\r\n     * Stores the token keys in the cache\r\n     * @param tokenKeys\r\n     * @param correlationId\r\n     * @returns\r\n     */\r\n    setTokenKeys(tokenKeys, correlationId, schemaVersion = CREDENTIAL_SCHEMA_VERSION) {\r\n        if (tokenKeys.idToken.length === 0 &&\r\n            tokenKeys.accessToken.length === 0 &&\r\n            tokenKeys.refreshToken.length === 0) {\r\n            // If no keys left, remove the map\r\n            this.removeItem(getTokenKeysCacheKey(this.clientId, schemaVersion));\r\n            return;\r\n        }\r\n        else {\r\n            this.setItem(getTokenKeysCacheKey(this.clientId, schemaVersion), JSON.stringify(tokenKeys), correlationId);\r\n        }\r\n    }\r\n    /**\r\n     * generates idToken entity from a string\r\n     * @param idTokenKey\r\n     */\r\n    getIdTokenCredential(idTokenKey, correlationId) {\r\n        const value = this.browserStorage.getUserData(idTokenKey);\r\n        if (!value) {\r\n            this.logger.trace(\"BrowserCacheManager.getIdTokenCredential: called, no cache hit\");\r\n            this.removeIdToken(idTokenKey, correlationId);\r\n            return null;\r\n        }\r\n        const parsedIdToken = this.validateAndParseJson(value);\r\n        if (!parsedIdToken || !CacheHelpers.isIdTokenEntity(parsedIdToken)) {\r\n            this.logger.trace(\"BrowserCacheManager.getIdTokenCredential: called, no cache hit\");\r\n            return null;\r\n        }\r\n        this.logger.trace(\"BrowserCacheManager.getIdTokenCredential: cache hit\");\r\n        return parsedIdToken;\r\n    }\r\n    /**\r\n     * set IdToken credential to the platform cache\r\n     * @param idToken\r\n     */\r\n    async setIdTokenCredential(idToken, correlationId, kmsi) {\r\n        this.logger.trace(\"BrowserCacheManager.setIdTokenCredential called\");\r\n        const idTokenKey = this.generateCredentialKey(idToken);\r\n        const timestamp = Date.now().toString();\r\n        idToken.lastUpdatedAt = timestamp;\r\n        await this.setUserData(idTokenKey, JSON.stringify(idToken), correlationId, timestamp, kmsi);\r\n        const tokenKeys = this.getTokenKeys();\r\n        if (tokenKeys.idToken.indexOf(idTokenKey) === -1) {\r\n            this.logger.info(\"BrowserCacheManager: addTokenKey - idToken added to map\");\r\n            tokenKeys.idToken.push(idTokenKey);\r\n            this.setTokenKeys(tokenKeys, correlationId);\r\n        }\r\n    }\r\n    /**\r\n     * generates accessToken entity from a string\r\n     * @param key\r\n     */\r\n    getAccessTokenCredential(accessTokenKey, correlationId) {\r\n        const value = this.browserStorage.getUserData(accessTokenKey);\r\n        if (!value) {\r\n            this.logger.trace(\"BrowserCacheManager.getAccessTokenCredential: called, no cache hit\");\r\n            this.removeAccessTokenKeys([accessTokenKey], correlationId);\r\n            return null;\r\n        }\r\n        const parsedAccessToken = this.validateAndParseJson(value);\r\n        if (!parsedAccessToken ||\r\n            !CacheHelpers.isAccessTokenEntity(parsedAccessToken)) {\r\n            this.logger.trace(\"BrowserCacheManager.getAccessTokenCredential: called, no cache hit\");\r\n            return null;\r\n        }\r\n        this.logger.trace(\"BrowserCacheManager.getAccessTokenCredential: cache hit\");\r\n        return parsedAccessToken;\r\n    }\r\n    /**\r\n     * set accessToken credential to the platform cache\r\n     * @param accessToken\r\n     */\r\n    async setAccessTokenCredential(accessToken, correlationId, kmsi) {\r\n        this.logger.trace(\"BrowserCacheManager.setAccessTokenCredential called\");\r\n        const accessTokenKey = this.generateCredentialKey(accessToken);\r\n        const timestamp = Date.now().toString();\r\n        accessToken.lastUpdatedAt = timestamp;\r\n        await this.setUserData(accessTokenKey, JSON.stringify(accessToken), correlationId, timestamp, kmsi);\r\n        const tokenKeys = this.getTokenKeys();\r\n        const index = tokenKeys.accessToken.indexOf(accessTokenKey);\r\n        if (index !== -1) {\r\n            tokenKeys.accessToken.splice(index, 1); // Remove existing key before pushing to the end\r\n        }\r\n        this.logger.trace(`access token ${index === -1 ? \"added to\" : \"updated in\"} map`);\r\n        tokenKeys.accessToken.push(accessTokenKey);\r\n        this.setTokenKeys(tokenKeys, correlationId);\r\n    }\r\n    /**\r\n     * generates refreshToken entity from a string\r\n     * @param refreshTokenKey\r\n     */\r\n    getRefreshTokenCredential(refreshTokenKey, correlationId) {\r\n        const value = this.browserStorage.getUserData(refreshTokenKey);\r\n        if (!value) {\r\n            this.logger.trace(\"BrowserCacheManager.getRefreshTokenCredential: called, no cache hit\");\r\n            this.removeRefreshToken(refreshTokenKey, correlationId);\r\n            return null;\r\n        }\r\n        const parsedRefreshToken = this.validateAndParseJson(value);\r\n        if (!parsedRefreshToken ||\r\n            !CacheHelpers.isRefreshTokenEntity(parsedRefreshToken)) {\r\n            this.logger.trace(\"BrowserCacheManager.getRefreshTokenCredential: called, no cache hit\");\r\n            return null;\r\n        }\r\n        this.logger.trace(\"BrowserCacheManager.getRefreshTokenCredential: cache hit\");\r\n        return parsedRefreshToken;\r\n    }\r\n    /**\r\n     * set refreshToken credential to the platform cache\r\n     * @param refreshToken\r\n     */\r\n    async setRefreshTokenCredential(refreshToken, correlationId, kmsi) {\r\n        this.logger.trace(\"BrowserCacheManager.setRefreshTokenCredential called\");\r\n        const refreshTokenKey = this.generateCredentialKey(refreshToken);\r\n        const timestamp = Date.now().toString();\r\n        refreshToken.lastUpdatedAt = timestamp;\r\n        await this.setUserData(refreshTokenKey, JSON.stringify(refreshToken), correlationId, timestamp, kmsi);\r\n        const tokenKeys = this.getTokenKeys();\r\n        if (tokenKeys.refreshToken.indexOf(refreshTokenKey) === -1) {\r\n            this.logger.info(\"BrowserCacheManager: addTokenKey - refreshToken added to map\");\r\n            tokenKeys.refreshToken.push(refreshTokenKey);\r\n            this.setTokenKeys(tokenKeys, correlationId);\r\n        }\r\n    }\r\n    /**\r\n     * fetch appMetadata entity from the platform cache\r\n     * @param appMetadataKey\r\n     */\r\n    getAppMetadata(appMetadataKey) {\r\n        const value = this.browserStorage.getItem(appMetadataKey);\r\n        if (!value) {\r\n            this.logger.trace(\"BrowserCacheManager.getAppMetadata: called, no cache hit\");\r\n            return null;\r\n        }\r\n        const parsedMetadata = this.validateAndParseJson(value);\r\n        if (!parsedMetadata ||\r\n            !CacheHelpers.isAppMetadataEntity(appMetadataKey, parsedMetadata)) {\r\n            this.logger.trace(\"BrowserCacheManager.getAppMetadata: called, no cache hit\");\r\n            return null;\r\n        }\r\n        this.logger.trace(\"BrowserCacheManager.getAppMetadata: cache hit\");\r\n        return parsedMetadata;\r\n    }\r\n    /**\r\n     * set appMetadata entity to the platform cache\r\n     * @param appMetadata\r\n     */\r\n    setAppMetadata(appMetadata, correlationId) {\r\n        this.logger.trace(\"BrowserCacheManager.setAppMetadata called\");\r\n        const appMetadataKey = CacheHelpers.generateAppMetadataKey(appMetadata);\r\n        this.setItem(appMetadataKey, JSON.stringify(appMetadata), correlationId);\r\n    }\r\n    /**\r\n     * fetch server telemetry entity from the platform cache\r\n     * @param serverTelemetryKey\r\n     */\r\n    getServerTelemetry(serverTelemetryKey) {\r\n        const value = this.browserStorage.getItem(serverTelemetryKey);\r\n        if (!value) {\r\n            this.logger.trace(\"BrowserCacheManager.getServerTelemetry: called, no cache hit\");\r\n            return null;\r\n        }\r\n        const parsedEntity = this.validateAndParseJson(value);\r\n        if (!parsedEntity ||\r\n            !CacheHelpers.isServerTelemetryEntity(serverTelemetryKey, parsedEntity)) {\r\n            this.logger.trace(\"BrowserCacheManager.getServerTelemetry: called, no cache hit\");\r\n            return null;\r\n        }\r\n        this.logger.trace(\"BrowserCacheManager.getServerTelemetry: cache hit\");\r\n        return parsedEntity;\r\n    }\r\n    /**\r\n     * set server telemetry entity to the platform cache\r\n     * @param serverTelemetryKey\r\n     * @param serverTelemetry\r\n     */\r\n    setServerTelemetry(serverTelemetryKey, serverTelemetry, correlationId) {\r\n        this.logger.trace(\"BrowserCacheManager.setServerTelemetry called\");\r\n        this.setItem(serverTelemetryKey, JSON.stringify(serverTelemetry), correlationId);\r\n    }\r\n    /**\r\n     *\r\n     */\r\n    getAuthorityMetadata(key) {\r\n        const value = this.internalStorage.getItem(key);\r\n        if (!value) {\r\n            this.logger.trace(\"BrowserCacheManager.getAuthorityMetadata: called, no cache hit\");\r\n            return null;\r\n        }\r\n        const parsedMetadata = this.validateAndParseJson(value);\r\n        if (parsedMetadata &&\r\n            CacheHelpers.isAuthorityMetadataEntity(key, parsedMetadata)) {\r\n            this.logger.trace(\"BrowserCacheManager.getAuthorityMetadata: cache hit\");\r\n            return parsedMetadata;\r\n        }\r\n        return null;\r\n    }\r\n    /**\r\n     *\r\n     */\r\n    getAuthorityMetadataKeys() {\r\n        const allKeys = this.internalStorage.getKeys();\r\n        return allKeys.filter((key) => {\r\n            return this.isAuthorityMetadata(key);\r\n        });\r\n    }\r\n    /**\r\n     * Sets wrapper metadata in memory\r\n     * @param wrapperSKU\r\n     * @param wrapperVersion\r\n     */\r\n    setWrapperMetadata(wrapperSKU, wrapperVersion) {\r\n        this.internalStorage.setItem(InMemoryCacheKeys.WRAPPER_SKU, wrapperSKU);\r\n        this.internalStorage.setItem(InMemoryCacheKeys.WRAPPER_VER, wrapperVersion);\r\n    }\r\n    /**\r\n     * Returns wrapper metadata from in-memory storage\r\n     */\r\n    getWrapperMetadata() {\r\n        const sku = this.internalStorage.getItem(InMemoryCacheKeys.WRAPPER_SKU) ||\r\n            Constants.EMPTY_STRING;\r\n        const version = this.internalStorage.getItem(InMemoryCacheKeys.WRAPPER_VER) ||\r\n            Constants.EMPTY_STRING;\r\n        return [sku, version];\r\n    }\r\n    /**\r\n     *\r\n     * @param entity\r\n     */\r\n    setAuthorityMetadata(key, entity) {\r\n        this.logger.trace(\"BrowserCacheManager.setAuthorityMetadata called\");\r\n        this.internalStorage.setItem(key, JSON.stringify(entity));\r\n    }\r\n    /**\r\n     * Gets the active account\r\n     */\r\n    getActiveAccount(correlationId) {\r\n        const activeAccountKeyFilters = this.generateCacheKey(PersistentCacheKeys.ACTIVE_ACCOUNT_FILTERS);\r\n        const activeAccountValueFilters = this.browserStorage.getItem(activeAccountKeyFilters);\r\n        if (!activeAccountValueFilters) {\r\n            this.logger.trace(\"BrowserCacheManager.getActiveAccount: No active account filters found\");\r\n            return null;\r\n        }\r\n        const activeAccountValueObj = this.validateAndParseJson(activeAccountValueFilters);\r\n        if (activeAccountValueObj) {\r\n            this.logger.trace(\"BrowserCacheManager.getActiveAccount: Active account filters schema found\");\r\n            return this.getAccountInfoFilteredBy({\r\n                homeAccountId: activeAccountValueObj.homeAccountId,\r\n                localAccountId: activeAccountValueObj.localAccountId,\r\n                tenantId: activeAccountValueObj.tenantId,\r\n            }, correlationId);\r\n        }\r\n        this.logger.trace(\"BrowserCacheManager.getActiveAccount: No active account found\");\r\n        return null;\r\n    }\r\n    /**\r\n     * Sets the active account's localAccountId in cache\r\n     * @param account\r\n     */\r\n    setActiveAccount(account, correlationId) {\r\n        const activeAccountKey = this.generateCacheKey(PersistentCacheKeys.ACTIVE_ACCOUNT_FILTERS);\r\n        if (account) {\r\n            this.logger.verbose(\"setActiveAccount: Active account set\");\r\n            const activeAccountValue = {\r\n                homeAccountId: account.homeAccountId,\r\n                localAccountId: account.localAccountId,\r\n                tenantId: account.tenantId,\r\n                lastUpdatedAt: TimeUtils.nowSeconds().toString(),\r\n            };\r\n            this.setItem(activeAccountKey, JSON.stringify(activeAccountValue), correlationId);\r\n        }\r\n        else {\r\n            this.logger.verbose(\"setActiveAccount: No account passed, active account not set\");\r\n            this.browserStorage.removeItem(activeAccountKey);\r\n        }\r\n        this.eventHandler.emitEvent(EventType.ACTIVE_ACCOUNT_CHANGED);\r\n    }\r\n    /**\r\n     * fetch throttling entity from the platform cache\r\n     * @param throttlingCacheKey\r\n     */\r\n    getThrottlingCache(throttlingCacheKey) {\r\n        const value = this.browserStorage.getItem(throttlingCacheKey);\r\n        if (!value) {\r\n            this.logger.trace(\"BrowserCacheManager.getThrottlingCache: called, no cache hit\");\r\n            return null;\r\n        }\r\n        const parsedThrottlingCache = this.validateAndParseJson(value);\r\n        if (!parsedThrottlingCache ||\r\n            !CacheHelpers.isThrottlingEntity(throttlingCacheKey, parsedThrottlingCache)) {\r\n            this.logger.trace(\"BrowserCacheManager.getThrottlingCache: called, no cache hit\");\r\n            return null;\r\n        }\r\n        this.logger.trace(\"BrowserCacheManager.getThrottlingCache: cache hit\");\r\n        return parsedThrottlingCache;\r\n    }\r\n    /**\r\n     * set throttling entity to the platform cache\r\n     * @param throttlingCacheKey\r\n     * @param throttlingCache\r\n     */\r\n    setThrottlingCache(throttlingCacheKey, throttlingCache, correlationId) {\r\n        this.logger.trace(\"BrowserCacheManager.setThrottlingCache called\");\r\n        this.setItem(throttlingCacheKey, JSON.stringify(throttlingCache), correlationId);\r\n    }\r\n    /**\r\n     * Gets cache item with given key.\r\n     * Will retrieve from cookies if storeAuthStateInCookie is set to true.\r\n     * @param key\r\n     */\r\n    getTemporaryCache(cacheKey, generateKey) {\r\n        const key = generateKey ? this.generateCacheKey(cacheKey) : cacheKey;\r\n        if (this.cacheConfig.storeAuthStateInCookie) {\r\n            const itemCookie = this.cookieStorage.getItem(key);\r\n            if (itemCookie) {\r\n                this.logger.trace(\"BrowserCacheManager.getTemporaryCache: storeAuthStateInCookies set to true, retrieving from cookies\");\r\n                return itemCookie;\r\n            }\r\n        }\r\n        const value = this.temporaryCacheStorage.getItem(key);\r\n        if (!value) {\r\n            // If temp cache item not found in session/memory, check local storage for items set by old versions\r\n            if (this.cacheConfig.cacheLocation ===\r\n                BrowserCacheLocation.LocalStorage) {\r\n                const item = this.browserStorage.getItem(key);\r\n                if (item) {\r\n                    this.logger.trace(\"BrowserCacheManager.getTemporaryCache: Temporary cache item found in local storage\");\r\n                    return item;\r\n                }\r\n            }\r\n            this.logger.trace(\"BrowserCacheManager.getTemporaryCache: No cache item found in local storage\");\r\n            return null;\r\n        }\r\n        this.logger.trace(\"BrowserCacheManager.getTemporaryCache: Temporary cache item returned\");\r\n        return value;\r\n    }\r\n    /**\r\n     * Sets the cache item with the key and value given.\r\n     * Stores in cookie if storeAuthStateInCookie is set to true.\r\n     * This can cause cookie overflow if used incorrectly.\r\n     * @param key\r\n     * @param value\r\n     */\r\n    setTemporaryCache(cacheKey, value, generateKey) {\r\n        const key = generateKey ? this.generateCacheKey(cacheKey) : cacheKey;\r\n        this.temporaryCacheStorage.setItem(key, value);\r\n        if (this.cacheConfig.storeAuthStateInCookie) {\r\n            this.logger.trace(\"BrowserCacheManager.setTemporaryCache: storeAuthStateInCookie set to true, setting item cookie\");\r\n            this.cookieStorage.setItem(key, value, undefined, this.cacheConfig.secureCookies);\r\n        }\r\n    }\r\n    /**\r\n     * Removes the cache item with the given key.\r\n     * @param key\r\n     */\r\n    removeItem(key) {\r\n        this.browserStorage.removeItem(key);\r\n    }\r\n    /**\r\n     * Removes the temporary cache item with the given key.\r\n     * Will also clear the cookie item if storeAuthStateInCookie is set to true.\r\n     * @param key\r\n     */\r\n    removeTemporaryItem(key) {\r\n        this.temporaryCacheStorage.removeItem(key);\r\n        if (this.cacheConfig.storeAuthStateInCookie) {\r\n            this.logger.trace(\"BrowserCacheManager.removeItem: storeAuthStateInCookie is true, clearing item cookie\");\r\n            this.cookieStorage.removeItem(key);\r\n        }\r\n    }\r\n    /**\r\n     * Gets all keys in window.\r\n     */\r\n    getKeys() {\r\n        return this.browserStorage.getKeys();\r\n    }\r\n    /**\r\n     * Clears all cache entries created by MSAL.\r\n     */\r\n    clear(correlationId) {\r\n        // Removes all accounts and their credentials\r\n        this.removeAllAccounts(correlationId);\r\n        this.removeAppMetadata(correlationId);\r\n        // Remove temp storage first to make sure any cookies are cleared\r\n        this.temporaryCacheStorage.getKeys().forEach((cacheKey) => {\r\n            if (cacheKey.indexOf(PREFIX) !== -1 ||\r\n                cacheKey.indexOf(this.clientId) !== -1) {\r\n                this.removeTemporaryItem(cacheKey);\r\n            }\r\n        });\r\n        // Removes all remaining MSAL cache items\r\n        this.browserStorage.getKeys().forEach((cacheKey) => {\r\n            if (cacheKey.indexOf(PREFIX) !== -1 ||\r\n                cacheKey.indexOf(this.clientId) !== -1) {\r\n                this.browserStorage.removeItem(cacheKey);\r\n            }\r\n        });\r\n        this.internalStorage.clear();\r\n    }\r\n    /**\r\n     * Clears all access tokes that have claims prior to saving the current one\r\n     * @param performanceClient {IPerformanceClient}\r\n     * @param correlationId {string} correlation id\r\n     * @returns\r\n     */\r\n    clearTokensAndKeysWithClaims(correlationId) {\r\n        this.performanceClient.addQueueMeasurement(PerformanceEvents.ClearTokensAndKeysWithClaims, correlationId);\r\n        const tokenKeys = this.getTokenKeys();\r\n        let removedAccessTokens = 0;\r\n        tokenKeys.accessToken.forEach((key) => {\r\n            // if the access token has claims in its key, remove the token key and the token\r\n            const credential = this.getAccessTokenCredential(key, correlationId);\r\n            if (credential?.requestedClaimsHash &&\r\n                key.includes(credential.requestedClaimsHash.toLowerCase())) {\r\n                this.removeAccessToken(key, correlationId);\r\n                removedAccessTokens++;\r\n            }\r\n        });\r\n        // warn if any access tokens are removed\r\n        if (removedAccessTokens > 0) {\r\n            this.logger.warning(`${removedAccessTokens} access tokens with claims in the cache keys have been removed from the cache.`);\r\n        }\r\n    }\r\n    /**\r\n     * Prepend msal.<client-id> to each key\r\n     * @param key\r\n     * @param addInstanceId\r\n     */\r\n    generateCacheKey(key) {\r\n        if (StringUtils.startsWith(key, PREFIX)) {\r\n            return key;\r\n        }\r\n        return `${PREFIX}.${this.clientId}.${key}`;\r\n    }\r\n    /**\r\n     * Cache Key: msal.<schema_version>-<home_account_id>-<environment>-<credential_type>-<client_id or familyId>-<realm>-<scopes>-<claims hash>-<scheme>\r\n     * IdToken Example: uid.utid-login.microsoftonline.com-idtoken-app_client_id-contoso.com\r\n     * AccessToken Example: uid.utid-login.microsoftonline.com-accesstoken-app_client_id-contoso.com-scope1 scope2--pop\r\n     * RefreshToken Example: uid.utid-login.microsoftonline.com-refreshtoken-1-contoso.com\r\n     * @param credentialEntity\r\n     * @returns\r\n     */\r\n    generateCredentialKey(credential) {\r\n        const familyId = (credential.credentialType === CredentialType.REFRESH_TOKEN &&\r\n            credential.familyId) ||\r\n            credential.clientId;\r\n        const scheme = credential.tokenType &&\r\n            credential.tokenType.toLowerCase() !==\r\n                AuthenticationScheme.BEARER.toLowerCase()\r\n            ? credential.tokenType.toLowerCase()\r\n            : \"\";\r\n        const credentialKey = [\r\n            `${PREFIX}.${CREDENTIAL_SCHEMA_VERSION}`,\r\n            credential.homeAccountId,\r\n            credential.environment,\r\n            credential.credentialType,\r\n            familyId,\r\n            credential.realm || \"\",\r\n            credential.target || \"\",\r\n            credential.requestedClaimsHash || \"\",\r\n            scheme,\r\n        ];\r\n        return credentialKey.join(CACHE_KEY_SEPARATOR).toLowerCase();\r\n    }\r\n    /**\r\n     * Cache Key: msal.<schema_version>.<home_account_id>.<environment>.<tenant_id>\r\n     * @param account\r\n     * @returns\r\n     */\r\n    generateAccountKey(account) {\r\n        const homeTenantId = account.homeAccountId.split(\".\")[1];\r\n        const accountKey = [\r\n            `${PREFIX}.${ACCOUNT_SCHEMA_VERSION}`,\r\n            account.homeAccountId,\r\n            account.environment,\r\n            homeTenantId || account.tenantId || \"\",\r\n        ];\r\n        return accountKey.join(CACHE_KEY_SEPARATOR).toLowerCase();\r\n    }\r\n    /**\r\n     * Reset all temporary cache items\r\n     * @param state\r\n     */\r\n    resetRequestCache() {\r\n        this.logger.trace(\"BrowserCacheManager.resetRequestCache called\");\r\n        this.removeTemporaryItem(this.generateCacheKey(TemporaryCacheKeys.REQUEST_PARAMS));\r\n        this.removeTemporaryItem(this.generateCacheKey(TemporaryCacheKeys.VERIFIER));\r\n        this.removeTemporaryItem(this.generateCacheKey(TemporaryCacheKeys.ORIGIN_URI));\r\n        this.removeTemporaryItem(this.generateCacheKey(TemporaryCacheKeys.URL_HASH));\r\n        this.removeTemporaryItem(this.generateCacheKey(TemporaryCacheKeys.NATIVE_REQUEST));\r\n        this.setInteractionInProgress(false);\r\n    }\r\n    cacheAuthorizeRequest(authCodeRequest, codeVerifier) {\r\n        this.logger.trace(\"BrowserCacheManager.cacheAuthorizeRequest called\");\r\n        const encodedValue = base64Encode(JSON.stringify(authCodeRequest));\r\n        this.setTemporaryCache(TemporaryCacheKeys.REQUEST_PARAMS, encodedValue, true);\r\n        if (codeVerifier) {\r\n            const encodedVerifier = base64Encode(codeVerifier);\r\n            this.setTemporaryCache(TemporaryCacheKeys.VERIFIER, encodedVerifier, true);\r\n        }\r\n    }\r\n    /**\r\n     * Gets the token exchange parameters from the cache. Throws an error if nothing is found.\r\n     */\r\n    getCachedRequest() {\r\n        this.logger.trace(\"BrowserCacheManager.getCachedRequest called\");\r\n        // Get token request from cache and parse as TokenExchangeParameters.\r\n        const encodedTokenRequest = this.getTemporaryCache(TemporaryCacheKeys.REQUEST_PARAMS, true);\r\n        if (!encodedTokenRequest) {\r\n            throw createBrowserAuthError(noTokenRequestCacheError);\r\n        }\r\n        const encodedVerifier = this.getTemporaryCache(TemporaryCacheKeys.VERIFIER, true);\r\n        let parsedRequest;\r\n        let verifier = \"\";\r\n        try {\r\n            parsedRequest = JSON.parse(base64Decode(encodedTokenRequest));\r\n            if (encodedVerifier) {\r\n                verifier = base64Decode(encodedVerifier);\r\n            }\r\n        }\r\n        catch (e) {\r\n            this.logger.errorPii(`Attempted to parse: ${encodedTokenRequest}`);\r\n            this.logger.error(`Parsing cached token request threw with error: ${e}`);\r\n            throw createBrowserAuthError(unableToParseTokenRequestCacheError);\r\n        }\r\n        return [parsedRequest, verifier];\r\n    }\r\n    /**\r\n     * Gets cached native request for redirect flows\r\n     */\r\n    getCachedNativeRequest() {\r\n        this.logger.trace(\"BrowserCacheManager.getCachedNativeRequest called\");\r\n        const cachedRequest = this.getTemporaryCache(TemporaryCacheKeys.NATIVE_REQUEST, true);\r\n        if (!cachedRequest) {\r\n            this.logger.trace(\"BrowserCacheManager.getCachedNativeRequest: No cached native request found\");\r\n            return null;\r\n        }\r\n        const parsedRequest = this.validateAndParseJson(cachedRequest);\r\n        if (!parsedRequest) {\r\n            this.logger.error(\"BrowserCacheManager.getCachedNativeRequest: Unable to parse native request\");\r\n            return null;\r\n        }\r\n        return parsedRequest;\r\n    }\r\n    isInteractionInProgress(matchClientId) {\r\n        const clientId = this.getInteractionInProgress()?.clientId;\r\n        if (matchClientId) {\r\n            return clientId === this.clientId;\r\n        }\r\n        else {\r\n            return !!clientId;\r\n        }\r\n    }\r\n    getInteractionInProgress() {\r\n        const key = `${PREFIX}.${TemporaryCacheKeys.INTERACTION_STATUS_KEY}`;\r\n        const value = this.getTemporaryCache(key, false);\r\n        try {\r\n            return value ? JSON.parse(value) : null;\r\n        }\r\n        catch (e) {\r\n            // Remove interaction and other temp keys if interaction status can't be parsed\r\n            this.logger.error(`Cannot parse interaction status. Removing temporary cache items and clearing url hash. Retrying interaction should fix the error`);\r\n            this.removeTemporaryItem(key);\r\n            this.resetRequestCache();\r\n            clearHash(window);\r\n            return null;\r\n        }\r\n    }\r\n    setInteractionInProgress(inProgress, type = INTERACTION_TYPE.SIGNIN) {\r\n        // Ensure we don't overwrite interaction in progress for a different clientId\r\n        const key = `${PREFIX}.${TemporaryCacheKeys.INTERACTION_STATUS_KEY}`;\r\n        if (inProgress) {\r\n            if (this.getInteractionInProgress()) {\r\n                throw createBrowserAuthError(interactionInProgress);\r\n            }\r\n            else {\r\n                // No interaction is in progress\r\n                this.setTemporaryCache(key, JSON.stringify({ clientId: this.clientId, type }), false);\r\n            }\r\n        }\r\n        else if (!inProgress &&\r\n            this.getInteractionInProgress()?.clientId === this.clientId) {\r\n            this.removeTemporaryItem(key);\r\n        }\r\n    }\r\n    /**\r\n     * Builds credential entities from AuthenticationResult object and saves the resulting credentials to the cache\r\n     * @param result\r\n     * @param request\r\n     */\r\n    async hydrateCache(result, request) {\r\n        const idTokenEntity = CacheHelpers.createIdTokenEntity(result.account.homeAccountId, result.account.environment, result.idToken, this.clientId, result.tenantId);\r\n        let claimsHash;\r\n        if (request.claims) {\r\n            claimsHash = await this.cryptoImpl.hashString(request.claims);\r\n        }\r\n        /**\r\n         * meta data for cache stores time in seconds from epoch\r\n         * AuthenticationResult returns expiresOn and extExpiresOn in milliseconds (as a Date object which is in ms)\r\n         * We need to map these for the cache when building tokens from AuthenticationResult\r\n         *\r\n         * The next MSAL VFuture should map these both to same value if possible\r\n         */\r\n        const accessTokenEntity = CacheHelpers.createAccessTokenEntity(result.account.homeAccountId, result.account.environment, result.accessToken, this.clientId, result.tenantId, result.scopes.join(\" \"), \r\n        // Access token expiresOn stored in seconds, converting from AuthenticationResult expiresOn stored as Date\r\n        result.expiresOn\r\n            ? TimeUtils.toSecondsFromDate(result.expiresOn)\r\n            : 0, result.extExpiresOn\r\n            ? TimeUtils.toSecondsFromDate(result.extExpiresOn)\r\n            : 0, base64Decode, undefined, // refreshOn\r\n        result.tokenType, undefined, // userAssertionHash\r\n        request.sshKid, request.claims, claimsHash);\r\n        const cacheRecord = {\r\n            idToken: idTokenEntity,\r\n            accessToken: accessTokenEntity,\r\n        };\r\n        return this.saveCacheRecord(cacheRecord, result.correlationId, AuthToken.isKmsi(AuthToken.extractTokenClaims(result.idToken, base64Decode)), ApiId.hydrateCache);\r\n    }\r\n    /**\r\n     * saves a cache record\r\n     * @param cacheRecord {CacheRecord}\r\n     * @param storeInCache {?StoreInCache}\r\n     * @param correlationId {?string} correlation id\r\n     */\r\n    async saveCacheRecord(cacheRecord, correlationId, kmsi, apiId, storeInCache) {\r\n        try {\r\n            await super.saveCacheRecord(cacheRecord, correlationId, kmsi, apiId, storeInCache);\r\n        }\r\n        catch (e) {\r\n            if (e instanceof CacheError &&\r\n                this.performanceClient &&\r\n                correlationId) {\r\n                try {\r\n                    const tokenKeys = this.getTokenKeys();\r\n                    this.performanceClient.addFields({\r\n                        cacheRtCount: tokenKeys.refreshToken.length,\r\n                        cacheIdCount: tokenKeys.idToken.length,\r\n                        cacheAtCount: tokenKeys.accessToken.length,\r\n                    }, correlationId);\r\n                }\r\n                catch (e) { }\r\n            }\r\n            throw e;\r\n        }\r\n    }\r\n}\r\n/**\r\n * Returns a window storage class implementing the IWindowStorage interface that corresponds to the configured cacheLocation.\r\n * @param cacheLocation\r\n */\r\nfunction getStorageImplementation(clientId, cacheLocation, logger, performanceClient) {\r\n    try {\r\n        switch (cacheLocation) {\r\n            case BrowserCacheLocation.LocalStorage:\r\n                return new LocalStorage(clientId, logger, performanceClient);\r\n            case BrowserCacheLocation.SessionStorage:\r\n                return new SessionStorage();\r\n            case BrowserCacheLocation.MemoryStorage:\r\n            default:\r\n                break;\r\n        }\r\n    }\r\n    catch (e) {\r\n        logger.error(e);\r\n    }\r\n    return new MemoryStorage();\r\n}\r\nconst DEFAULT_BROWSER_CACHE_MANAGER = (clientId, logger, performanceClient, eventHandler) => {\r\n    const cacheOptions = {\r\n        cacheLocation: BrowserCacheLocation.MemoryStorage,\r\n        cacheRetentionDays: 5,\r\n        temporaryCacheLocation: BrowserCacheLocation.MemoryStorage,\r\n        storeAuthStateInCookie: false,\r\n        secureCookies: false,\r\n        cacheMigrationEnabled: false,\r\n        claimsBasedCachingEnabled: false,\r\n    };\r\n    return new BrowserCacheManager(clientId, cacheOptions, DEFAULT_CRYPTO_IMPLEMENTATION, logger, performanceClient, eventHandler);\r\n};\n\nexport { BrowserCacheManager, DEFAULT_BROWSER_CACHE_MANAGER };\n//# sourceMappingURL=BrowserCacheManager.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Returns all the accounts in the cache that match the optional filter. If no filter is provided, all accounts are returned.\r\n * @param accountFilter - (Optional) filter to narrow down the accounts returned\r\n * @returns Array of AccountInfo objects in cache\r\n */\r\nfunction getAllAccounts(logger, browserStorage, isInBrowser, correlationId, accountFilter) {\r\n    logger.verbose(\"getAllAccounts called\");\r\n    return isInBrowser\r\n        ? browserStorage.getAllAccounts(accountFilter || {}, correlationId)\r\n        : [];\r\n}\r\n/**\r\n * Returns the first account found in the cache that matches the account filter passed in.\r\n * @param accountFilter\r\n * @returns The first account found in the cache matching the provided filter or null if no account could be found.\r\n */\r\nfunction getAccount(accountFilter, logger, browserStorage, correlationId) {\r\n    const account = browserStorage.getAccountInfoFilteredBy(accountFilter, correlationId);\r\n    if (account) {\r\n        logger.verbose(\"getAccount: Account matching provided filter found, returning\");\r\n        return account;\r\n    }\r\n    else {\r\n        logger.verbose(\"getAccount: No matching account found, returning null\");\r\n        return null;\r\n    }\r\n}\r\n/**\r\n * Returns the signed in account matching username.\r\n * (the account object is created at the time of successful login)\r\n * or null when no matching account is found.\r\n * This API is provided for convenience but getAccountById should be used for best reliability\r\n * @param username\r\n * @returns The account object stored in MSAL\r\n */\r\nfunction getAccountByUsername(username, logger, browserStorage, correlationId) {\r\n    logger.trace(\"getAccountByUsername called\");\r\n    if (!username) {\r\n        logger.warning(\"getAccountByUsername: No username provided\");\r\n        return null;\r\n    }\r\n    const account = browserStorage.getAccountInfoFilteredBy({\r\n        username,\r\n    }, correlationId);\r\n    if (account) {\r\n        logger.verbose(\"getAccountByUsername: Account matching username found, returning\");\r\n        logger.verbosePii(`getAccountByUsername: Returning signed-in accounts matching username: ${username}`);\r\n        return account;\r\n    }\r\n    else {\r\n        logger.verbose(\"getAccountByUsername: No matching account found, returning null\");\r\n        return null;\r\n    }\r\n}\r\n/**\r\n * Returns the signed in account matching homeAccountId.\r\n * (the account object is created at the time of successful login)\r\n * or null when no matching account is found\r\n * @param homeAccountId\r\n * @returns The account object stored in MSAL\r\n */\r\nfunction getAccountByHomeId(homeAccountId, logger, browserStorage, correlationId) {\r\n    logger.trace(\"getAccountByHomeId called\");\r\n    if (!homeAccountId) {\r\n        logger.warning(\"getAccountByHomeId: No homeAccountId provided\");\r\n        return null;\r\n    }\r\n    const account = browserStorage.getAccountInfoFilteredBy({\r\n        homeAccountId,\r\n    }, correlationId);\r\n    if (account) {\r\n        logger.verbose(\"getAccountByHomeId: Account matching homeAccountId found, returning\");\r\n        logger.verbosePii(`getAccountByHomeId: Returning signed-in accounts matching homeAccountId: ${homeAccountId}`);\r\n        return account;\r\n    }\r\n    else {\r\n        logger.verbose(\"getAccountByHomeId: No matching account found, returning null\");\r\n        return null;\r\n    }\r\n}\r\n/**\r\n * Returns the signed in account matching localAccountId.\r\n * (the account object is created at the time of successful login)\r\n * or null when no matching account is found\r\n * @param localAccountId\r\n * @returns The account object stored in MSAL\r\n */\r\nfunction getAccountByLocalId(localAccountId, logger, browserStorage, correlationId) {\r\n    logger.trace(\"getAccountByLocalId called\");\r\n    if (!localAccountId) {\r\n        logger.warning(\"getAccountByLocalId: No localAccountId provided\");\r\n        return null;\r\n    }\r\n    const account = browserStorage.getAccountInfoFilteredBy({\r\n        localAccountId,\r\n    }, correlationId);\r\n    if (account) {\r\n        logger.verbose(\"getAccountByLocalId: Account matching localAccountId found, returning\");\r\n        logger.verbosePii(`getAccountByLocalId: Returning signed-in accounts matching localAccountId: ${localAccountId}`);\r\n        return account;\r\n    }\r\n    else {\r\n        logger.verbose(\"getAccountByLocalId: No matching account found, returning null\");\r\n        return null;\r\n    }\r\n}\r\n/**\r\n * Sets the account to use as the active account. If no account is passed to the acquireToken APIs, then MSAL will use this active account.\r\n * @param account\r\n */\r\nfunction setActiveAccount(account, browserStorage, correlationId) {\r\n    browserStorage.setActiveAccount(account, correlationId);\r\n}\r\n/**\r\n * Gets the currently active account\r\n */\r\nfunction getActiveAccount(browserStorage, correlationId) {\r\n    return browserStorage.getActiveAccount(correlationId);\r\n}\n\nexport { getAccount, getAccountByHomeId, getAccountByLocalId, getAccountByUsername, getActiveAccount, getAllAccounts, setActiveAccount };\n//# sourceMappingURL=AccountManager.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { Logger } from '@azure/msal-common/browser';\nimport { EventType } from './EventType.mjs';\nimport { createGuid } from '../utils/BrowserUtils.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst BROADCAST_CHANNEL_NAME = \"msal.broadcast.event\";\r\nclass EventHandler {\r\n    constructor(logger) {\r\n        this.eventCallbacks = new Map();\r\n        this.logger = logger || new Logger({});\r\n        if (typeof BroadcastChannel !== \"undefined\") {\r\n            this.broadcastChannel = new BroadcastChannel(BROADCAST_CHANNEL_NAME);\r\n        }\r\n        this.invokeCrossTabCallbacks = this.invokeCrossTabCallbacks.bind(this);\r\n    }\r\n    /**\r\n     * Adds event callbacks to array\r\n     * @param callback - callback to be invoked when an event is raised\r\n     * @param eventTypes - list of events that this callback will be invoked for, if not provided callback will be invoked for all events\r\n     * @param callbackId - Identifier for the callback, used to locate and remove the callback when no longer required\r\n     */\r\n    addEventCallback(callback, eventTypes, callbackId) {\r\n        if (typeof window !== \"undefined\") {\r\n            const id = callbackId || createGuid();\r\n            if (this.eventCallbacks.has(id)) {\r\n                this.logger.error(`Event callback with id: ${id} is already registered. Please provide a unique id or remove the existing callback and try again.`);\r\n                return null;\r\n            }\r\n            this.eventCallbacks.set(id, [callback, eventTypes || []]);\r\n            this.logger.verbose(`Event callback registered with id: ${id}`);\r\n            return id;\r\n        }\r\n        return null;\r\n    }\r\n    /**\r\n     * Removes callback with provided id from callback array\r\n     * @param callbackId\r\n     */\r\n    removeEventCallback(callbackId) {\r\n        this.eventCallbacks.delete(callbackId);\r\n        this.logger.verbose(`Event callback ${callbackId} removed.`);\r\n    }\r\n    /**\r\n     * Emits events by calling callback with event message\r\n     * @param eventType\r\n     * @param interactionType\r\n     * @param payload\r\n     * @param error\r\n     */\r\n    emitEvent(eventType, interactionType, payload, error) {\r\n        const message = {\r\n            eventType: eventType,\r\n            interactionType: interactionType || null,\r\n            payload: payload || null,\r\n            error: error || null,\r\n            timestamp: Date.now(),\r\n        };\r\n        switch (eventType) {\r\n            case EventType.ACCOUNT_ADDED:\r\n            case EventType.ACCOUNT_REMOVED:\r\n            case EventType.ACTIVE_ACCOUNT_CHANGED:\r\n                // Send event to other open tabs / MSAL instances on same domain\r\n                this.broadcastChannel?.postMessage(message);\r\n                break;\r\n            default:\r\n                // Emit event to callbacks registered in this instance\r\n                this.invokeCallbacks(message);\r\n                break;\r\n        }\r\n    }\r\n    /**\r\n     * Invoke registered callbacks\r\n     * @param message\r\n     */\r\n    invokeCallbacks(message) {\r\n        this.eventCallbacks.forEach(([callback, eventTypes], callbackId) => {\r\n            if (eventTypes.length === 0 ||\r\n                eventTypes.includes(message.eventType)) {\r\n                this.logger.verbose(`Emitting event to callback ${callbackId}: ${message.eventType}`);\r\n                callback.apply(null, [message]);\r\n            }\r\n        });\r\n    }\r\n    /**\r\n     * Wrapper around invokeCallbacks to handle broadcast events received from other tabs/instances\r\n     * @param event\r\n     */\r\n    invokeCrossTabCallbacks(event) {\r\n        const message = event.data;\r\n        this.invokeCallbacks(message);\r\n    }\r\n    /**\r\n     * Listen for events broadcasted from other tabs/instances\r\n     */\r\n    subscribeCrossTab() {\r\n        this.broadcastChannel?.addEventListener(\"message\", this.invokeCrossTabCallbacks);\r\n    }\r\n    /**\r\n     * Unsubscribe from broadcast events\r\n     */\r\n    unsubscribeCrossTab() {\r\n        this.broadcastChannel?.removeEventListener(\"message\", this.invokeCrossTabCallbacks);\r\n    }\r\n}\n\nexport { EventHandler };\n//# sourceMappingURL=EventHandler.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { UrlString, ServerTelemetryManager, PerformanceEvents, Authority, invokeAsync, AuthorityFactory, createClientConfigurationError, ClientConfigurationErrorCodes } from '@azure/msal-common/browser';\nimport { version } from '../packageMetadata.mjs';\nimport { BrowserConstants } from '../utils/BrowserConstants.mjs';\nimport { getCurrentUri } from '../utils/BrowserUtils.mjs';\nimport { createNewGuid } from '../crypto/BrowserCrypto.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass BaseInteractionClient {\r\n    constructor(config, storageImpl, browserCrypto, logger, eventHandler, navigationClient, performanceClient, platformAuthProvider, correlationId) {\r\n        this.config = config;\r\n        this.browserStorage = storageImpl;\r\n        this.browserCrypto = browserCrypto;\r\n        this.networkClient = this.config.system.networkClient;\r\n        this.eventHandler = eventHandler;\r\n        this.navigationClient = navigationClient;\r\n        this.platformAuthProvider = platformAuthProvider;\r\n        this.correlationId = correlationId || createNewGuid();\r\n        this.logger = logger.clone(BrowserConstants.MSAL_SKU, version, this.correlationId);\r\n        this.performanceClient = performanceClient;\r\n    }\r\n    async clearCacheOnLogout(correlationId, account) {\r\n        if (account) {\r\n            // Clear given account.\r\n            try {\r\n                this.browserStorage.removeAccount(account, correlationId);\r\n                this.logger.verbose(\"Cleared cache items belonging to the account provided in the logout request.\");\r\n            }\r\n            catch (error) {\r\n                this.logger.error(\"Account provided in logout request was not found. Local cache unchanged.\");\r\n            }\r\n        }\r\n        else {\r\n            try {\r\n                this.logger.verbose(\"No account provided in logout request, clearing all cache items.\", this.correlationId);\r\n                // Clear all accounts and tokens\r\n                this.browserStorage.clear(correlationId);\r\n                // Clear any stray keys from IndexedDB\r\n                await this.browserCrypto.clearKeystore();\r\n            }\r\n            catch (e) {\r\n                this.logger.error(\"Attempted to clear all MSAL cache items and failed. Local cache unchanged.\");\r\n            }\r\n        }\r\n    }\r\n    /**\r\n     *\r\n     * Use to get the redirect uri configured in MSAL or null.\r\n     * @param requestRedirectUri\r\n     * @returns Redirect URL\r\n     *\r\n     */\r\n    getRedirectUri(requestRedirectUri) {\r\n        this.logger.verbose(\"getRedirectUri called\");\r\n        const redirectUri = requestRedirectUri || this.config.auth.redirectUri;\r\n        return UrlString.getAbsoluteUrl(redirectUri, getCurrentUri());\r\n    }\r\n    /**\r\n     *\r\n     * @param apiId\r\n     * @param correlationId\r\n     * @param forceRefresh\r\n     */\r\n    initializeServerTelemetryManager(apiId, forceRefresh) {\r\n        this.logger.verbose(\"initializeServerTelemetryManager called\");\r\n        const telemetryPayload = {\r\n            clientId: this.config.auth.clientId,\r\n            correlationId: this.correlationId,\r\n            apiId: apiId,\r\n            forceRefresh: forceRefresh || false,\r\n            wrapperSKU: this.browserStorage.getWrapperMetadata()[0],\r\n            wrapperVer: this.browserStorage.getWrapperMetadata()[1],\r\n        };\r\n        return new ServerTelemetryManager(telemetryPayload, this.browserStorage);\r\n    }\r\n    /**\r\n     * Used to get a discovered version of the default authority.\r\n     * @param params {\r\n     *         requestAuthority?: string;\r\n     *         requestAzureCloudOptions?: AzureCloudOptions;\r\n     *         requestExtraQueryParameters?: StringDict;\r\n     *         account?: AccountInfo;\r\n     *        }\r\n     */\r\n    async getDiscoveredAuthority(params) {\r\n        const { account } = params;\r\n        const instanceAwareEQ = params.requestExtraQueryParameters &&\r\n            params.requestExtraQueryParameters.hasOwnProperty(\"instance_aware\")\r\n            ? params.requestExtraQueryParameters[\"instance_aware\"]\r\n            : undefined;\r\n        this.performanceClient.addQueueMeasurement(PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority, this.correlationId);\r\n        const authorityOptions = {\r\n            protocolMode: this.config.auth.protocolMode,\r\n            OIDCOptions: this.config.auth.OIDCOptions,\r\n            knownAuthorities: this.config.auth.knownAuthorities,\r\n            cloudDiscoveryMetadata: this.config.auth.cloudDiscoveryMetadata,\r\n            authorityMetadata: this.config.auth.authorityMetadata,\r\n            skipAuthorityMetadataCache: this.config.auth.skipAuthorityMetadataCache,\r\n        };\r\n        // build authority string based on auth params, precedence - azureCloudInstance + tenant >> authority\r\n        const resolvedAuthority = params.requestAuthority || this.config.auth.authority;\r\n        const resolvedInstanceAware = instanceAwareEQ?.length\r\n            ? instanceAwareEQ === \"true\"\r\n            : this.config.auth.instanceAware;\r\n        const userAuthority = account && resolvedInstanceAware\r\n            ? this.config.auth.authority.replace(UrlString.getDomainFromUrl(resolvedAuthority), account.environment)\r\n            : resolvedAuthority;\r\n        // fall back to the authority from config\r\n        const builtAuthority = Authority.generateAuthority(userAuthority, params.requestAzureCloudOptions ||\r\n            this.config.auth.azureCloudOptions);\r\n        const discoveredAuthority = await invokeAsync(AuthorityFactory.createDiscoveredInstance, PerformanceEvents.AuthorityFactoryCreateDiscoveredInstance, this.logger, this.performanceClient, this.correlationId)(builtAuthority, this.config.system.networkClient, this.browserStorage, authorityOptions, this.logger, this.correlationId, this.performanceClient);\r\n        if (account && !discoveredAuthority.isAlias(account.environment)) {\r\n            throw createClientConfigurationError(ClientConfigurationErrorCodes.authorityMismatch);\r\n        }\r\n        return discoveredAuthority;\r\n    }\r\n}\n\nexport { BaseInteractionClient };\n//# sourceMappingURL=BaseInteractionClient.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { PerformanceEvents, invokeAsync, ProtocolMode, HttpMethod, createClientConfigurationError, ClientConfigurationErrorCodes, AuthenticationScheme, StringUtils } from '@azure/msal-common/browser';\nimport { hashString } from '../crypto/BrowserCrypto.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Initializer function for all request APIs\r\n * @param request\r\n */\r\nasync function initializeBaseRequest(request, config, performanceClient, logger) {\r\n    performanceClient.addQueueMeasurement(PerformanceEvents.InitializeBaseRequest, request.correlationId);\r\n    const authority = request.authority || config.auth.authority;\r\n    const scopes = [...((request && request.scopes) || [])];\r\n    const validatedRequest = {\r\n        ...request,\r\n        correlationId: request.correlationId,\r\n        authority,\r\n        scopes,\r\n    };\r\n    // Set authenticationScheme to BEARER if not explicitly set in the request\r\n    if (!validatedRequest.authenticationScheme) {\r\n        validatedRequest.authenticationScheme = AuthenticationScheme.BEARER;\r\n        logger.verbose('Authentication Scheme wasn\\'t explicitly set in request, defaulting to \"Bearer\" request');\r\n    }\r\n    else {\r\n        if (validatedRequest.authenticationScheme === AuthenticationScheme.SSH) {\r\n            if (!request.sshJwk) {\r\n                throw createClientConfigurationError(ClientConfigurationErrorCodes.missingSshJwk);\r\n            }\r\n            if (!request.sshKid) {\r\n                throw createClientConfigurationError(ClientConfigurationErrorCodes.missingSshKid);\r\n            }\r\n        }\r\n        logger.verbose(`Authentication Scheme set to \"${validatedRequest.authenticationScheme}\" as configured in Auth request`);\r\n    }\r\n    // Set requested claims hash if claims-based caching is enabled and claims were requested\r\n    if (config.cache.claimsBasedCachingEnabled &&\r\n        request.claims &&\r\n        // Checks for empty stringified object \"{}\" which doesn't qualify as requested claims\r\n        !StringUtils.isEmptyObj(request.claims)) {\r\n        validatedRequest.requestedClaimsHash = await hashString(request.claims);\r\n    }\r\n    return validatedRequest;\r\n}\r\nasync function initializeSilentRequest(request, account, config, performanceClient, logger) {\r\n    performanceClient.addQueueMeasurement(PerformanceEvents.InitializeSilentRequest, request.correlationId);\r\n    const baseRequest = await invokeAsync(initializeBaseRequest, PerformanceEvents.InitializeBaseRequest, logger, performanceClient, request.correlationId)(request, config, performanceClient, logger);\r\n    return {\r\n        ...request,\r\n        ...baseRequest,\r\n        account: account,\r\n        forceRefresh: request.forceRefresh || false,\r\n    };\r\n}\r\n/**\r\n * Validates that the combination of request method, protocol mode and authorize body parameters is correct.\r\n * Returns the validated or defaulted HTTP method or throws if the configured combination is invalid.\r\n * @param interactionRequest\r\n * @param protocolMode\r\n * @returns\r\n */\r\nfunction validateRequestMethod(interactionRequest, protocolMode) {\r\n    let httpMethod;\r\n    const requestMethod = interactionRequest.httpMethod;\r\n    if (protocolMode === ProtocolMode.EAR) {\r\n        // Don't override httpMethod if it is already set, default to POST if not set\r\n        httpMethod = requestMethod || HttpMethod.POST;\r\n        // Validate that method is not GET if protocol mode is EAR\r\n        if (httpMethod !== HttpMethod.POST) {\r\n            throw createClientConfigurationError(ClientConfigurationErrorCodes.invalidRequestMethodForEAR);\r\n        }\r\n    }\r\n    else {\r\n        // For non-EAR protocol modes, default to GET if httpMethod is not set\r\n        httpMethod = requestMethod || HttpMethod.GET;\r\n    }\r\n    // Regardless of protocolMode, if there are authorizePostBodyParameters, validate the request method is POST\r\n    if (interactionRequest.authorizePostBodyParameters &&\r\n        httpMethod !== HttpMethod.POST) {\r\n        throw createClientConfigurationError(ClientConfigurationErrorCodes.invalidAuthorizePostBodyParameters);\r\n    }\r\n    return httpMethod;\r\n}\n\nexport { initializeBaseRequest, initializeSilentRequest, validateRequestMethod };\n//# sourceMappingURL=RequestHelpers.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { UrlString, PerformanceEvents, invokeAsync, AuthorizationCodeClient, Constants, ProtocolUtils } from '@azure/msal-common/browser';\nimport { BaseInteractionClient } from './BaseInteractionClient.mjs';\nimport { BrowserConstants } from '../utils/BrowserConstants.mjs';\nimport { version } from '../packageMetadata.mjs';\nimport { getCurrentUri } from '../utils/BrowserUtils.mjs';\nimport { createNewGuid } from '../crypto/BrowserCrypto.mjs';\nimport { initializeBaseRequest, validateRequestMethod } from '../request/RequestHelpers.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Defines the class structure and helper functions used by the \"standard\", non-brokered auth flows (popup, redirect, silent (RT), silent (iframe))\r\n */\r\nclass StandardInteractionClient extends BaseInteractionClient {\r\n    /**\r\n     * Initializer for the logout request.\r\n     * @param logoutRequest\r\n     */\r\n    initializeLogoutRequest(logoutRequest) {\r\n        this.logger.verbose(\"initializeLogoutRequest called\", logoutRequest?.correlationId);\r\n        const validLogoutRequest = {\r\n            correlationId: this.correlationId || createNewGuid(),\r\n            ...logoutRequest,\r\n        };\r\n        /**\r\n         * Set logout_hint to be login_hint from ID Token Claims if present\r\n         * and logoutHint attribute wasn't manually set in logout request\r\n         */\r\n        if (logoutRequest) {\r\n            // If logoutHint isn't set and an account was passed in, try to extract logoutHint from ID Token Claims\r\n            if (!logoutRequest.logoutHint) {\r\n                if (logoutRequest.account) {\r\n                    const logoutHint = this.getLogoutHintFromIdTokenClaims(logoutRequest.account);\r\n                    if (logoutHint) {\r\n                        this.logger.verbose(\"Setting logoutHint to login_hint ID Token Claim value for the account provided\");\r\n                        validLogoutRequest.logoutHint = logoutHint;\r\n                    }\r\n                }\r\n                else {\r\n                    this.logger.verbose(\"logoutHint was not set and account was not passed into logout request, logoutHint will not be set\");\r\n                }\r\n            }\r\n            else {\r\n                this.logger.verbose(\"logoutHint has already been set in logoutRequest\");\r\n            }\r\n        }\r\n        else {\r\n            this.logger.verbose(\"logoutHint will not be set since no logout request was configured\");\r\n        }\r\n        /*\r\n         * Only set redirect uri if logout request isn't provided or the set uri isn't null.\r\n         * Otherwise, use passed uri, config, or current page.\r\n         */\r\n        if (!logoutRequest || logoutRequest.postLogoutRedirectUri !== null) {\r\n            if (logoutRequest && logoutRequest.postLogoutRedirectUri) {\r\n                this.logger.verbose(\"Setting postLogoutRedirectUri to uri set on logout request\", validLogoutRequest.correlationId);\r\n                validLogoutRequest.postLogoutRedirectUri =\r\n                    UrlString.getAbsoluteUrl(logoutRequest.postLogoutRedirectUri, getCurrentUri());\r\n            }\r\n            else if (this.config.auth.postLogoutRedirectUri === null) {\r\n                this.logger.verbose(\"postLogoutRedirectUri configured as null and no uri set on request, not passing post logout redirect\", validLogoutRequest.correlationId);\r\n            }\r\n            else if (this.config.auth.postLogoutRedirectUri) {\r\n                this.logger.verbose(\"Setting postLogoutRedirectUri to configured uri\", validLogoutRequest.correlationId);\r\n                validLogoutRequest.postLogoutRedirectUri =\r\n                    UrlString.getAbsoluteUrl(this.config.auth.postLogoutRedirectUri, getCurrentUri());\r\n            }\r\n            else {\r\n                this.logger.verbose(\"Setting postLogoutRedirectUri to current page\", validLogoutRequest.correlationId);\r\n                validLogoutRequest.postLogoutRedirectUri =\r\n                    UrlString.getAbsoluteUrl(getCurrentUri(), getCurrentUri());\r\n            }\r\n        }\r\n        else {\r\n            this.logger.verbose(\"postLogoutRedirectUri passed as null, not setting post logout redirect uri\", validLogoutRequest.correlationId);\r\n        }\r\n        return validLogoutRequest;\r\n    }\r\n    /**\r\n     * Parses login_hint ID Token Claim out of AccountInfo object to be used as\r\n     * logout_hint in end session request.\r\n     * @param account\r\n     */\r\n    getLogoutHintFromIdTokenClaims(account) {\r\n        const idTokenClaims = account.idTokenClaims;\r\n        if (idTokenClaims) {\r\n            if (idTokenClaims.login_hint) {\r\n                return idTokenClaims.login_hint;\r\n            }\r\n            else {\r\n                this.logger.verbose(\"The ID Token Claims tied to the provided account do not contain a login_hint claim, logoutHint will not be added to logout request\");\r\n            }\r\n        }\r\n        else {\r\n            this.logger.verbose(\"The provided account does not contain ID Token Claims, logoutHint will not be added to logout request\");\r\n        }\r\n        return null;\r\n    }\r\n    /**\r\n     * Creates an Authorization Code Client with the given authority, or the default authority.\r\n     * @param params {\r\n     *         serverTelemetryManager: ServerTelemetryManager;\r\n     *         authorityUrl?: string;\r\n     *         requestAzureCloudOptions?: AzureCloudOptions;\r\n     *         requestExtraQueryParameters?: StringDict;\r\n     *         account?: AccountInfo;\r\n     *        }\r\n     */\r\n    async createAuthCodeClient(params) {\r\n        this.performanceClient.addQueueMeasurement(PerformanceEvents.StandardInteractionClientCreateAuthCodeClient, this.correlationId);\r\n        // Create auth module.\r\n        const clientConfig = await invokeAsync(this.getClientConfiguration.bind(this), PerformanceEvents.StandardInteractionClientGetClientConfiguration, this.logger, this.performanceClient, this.correlationId)(params);\r\n        return new AuthorizationCodeClient(clientConfig, this.performanceClient);\r\n    }\r\n    /**\r\n     * Creates a Client Configuration object with the given request authority, or the default authority.\r\n     * @param params {\r\n     *         serverTelemetryManager: ServerTelemetryManager;\r\n     *         requestAuthority?: string;\r\n     *         requestAzureCloudOptions?: AzureCloudOptions;\r\n     *         requestExtraQueryParameters?: boolean;\r\n     *         account?: AccountInfo;\r\n     *        }\r\n     */\r\n    async getClientConfiguration(params) {\r\n        const { serverTelemetryManager, requestAuthority, requestAzureCloudOptions, requestExtraQueryParameters, account, } = params;\r\n        this.performanceClient.addQueueMeasurement(PerformanceEvents.StandardInteractionClientGetClientConfiguration, this.correlationId);\r\n        const discoveredAuthority = params.authority ||\r\n            (await invokeAsync(this.getDiscoveredAuthority.bind(this), PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority, this.logger, this.performanceClient, this.correlationId)({\r\n                requestAuthority,\r\n                requestAzureCloudOptions,\r\n                requestExtraQueryParameters,\r\n                account,\r\n            }));\r\n        const logger = this.config.system.loggerOptions;\r\n        return {\r\n            authOptions: {\r\n                clientId: this.config.auth.clientId,\r\n                authority: discoveredAuthority,\r\n                clientCapabilities: this.config.auth.clientCapabilities,\r\n                redirectUri: this.config.auth.redirectUri,\r\n            },\r\n            systemOptions: {\r\n                tokenRenewalOffsetSeconds: this.config.system.tokenRenewalOffsetSeconds,\r\n                preventCorsPreflight: true,\r\n            },\r\n            loggerOptions: {\r\n                loggerCallback: logger.loggerCallback,\r\n                piiLoggingEnabled: logger.piiLoggingEnabled,\r\n                logLevel: logger.logLevel,\r\n                correlationId: this.correlationId,\r\n            },\r\n            cacheOptions: {\r\n                claimsBasedCachingEnabled: this.config.cache.claimsBasedCachingEnabled,\r\n            },\r\n            cryptoInterface: this.browserCrypto,\r\n            networkInterface: this.networkClient,\r\n            storageInterface: this.browserStorage,\r\n            serverTelemetryManager: serverTelemetryManager,\r\n            libraryInfo: {\r\n                sku: BrowserConstants.MSAL_SKU,\r\n                version: version,\r\n                cpu: Constants.EMPTY_STRING,\r\n                os: Constants.EMPTY_STRING,\r\n            },\r\n            telemetry: this.config.telemetry,\r\n        };\r\n    }\r\n    /**\r\n     * Helper to initialize required request parameters for interactive APIs and ssoSilent()\r\n     * @param request\r\n     * @param interactionType\r\n     */\r\n    async initializeAuthorizationRequest(request, interactionType) {\r\n        this.performanceClient.addQueueMeasurement(PerformanceEvents.StandardInteractionClientInitializeAuthorizationRequest, this.correlationId);\r\n        const redirectUri = this.getRedirectUri(request.redirectUri);\r\n        if (new URL(redirectUri).origin !== new URL(window.location.href).origin) {\r\n            this.logger.warning(\"The origin of the redirect URI does not match the origin of the current page. This is likely to cause issues with authentication.\", this.correlationId);\r\n            this.performanceClient.addFields({ isRedirectUriCrossOrigin: true }, this.correlationId);\r\n        }\r\n        const browserState = {\r\n            interactionType: interactionType,\r\n        };\r\n        const state = ProtocolUtils.setRequestState(this.browserCrypto, (request && request.state) || Constants.EMPTY_STRING, browserState);\r\n        const baseRequest = await invokeAsync(initializeBaseRequest, PerformanceEvents.InitializeBaseRequest, this.logger, this.performanceClient, this.correlationId)({ ...request, correlationId: this.correlationId }, this.config, this.performanceClient, this.logger);\r\n        const interactionRequest = {\r\n            ...baseRequest,\r\n            redirectUri: redirectUri,\r\n            state: state,\r\n            nonce: request.nonce || createNewGuid(),\r\n            responseMode: this.config.auth.OIDCOptions\r\n                .serverResponseType,\r\n        };\r\n        const validatedRequest = {\r\n            ...interactionRequest,\r\n            httpMethod: validateRequestMethod(interactionRequest, this.config.auth.protocolMode),\r\n        };\r\n        // Skip active account lookup if either login hint or session id is set\r\n        if (request.loginHint || request.sid) {\r\n            return validatedRequest;\r\n        }\r\n        const account = request.account ||\r\n            this.browserStorage.getActiveAccount(this.correlationId);\r\n        if (account) {\r\n            this.logger.verbose(\"Setting validated request account\", this.correlationId);\r\n            this.logger.verbosePii(`Setting validated request account: ${account.homeAccountId}`, this.correlationId);\r\n            validatedRequest.account = account;\r\n        }\r\n        return validatedRequest;\r\n    }\r\n}\n\nexport { StandardInteractionClient };\n//# sourceMappingURL=StandardInteractionClient.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { ProtocolUtils, createClientAuthError, ClientAuthErrorCodes } from '@azure/msal-common/browser';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Extracts the BrowserStateObject from the state string.\r\n * @param browserCrypto\r\n * @param state\r\n */\r\nfunction extractBrowserRequestState(browserCrypto, state) {\r\n    if (!state) {\r\n        return null;\r\n    }\r\n    try {\r\n        const requestStateObj = ProtocolUtils.parseRequestState(browserCrypto, state);\r\n        return requestStateObj.libraryState.meta;\r\n    }\r\n    catch (e) {\r\n        throw createClientAuthError(ClientAuthErrorCodes.invalidState);\r\n    }\r\n}\n\nexport { extractBrowserRequestState };\n//# sourceMappingURL=BrowserProtocolUtils.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { UrlUtils } from '@azure/msal-common/browser';\nimport { createBrowserAuthError } from '../error/BrowserAuthError.mjs';\nimport { extractBrowserRequestState } from '../utils/BrowserProtocolUtils.mjs';\nimport { hashEmptyError, hashDoesNotContainKnownProperties, noStateInHash, unableToParseState, stateInteractionTypeMismatch } from '../error/BrowserAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nfunction deserializeResponse(responseString, responseLocation, logger) {\r\n    // Deserialize hash fragment response parameters.\r\n    const serverParams = UrlUtils.getDeserializedResponse(responseString);\r\n    if (!serverParams) {\r\n        if (!UrlUtils.stripLeadingHashOrQuery(responseString)) {\r\n            // Hash or Query string is empty\r\n            logger.error(`The request has returned to the redirectUri but a ${responseLocation} is not present. It's likely that the ${responseLocation} has been removed or the page has been redirected by code running on the redirectUri page.`);\r\n            throw createBrowserAuthError(hashEmptyError);\r\n        }\r\n        else {\r\n            logger.error(`A ${responseLocation} is present in the iframe but it does not contain known properties. It's likely that the ${responseLocation} has been replaced by code running on the redirectUri page.`);\r\n            logger.errorPii(`The ${responseLocation} detected is: ${responseString}`);\r\n            throw createBrowserAuthError(hashDoesNotContainKnownProperties);\r\n        }\r\n    }\r\n    return serverParams;\r\n}\r\n/**\r\n * Returns the interaction type that the response object belongs to\r\n */\r\nfunction validateInteractionType(response, browserCrypto, interactionType) {\r\n    if (!response.state) {\r\n        throw createBrowserAuthError(noStateInHash);\r\n    }\r\n    const platformStateObj = extractBrowserRequestState(browserCrypto, response.state);\r\n    if (!platformStateObj) {\r\n        throw createBrowserAuthError(unableToParseState);\r\n    }\r\n    if (platformStateObj.interactionType !== interactionType) {\r\n        throw createBrowserAuthError(stateInteractionTypeMismatch);\r\n    }\r\n}\n\nexport { deserializeResponse, validateInteractionType };\n//# sourceMappingURL=ResponseHandler.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { PerformanceEvents, AuthorizeProtocol, ServerError, invokeAsync, CcsCredentialType } from '@azure/msal-common/browser';\nimport { createBrowserAuthError } from '../error/BrowserAuthError.mjs';\nimport { userCancelled } from '../error/BrowserAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Abstract class which defines operations for a browser interaction handling class.\r\n */\r\nclass InteractionHandler {\r\n    constructor(authCodeModule, storageImpl, authCodeRequest, logger, performanceClient) {\r\n        this.authModule = authCodeModule;\r\n        this.browserStorage = storageImpl;\r\n        this.authCodeRequest = authCodeRequest;\r\n        this.logger = logger;\r\n        this.performanceClient = performanceClient;\r\n    }\r\n    /**\r\n     * Function to handle response parameters from hash.\r\n     * @param locationHash\r\n     */\r\n    async handleCodeResponse(response, request, apiId) {\r\n        this.performanceClient.addQueueMeasurement(PerformanceEvents.HandleCodeResponse, request.correlationId);\r\n        let authCodeResponse;\r\n        try {\r\n            authCodeResponse = AuthorizeProtocol.getAuthorizationCodePayload(response, request.state);\r\n        }\r\n        catch (e) {\r\n            if (e instanceof ServerError &&\r\n                e.subError === userCancelled) {\r\n                // Translate server error caused by user closing native prompt to corresponding first class MSAL error\r\n                throw createBrowserAuthError(userCancelled);\r\n            }\r\n            else {\r\n                throw e;\r\n            }\r\n        }\r\n        return invokeAsync(this.handleCodeResponseFromServer.bind(this), PerformanceEvents.HandleCodeResponseFromServer, this.logger, this.performanceClient, request.correlationId)(authCodeResponse, request, apiId);\r\n    }\r\n    /**\r\n     * Process auth code response from AAD\r\n     * @param authCodeResponse\r\n     * @param state\r\n     * @param authority\r\n     * @param networkModule\r\n     * @returns\r\n     */\r\n    async handleCodeResponseFromServer(authCodeResponse, request, apiId, validateNonce = true) {\r\n        this.performanceClient.addQueueMeasurement(PerformanceEvents.HandleCodeResponseFromServer, request.correlationId);\r\n        this.logger.trace(\"InteractionHandler.handleCodeResponseFromServer called\");\r\n        // Assign code to request\r\n        this.authCodeRequest.code = authCodeResponse.code;\r\n        // Check for new cloud instance\r\n        if (authCodeResponse.cloud_instance_host_name) {\r\n            await invokeAsync(this.authModule.updateAuthority.bind(this.authModule), PerformanceEvents.UpdateTokenEndpointAuthority, this.logger, this.performanceClient, request.correlationId)(authCodeResponse.cloud_instance_host_name, request.correlationId);\r\n        }\r\n        // Nonce validation not needed when redirect not involved (e.g. hybrid spa, renewing token via rt)\r\n        if (validateNonce) {\r\n            // TODO: Assigning \"response nonce\" to \"request nonce\" is confusing. Refactor the function doing validation to accept request nonce directly\r\n            authCodeResponse.nonce = request.nonce || undefined;\r\n        }\r\n        authCodeResponse.state = request.state;\r\n        // Add CCS parameters if available\r\n        if (authCodeResponse.client_info) {\r\n            this.authCodeRequest.clientInfo = authCodeResponse.client_info;\r\n        }\r\n        else {\r\n            const ccsCred = this.createCcsCredentials(request);\r\n            if (ccsCred) {\r\n                this.authCodeRequest.ccsCredential = ccsCred;\r\n            }\r\n        }\r\n        // Acquire token with retrieved code.\r\n        const tokenResponse = (await invokeAsync(this.authModule.acquireToken.bind(this.authModule), PerformanceEvents.AuthClientAcquireToken, this.logger, this.performanceClient, request.correlationId)(this.authCodeRequest, apiId, authCodeResponse));\r\n        return tokenResponse;\r\n    }\r\n    /**\r\n     * Build ccs creds if available\r\n     */\r\n    createCcsCredentials(request) {\r\n        if (request.account) {\r\n            return {\r\n                credential: request.account.homeAccountId,\r\n                type: CcsCredentialType.HOME_ACCOUNT_ID,\r\n            };\r\n        }\r\n        else if (request.loginHint) {\r\n            return {\r\n                credential: request.loginHint,\r\n                type: CcsCredentialType.UPN,\r\n            };\r\n        }\r\n        return null;\r\n    }\r\n}\n\nexport { InteractionHandler };\n//# sourceMappingURL=InteractionHandler.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst contentError = \"ContentError\";\r\nconst pageException = \"PageException\";\r\nconst userSwitch = \"user_switch\";\n\nexport { contentError, pageException, userSwitch };\n//# sourceMappingURL=NativeAuthErrorCodes.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n// Status Codes that can be thrown by WAM\r\nconst USER_INTERACTION_REQUIRED = \"USER_INTERACTION_REQUIRED\";\r\nconst USER_CANCEL = \"USER_CANCEL\";\r\nconst NO_NETWORK = \"NO_NETWORK\";\r\nconst DISABLED = \"DISABLED\";\r\nconst ACCOUNT_UNAVAILABLE = \"ACCOUNT_UNAVAILABLE\";\r\nconst UX_NOT_ALLOWED = \"UX_NOT_ALLOWED\";\n\nexport { ACCOUNT_UNAVAILABLE, DISABLED, NO_NETWORK, USER_CANCEL, USER_INTERACTION_REQUIRED, UX_NOT_ALLOWED };\n//# sourceMappingURL=NativeStatusCodes.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { AuthError, createInteractionRequiredAuthError, InteractionRequiredAuthErrorCodes, InteractionRequiredAuthError } from '@azure/msal-common/browser';\nimport { createBrowserAuthError } from './BrowserAuthError.mjs';\nimport { pageException, contentError, userSwitch } from './NativeAuthErrorCodes.mjs';\nimport { DISABLED, UX_NOT_ALLOWED, NO_NETWORK, USER_CANCEL, USER_INTERACTION_REQUIRED, ACCOUNT_UNAVAILABLE } from '../broker/nativeBroker/NativeStatusCodes.mjs';\nimport { noNetworkConnectivity, userCancelled } from './BrowserAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst INVALID_METHOD_ERROR = -2147186943;\r\nconst NativeAuthErrorMessages = {\r\n    [userSwitch]: \"User attempted to switch accounts in the native broker, which is not allowed. All new accounts must sign-in through the standard web flow first, please try again.\",\r\n};\r\nclass NativeAuthError extends AuthError {\r\n    constructor(errorCode, description, ext) {\r\n        super(errorCode, description);\r\n        Object.setPrototypeOf(this, NativeAuthError.prototype);\r\n        this.name = \"NativeAuthError\";\r\n        this.ext = ext;\r\n    }\r\n}\r\n/**\r\n * These errors should result in a fallback to the 'standard' browser based auth flow.\r\n */\r\nfunction isFatalNativeAuthError(error) {\r\n    if (error.ext &&\r\n        error.ext.status &&\r\n        error.ext.status === DISABLED) {\r\n        return true;\r\n    }\r\n    if (error.ext &&\r\n        error.ext.error &&\r\n        error.ext.error === INVALID_METHOD_ERROR) {\r\n        return true;\r\n    }\r\n    switch (error.errorCode) {\r\n        case contentError:\r\n        case pageException:\r\n            return true;\r\n        default:\r\n            return false;\r\n    }\r\n}\r\n/**\r\n * Create the appropriate error object based on the WAM status code.\r\n * @param code\r\n * @param description\r\n * @param ext\r\n * @returns\r\n */\r\nfunction createNativeAuthError(code, description, ext) {\r\n    if (ext && ext.status) {\r\n        switch (ext.status) {\r\n            case ACCOUNT_UNAVAILABLE:\r\n                return createInteractionRequiredAuthError(InteractionRequiredAuthErrorCodes.nativeAccountUnavailable);\r\n            case USER_INTERACTION_REQUIRED:\r\n                return new InteractionRequiredAuthError(code, description);\r\n            case USER_CANCEL:\r\n                return createBrowserAuthError(userCancelled);\r\n            case NO_NETWORK:\r\n                return createBrowserAuthError(noNetworkConnectivity);\r\n            case UX_NOT_ALLOWED:\r\n                return createInteractionRequiredAuthError(InteractionRequiredAuthErrorCodes.uxNotAllowed);\r\n        }\r\n    }\r\n    return new NativeAuthError(code, NativeAuthErrorMessages[code] || description, ext);\r\n}\n\nexport { NativeAuthError, NativeAuthErrorMessages, createNativeAuthError, isFatalNativeAuthError };\n//# sourceMappingURL=NativeAuthError.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { StandardInteractionClient } from './StandardInteractionClient.mjs';\nimport { PerformanceEvents, invokeAsync, SilentFlowClient } from '@azure/msal-common/browser';\nimport { ApiId } from '../utils/BrowserConstants.mjs';\nimport { BrowserAuthError } from '../error/BrowserAuthError.mjs';\nimport { cryptoKeyNotFound } from '../error/BrowserAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass SilentCacheClient extends StandardInteractionClient {\r\n    /**\r\n     * Returns unexpired tokens from the cache, if available\r\n     * @param silentRequest\r\n     */\r\n    async acquireToken(silentRequest) {\r\n        this.performanceClient.addQueueMeasurement(PerformanceEvents.SilentCacheClientAcquireToken, silentRequest.correlationId);\r\n        // Telemetry manager only used to increment cacheHits here\r\n        const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.acquireTokenSilent_silentFlow);\r\n        const clientConfig = await invokeAsync(this.getClientConfiguration.bind(this), PerformanceEvents.StandardInteractionClientGetClientConfiguration, this.logger, this.performanceClient, this.correlationId)({\r\n            serverTelemetryManager,\r\n            requestAuthority: silentRequest.authority,\r\n            requestAzureCloudOptions: silentRequest.azureCloudOptions,\r\n            account: silentRequest.account,\r\n        });\r\n        const silentAuthClient = new SilentFlowClient(clientConfig, this.performanceClient);\r\n        this.logger.verbose(\"Silent auth client created\");\r\n        try {\r\n            const response = await invokeAsync(silentAuthClient.acquireCachedToken.bind(silentAuthClient), PerformanceEvents.SilentFlowClientAcquireCachedToken, this.logger, this.performanceClient, silentRequest.correlationId)(silentRequest);\r\n            const authResponse = response[0];\r\n            this.performanceClient.addFields({\r\n                fromCache: true,\r\n            }, silentRequest.correlationId);\r\n            return authResponse;\r\n        }\r\n        catch (error) {\r\n            if (error instanceof BrowserAuthError &&\r\n                error.errorCode === cryptoKeyNotFound) {\r\n                this.logger.verbose(\"Signing keypair for bound access token not found. Refreshing bound access token and generating a new crypto keypair.\");\r\n            }\r\n            throw error;\r\n        }\r\n    }\r\n    /**\r\n     * API to silenty clear the browser cache.\r\n     * @param logoutRequest\r\n     */\r\n    logout(logoutRequest) {\r\n        this.logger.verbose(\"logoutRedirect called\");\r\n        const validLogoutRequest = this.initializeLogoutRequest(logoutRequest);\r\n        return this.clearCacheOnLogout(validLogoutRequest.correlationId, validLogoutRequest?.account);\r\n    }\r\n}\n\nexport { SilentCacheClient };\n//# sourceMappingURL=SilentCacheClient.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { ServerTelemetryManager, AADServerParamKeys, PerformanceEvents, TimeUtils, ScopeSet, createClientAuthError, ClientAuthErrorCodes, AuthToken, buildAccountToCache, AccountEntity, Constants, AuthorityType, AuthenticationScheme, PopTokenGenerator, updateAccountTenantProfileData, CacheHelpers, OIDC_DEFAULT_SCOPES, RequestParameterBuilder, invokeAsync, UrlString, PromptValue } from '@azure/msal-common/browser';\nimport { BaseInteractionClient } from './BaseInteractionClient.mjs';\nimport { BrowserConstants, CacheLookupPolicy, TemporaryCacheKeys, ApiId, PlatformAuthConstants } from '../utils/BrowserConstants.mjs';\nimport { NativeAuthError, isFatalNativeAuthError, createNativeAuthError } from '../error/NativeAuthError.mjs';\nimport { createBrowserAuthError } from '../error/BrowserAuthError.mjs';\nimport { SilentCacheClient } from './SilentCacheClient.mjs';\nimport { base64Decode } from '../encode/Base64Decode.mjs';\nimport { version } from '../packageMetadata.mjs';\nimport { invalidPopTokenRequest, nativePromptNotSupported } from '../error/BrowserAuthErrorCodes.mjs';\nimport { userSwitch } from '../error/NativeAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass PlatformAuthInteractionClient extends BaseInteractionClient {\r\n    constructor(config, browserStorage, browserCrypto, logger, eventHandler, navigationClient, apiId, performanceClient, provider, accountId, nativeStorageImpl, correlationId) {\r\n        super(config, browserStorage, browserCrypto, logger, eventHandler, navigationClient, performanceClient, provider, correlationId);\r\n        this.apiId = apiId;\r\n        this.accountId = accountId;\r\n        this.platformAuthProvider = provider;\r\n        this.nativeStorageManager = nativeStorageImpl;\r\n        this.silentCacheClient = new SilentCacheClient(config, this.nativeStorageManager, browserCrypto, logger, eventHandler, navigationClient, performanceClient, provider, correlationId);\r\n        const extensionName = this.platformAuthProvider.getExtensionName();\r\n        this.skus = ServerTelemetryManager.makeExtraSkuString({\r\n            libraryName: BrowserConstants.MSAL_SKU,\r\n            libraryVersion: version,\r\n            extensionName: extensionName,\r\n            extensionVersion: this.platformAuthProvider.getExtensionVersion(),\r\n        });\r\n    }\r\n    /**\r\n     * Adds SKUs to request extra query parameters\r\n     * @param request {PlatformAuthRequest}\r\n     * @private\r\n     */\r\n    addRequestSKUs(request) {\r\n        request.extraParameters = {\r\n            ...request.extraParameters,\r\n            [AADServerParamKeys.X_CLIENT_EXTRA_SKU]: this.skus,\r\n        };\r\n    }\r\n    /**\r\n     * Acquire token from native platform via browser extension\r\n     * @param request\r\n     */\r\n    async acquireToken(request, cacheLookupPolicy) {\r\n        this.performanceClient.addQueueMeasurement(PerformanceEvents.NativeInteractionClientAcquireToken, this.correlationId);\r\n        this.logger.trace(\"NativeInteractionClient - acquireToken called.\");\r\n        // start the perf measurement\r\n        const nativeATMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.NativeInteractionClientAcquireToken, this.correlationId);\r\n        const reqTimestamp = TimeUtils.nowSeconds();\r\n        const serverTelemetryManager = this.initializeServerTelemetryManager(this.apiId);\r\n        try {\r\n            // initialize native request\r\n            const nativeRequest = await this.initializeNativeRequest(request);\r\n            // check if the tokens can be retrieved from internal cache\r\n            try {\r\n                const result = await this.acquireTokensFromCache(this.accountId, nativeRequest);\r\n                nativeATMeasurement.end({\r\n                    success: true,\r\n                    isNativeBroker: false,\r\n                    fromCache: true,\r\n                });\r\n                return result;\r\n            }\r\n            catch (e) {\r\n                if (cacheLookupPolicy === CacheLookupPolicy.AccessToken) {\r\n                    this.logger.info(\"MSAL internal Cache does not contain tokens, return error as per cache policy\");\r\n                    nativeATMeasurement.end({\r\n                        success: false,\r\n                        brokerErrorCode: \"cache_request_failed\",\r\n                    });\r\n                    throw e;\r\n                }\r\n                // continue with a native call for any and all errors\r\n                this.logger.info(\"MSAL internal Cache does not contain tokens, proceed to make a native call\");\r\n            }\r\n            const validatedResponse = await this.platformAuthProvider.sendMessage(nativeRequest);\r\n            return await this.handleNativeResponse(validatedResponse, nativeRequest, reqTimestamp)\r\n                .then((result) => {\r\n                nativeATMeasurement.end({\r\n                    success: true,\r\n                    isNativeBroker: true,\r\n                    requestId: result.requestId,\r\n                });\r\n                serverTelemetryManager.clearNativeBrokerErrorCode();\r\n                return result;\r\n            })\r\n                .catch((error) => {\r\n                nativeATMeasurement.end({\r\n                    success: false,\r\n                    errorCode: error.errorCode,\r\n                    subErrorCode: error.subError,\r\n                });\r\n                throw error;\r\n            });\r\n        }\r\n        catch (e) {\r\n            if (e instanceof NativeAuthError) {\r\n                serverTelemetryManager.setNativeBrokerErrorCode(e.errorCode);\r\n            }\r\n            nativeATMeasurement.end({\r\n                success: false,\r\n            });\r\n            throw e;\r\n        }\r\n    }\r\n    /**\r\n     * Creates silent flow request\r\n     * @param request\r\n     * @param cachedAccount\r\n     * @returns CommonSilentFlowRequest\r\n     */\r\n    createSilentCacheRequest(request, cachedAccount) {\r\n        return {\r\n            authority: request.authority,\r\n            correlationId: this.correlationId,\r\n            scopes: ScopeSet.fromString(request.scope).asArray(),\r\n            account: cachedAccount,\r\n            forceRefresh: false,\r\n        };\r\n    }\r\n    /**\r\n     * Fetches the tokens from the cache if un-expired\r\n     * @param nativeAccountId\r\n     * @param request\r\n     * @returns authenticationResult\r\n     */\r\n    async acquireTokensFromCache(nativeAccountId, request) {\r\n        if (!nativeAccountId) {\r\n            this.logger.warning(\"NativeInteractionClient:acquireTokensFromCache - No nativeAccountId provided\");\r\n            throw createClientAuthError(ClientAuthErrorCodes.noAccountFound);\r\n        }\r\n        // fetch the account from browser cache\r\n        const account = this.browserStorage.getBaseAccountInfo({\r\n            nativeAccountId,\r\n        }, this.correlationId);\r\n        if (!account) {\r\n            throw createClientAuthError(ClientAuthErrorCodes.noAccountFound);\r\n        }\r\n        // leverage silent flow for cached tokens retrieval\r\n        try {\r\n            const silentRequest = this.createSilentCacheRequest(request, account);\r\n            const result = await this.silentCacheClient.acquireToken(silentRequest);\r\n            const fullAccount = {\r\n                ...account,\r\n                idTokenClaims: result?.idTokenClaims,\r\n                idToken: result?.idToken,\r\n            };\r\n            return {\r\n                ...result,\r\n                account: fullAccount,\r\n            };\r\n        }\r\n        catch (e) {\r\n            throw e;\r\n        }\r\n    }\r\n    /**\r\n     * Acquires a token from native platform then redirects to the redirectUri instead of returning the response\r\n     * @param {RedirectRequest} request\r\n     * @param {InProgressPerformanceEvent} rootMeasurement\r\n     */\r\n    async acquireTokenRedirect(request, rootMeasurement) {\r\n        this.logger.trace(\"NativeInteractionClient - acquireTokenRedirect called.\");\r\n        const { ...remainingParameters } = request;\r\n        delete remainingParameters.onRedirectNavigate;\r\n        const nativeRequest = await this.initializeNativeRequest(remainingParameters);\r\n        try {\r\n            await this.platformAuthProvider.sendMessage(nativeRequest);\r\n        }\r\n        catch (e) {\r\n            // Only throw fatal errors here to allow application to fallback to regular redirect. Otherwise proceed and the error will be thrown in handleRedirectPromise\r\n            if (e instanceof NativeAuthError) {\r\n                const serverTelemetryManager = this.initializeServerTelemetryManager(this.apiId);\r\n                serverTelemetryManager.setNativeBrokerErrorCode(e.errorCode);\r\n                if (isFatalNativeAuthError(e)) {\r\n                    throw e;\r\n                }\r\n            }\r\n        }\r\n        this.browserStorage.setTemporaryCache(TemporaryCacheKeys.NATIVE_REQUEST, JSON.stringify(nativeRequest), true);\r\n        const navigationOptions = {\r\n            apiId: ApiId.acquireTokenRedirect,\r\n            timeout: this.config.system.redirectNavigationTimeout,\r\n            noHistory: false,\r\n        };\r\n        const redirectUri = this.config.auth.navigateToLoginRequestUrl\r\n            ? window.location.href\r\n            : this.getRedirectUri(request.redirectUri);\r\n        rootMeasurement.end({ success: true });\r\n        await this.navigationClient.navigateExternal(redirectUri, navigationOptions); // Need to treat this as external to ensure handleRedirectPromise is run again\r\n    }\r\n    /**\r\n     * If the previous page called native platform for a token using redirect APIs, send the same request again and return the response\r\n     * @param performanceClient {IPerformanceClient?}\r\n     * @param correlationId {string?} correlation identifier\r\n     */\r\n    async handleRedirectPromise(performanceClient, correlationId) {\r\n        this.logger.trace(\"NativeInteractionClient - handleRedirectPromise called.\");\r\n        if (!this.browserStorage.isInteractionInProgress(true)) {\r\n            this.logger.info(\"handleRedirectPromise called but there is no interaction in progress, returning null.\");\r\n            return null;\r\n        }\r\n        // remove prompt from the request to prevent WAM from prompting twice\r\n        const cachedRequest = this.browserStorage.getCachedNativeRequest();\r\n        if (!cachedRequest) {\r\n            this.logger.verbose(\"NativeInteractionClient - handleRedirectPromise called but there is no cached request, returning null.\");\r\n            if (performanceClient && correlationId) {\r\n                performanceClient?.addFields({ errorCode: \"no_cached_request\" }, correlationId);\r\n            }\r\n            return null;\r\n        }\r\n        const { prompt, ...request } = cachedRequest;\r\n        if (prompt) {\r\n            this.logger.verbose(\"NativeInteractionClient - handleRedirectPromise called and prompt was included in the original request, removing prompt from cached request to prevent second interaction with native broker window.\");\r\n        }\r\n        this.browserStorage.removeItem(this.browserStorage.generateCacheKey(TemporaryCacheKeys.NATIVE_REQUEST));\r\n        const reqTimestamp = TimeUtils.nowSeconds();\r\n        try {\r\n            this.logger.verbose(\"NativeInteractionClient - handleRedirectPromise sending message to native broker.\");\r\n            const response = await this.platformAuthProvider.sendMessage(request);\r\n            const authResult = await this.handleNativeResponse(response, request, reqTimestamp);\r\n            const serverTelemetryManager = this.initializeServerTelemetryManager(this.apiId);\r\n            serverTelemetryManager.clearNativeBrokerErrorCode();\r\n            if (performanceClient && this.correlationId) {\r\n                this.performanceClient.addFields({ isNativeBroker: true }, this.correlationId);\r\n            }\r\n            return authResult;\r\n        }\r\n        catch (e) {\r\n            throw e;\r\n        }\r\n    }\r\n    /**\r\n     * Logout from native platform via browser extension\r\n     * @param request\r\n     */\r\n    logout() {\r\n        this.logger.trace(\"NativeInteractionClient - logout called.\");\r\n        return Promise.reject(\"Logout not implemented yet\");\r\n    }\r\n    /**\r\n     * Transform response from native platform into AuthenticationResult object which will be returned to the end user\r\n     * @param response\r\n     * @param request\r\n     * @param reqTimestamp\r\n     */\r\n    async handleNativeResponse(response, request, reqTimestamp) {\r\n        this.logger.trace(\"NativeInteractionClient - handleNativeResponse called.\");\r\n        // generate identifiers\r\n        const idTokenClaims = AuthToken.extractTokenClaims(response.id_token, base64Decode);\r\n        const homeAccountIdentifier = this.createHomeAccountIdentifier(response, idTokenClaims);\r\n        const cachedhomeAccountId = this.browserStorage.getAccountInfoFilteredBy({\r\n            nativeAccountId: request.accountId,\r\n        }, this.correlationId)?.homeAccountId;\r\n        // add exception for double brokering, please note this is temporary and will be fortified in future\r\n        if (request.extraParameters?.child_client_id &&\r\n            response.account.id !== request.accountId) {\r\n            this.logger.info(\"handleNativeServerResponse: Double broker flow detected, ignoring accountId mismatch\");\r\n        }\r\n        else if (homeAccountIdentifier !== cachedhomeAccountId &&\r\n            response.account.id !== request.accountId) {\r\n            // User switch in native broker prompt is not supported. All users must first sign in through web flow to ensure server state is in sync\r\n            throw createNativeAuthError(userSwitch);\r\n        }\r\n        // Get the preferred_cache domain for the given authority\r\n        const authority = await this.getDiscoveredAuthority({\r\n            requestAuthority: request.authority,\r\n        });\r\n        const baseAccount = buildAccountToCache(this.browserStorage, authority, homeAccountIdentifier, base64Decode, this.correlationId, idTokenClaims, response.client_info, undefined, // environment\r\n        idTokenClaims.tid, undefined, // auth code payload\r\n        response.account.id, this.logger);\r\n        // Ensure expires_in is in number format\r\n        response.expires_in = Number(response.expires_in);\r\n        // generate authenticationResult\r\n        const result = await this.generateAuthenticationResult(response, request, idTokenClaims, baseAccount, authority.canonicalAuthority, reqTimestamp);\r\n        // cache accounts and tokens in the appropriate storage\r\n        await this.cacheAccount(baseAccount, this.correlationId, AuthToken.isKmsi(idTokenClaims));\r\n        await this.cacheNativeTokens(response, request, homeAccountIdentifier, idTokenClaims, response.access_token, result.tenantId, reqTimestamp);\r\n        return result;\r\n    }\r\n    /**\r\n     * creates an homeAccountIdentifier for the account\r\n     * @param response\r\n     * @param idTokenObj\r\n     * @returns\r\n     */\r\n    createHomeAccountIdentifier(response, idTokenClaims) {\r\n        // Save account in browser storage\r\n        const homeAccountIdentifier = AccountEntity.generateHomeAccountId(response.client_info || Constants.EMPTY_STRING, AuthorityType.Default, this.logger, this.browserCrypto, idTokenClaims);\r\n        return homeAccountIdentifier;\r\n    }\r\n    /**\r\n     * Helper to generate scopes\r\n     * @param response\r\n     * @param request\r\n     * @returns\r\n     */\r\n    generateScopes(requestScopes, responseScopes) {\r\n        return responseScopes\r\n            ? ScopeSet.fromString(responseScopes)\r\n            : ScopeSet.fromString(requestScopes);\r\n    }\r\n    /**\r\n     * If PoP token is requesred, records the PoP token if returned from the WAM, else generates one in the browser\r\n     * @param request\r\n     * @param response\r\n     */\r\n    async generatePopAccessToken(response, request) {\r\n        if (request.tokenType === AuthenticationScheme.POP &&\r\n            request.signPopToken) {\r\n            /**\r\n             * This code prioritizes SHR returned from the native layer. In case of error/SHR not calculated from WAM and the AT\r\n             * is still received, SHR is calculated locally\r\n             */\r\n            // Check if native layer returned an SHR token\r\n            if (response.shr) {\r\n                this.logger.trace(\"handleNativeServerResponse: SHR is enabled in native layer\");\r\n                return response.shr;\r\n            }\r\n            // Generate SHR in msal js if WAM does not compute it when POP is enabled\r\n            const popTokenGenerator = new PopTokenGenerator(this.browserCrypto);\r\n            const shrParameters = {\r\n                resourceRequestMethod: request.resourceRequestMethod,\r\n                resourceRequestUri: request.resourceRequestUri,\r\n                shrClaims: request.shrClaims,\r\n                shrNonce: request.shrNonce,\r\n            };\r\n            /**\r\n             * KeyID must be present in the native request from when the PoP key was generated in order for\r\n             * PopTokenGenerator to query the full key for signing\r\n             */\r\n            if (!request.keyId) {\r\n                throw createClientAuthError(ClientAuthErrorCodes.keyIdMissing);\r\n            }\r\n            return popTokenGenerator.signPopToken(response.access_token, request.keyId, shrParameters);\r\n        }\r\n        else {\r\n            return response.access_token;\r\n        }\r\n    }\r\n    /**\r\n     * Generates authentication result\r\n     * @param response\r\n     * @param request\r\n     * @param idTokenObj\r\n     * @param accountEntity\r\n     * @param authority\r\n     * @param reqTimestamp\r\n     * @returns\r\n     */\r\n    async generateAuthenticationResult(response, request, idTokenClaims, accountEntity, authority, reqTimestamp) {\r\n        // Add Native Broker fields to Telemetry\r\n        const mats = this.addTelemetryFromNativeResponse(response.properties.MATS);\r\n        // If scopes not returned in server response, use request scopes\r\n        const responseScopes = this.generateScopes(request.scope, response.scope);\r\n        const accountProperties = response.account.properties || {};\r\n        const uid = accountProperties[\"UID\"] ||\r\n            idTokenClaims.oid ||\r\n            idTokenClaims.sub ||\r\n            Constants.EMPTY_STRING;\r\n        const tid = accountProperties[\"TenantId\"] ||\r\n            idTokenClaims.tid ||\r\n            Constants.EMPTY_STRING;\r\n        const accountInfo = updateAccountTenantProfileData(AccountEntity.getAccountInfo(accountEntity), undefined, // tenantProfile optional\r\n        idTokenClaims, response.id_token);\r\n        /**\r\n         * In pairwise broker flows, this check prevents the broker's native account id\r\n         * from being returned over the embedded app's account id.\r\n         */\r\n        if (accountInfo.nativeAccountId !== response.account.id) {\r\n            accountInfo.nativeAccountId = response.account.id;\r\n        }\r\n        // generate PoP token as needed\r\n        const responseAccessToken = await this.generatePopAccessToken(response, request);\r\n        const tokenType = request.tokenType === AuthenticationScheme.POP\r\n            ? AuthenticationScheme.POP\r\n            : AuthenticationScheme.BEARER;\r\n        const result = {\r\n            authority: authority,\r\n            uniqueId: uid,\r\n            tenantId: tid,\r\n            scopes: responseScopes.asArray(),\r\n            account: accountInfo,\r\n            idToken: response.id_token,\r\n            idTokenClaims: idTokenClaims,\r\n            accessToken: responseAccessToken,\r\n            fromCache: mats ? this.isResponseFromCache(mats) : false,\r\n            // Request timestamp and NativeResponse expires_in are in seconds, converting to Date for AuthenticationResult\r\n            expiresOn: TimeUtils.toDateFromSeconds(reqTimestamp + response.expires_in),\r\n            tokenType: tokenType,\r\n            correlationId: this.correlationId,\r\n            state: response.state,\r\n            fromNativeBroker: true,\r\n        };\r\n        return result;\r\n    }\r\n    /**\r\n     * cache the account entity in browser storage\r\n     * @param accountEntity\r\n     */\r\n    async cacheAccount(accountEntity, correlationId, kmsi) {\r\n        // Store the account info and hence `nativeAccountId` in browser cache\r\n        await this.browserStorage.setAccount(accountEntity, this.correlationId, kmsi, this.apiId);\r\n        // Remove any existing cached tokens for this account in browser storage\r\n        this.browserStorage.removeAccountContext(AccountEntity.getAccountInfo(accountEntity), correlationId);\r\n    }\r\n    /**\r\n     * Stores the access_token and id_token in inmemory storage\r\n     * @param response\r\n     * @param request\r\n     * @param homeAccountIdentifier\r\n     * @param idTokenObj\r\n     * @param responseAccessToken\r\n     * @param tenantId\r\n     * @param reqTimestamp\r\n     */\r\n    cacheNativeTokens(response, request, homeAccountIdentifier, idTokenClaims, responseAccessToken, tenantId, reqTimestamp) {\r\n        const cachedIdToken = CacheHelpers.createIdTokenEntity(homeAccountIdentifier, request.authority, response.id_token || \"\", request.clientId, idTokenClaims.tid || \"\");\r\n        // cache accessToken in inmemory storage\r\n        const expiresIn = request.tokenType === AuthenticationScheme.POP\r\n            ? Constants.SHR_NONCE_VALIDITY\r\n            : (typeof response.expires_in === \"string\"\r\n                ? parseInt(response.expires_in, 10)\r\n                : response.expires_in) || 0;\r\n        const tokenExpirationSeconds = reqTimestamp + expiresIn;\r\n        const responseScopes = this.generateScopes(response.scope, request.scope);\r\n        const cachedAccessToken = CacheHelpers.createAccessTokenEntity(homeAccountIdentifier, request.authority, responseAccessToken, request.clientId, idTokenClaims.tid || tenantId, responseScopes.printScopes(), tokenExpirationSeconds, 0, base64Decode, undefined, request.tokenType, undefined, request.keyId);\r\n        const nativeCacheRecord = {\r\n            idToken: cachedIdToken,\r\n            accessToken: cachedAccessToken,\r\n        };\r\n        return this.nativeStorageManager.saveCacheRecord(nativeCacheRecord, this.correlationId, AuthToken.isKmsi(idTokenClaims), this.apiId, request.storeInCache);\r\n    }\r\n    getExpiresInValue(tokenType, expiresIn) {\r\n        return tokenType === AuthenticationScheme.POP\r\n            ? Constants.SHR_NONCE_VALIDITY\r\n            : (typeof expiresIn === \"string\"\r\n                ? parseInt(expiresIn, 10)\r\n                : expiresIn) || 0;\r\n    }\r\n    addTelemetryFromNativeResponse(matsResponse) {\r\n        const mats = this.getMATSFromResponse(matsResponse);\r\n        if (!mats) {\r\n            return null;\r\n        }\r\n        this.performanceClient.addFields({\r\n            extensionId: this.platformAuthProvider.getExtensionId(),\r\n            extensionVersion: this.platformAuthProvider.getExtensionVersion(),\r\n            matsBrokerVersion: mats.broker_version,\r\n            matsAccountJoinOnStart: mats.account_join_on_start,\r\n            matsAccountJoinOnEnd: mats.account_join_on_end,\r\n            matsDeviceJoin: mats.device_join,\r\n            matsPromptBehavior: mats.prompt_behavior,\r\n            matsApiErrorCode: mats.api_error_code,\r\n            matsUiVisible: mats.ui_visible,\r\n            matsSilentCode: mats.silent_code,\r\n            matsSilentBiSubCode: mats.silent_bi_sub_code,\r\n            matsSilentMessage: mats.silent_message,\r\n            matsSilentStatus: mats.silent_status,\r\n            matsHttpStatus: mats.http_status,\r\n            matsHttpEventCount: mats.http_event_count,\r\n        }, this.correlationId);\r\n        return mats;\r\n    }\r\n    /**\r\n     * Gets MATS telemetry from native response\r\n     * @param response\r\n     * @returns\r\n     */\r\n    getMATSFromResponse(matsResponse) {\r\n        if (matsResponse) {\r\n            try {\r\n                return JSON.parse(matsResponse);\r\n            }\r\n            catch (e) {\r\n                this.logger.error(\"NativeInteractionClient - Error parsing MATS telemetry, returning null instead\");\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n    /**\r\n     * Returns whether or not response came from native cache\r\n     * @param response\r\n     * @returns\r\n     */\r\n    isResponseFromCache(mats) {\r\n        if (typeof mats.is_cached === \"undefined\") {\r\n            this.logger.verbose(\"NativeInteractionClient - MATS telemetry does not contain field indicating if response was served from cache. Returning false.\");\r\n            return false;\r\n        }\r\n        return !!mats.is_cached;\r\n    }\r\n    /**\r\n     * Translates developer provided request object into NativeRequest object\r\n     * @param request\r\n     */\r\n    async initializeNativeRequest(request) {\r\n        this.logger.trace(\"NativeInteractionClient - initializeNativeRequest called\");\r\n        const canonicalAuthority = await this.getCanonicalAuthority(request);\r\n        // scopes are expected to be received by the native broker as \"scope\" and will be added to the request below. Other properties that should be dropped from the request to the native broker can be included in the object destructuring here.\r\n        const { scopes, claims, ...remainingProperties } = request;\r\n        const scopeSet = new ScopeSet(scopes || []);\r\n        scopeSet.appendScopes(OIDC_DEFAULT_SCOPES);\r\n        // ignore config claims if skipBrokerClaims is set to true and this is a brokered authentication flow\r\n        const configClaims = request.skipBrokerClaims && !!request.embeddedClientId\r\n            ? undefined\r\n            : this.config.auth.clientCapabilities;\r\n        const mergedClaims = configClaims && configClaims.length\r\n            ? RequestParameterBuilder.addClientCapabilitiesToClaims(claims, configClaims)\r\n            : claims;\r\n        const validatedRequest = {\r\n            ...remainingProperties,\r\n            claims: mergedClaims,\r\n            accountId: this.accountId,\r\n            clientId: this.config.auth.clientId,\r\n            authority: canonicalAuthority.urlString,\r\n            scope: scopeSet.printScopes(),\r\n            redirectUri: this.getRedirectUri(request.redirectUri),\r\n            prompt: this.getPrompt(request.prompt),\r\n            correlationId: this.correlationId,\r\n            tokenType: request.authenticationScheme,\r\n            windowTitleSubstring: document.title,\r\n            extraParameters: {\r\n                ...request.extraQueryParameters,\r\n                ...request.tokenQueryParameters,\r\n            },\r\n            extendedExpiryToken: false,\r\n            keyId: request.popKid,\r\n        };\r\n        // Check for PoP token requests: signPopToken should only be set to true if popKid is not set\r\n        if (validatedRequest.signPopToken && !!request.popKid) {\r\n            throw createBrowserAuthError(invalidPopTokenRequest);\r\n        }\r\n        this.handleExtraBrokerParams(validatedRequest);\r\n        validatedRequest.extraParameters =\r\n            validatedRequest.extraParameters || {};\r\n        validatedRequest.extraParameters.telemetry =\r\n            PlatformAuthConstants.MATS_TELEMETRY;\r\n        if (request.authenticationScheme === AuthenticationScheme.POP) {\r\n            // add POP request type\r\n            const shrParameters = {\r\n                resourceRequestUri: request.resourceRequestUri,\r\n                resourceRequestMethod: request.resourceRequestMethod,\r\n                shrClaims: request.shrClaims,\r\n                shrNonce: request.shrNonce,\r\n            };\r\n            const popTokenGenerator = new PopTokenGenerator(this.browserCrypto);\r\n            // generate reqCnf if not provided in the request\r\n            let reqCnfData;\r\n            if (!validatedRequest.keyId) {\r\n                const generatedReqCnfData = await invokeAsync(popTokenGenerator.generateCnf.bind(popTokenGenerator), PerformanceEvents.PopTokenGenerateCnf, this.logger, this.performanceClient, this.correlationId)(shrParameters, this.logger);\r\n                reqCnfData = generatedReqCnfData.reqCnfString;\r\n                validatedRequest.keyId = generatedReqCnfData.kid;\r\n                validatedRequest.signPopToken = true;\r\n            }\r\n            else {\r\n                reqCnfData = this.browserCrypto.base64UrlEncode(JSON.stringify({ kid: validatedRequest.keyId }));\r\n                validatedRequest.signPopToken = false;\r\n            }\r\n            // SPAs require whole string to be passed to broker\r\n            validatedRequest.reqCnf = reqCnfData;\r\n        }\r\n        this.addRequestSKUs(validatedRequest);\r\n        return validatedRequest;\r\n    }\r\n    async getCanonicalAuthority(request) {\r\n        const requestAuthority = request.authority || this.config.auth.authority;\r\n        if (request.account) {\r\n            // validate authority\r\n            await this.getDiscoveredAuthority({\r\n                requestAuthority,\r\n                requestAzureCloudOptions: request.azureCloudOptions,\r\n                account: request.account,\r\n            });\r\n        }\r\n        const canonicalAuthority = new UrlString(requestAuthority);\r\n        canonicalAuthority.validateAsUri();\r\n        return canonicalAuthority;\r\n    }\r\n    getPrompt(prompt) {\r\n        // If request is silent, prompt is always none\r\n        switch (this.apiId) {\r\n            case ApiId.ssoSilent:\r\n            case ApiId.acquireTokenSilent_silentFlow:\r\n                this.logger.trace(\"initializeNativeRequest: silent request sets prompt to none\");\r\n                return PromptValue.NONE;\r\n        }\r\n        // Prompt not provided, request may proceed and native broker decides if it needs to prompt\r\n        if (!prompt) {\r\n            this.logger.trace(\"initializeNativeRequest: prompt was not provided\");\r\n            return undefined;\r\n        }\r\n        // If request is interactive, check if prompt provided is allowed to go directly to native broker\r\n        switch (prompt) {\r\n            case PromptValue.NONE:\r\n            case PromptValue.CONSENT:\r\n            case PromptValue.LOGIN:\r\n            case PromptValue.SELECT_ACCOUNT:\r\n                this.logger.trace(\"initializeNativeRequest: prompt is compatible with native flow\");\r\n                return prompt;\r\n            default:\r\n                this.logger.trace(`initializeNativeRequest: prompt = ${prompt} is not compatible with native flow`);\r\n                throw createBrowserAuthError(nativePromptNotSupported);\r\n        }\r\n    }\r\n    /**\r\n     * Handles extra broker request parameters\r\n     * @param request {PlatformAuthRequest}\r\n     * @private\r\n     */\r\n    handleExtraBrokerParams(request) {\r\n        const hasExtraBrokerParams = request.extraParameters &&\r\n            request.extraParameters.hasOwnProperty(AADServerParamKeys.BROKER_CLIENT_ID) &&\r\n            request.extraParameters.hasOwnProperty(AADServerParamKeys.BROKER_REDIRECT_URI) &&\r\n            request.extraParameters.hasOwnProperty(AADServerParamKeys.CLIENT_ID);\r\n        if (!request.embeddedClientId && !hasExtraBrokerParams) {\r\n            return;\r\n        }\r\n        let child_client_id = \"\";\r\n        const child_redirect_uri = request.redirectUri;\r\n        if (request.embeddedClientId) {\r\n            request.redirectUri = this.config.auth.redirectUri;\r\n            child_client_id = request.embeddedClientId;\r\n        }\r\n        else if (request.extraParameters) {\r\n            request.redirectUri =\r\n                request.extraParameters[AADServerParamKeys.BROKER_REDIRECT_URI];\r\n            child_client_id =\r\n                request.extraParameters[AADServerParamKeys.CLIENT_ID];\r\n        }\r\n        request.extraParameters = {\r\n            child_client_id,\r\n            child_redirect_uri,\r\n        };\r\n        this.performanceClient?.addFields({\r\n            embeddedClientId: child_client_id,\r\n            embeddedRedirectUri: child_redirect_uri,\r\n        }, this.correlationId);\r\n    }\r\n}\n\nexport { PlatformAuthInteractionClient };\n//# sourceMappingURL=PlatformAuthInteractionClient.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { createClientConfigurationError, ClientConfigurationErrorCodes, invokeAsync, PerformanceEvents, RequestParameterBuilder, OAuthResponseType, Constants, AuthorizeProtocol, ThrottlingUtils, ResponseHandler, TimeUtils, ProtocolMode, AuthenticationScheme, PopTokenGenerator, ProtocolUtils } from '@azure/msal-common/browser';\nimport { BrowserConstants } from '../utils/BrowserConstants.mjs';\nimport { version } from '../packageMetadata.mjs';\nimport { CryptoOps } from '../crypto/CryptoOps.mjs';\nimport { createBrowserAuthError } from '../error/BrowserAuthError.mjs';\nimport { InteractionHandler } from '../interaction_handler/InteractionHandler.mjs';\nimport { PlatformAuthInteractionClient } from '../interaction_client/PlatformAuthInteractionClient.mjs';\nimport { decryptEarResponse } from '../crypto/BrowserCrypto.mjs';\nimport { earJwkEmpty, earJweEmpty, nativeConnectionNotEstablished } from '../error/BrowserAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst clientDataAccountTypeMapping = new Map([\r\n    [\"e\", \"AAD\"],\r\n    [\"m\", \"MSA\"],\r\n]);\r\n/**\r\n * Parses the clientdata response parameter from the /authorize endpoint.\r\n *\r\n * The clientdata value is URL-encoded and pipe-delimited:\r\n *   urlencoded(account_type | error | sub_error | cloud_instance | caller_data_boundary)\r\n *\r\n * @param clientdata - The raw clientdata string from the authorize response\r\n * @returns Parsed ClientData object, or null if the input is empty/invalid\r\n */\r\nfunction parseClientData(clientdata) {\r\n    if (!clientdata) {\r\n        return null;\r\n    }\r\n    try {\r\n        const decoded = decodeURIComponent(clientdata);\r\n        const parts = decoded.split(\"|\");\r\n        if (parts.length < 5) {\r\n            return null;\r\n        }\r\n        return {\r\n            accountType: clientDataAccountTypeMapping.get(parts[0]?.trim() || \"\") || \"\",\r\n            error: parts[1]?.trim() || \"\",\r\n            subError: parts[2]?.trim() || \"\",\r\n            cloudInstance: parts[3]?.trim() || \"\",\r\n            callerDataBoundary: parts[4]?.trim() || \"\",\r\n        };\r\n    }\r\n    catch {\r\n        return null;\r\n    }\r\n}\r\n/**\r\n * Instruments account type, error, and suberror from clientdata\r\n */\r\nfunction instrumentClientData(response, correlationId, performanceClient) {\r\n    const parsed = parseClientData(response.clientdata);\r\n    parsed?.accountType &&\r\n        performanceClient.addFields({ accountType: parsed.accountType }, correlationId);\r\n    parsed?.error &&\r\n        performanceClient.addFields({ serverErrorNo: parsed.error }, correlationId);\r\n    parsed?.subError &&\r\n        performanceClient.addFields({ serverSubErrorNo: parsed.subError }, correlationId);\r\n}\r\n/**\r\n * Returns map of parameters that are applicable to all calls to /authorize whether using PKCE or EAR\r\n * @param config\r\n * @param authority\r\n * @param request\r\n * @param logger\r\n * @param performanceClient\r\n * @returns\r\n */\r\nasync function getStandardParameters(config, authority, request, logger, performanceClient) {\r\n    const parameters = AuthorizeProtocol.getStandardAuthorizeRequestParameters({ ...config.auth, authority: authority }, request, logger, performanceClient);\r\n    RequestParameterBuilder.addLibraryInfo(parameters, {\r\n        sku: BrowserConstants.MSAL_SKU,\r\n        version: version,\r\n        os: \"\",\r\n        cpu: \"\",\r\n    });\r\n    if (config.auth.protocolMode !== ProtocolMode.OIDC) {\r\n        RequestParameterBuilder.addApplicationTelemetry(parameters, config.telemetry.application);\r\n    }\r\n    if (request.platformBroker) {\r\n        // signal ests that this is a WAM call\r\n        RequestParameterBuilder.addNativeBroker(parameters);\r\n        // instrument JS-platform bridge specific fields\r\n        performanceClient.addFields({\r\n            isPlatformAuthorizeRequest: true,\r\n        }, request.correlationId);\r\n        // pass the req_cnf for POP\r\n        if (request.authenticationScheme === AuthenticationScheme.POP) {\r\n            const cryptoOps = new CryptoOps(logger, performanceClient);\r\n            const popTokenGenerator = new PopTokenGenerator(cryptoOps);\r\n            // req_cnf is always sent as a string for SPAs\r\n            let reqCnfData;\r\n            if (!request.popKid) {\r\n                const generatedReqCnfData = await invokeAsync(popTokenGenerator.generateCnf.bind(popTokenGenerator), PerformanceEvents.PopTokenGenerateCnf, logger, performanceClient, request.correlationId)(request, logger);\r\n                reqCnfData = generatedReqCnfData.reqCnfString;\r\n            }\r\n            else {\r\n                reqCnfData = cryptoOps.encodeKid(request.popKid);\r\n            }\r\n            RequestParameterBuilder.addPopToken(parameters, reqCnfData);\r\n        }\r\n    }\r\n    RequestParameterBuilder.instrumentBrokerParams(parameters, request.correlationId, performanceClient);\r\n    return parameters;\r\n}\r\n/**\r\n * Gets the full /authorize URL with request parameters when using Auth Code + PKCE\r\n * @param config\r\n * @param authority\r\n * @param request\r\n * @param logger\r\n * @param performanceClient\r\n * @returns\r\n */\r\nasync function getAuthCodeRequestUrl(config, authority, request, logger, performanceClient) {\r\n    if (!request.codeChallenge) {\r\n        throw createClientConfigurationError(ClientConfigurationErrorCodes.pkceParamsMissing);\r\n    }\r\n    const parameters = await invokeAsync(getStandardParameters, PerformanceEvents.GetStandardParams, logger, performanceClient, request.correlationId)(config, authority, request, logger, performanceClient);\r\n    RequestParameterBuilder.addResponseType(parameters, OAuthResponseType.CODE);\r\n    RequestParameterBuilder.addCodeChallengeParams(parameters, request.codeChallenge, Constants.S256_CODE_CHALLENGE_METHOD);\r\n    RequestParameterBuilder.addExtraQueryParameters(parameters, request.extraQueryParameters || {});\r\n    return AuthorizeProtocol.getAuthorizeUrl(authority, parameters, config.auth.encodeExtraQueryParams, request.extraQueryParameters);\r\n}\r\n/**\r\n * Gets the form that will be posted to /authorize with request parameters when using EAR\r\n */\r\nasync function getEARForm(frame, config, authority, request, logger, performanceClient) {\r\n    if (!request.earJwk) {\r\n        throw createBrowserAuthError(earJwkEmpty);\r\n    }\r\n    const parameters = await getStandardParameters(config, authority, request, logger, performanceClient);\r\n    RequestParameterBuilder.addResponseType(parameters, OAuthResponseType.IDTOKEN_TOKEN_REFRESHTOKEN);\r\n    RequestParameterBuilder.addEARParameters(parameters, request.earJwk);\r\n    // Also add codeChallenge as backup in case EAR is not supported\r\n    RequestParameterBuilder.addCodeChallengeParams(parameters, request.codeChallenge, Constants.S256_CODE_CHALLENGE_METHOD);\r\n    const queryParams = new Map();\r\n    RequestParameterBuilder.addExtraQueryParameters(queryParams, request.extraQueryParameters || {});\r\n    // Add correlationId to query params so gateway can propagate it to IDPs\r\n    RequestParameterBuilder.addCorrelationId(queryParams, request.correlationId);\r\n    const url = AuthorizeProtocol.getAuthorizeUrl(authority, queryParams, config.auth.encodeExtraQueryParams, request.extraQueryParameters);\r\n    return createForm(frame, url, parameters);\r\n}\r\n/**\r\n * Gets the form that will be posted to /authorize with request parameters when using POST method\r\n */\r\nasync function getCodeForm(frame, config, authority, request, logger, performanceClient) {\r\n    const parameters = await getStandardParameters(config, authority, request, logger, performanceClient);\r\n    RequestParameterBuilder.addResponseType(parameters, OAuthResponseType.CODE);\r\n    RequestParameterBuilder.addCodeChallengeParams(parameters, request.codeChallenge, request.codeChallengeMethod || Constants.S256_CODE_CHALLENGE_METHOD);\r\n    RequestParameterBuilder.addPostBodyParameters(parameters, request.authorizePostBodyParameters || {});\r\n    const queryParams = new Map();\r\n    RequestParameterBuilder.addExtraQueryParameters(queryParams, request.extraQueryParameters || {});\r\n    // Add correlationId to query params so gateway can propagate it to IDPs\r\n    RequestParameterBuilder.addCorrelationId(queryParams, request.correlationId);\r\n    const url = AuthorizeProtocol.getAuthorizeUrl(authority, queryParams, config.auth.encodeExtraQueryParams, request.extraQueryParameters);\r\n    return createForm(frame, url, parameters);\r\n}\r\n/**\r\n * Creates form element in the provided document with auth parameters in the post body\r\n * @param frame\r\n * @param authorizeUrl\r\n * @param parameters\r\n * @returns\r\n */\r\nfunction createForm(frame, authorizeUrl, parameters) {\r\n    const form = frame.createElement(\"form\");\r\n    form.method = \"post\";\r\n    form.action = authorizeUrl;\r\n    parameters.forEach((value, key) => {\r\n        const param = frame.createElement(\"input\");\r\n        param.hidden = true;\r\n        param.name = key;\r\n        param.value = value;\r\n        form.appendChild(param);\r\n    });\r\n    frame.body.appendChild(form);\r\n    return form;\r\n}\r\n/**\r\n * Response handler when server returns accountId on the /authorize request\r\n * @param request\r\n * @param accountId\r\n * @param apiId\r\n * @param config\r\n * @param browserStorage\r\n * @param nativeStorage\r\n * @param eventHandler\r\n * @param logger\r\n * @param performanceClient\r\n * @param nativeMessageHandler\r\n * @returns\r\n */\r\nasync function handleResponsePlatformBroker(request, accountId, apiId, config, browserStorage, nativeStorage, eventHandler, logger, performanceClient, platformAuthProvider) {\r\n    logger.verbose(\"Account id found, calling WAM for token\");\r\n    if (!platformAuthProvider) {\r\n        throw createBrowserAuthError(nativeConnectionNotEstablished);\r\n    }\r\n    const browserCrypto = new CryptoOps(logger, performanceClient);\r\n    const nativeInteractionClient = new PlatformAuthInteractionClient(config, browserStorage, browserCrypto, logger, eventHandler, config.system.navigationClient, apiId, performanceClient, platformAuthProvider, accountId, nativeStorage, request.correlationId);\r\n    const { userRequestState } = ProtocolUtils.parseRequestState(browserCrypto, request.state);\r\n    return invokeAsync(nativeInteractionClient.acquireToken.bind(nativeInteractionClient), PerformanceEvents.NativeInteractionClientAcquireToken, logger, performanceClient, request.correlationId)({\r\n        ...request,\r\n        state: userRequestState,\r\n        prompt: undefined, // Server should handle the prompt, ideally native broker can do this part silently\r\n    });\r\n}\r\n/**\r\n * Response handler when server returns code on the /authorize request\r\n * @param request\r\n * @param response\r\n * @param codeVerifier\r\n * @param authClient\r\n * @param browserStorage\r\n * @param logger\r\n * @param performanceClient\r\n * @returns\r\n */\r\nasync function handleResponseCode(request, response, codeVerifier, apiId, config, authClient, browserStorage, nativeStorage, eventHandler, logger, performanceClient, platformAuthProvider) {\r\n    // Remove throttle if it exists\r\n    ThrottlingUtils.removeThrottle(browserStorage, config.auth.clientId, request);\r\n    // Instrument clientdata telemetry fields from the authorize response\r\n    instrumentClientData(response, request.correlationId, performanceClient);\r\n    if (response.accountId) {\r\n        return invokeAsync(handleResponsePlatformBroker, PerformanceEvents.HandleResponsePlatformBroker, logger, performanceClient, request.correlationId)(request, response.accountId, apiId, config, browserStorage, nativeStorage, eventHandler, logger, performanceClient, platformAuthProvider);\r\n    }\r\n    const authCodeRequest = {\r\n        ...request,\r\n        code: response.code || \"\",\r\n        codeVerifier: codeVerifier,\r\n    };\r\n    // Create popup interaction handler.\r\n    const interactionHandler = new InteractionHandler(authClient, browserStorage, authCodeRequest, logger, performanceClient);\r\n    // Handle response from hash string.\r\n    const result = await invokeAsync(interactionHandler.handleCodeResponse.bind(interactionHandler), PerformanceEvents.HandleCodeResponse, logger, performanceClient, request.correlationId)(response, request, apiId);\r\n    return result;\r\n}\r\n/**\r\n * Response handler when server returns ear_jwe on the /authorize request\r\n * @param request\r\n * @param response\r\n * @param apiId\r\n * @param config\r\n * @param authority\r\n * @param browserStorage\r\n * @param nativeStorage\r\n * @param eventHandler\r\n * @param logger\r\n * @param performanceClient\r\n * @param nativeMessageHandler\r\n * @returns\r\n */\r\nasync function handleResponseEAR(request, response, apiId, config, authority, browserStorage, nativeStorage, eventHandler, logger, performanceClient, platformAuthProvider) {\r\n    // Remove throttle if it exists\r\n    ThrottlingUtils.removeThrottle(browserStorage, config.auth.clientId, request);\r\n    // Instrument clientdata telemetry fields from the authorize response\r\n    instrumentClientData(response, request.correlationId, performanceClient);\r\n    // Validate state & check response for errors\r\n    AuthorizeProtocol.validateAuthorizationResponse(response, request.state);\r\n    if (!response.ear_jwe) {\r\n        throw createBrowserAuthError(earJweEmpty);\r\n    }\r\n    if (!request.earJwk) {\r\n        throw createBrowserAuthError(earJwkEmpty);\r\n    }\r\n    const decryptedData = JSON.parse(await invokeAsync(decryptEarResponse, PerformanceEvents.DecryptEarResponse, logger, performanceClient, request.correlationId)(request.earJwk, response.ear_jwe));\r\n    if (decryptedData.accountId) {\r\n        return invokeAsync(handleResponsePlatformBroker, PerformanceEvents.HandleResponsePlatformBroker, logger, performanceClient, request.correlationId)(request, decryptedData.accountId, apiId, config, browserStorage, nativeStorage, eventHandler, logger, performanceClient, platformAuthProvider);\r\n    }\r\n    const responseHandler = new ResponseHandler(config.auth.clientId, browserStorage, new CryptoOps(logger, performanceClient), logger, null, null, performanceClient);\r\n    // Validate response. This function throws a server error if an error is returned by the server.\r\n    responseHandler.validateTokenResponse(decryptedData);\r\n    // Temporary until response handler is refactored to be more flow agnostic.\r\n    const additionalData = {\r\n        code: \"\",\r\n        state: request.state,\r\n        nonce: request.nonce,\r\n        client_info: decryptedData.client_info,\r\n        cloud_graph_host_name: decryptedData.cloud_graph_host_name,\r\n        cloud_instance_host_name: decryptedData.cloud_instance_host_name,\r\n        cloud_instance_name: decryptedData.cloud_instance_name,\r\n        msgraph_host: decryptedData.msgraph_host,\r\n    };\r\n    return (await invokeAsync(responseHandler.handleServerTokenResponse.bind(responseHandler), PerformanceEvents.HandleServerTokenResponse, logger, performanceClient, request.correlationId)(decryptedData, authority, TimeUtils.nowSeconds(), request, apiId, additionalData, undefined, undefined, undefined, undefined));\r\n}\n\nexport { getAuthCodeRequestUrl, getCodeForm, getEARForm, handleResponseCode, handleResponseEAR, handleResponsePlatformBroker, parseClientData };\n//# sourceMappingURL=Authorize.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { PerformanceEvents, invoke, invokeAsync } from '@azure/msal-common/browser';\nimport { createBrowserAuthError } from '../error/BrowserAuthError.mjs';\nimport { urlEncodeArr } from '../encode/Base64Encode.mjs';\nimport { getRandomValues, sha256Digest } from './BrowserCrypto.mjs';\nimport { pkceNotCreated } from '../error/BrowserAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n// Constant byte array length\r\nconst RANDOM_BYTE_ARR_LENGTH = 32;\r\n/**\r\n * This file defines APIs to generate PKCE codes and code verifiers.\r\n */\r\n/**\r\n * Generates PKCE Codes. See the RFC for more information: https://tools.ietf.org/html/rfc7636\r\n */\r\nasync function generatePkceCodes(performanceClient, logger, correlationId) {\r\n    performanceClient.addQueueMeasurement(PerformanceEvents.GeneratePkceCodes, correlationId);\r\n    const codeVerifier = invoke(generateCodeVerifier, PerformanceEvents.GenerateCodeVerifier, logger, performanceClient, correlationId)(performanceClient, logger, correlationId);\r\n    const codeChallenge = await invokeAsync(generateCodeChallengeFromVerifier, PerformanceEvents.GenerateCodeChallengeFromVerifier, logger, performanceClient, correlationId)(codeVerifier, performanceClient, logger, correlationId);\r\n    return {\r\n        verifier: codeVerifier,\r\n        challenge: codeChallenge,\r\n    };\r\n}\r\n/**\r\n * Generates a random 32 byte buffer and returns the base64\r\n * encoded string to be used as a PKCE Code Verifier\r\n */\r\nfunction generateCodeVerifier(performanceClient, logger, correlationId) {\r\n    try {\r\n        // Generate random values as utf-8\r\n        const buffer = new Uint8Array(RANDOM_BYTE_ARR_LENGTH);\r\n        invoke(getRandomValues, PerformanceEvents.GetRandomValues, logger, performanceClient, correlationId)(buffer);\r\n        // encode verifier as base64\r\n        const pkceCodeVerifierB64 = urlEncodeArr(buffer);\r\n        return pkceCodeVerifierB64;\r\n    }\r\n    catch (e) {\r\n        throw createBrowserAuthError(pkceNotCreated);\r\n    }\r\n}\r\n/**\r\n * Creates a base64 encoded PKCE Code Challenge string from the\r\n * hash created from the PKCE Code Verifier supplied\r\n */\r\nasync function generateCodeChallengeFromVerifier(pkceCodeVerifier, performanceClient, logger, correlationId) {\r\n    performanceClient.addQueueMeasurement(PerformanceEvents.GenerateCodeChallengeFromVerifier, correlationId);\r\n    try {\r\n        // hashed verifier\r\n        const pkceHashedCodeVerifier = await invokeAsync(sha256Digest, PerformanceEvents.Sha256Digest, logger, performanceClient, correlationId)(pkceCodeVerifier, performanceClient, correlationId);\r\n        // encode hash as base64\r\n        return urlEncodeArr(new Uint8Array(pkceHashedCodeVerifier));\r\n    }\r\n    catch (e) {\r\n        throw createBrowserAuthError(pkceNotCreated);\r\n    }\r\n}\n\nexport { generatePkceCodes };\n//# sourceMappingURL=PkceGenerator.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { PlatformAuthConstants, NativeExtensionMethod } from '../../utils/BrowserConstants.mjs';\nimport { PerformanceEvents, createAuthError, AuthErrorCodes } from '@azure/msal-common/browser';\nimport { createNativeAuthError } from '../../error/NativeAuthError.mjs';\nimport { createBrowserAuthError } from '../../error/BrowserAuthError.mjs';\nimport { createNewGuid } from '../../crypto/BrowserCrypto.mjs';\nimport { nativeHandshakeTimeout, nativeExtensionNotInstalled } from '../../error/BrowserAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass PlatformAuthExtensionHandler {\r\n    constructor(logger, handshakeTimeoutMs, performanceClient, extensionId) {\r\n        this.logger = logger;\r\n        this.handshakeTimeoutMs = handshakeTimeoutMs;\r\n        this.extensionId = extensionId;\r\n        this.resolvers = new Map(); // Used for non-handshake messages\r\n        this.handshakeResolvers = new Map(); // Used for handshake messages\r\n        this.messageChannel = new MessageChannel();\r\n        this.windowListener = this.onWindowMessage.bind(this); // Window event callback doesn't have access to 'this' unless it's bound\r\n        this.performanceClient = performanceClient;\r\n        this.handshakeEvent = performanceClient.startMeasurement(PerformanceEvents.NativeMessageHandlerHandshake);\r\n        this.platformAuthType =\r\n            PlatformAuthConstants.PLATFORM_EXTENSION_PROVIDER;\r\n    }\r\n    /**\r\n     * Sends a given message to the extension and resolves with the extension response\r\n     * @param request\r\n     */\r\n    async sendMessage(request) {\r\n        this.logger.trace(this.platformAuthType + \" - sendMessage called.\");\r\n        // fall back to native calls\r\n        const messageBody = {\r\n            method: NativeExtensionMethod.GetToken,\r\n            request: request,\r\n        };\r\n        const req = {\r\n            channel: PlatformAuthConstants.CHANNEL_ID,\r\n            extensionId: this.extensionId,\r\n            responseId: createNewGuid(),\r\n            body: messageBody,\r\n        };\r\n        this.logger.trace(this.platformAuthType + \" - Sending request to browser extension\");\r\n        this.logger.tracePii(this.platformAuthType +\r\n            ` - Sending request to browser extension: ${JSON.stringify(req)}`);\r\n        this.messageChannel.port1.postMessage(req);\r\n        const response = await new Promise((resolve, reject) => {\r\n            this.resolvers.set(req.responseId, { resolve, reject });\r\n        });\r\n        const validatedResponse = this.validatePlatformBrokerResponse(response);\r\n        return validatedResponse;\r\n    }\r\n    /**\r\n     * Returns an instance of the MessageHandler that has successfully established a connection with an extension\r\n     * @param {Logger} logger\r\n     * @param {number} handshakeTimeoutMs\r\n     * @param {IPerformanceClient} performanceClient\r\n     * @param {ICrypto} crypto\r\n     */\r\n    static async createProvider(logger, handshakeTimeoutMs, performanceClient) {\r\n        logger.trace(\"PlatformAuthExtensionHandler - createProvider called.\");\r\n        try {\r\n            const preferredProvider = new PlatformAuthExtensionHandler(logger, handshakeTimeoutMs, performanceClient, PlatformAuthConstants.PREFERRED_EXTENSION_ID);\r\n            await preferredProvider.sendHandshakeRequest();\r\n            return preferredProvider;\r\n        }\r\n        catch (e) {\r\n            // If preferred extension fails for whatever reason, fallback to using any installed extension\r\n            const backupProvider = new PlatformAuthExtensionHandler(logger, handshakeTimeoutMs, performanceClient);\r\n            await backupProvider.sendHandshakeRequest();\r\n            return backupProvider;\r\n        }\r\n    }\r\n    /**\r\n     * Send handshake request helper.\r\n     */\r\n    async sendHandshakeRequest() {\r\n        this.logger.trace(this.platformAuthType + \" - sendHandshakeRequest called.\");\r\n        // Register this event listener before sending handshake\r\n        window.addEventListener(\"message\", this.windowListener, false); // false is important, because content script message processing should work first\r\n        const req = {\r\n            channel: PlatformAuthConstants.CHANNEL_ID,\r\n            extensionId: this.extensionId,\r\n            responseId: createNewGuid(),\r\n            body: {\r\n                method: NativeExtensionMethod.HandshakeRequest,\r\n            },\r\n        };\r\n        this.handshakeEvent.add({\r\n            extensionId: this.extensionId,\r\n            extensionHandshakeTimeoutMs: this.handshakeTimeoutMs,\r\n        });\r\n        this.messageChannel.port1.onmessage = (event) => {\r\n            this.onChannelMessage(event);\r\n        };\r\n        window.postMessage(req, window.origin, [this.messageChannel.port2]);\r\n        return new Promise((resolve, reject) => {\r\n            this.handshakeResolvers.set(req.responseId, { resolve, reject });\r\n            this.timeoutId = window.setTimeout(() => {\r\n                /*\r\n                 * Throw an error if neither HandshakeResponse nor original Handshake request are received in a reasonable timeframe.\r\n                 * This typically suggests an event handler stopped propagation of the Handshake request but did not respond to it on the MessageChannel port\r\n                 */\r\n                window.removeEventListener(\"message\", this.windowListener, false);\r\n                this.messageChannel.port1.close();\r\n                this.messageChannel.port2.close();\r\n                this.handshakeEvent.end({\r\n                    extensionHandshakeTimedOut: true,\r\n                    success: false,\r\n                });\r\n                reject(createBrowserAuthError(nativeHandshakeTimeout));\r\n                this.handshakeResolvers.delete(req.responseId);\r\n            }, this.handshakeTimeoutMs); // Use a reasonable timeout in milliseconds here\r\n        });\r\n    }\r\n    /**\r\n     * Invoked when a message is posted to the window. If a handshake request is received it means the extension is not installed.\r\n     * @param event\r\n     */\r\n    onWindowMessage(event) {\r\n        this.logger.trace(this.platformAuthType + \" - onWindowMessage called\");\r\n        // We only accept messages from ourselves\r\n        if (event.source !== window) {\r\n            return;\r\n        }\r\n        const request = event.data;\r\n        if (!request.channel ||\r\n            request.channel !== PlatformAuthConstants.CHANNEL_ID) {\r\n            return;\r\n        }\r\n        if (request.extensionId && request.extensionId !== this.extensionId) {\r\n            return;\r\n        }\r\n        if (request.body.method === NativeExtensionMethod.HandshakeRequest) {\r\n            const handshakeResolver = this.handshakeResolvers.get(request.responseId);\r\n            /*\r\n             * Filter out responses with no matched resolvers sooner to keep channel ports open while waiting for\r\n             * the proper response.\r\n             */\r\n            if (!handshakeResolver) {\r\n                this.logger.trace(this.platformAuthType +\r\n                    `.onWindowMessage - resolver can't be found for request ${request.responseId}`);\r\n                return;\r\n            }\r\n            // If we receive this message back it means no extension intercepted the request, meaning no extension supporting handshake protocol is installed\r\n            this.logger.verbose(request.extensionId\r\n                ? `Extension with id: ${request.extensionId} not installed`\r\n                : \"No extension installed\");\r\n            clearTimeout(this.timeoutId);\r\n            this.messageChannel.port1.close();\r\n            this.messageChannel.port2.close();\r\n            window.removeEventListener(\"message\", this.windowListener, false);\r\n            this.handshakeEvent.end({\r\n                success: false,\r\n                extensionInstalled: false,\r\n            });\r\n            handshakeResolver.reject(createBrowserAuthError(nativeExtensionNotInstalled));\r\n        }\r\n    }\r\n    /**\r\n     * Invoked when a message is received from the extension on the MessageChannel port\r\n     * @param event\r\n     */\r\n    onChannelMessage(event) {\r\n        this.logger.trace(this.platformAuthType + \" - onChannelMessage called.\");\r\n        const request = event.data;\r\n        const resolver = this.resolvers.get(request.responseId);\r\n        const handshakeResolver = this.handshakeResolvers.get(request.responseId);\r\n        try {\r\n            const method = request.body.method;\r\n            if (method === NativeExtensionMethod.Response) {\r\n                if (!resolver) {\r\n                    return;\r\n                }\r\n                const response = request.body.response;\r\n                this.logger.trace(this.platformAuthType +\r\n                    \" - Received response from browser extension\");\r\n                this.logger.tracePii(this.platformAuthType +\r\n                    ` - Received response from browser extension: ${JSON.stringify(response)}`);\r\n                if (response.status !== \"Success\") {\r\n                    resolver.reject(createNativeAuthError(response.code, response.description, response.ext));\r\n                }\r\n                else if (response.result) {\r\n                    if (response.result[\"code\"] &&\r\n                        response.result[\"description\"]) {\r\n                        resolver.reject(createNativeAuthError(response.result[\"code\"], response.result[\"description\"], response.result[\"ext\"]));\r\n                    }\r\n                    else {\r\n                        resolver.resolve(response.result);\r\n                    }\r\n                }\r\n                else {\r\n                    throw createAuthError(AuthErrorCodes.unexpectedError, \"Event does not contain result.\");\r\n                }\r\n                this.resolvers.delete(request.responseId);\r\n            }\r\n            else if (method === NativeExtensionMethod.HandshakeResponse) {\r\n                if (!handshakeResolver) {\r\n                    this.logger.trace(this.platformAuthType +\r\n                        `.onChannelMessage - resolver can't be found for request ${request.responseId}`);\r\n                    return;\r\n                }\r\n                clearTimeout(this.timeoutId); // Clear setTimeout\r\n                window.removeEventListener(\"message\", this.windowListener, false); // Remove 'No extension' listener\r\n                this.extensionId = request.extensionId;\r\n                this.extensionVersion = request.body.version;\r\n                this.logger.verbose(this.platformAuthType +\r\n                    ` - Received HandshakeResponse from extension: ${this.extensionId}`);\r\n                this.handshakeEvent.end({\r\n                    extensionInstalled: true,\r\n                    success: true,\r\n                });\r\n                handshakeResolver.resolve();\r\n                this.handshakeResolvers.delete(request.responseId);\r\n            }\r\n            // Do nothing if method is not Response or HandshakeResponse\r\n        }\r\n        catch (err) {\r\n            this.logger.error(\"Error parsing response from WAM Extension\");\r\n            this.logger.errorPii(`Error parsing response from WAM Extension: ${err}`);\r\n            this.logger.errorPii(`Unable to parse ${event}`);\r\n            if (resolver) {\r\n                resolver.reject(err);\r\n            }\r\n            else if (handshakeResolver) {\r\n                handshakeResolver.reject(err);\r\n            }\r\n        }\r\n    }\r\n    /**\r\n     * Validates native platform response before processing\r\n     * @param response\r\n     */\r\n    validatePlatformBrokerResponse(response) {\r\n        if (response.hasOwnProperty(\"access_token\") &&\r\n            response.hasOwnProperty(\"id_token\") &&\r\n            response.hasOwnProperty(\"client_info\") &&\r\n            response.hasOwnProperty(\"account\") &&\r\n            response.hasOwnProperty(\"scope\") &&\r\n            response.hasOwnProperty(\"expires_in\")) {\r\n            return response;\r\n        }\r\n        else {\r\n            throw createAuthError(AuthErrorCodes.unexpectedError, \"Response missing expected properties.\");\r\n        }\r\n    }\r\n    /**\r\n     * Returns the Id for the browser extension this handler is communicating with\r\n     * @returns\r\n     */\r\n    getExtensionId() {\r\n        return this.extensionId;\r\n    }\r\n    /**\r\n     * Returns the version for the browser extension this handler is communicating with\r\n     * @returns\r\n     */\r\n    getExtensionVersion() {\r\n        return this.extensionVersion;\r\n    }\r\n    getExtensionName() {\r\n        return this.getExtensionId() ===\r\n            PlatformAuthConstants.PREFERRED_EXTENSION_ID\r\n            ? \"chrome\"\r\n            : this.getExtensionId()?.length\r\n                ? \"unknown\"\r\n                : undefined;\r\n    }\r\n}\n\nexport { PlatformAuthExtensionHandler };\n//# sourceMappingURL=PlatformAuthExtensionHandler.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { createAuthError, AuthErrorCodes } from '@azure/msal-common/browser';\nimport { PlatformAuthConstants } from '../../utils/BrowserConstants.mjs';\nimport { createNativeAuthError } from '../../error/NativeAuthError.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass PlatformAuthDOMHandler {\r\n    constructor(logger, performanceClient, correlationId) {\r\n        this.logger = logger;\r\n        this.performanceClient = performanceClient;\r\n        this.correlationId = correlationId;\r\n        this.platformAuthType = PlatformAuthConstants.PLATFORM_DOM_PROVIDER;\r\n    }\r\n    static async createProvider(logger, performanceClient, correlationId) {\r\n        logger.trace(\"PlatformAuthDOMHandler: createProvider called\");\r\n        // @ts-ignore\r\n        if (window.navigator?.platformAuthentication) {\r\n            const supportedContracts = \r\n            // @ts-ignore\r\n            await window.navigator.platformAuthentication.getSupportedContracts(PlatformAuthConstants.MICROSOFT_ENTRA_BROKERID);\r\n            if (supportedContracts?.includes(PlatformAuthConstants.PLATFORM_DOM_APIS)) {\r\n                logger.trace(\"Platform auth api available in DOM\");\r\n                return new PlatformAuthDOMHandler(logger, performanceClient, correlationId);\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n    /**\r\n     * Returns the Id for the broker extension this handler is communicating with\r\n     * @returns\r\n     */\r\n    getExtensionId() {\r\n        return PlatformAuthConstants.MICROSOFT_ENTRA_BROKERID;\r\n    }\r\n    getExtensionVersion() {\r\n        return \"\";\r\n    }\r\n    getExtensionName() {\r\n        return PlatformAuthConstants.DOM_API_NAME;\r\n    }\r\n    /**\r\n     * Send token request to platform broker via browser DOM API\r\n     * @param request\r\n     * @returns\r\n     */\r\n    async sendMessage(request) {\r\n        this.logger.trace(this.platformAuthType + \" - Sending request to browser DOM API\");\r\n        try {\r\n            const platformDOMRequest = this.initializePlatformDOMRequest(request);\r\n            const response = \r\n            // @ts-ignore\r\n            await window.navigator.platformAuthentication.executeGetToken(platformDOMRequest);\r\n            return this.validatePlatformBrokerResponse(response);\r\n        }\r\n        catch (e) {\r\n            this.logger.error(this.platformAuthType + \" - executeGetToken DOM API error\");\r\n            throw e;\r\n        }\r\n    }\r\n    initializePlatformDOMRequest(request) {\r\n        this.logger.trace(this.platformAuthType + \" - initializeNativeDOMRequest called\");\r\n        const { accountId, clientId, authority, scope, redirectUri, correlationId, state, storeInCache, embeddedClientId, extraParameters, ...remainingProperties } = request;\r\n        const validExtraParameters = this.getDOMExtraParams(remainingProperties);\r\n        const platformDOMRequest = {\r\n            accountId: accountId,\r\n            brokerId: this.getExtensionId(),\r\n            authority: authority,\r\n            clientId: clientId,\r\n            correlationId: correlationId || this.correlationId,\r\n            extraParameters: { ...extraParameters, ...validExtraParameters },\r\n            isSecurityTokenService: false,\r\n            redirectUri: redirectUri,\r\n            scope: scope,\r\n            state: state,\r\n            storeInCache: storeInCache,\r\n            embeddedClientId: embeddedClientId,\r\n        };\r\n        return platformDOMRequest;\r\n    }\r\n    validatePlatformBrokerResponse(response) {\r\n        if (response.hasOwnProperty(\"isSuccess\")) {\r\n            if (response.hasOwnProperty(\"accessToken\") &&\r\n                response.hasOwnProperty(\"idToken\") &&\r\n                response.hasOwnProperty(\"clientInfo\") &&\r\n                response.hasOwnProperty(\"account\") &&\r\n                response.hasOwnProperty(\"scopes\") &&\r\n                response.hasOwnProperty(\"expiresIn\")) {\r\n                this.logger.trace(this.platformAuthType +\r\n                    \" - platform broker returned successful and valid response\");\r\n                return this.convertToPlatformBrokerResponse(response);\r\n            }\r\n            else if (response.hasOwnProperty(\"error\")) {\r\n                const errorResponse = response;\r\n                if (errorResponse.isSuccess === false &&\r\n                    errorResponse.error &&\r\n                    errorResponse.error.code) {\r\n                    this.logger.trace(this.platformAuthType +\r\n                        \" - platform broker returned error response\");\r\n                    throw createNativeAuthError(errorResponse.error.code, errorResponse.error.description, {\r\n                        error: parseInt(errorResponse.error.errorCode),\r\n                        protocol_error: errorResponse.error.protocolError,\r\n                        status: errorResponse.error.status,\r\n                        properties: errorResponse.error.properties,\r\n                    });\r\n                }\r\n            }\r\n        }\r\n        throw createAuthError(AuthErrorCodes.unexpectedError, \"Response missing expected properties.\");\r\n    }\r\n    convertToPlatformBrokerResponse(response) {\r\n        this.logger.trace(this.platformAuthType + \" - convertToNativeResponse called\");\r\n        const nativeResponse = {\r\n            access_token: response.accessToken,\r\n            id_token: response.idToken,\r\n            client_info: response.clientInfo,\r\n            account: response.account,\r\n            expires_in: response.expiresIn,\r\n            scope: response.scopes,\r\n            state: response.state || \"\",\r\n            properties: response.properties || {},\r\n            extendedLifetimeToken: response.extendedLifetimeToken ?? false,\r\n            shr: response.proofOfPossessionPayload,\r\n        };\r\n        return nativeResponse;\r\n    }\r\n    getDOMExtraParams(extraParameters) {\r\n        try {\r\n            const stringifiedProperties = {};\r\n            for (const [key, value] of Object.entries(extraParameters)) {\r\n                if (!value) {\r\n                    continue;\r\n                }\r\n                if (typeof value === \"object\") {\r\n                    stringifiedProperties[key] = JSON.stringify(value);\r\n                }\r\n                else {\r\n                    stringifiedProperties[key] = String(value);\r\n                }\r\n            }\r\n            return stringifiedProperties;\r\n        }\r\n        catch (e) {\r\n            this.logger.error(this.platformAuthType + \" - Error stringifying extra parameters\");\r\n            this.logger.errorPii(this.platformAuthType +\r\n                \" - Error stringifying extra parameters: \" +\r\n                e);\r\n            return {};\r\n        }\r\n    }\r\n}\n\nexport { PlatformAuthDOMHandler };\n//# sourceMappingURL=PlatformAuthDOMHandler.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { Logger, StubPerformanceClient, createClientConfigurationError, ClientConfigurationErrorCodes, AuthenticationScheme } from '@azure/msal-common/browser';\nimport { name, version } from '../../packageMetadata.mjs';\nimport { DEFAULT_NATIVE_BROKER_HANDSHAKE_TIMEOUT_MS } from '../../config/Configuration.mjs';\nimport { PlatformAuthExtensionHandler } from './PlatformAuthExtensionHandler.mjs';\nimport { PlatformAuthDOMHandler } from './PlatformAuthDOMHandler.mjs';\nimport { createNewGuid } from '../../crypto/BrowserCrypto.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Checks if the platform broker is available in the current environment.\r\n * @param loggerOptions\r\n * @param perfClient\r\n * @returns\r\n */\r\nasync function isPlatformBrokerAvailable(loggerOptions, perfClient, correlationId, domConfig) {\r\n    const logger = new Logger(loggerOptions || {}, name, version);\r\n    logger.trace(\"isPlatformBrokerAvailable called\");\r\n    const performanceClient = perfClient || new StubPerformanceClient();\r\n    if (typeof window === \"undefined\") {\r\n        logger.trace(\"Non-browser environment detected, returning false\");\r\n        return false;\r\n    }\r\n    return !!(await getPlatformAuthProvider(logger, performanceClient, correlationId || createNewGuid(), undefined, domConfig));\r\n}\r\nasync function getPlatformAuthProvider(logger, performanceClient, correlationId, nativeBrokerHandshakeTimeout, enablePlatformBrokerDOMSupport) {\r\n    logger.trace(\"getPlatformAuthProvider called\", correlationId);\r\n    logger.trace(\"Has client allowed platform auth via DOM API: \" +\r\n        enablePlatformBrokerDOMSupport);\r\n    let platformAuthProvider;\r\n    try {\r\n        if (enablePlatformBrokerDOMSupport) {\r\n            // Check if DOM platform API is supported first\r\n            platformAuthProvider = await PlatformAuthDOMHandler.createProvider(logger, performanceClient, correlationId);\r\n        }\r\n        if (!platformAuthProvider) {\r\n            logger.trace(\"Platform auth via DOM API not available, checking for extension\");\r\n            /*\r\n             * If DOM APIs are not available, check if browser extension is available.\r\n             * Platform authentication via DOM APIs is preferred over extension APIs.\r\n             */\r\n            platformAuthProvider =\r\n                await PlatformAuthExtensionHandler.createProvider(logger, nativeBrokerHandshakeTimeout ||\r\n                    DEFAULT_NATIVE_BROKER_HANDSHAKE_TIMEOUT_MS, performanceClient);\r\n        }\r\n    }\r\n    catch (e) {\r\n        logger.trace(\"Platform auth not available\", e);\r\n    }\r\n    return platformAuthProvider;\r\n}\r\n/**\r\n * Returns boolean indicating whether or not the request should attempt to use native broker\r\n * @param logger\r\n * @param config\r\n * @param platformAuthProvider\r\n * @param authenticationScheme\r\n */\r\nfunction isPlatformAuthAllowed(config, logger, platformAuthProvider, authenticationScheme) {\r\n    logger.trace(\"isPlatformAuthAllowed called\");\r\n    // throw an error if allowPlatformBroker is not enabled and allowPlatformBrokerWithDOM is enabled\r\n    if (!config.system.allowPlatformBroker &&\r\n        config.system.allowPlatformBrokerWithDOM) {\r\n        throw createClientConfigurationError(ClientConfigurationErrorCodes.invalidPlatformBrokerConfiguration);\r\n    }\r\n    if (!config.system.allowPlatformBroker) {\r\n        logger.trace(\"isPlatformAuthAllowed: allowPlatformBroker is not enabled, returning false\");\r\n        // Developer disabled WAM\r\n        return false;\r\n    }\r\n    if (!platformAuthProvider) {\r\n        logger.trace(\"isPlatformAuthAllowed: Platform auth provider is not initialized, returning false\");\r\n        // Platform broker auth providers are not available\r\n        return false;\r\n    }\r\n    if (authenticationScheme) {\r\n        switch (authenticationScheme) {\r\n            case AuthenticationScheme.BEARER:\r\n            case AuthenticationScheme.POP:\r\n                logger.trace(\"isPlatformAuthAllowed: authenticationScheme is supported, returning true\");\r\n                return true;\r\n            default:\r\n                logger.trace(\"isPlatformAuthAllowed: authenticationScheme is not supported, returning false\");\r\n                return false;\r\n        }\r\n    }\r\n    return true;\r\n}\n\nexport { getPlatformAuthProvider, isPlatformAuthAllowed, isPlatformBrokerAvailable };\n//# sourceMappingURL=PlatformAuthProvider.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { OIDC_DEFAULT_SCOPES, invokeAsync, PerformanceEvents, ProtocolMode, HttpMethod, invoke, AuthError, UrlString, ServerResponseType } from '@azure/msal-common/browser';\nimport { StandardInteractionClient } from './StandardInteractionClient.mjs';\nimport { EventType } from '../event/EventType.mjs';\nimport { InteractionType, ApiId, BrowserConstants } from '../utils/BrowserConstants.mjs';\nimport { preconnect, getCurrentUri } from '../utils/BrowserUtils.mjs';\nimport { createBrowserAuthError } from '../error/BrowserAuthError.mjs';\nimport { deserializeResponse } from '../response/ResponseHandler.mjs';\nimport { getAuthCodeRequestUrl, handleResponseCode, getEARForm, handleResponseEAR, getCodeForm } from '../protocol/Authorize.mjs';\nimport { generatePkceCodes } from '../crypto/PkceGenerator.mjs';\nimport { isPlatformAuthAllowed } from '../broker/nativeBroker/PlatformAuthProvider.mjs';\nimport { generateEarKey } from '../crypto/BrowserCrypto.mjs';\nimport { validateRequestMethod } from '../request/RequestHelpers.mjs';\nimport { emptyNavigateUri, userCancelled, emptyWindowError, popupWindowError } from '../error/BrowserAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass PopupClient extends StandardInteractionClient {\r\n    constructor(config, storageImpl, browserCrypto, logger, eventHandler, navigationClient, performanceClient, nativeStorageImpl, platformAuthHandler, correlationId) {\r\n        super(config, storageImpl, browserCrypto, logger, eventHandler, navigationClient, performanceClient, platformAuthHandler, correlationId);\r\n        // Properly sets this reference for the unload event.\r\n        this.unloadWindow = this.unloadWindow.bind(this);\r\n        this.nativeStorage = nativeStorageImpl;\r\n        this.eventHandler = eventHandler;\r\n    }\r\n    /**\r\n     * Acquires tokens by opening a popup window to the /authorize endpoint of the authority\r\n     * @param request\r\n     * @param pkceCodes\r\n     */\r\n    acquireToken(request, pkceCodes) {\r\n        let popupParams = undefined;\r\n        try {\r\n            const popupName = this.generatePopupName(request.scopes || OIDC_DEFAULT_SCOPES, request.authority || this.config.auth.authority);\r\n            popupParams = {\r\n                popupName,\r\n                popupWindowAttributes: request.popupWindowAttributes || {},\r\n                popupWindowParent: request.popupWindowParent ?? window,\r\n            };\r\n            this.performanceClient.addFields({ isAsyncPopup: this.config.system.asyncPopups }, this.correlationId);\r\n            // asyncPopups flag is true. Acquires token without first opening popup. Popup will be opened later asynchronously.\r\n            if (this.config.system.asyncPopups) {\r\n                this.logger.verbose(\"asyncPopups set to true, acquiring token\");\r\n                // Passes on popup position and dimensions if in request\r\n                return this.acquireTokenPopupAsync(request, popupParams, pkceCodes);\r\n            }\r\n            else {\r\n                // Pre-validate request method to avoid opening popup if the request is invalid\r\n                const validatedRequest = {\r\n                    ...request,\r\n                    httpMethod: validateRequestMethod(request, this.config.auth.protocolMode),\r\n                };\r\n                // asyncPopups flag is set to false. Opens popup before acquiring token.\r\n                this.logger.verbose(\"asyncPopup set to false, opening popup before acquiring token\");\r\n                popupParams.popup = this.openSizedPopup(\"about:blank\", popupParams);\r\n                return this.acquireTokenPopupAsync(validatedRequest, popupParams, pkceCodes);\r\n            }\r\n        }\r\n        catch (e) {\r\n            return Promise.reject(e);\r\n        }\r\n    }\r\n    /**\r\n     * Clears local cache for the current user then opens a popup window prompting the user to sign-out of the server\r\n     * @param logoutRequest\r\n     */\r\n    logout(logoutRequest) {\r\n        try {\r\n            this.logger.verbose(\"logoutPopup called\");\r\n            const validLogoutRequest = this.initializeLogoutRequest(logoutRequest);\r\n            const popupParams = {\r\n                popupName: this.generateLogoutPopupName(validLogoutRequest),\r\n                popupWindowAttributes: logoutRequest?.popupWindowAttributes || {},\r\n                popupWindowParent: logoutRequest?.popupWindowParent ?? window,\r\n            };\r\n            const authority = logoutRequest && logoutRequest.authority;\r\n            const mainWindowRedirectUri = logoutRequest && logoutRequest.mainWindowRedirectUri;\r\n            // asyncPopups flag is true. Acquires token without first opening popup. Popup will be opened later asynchronously.\r\n            if (this.config.system.asyncPopups) {\r\n                this.logger.verbose(\"asyncPopups set to true\");\r\n                // Passes on popup position and dimensions if in request\r\n                return this.logoutPopupAsync(validLogoutRequest, popupParams, authority, mainWindowRedirectUri);\r\n            }\r\n            else {\r\n                // asyncPopups flag is set to false. Opens popup before logging out.\r\n                this.logger.verbose(\"asyncPopup set to false, opening popup\");\r\n                popupParams.popup = this.openSizedPopup(\"about:blank\", popupParams);\r\n                return this.logoutPopupAsync(validLogoutRequest, popupParams, authority, mainWindowRedirectUri);\r\n            }\r\n        }\r\n        catch (e) {\r\n            // Since this function is synchronous we need to reject\r\n            return Promise.reject(e);\r\n        }\r\n    }\r\n    /**\r\n     * Helper which obtains an access_token for your API via opening a popup window in the user's browser\r\n     * @param request\r\n     * @param popupParams\r\n     * @param pkceCodes\r\n     *\r\n     * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\r\n     */\r\n    async acquireTokenPopupAsync(request, popupParams, pkceCodes) {\r\n        this.logger.verbose(\"acquireTokenPopupAsync called\");\r\n        const validRequest = await invokeAsync(this.initializeAuthorizationRequest.bind(this), PerformanceEvents.StandardInteractionClientInitializeAuthorizationRequest, this.logger, this.performanceClient, this.correlationId)(request, InteractionType.Popup);\r\n        /*\r\n         * Skip pre-connect for async popups to reduce time between user interaction and popup window creation to avoid\r\n         * popup from being blocked by browsers with shorter popup timers\r\n         */\r\n        if (popupParams.popup) {\r\n            preconnect(validRequest.authority);\r\n        }\r\n        const isPlatformBroker = isPlatformAuthAllowed(this.config, this.logger, this.platformAuthProvider, request.authenticationScheme);\r\n        validRequest.platformBroker = isPlatformBroker;\r\n        if (this.config.auth.protocolMode === ProtocolMode.EAR) {\r\n            return this.executeEarFlow(validRequest, popupParams, pkceCodes);\r\n        }\r\n        else {\r\n            return this.executeCodeFlow(validRequest, popupParams, pkceCodes);\r\n        }\r\n    }\r\n    /**\r\n     * Executes auth code + PKCE flow\r\n     * @param request\r\n     * @param popupParams\r\n     * @param pkceCodes\r\n     * @returns\r\n     */\r\n    async executeCodeFlow(request, popupParams, pkceCodes) {\r\n        const correlationId = request.correlationId;\r\n        const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.acquireTokenPopup);\r\n        const pkce = pkceCodes ||\r\n            (await invokeAsync(generatePkceCodes, PerformanceEvents.GeneratePkceCodes, this.logger, this.performanceClient, correlationId)(this.performanceClient, this.logger, correlationId));\r\n        const popupRequest = {\r\n            ...request,\r\n            codeChallenge: pkce.challenge,\r\n        };\r\n        try {\r\n            // Initialize the client\r\n            const authClient = await invokeAsync(this.createAuthCodeClient.bind(this), PerformanceEvents.StandardInteractionClientCreateAuthCodeClient, this.logger, this.performanceClient, correlationId)({\r\n                serverTelemetryManager,\r\n                requestAuthority: popupRequest.authority,\r\n                requestAzureCloudOptions: popupRequest.azureCloudOptions,\r\n                requestExtraQueryParameters: popupRequest.extraQueryParameters,\r\n                account: popupRequest.account,\r\n            });\r\n            if (popupRequest.httpMethod === HttpMethod.POST) {\r\n                return await this.executeCodeFlowWithPost(popupRequest, popupParams, authClient, pkce.verifier);\r\n            }\r\n            else {\r\n                // Create acquire token url.\r\n                const navigateUrl = await invokeAsync(getAuthCodeRequestUrl, PerformanceEvents.GetAuthCodeUrl, this.logger, this.performanceClient, correlationId)(this.config, authClient.authority, popupRequest, this.logger, this.performanceClient);\r\n                // Show the UI once the url has been created. Get the window handle for the popup.\r\n                const popupWindow = this.initiateAuthRequest(navigateUrl, popupParams);\r\n                this.eventHandler.emitEvent(EventType.POPUP_OPENED, InteractionType.Popup, { popupWindow }, null);\r\n                // Monitor the window for the hash. Return the string value and close the popup when the hash is received. Default timeout is 60 seconds.\r\n                const responseString = await this.monitorPopupForHash(popupWindow, popupParams.popupWindowParent);\r\n                const serverParams = invoke(deserializeResponse, PerformanceEvents.DeserializeResponse, this.logger, this.performanceClient, this.correlationId)(responseString, this.config.auth.OIDCOptions.serverResponseType, this.logger);\r\n                return await invokeAsync(handleResponseCode, PerformanceEvents.HandleResponseCode, this.logger, this.performanceClient, correlationId)(request, serverParams, pkce.verifier, ApiId.acquireTokenPopup, this.config, authClient, this.browserStorage, this.nativeStorage, this.eventHandler, this.logger, this.performanceClient, this.platformAuthProvider);\r\n            }\r\n        }\r\n        catch (e) {\r\n            // Close the synchronous popup if an error is thrown before the window unload event is registered\r\n            popupParams.popup?.close();\r\n            if (e instanceof AuthError) {\r\n                e.setCorrelationId(this.correlationId);\r\n                serverTelemetryManager.cacheFailedRequest(e);\r\n            }\r\n            throw e;\r\n        }\r\n    }\r\n    /**\r\n     * Executes EAR flow\r\n     * @param request\r\n     */\r\n    async executeEarFlow(request, popupParams, pkceCodes) {\r\n        const correlationId = request.correlationId;\r\n        // Get the frame handle for the silent request\r\n        const discoveredAuthority = await invokeAsync(this.getDiscoveredAuthority.bind(this), PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority, this.logger, this.performanceClient, correlationId)({\r\n            requestAuthority: request.authority,\r\n            requestAzureCloudOptions: request.azureCloudOptions,\r\n            requestExtraQueryParameters: request.extraQueryParameters,\r\n            account: request.account,\r\n        });\r\n        const earJwk = await invokeAsync(generateEarKey, PerformanceEvents.GenerateEarKey, this.logger, this.performanceClient, correlationId)();\r\n        const pkce = pkceCodes ||\r\n            (await invokeAsync(generatePkceCodes, PerformanceEvents.GeneratePkceCodes, this.logger, this.performanceClient, correlationId)(this.performanceClient, this.logger, correlationId));\r\n        const popupRequest = {\r\n            ...request,\r\n            earJwk: earJwk,\r\n            codeChallenge: pkce.challenge,\r\n        };\r\n        const popupWindow = popupParams.popup || this.openPopup(\"about:blank\", popupParams);\r\n        const form = await getEARForm(popupWindow.document, this.config, discoveredAuthority, popupRequest, this.logger, this.performanceClient);\r\n        form.submit();\r\n        // Monitor the popup for the hash. Return the string value and close the popup when the hash is received. Default timeout is 60 seconds.\r\n        const responseString = await invokeAsync(this.monitorPopupForHash.bind(this), PerformanceEvents.SilentHandlerMonitorIframeForHash, this.logger, this.performanceClient, correlationId)(popupWindow, popupParams.popupWindowParent);\r\n        const serverParams = invoke(deserializeResponse, PerformanceEvents.DeserializeResponse, this.logger, this.performanceClient, this.correlationId)(responseString, this.config.auth.OIDCOptions.serverResponseType, this.logger);\r\n        if (!serverParams.ear_jwe && serverParams.code) {\r\n            const authClient = await invokeAsync(this.createAuthCodeClient.bind(this), PerformanceEvents.StandardInteractionClientCreateAuthCodeClient, this.logger, this.performanceClient, correlationId)({\r\n                serverTelemetryManager: this.initializeServerTelemetryManager(ApiId.acquireTokenPopup),\r\n                requestAuthority: request.authority,\r\n                requestAzureCloudOptions: request.azureCloudOptions,\r\n                requestExtraQueryParameters: request.extraQueryParameters,\r\n                account: request.account,\r\n                authority: discoveredAuthority,\r\n            });\r\n            return invokeAsync(handleResponseCode, PerformanceEvents.HandleResponseCode, this.logger, this.performanceClient, correlationId)(popupRequest, serverParams, pkce.verifier, ApiId.acquireTokenPopup, this.config, authClient, this.browserStorage, this.nativeStorage, this.eventHandler, this.logger, this.performanceClient, this.platformAuthProvider);\r\n        }\r\n        else {\r\n            return invokeAsync(handleResponseEAR, PerformanceEvents.HandleResponseEar, this.logger, this.performanceClient, correlationId)(popupRequest, serverParams, ApiId.acquireTokenPopup, this.config, discoveredAuthority, this.browserStorage, this.nativeStorage, this.eventHandler, this.logger, this.performanceClient, this.platformAuthProvider);\r\n        }\r\n    }\r\n    async executeCodeFlowWithPost(request, popupParams, authClient, pkceVerifier) {\r\n        const correlationId = request.correlationId;\r\n        // Get the frame handle for the silent request\r\n        const discoveredAuthority = await invokeAsync(this.getDiscoveredAuthority.bind(this), PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority, this.logger, this.performanceClient, correlationId)({\r\n            requestAuthority: request.authority,\r\n            requestAzureCloudOptions: request.azureCloudOptions,\r\n            requestExtraQueryParameters: request.extraQueryParameters,\r\n            account: request.account,\r\n        });\r\n        const popupWindow = popupParams.popup || this.openPopup(\"about:blank\", popupParams);\r\n        const form = await getCodeForm(popupWindow.document, this.config, discoveredAuthority, request, this.logger, this.performanceClient);\r\n        form.submit();\r\n        // Monitor the popup for the hash. Return the string value and close the popup when the hash is received. Default timeout is 60 seconds.\r\n        const responseString = await invokeAsync(this.monitorPopupForHash.bind(this), PerformanceEvents.SilentHandlerMonitorIframeForHash, this.logger, this.performanceClient, correlationId)(popupWindow, popupParams.popupWindowParent);\r\n        const serverParams = invoke(deserializeResponse, PerformanceEvents.DeserializeResponse, this.logger, this.performanceClient, this.correlationId)(responseString, this.config.auth.OIDCOptions.serverResponseType, this.logger);\r\n        return invokeAsync(handleResponseCode, PerformanceEvents.HandleResponseCode, this.logger, this.performanceClient, correlationId)(request, serverParams, pkceVerifier, ApiId.acquireTokenPopup, this.config, authClient, this.browserStorage, this.nativeStorage, this.eventHandler, this.logger, this.performanceClient, this.platformAuthProvider);\r\n    }\r\n    /**\r\n     *\r\n     * @param validRequest\r\n     * @param popupName\r\n     * @param requestAuthority\r\n     * @param popup\r\n     * @param mainWindowRedirectUri\r\n     * @param popupWindowAttributes\r\n     */\r\n    async logoutPopupAsync(validRequest, popupParams, requestAuthority, mainWindowRedirectUri) {\r\n        this.logger.verbose(\"logoutPopupAsync called\");\r\n        this.eventHandler.emitEvent(EventType.LOGOUT_START, InteractionType.Popup, validRequest);\r\n        const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.logoutPopup);\r\n        try {\r\n            // Clear cache on logout\r\n            await this.clearCacheOnLogout(this.correlationId, validRequest.account);\r\n            // Initialize the client\r\n            const authClient = await invokeAsync(this.createAuthCodeClient.bind(this), PerformanceEvents.StandardInteractionClientCreateAuthCodeClient, this.logger, this.performanceClient, this.correlationId)({\r\n                serverTelemetryManager,\r\n                requestAuthority: requestAuthority,\r\n                account: validRequest.account || undefined,\r\n            });\r\n            try {\r\n                authClient.authority.endSessionEndpoint;\r\n            }\r\n            catch {\r\n                if (validRequest.account?.homeAccountId &&\r\n                    validRequest.postLogoutRedirectUri &&\r\n                    authClient.authority.protocolMode === ProtocolMode.OIDC) {\r\n                    this.eventHandler.emitEvent(EventType.LOGOUT_SUCCESS, InteractionType.Popup, validRequest);\r\n                    if (mainWindowRedirectUri) {\r\n                        const navigationOptions = {\r\n                            apiId: ApiId.logoutPopup,\r\n                            timeout: this.config.system.redirectNavigationTimeout,\r\n                            noHistory: false,\r\n                        };\r\n                        const absoluteUrl = UrlString.getAbsoluteUrl(mainWindowRedirectUri, getCurrentUri());\r\n                        await this.navigationClient.navigateInternal(absoluteUrl, navigationOptions);\r\n                    }\r\n                    popupParams.popup?.close();\r\n                    return;\r\n                }\r\n            }\r\n            // Create logout string and navigate user window to logout.\r\n            const logoutUri = authClient.getLogoutUri(validRequest);\r\n            this.eventHandler.emitEvent(EventType.LOGOUT_SUCCESS, InteractionType.Popup, validRequest);\r\n            // Open the popup window to requestUrl.\r\n            const popupWindow = this.openPopup(logoutUri, popupParams);\r\n            this.eventHandler.emitEvent(EventType.POPUP_OPENED, InteractionType.Popup, { popupWindow }, null);\r\n            await this.monitorPopupForHash(popupWindow, popupParams.popupWindowParent).catch(() => {\r\n                // Swallow any errors related to monitoring the window. Server logout is best effort\r\n            });\r\n            if (mainWindowRedirectUri) {\r\n                const navigationOptions = {\r\n                    apiId: ApiId.logoutPopup,\r\n                    timeout: this.config.system.redirectNavigationTimeout,\r\n                    noHistory: false,\r\n                };\r\n                const absoluteUrl = UrlString.getAbsoluteUrl(mainWindowRedirectUri, getCurrentUri());\r\n                this.logger.verbose(\"Redirecting main window to url specified in the request\");\r\n                this.logger.verbosePii(`Redirecting main window to: ${absoluteUrl}`);\r\n                await this.navigationClient.navigateInternal(absoluteUrl, navigationOptions);\r\n            }\r\n            else {\r\n                this.logger.verbose(\"No main window navigation requested\");\r\n            }\r\n        }\r\n        catch (e) {\r\n            // Close the synchronous popup if an error is thrown before the window unload event is registered\r\n            popupParams.popup?.close();\r\n            if (e instanceof AuthError) {\r\n                e.setCorrelationId(this.correlationId);\r\n                serverTelemetryManager.cacheFailedRequest(e);\r\n            }\r\n            this.eventHandler.emitEvent(EventType.LOGOUT_FAILURE, InteractionType.Popup, null, e);\r\n            this.eventHandler.emitEvent(EventType.LOGOUT_END, InteractionType.Popup);\r\n            throw e;\r\n        }\r\n        this.eventHandler.emitEvent(EventType.LOGOUT_END, InteractionType.Popup);\r\n    }\r\n    /**\r\n     * Opens a popup window with given request Url.\r\n     * @param requestUrl\r\n     */\r\n    initiateAuthRequest(requestUrl, params) {\r\n        // Check that request url is not empty.\r\n        if (requestUrl) {\r\n            this.logger.infoPii(`Navigate to: ${requestUrl}`);\r\n            // Open the popup window to requestUrl.\r\n            return this.openPopup(requestUrl, params);\r\n        }\r\n        else {\r\n            // Throw error if request URL is empty.\r\n            this.logger.error(\"Navigate url is empty\");\r\n            throw createBrowserAuthError(emptyNavigateUri);\r\n        }\r\n    }\r\n    /**\r\n     * Monitors a window until it loads a url with the same origin.\r\n     * @param popupWindow - window that is being monitored\r\n     * @param timeout - timeout for processing hash once popup is redirected back to application\r\n     */\r\n    monitorPopupForHash(popupWindow, popupWindowParent) {\r\n        return new Promise((resolve, reject) => {\r\n            this.logger.verbose(\"PopupHandler.monitorPopupForHash - polling started\");\r\n            const intervalId = setInterval(() => {\r\n                // Window is closed\r\n                if (popupWindow.closed) {\r\n                    this.logger.error(\"PopupHandler.monitorPopupForHash - window closed\");\r\n                    clearInterval(intervalId);\r\n                    reject(createBrowserAuthError(userCancelled));\r\n                    return;\r\n                }\r\n                let href = \"\";\r\n                try {\r\n                    /*\r\n                     * Will throw if cross origin,\r\n                     * which should be caught and ignored\r\n                     * since we need the interval to keep running while on STS UI.\r\n                     */\r\n                    href = popupWindow.location.href;\r\n                }\r\n                catch (e) { }\r\n                // Don't process blank pages or cross domain\r\n                if (!href || href === \"about:blank\") {\r\n                    return;\r\n                }\r\n                clearInterval(intervalId);\r\n                let responseString = \"\";\r\n                const responseType = this.config.auth.OIDCOptions.serverResponseType;\r\n                if (popupWindow) {\r\n                    if (responseType === ServerResponseType.QUERY) {\r\n                        responseString = popupWindow.location.search;\r\n                    }\r\n                    else {\r\n                        responseString = popupWindow.location.hash;\r\n                    }\r\n                }\r\n                this.logger.verbose(\"PopupHandler.monitorPopupForHash - popup window is on same origin as caller\");\r\n                resolve(responseString);\r\n            }, this.config.system.pollIntervalMilliseconds);\r\n        }).finally(() => {\r\n            this.cleanPopup(popupWindow, popupWindowParent);\r\n        });\r\n    }\r\n    /**\r\n     * @hidden\r\n     *\r\n     * Configures popup window for login.\r\n     *\r\n     * @param urlNavigate\r\n     * @param title\r\n     * @param popUpWidth\r\n     * @param popUpHeight\r\n     * @param popupWindowAttributes\r\n     * @ignore\r\n     * @hidden\r\n     */\r\n    openPopup(urlNavigate, popupParams) {\r\n        try {\r\n            let popupWindow;\r\n            // Popup window passed in, setting url to navigate to\r\n            if (popupParams.popup) {\r\n                popupWindow = popupParams.popup;\r\n                this.logger.verbosePii(`Navigating popup window to: ${urlNavigate}`);\r\n                popupWindow.location.assign(urlNavigate);\r\n            }\r\n            else if (typeof popupParams.popup === \"undefined\") {\r\n                // Popup will be undefined if it was not passed in\r\n                this.logger.verbosePii(`Opening popup window to: ${urlNavigate}`);\r\n                popupWindow = this.openSizedPopup(urlNavigate, popupParams);\r\n            }\r\n            // Popup will be null if popups are blocked\r\n            if (!popupWindow) {\r\n                throw createBrowserAuthError(emptyWindowError);\r\n            }\r\n            if (popupWindow.focus) {\r\n                popupWindow.focus();\r\n            }\r\n            this.currentWindow = popupWindow;\r\n            popupParams.popupWindowParent.addEventListener(\"beforeunload\", this.unloadWindow);\r\n            return popupWindow;\r\n        }\r\n        catch (e) {\r\n            this.logger.error(\"error opening popup \" + e.message);\r\n            throw createBrowserAuthError(popupWindowError);\r\n        }\r\n    }\r\n    /**\r\n     * Helper function to set popup window dimensions and position\r\n     * @param urlNavigate\r\n     * @param popupName\r\n     * @param popupWindowAttributes\r\n     * @returns\r\n     */\r\n    openSizedPopup(urlNavigate, { popupName, popupWindowAttributes, popupWindowParent }) {\r\n        /**\r\n         * adding winLeft and winTop to account for dual monitor\r\n         * using screenLeft and screenTop for IE8 and earlier\r\n         */\r\n        const winLeft = popupWindowParent.screenLeft\r\n            ? popupWindowParent.screenLeft\r\n            : popupWindowParent.screenX;\r\n        const winTop = popupWindowParent.screenTop\r\n            ? popupWindowParent.screenTop\r\n            : popupWindowParent.screenY;\r\n        /**\r\n         * window.innerWidth displays browser window\"s height and width excluding toolbars\r\n         * using document.documentElement.clientWidth for IE8 and earlier\r\n         */\r\n        const winWidth = popupWindowParent.innerWidth ||\r\n            document.documentElement.clientWidth ||\r\n            document.body.clientWidth;\r\n        const winHeight = popupWindowParent.innerHeight ||\r\n            document.documentElement.clientHeight ||\r\n            document.body.clientHeight;\r\n        let width = popupWindowAttributes.popupSize?.width;\r\n        let height = popupWindowAttributes.popupSize?.height;\r\n        let top = popupWindowAttributes.popupPosition?.top;\r\n        let left = popupWindowAttributes.popupPosition?.left;\r\n        if (!width || width < 0 || width > winWidth) {\r\n            this.logger.verbose(\"Default popup window width used. Window width not configured or invalid.\");\r\n            width = BrowserConstants.POPUP_WIDTH;\r\n        }\r\n        if (!height || height < 0 || height > winHeight) {\r\n            this.logger.verbose(\"Default popup window height used. Window height not configured or invalid.\");\r\n            height = BrowserConstants.POPUP_HEIGHT;\r\n        }\r\n        if (!top || top < 0 || top > winHeight) {\r\n            this.logger.verbose(\"Default popup window top position used. Window top not configured or invalid.\");\r\n            top = Math.max(0, winHeight / 2 - BrowserConstants.POPUP_HEIGHT / 2 + winTop);\r\n        }\r\n        if (!left || left < 0 || left > winWidth) {\r\n            this.logger.verbose(\"Default popup window left position used. Window left not configured or invalid.\");\r\n            left = Math.max(0, winWidth / 2 - BrowserConstants.POPUP_WIDTH / 2 + winLeft);\r\n        }\r\n        return popupWindowParent.open(urlNavigate, popupName, `width=${width}, height=${height}, top=${top}, left=${left}, scrollbars=yes`);\r\n    }\r\n    /**\r\n     * Event callback to unload main window.\r\n     */\r\n    unloadWindow(e) {\r\n        if (this.currentWindow) {\r\n            this.currentWindow.close();\r\n        }\r\n        // Guarantees browser unload will happen, so no other errors will be thrown.\r\n        e.preventDefault();\r\n    }\r\n    /**\r\n     * Closes popup, removes any state vars created during popup calls.\r\n     * @param popupWindow\r\n     */\r\n    cleanPopup(popupWindow, popupWindowParent) {\r\n        // Close window.\r\n        popupWindow.close();\r\n        // Remove window unload function\r\n        popupWindowParent.removeEventListener(\"beforeunload\", this.unloadWindow);\r\n    }\r\n    /**\r\n     * Generates the name for the popup based on the client id and request\r\n     * @param clientId\r\n     * @param request\r\n     */\r\n    generatePopupName(scopes, authority) {\r\n        return `${BrowserConstants.POPUP_NAME_PREFIX}.${this.config.auth.clientId}.${scopes.join(\"-\")}.${authority}.${this.correlationId}`;\r\n    }\r\n    /**\r\n     * Generates the name for the popup based on the client id and request for logouts\r\n     * @param clientId\r\n     * @param request\r\n     */\r\n    generateLogoutPopupName(request) {\r\n        const homeAccountId = request.account && request.account.homeAccountId;\r\n        return `${BrowserConstants.POPUP_NAME_PREFIX}.${this.config.auth.clientId}.${homeAccountId}.${this.correlationId}`;\r\n    }\r\n}\n\nexport { PopupClient };\n//# sourceMappingURL=PopupClient.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { invokeAsync, PerformanceEvents, ProtocolMode, AuthError, HttpMethod, Constants, UrlUtils, UrlString, ServerResponseType } from '@azure/msal-common/browser';\nimport { StandardInteractionClient } from './StandardInteractionClient.mjs';\nimport { InteractionType, TemporaryCacheKeys, ApiId, INTERACTION_TYPE } from '../utils/BrowserConstants.mjs';\nimport { replaceHash, isInIframe, getHomepage, clearHash, getCurrentUri } from '../utils/BrowserUtils.mjs';\nimport { EventType } from '../event/EventType.mjs';\nimport { createBrowserAuthError } from '../error/BrowserAuthError.mjs';\nimport { validateInteractionType } from '../response/ResponseHandler.mjs';\nimport { getAuthCodeRequestUrl, getEARForm, getCodeForm, handleResponseEAR, handleResponseCode } from '../protocol/Authorize.mjs';\nimport { generatePkceCodes } from '../crypto/PkceGenerator.mjs';\nimport { isPlatformAuthAllowed } from '../broker/nativeBroker/PlatformAuthProvider.mjs';\nimport { generateEarKey } from '../crypto/BrowserCrypto.mjs';\nimport { timedOut, noStateInHash, emptyNavigateUri } from '../error/BrowserAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nfunction getNavigationType() {\r\n    if (typeof window === \"undefined\" ||\r\n        typeof window.performance === \"undefined\" ||\r\n        typeof window.performance.getEntriesByType !== \"function\") {\r\n        return undefined;\r\n    }\r\n    const navigationEntries = window.performance.getEntriesByType(\"navigation\");\r\n    const navigation = navigationEntries.length\r\n        ? navigationEntries[0]\r\n        : undefined;\r\n    return navigation?.type;\r\n}\r\nclass RedirectClient extends StandardInteractionClient {\r\n    constructor(config, storageImpl, browserCrypto, logger, eventHandler, navigationClient, performanceClient, nativeStorageImpl, platformAuthHandler, correlationId) {\r\n        super(config, storageImpl, browserCrypto, logger, eventHandler, navigationClient, performanceClient, platformAuthHandler, correlationId);\r\n        this.nativeStorage = nativeStorageImpl;\r\n    }\r\n    /**\r\n     * Redirects the page to the /authorize endpoint of the IDP\r\n     * @param request\r\n     */\r\n    async acquireToken(request) {\r\n        const validRequest = await invokeAsync(this.initializeAuthorizationRequest.bind(this), PerformanceEvents.StandardInteractionClientInitializeAuthorizationRequest, this.logger, this.performanceClient, this.correlationId)(request, InteractionType.Redirect);\r\n        validRequest.platformBroker = isPlatformAuthAllowed(this.config, this.logger, this.platformAuthProvider, request.authenticationScheme);\r\n        const handleBackButton = (event) => {\r\n            // Clear temporary cache if the back button is clicked during the redirect flow.\r\n            if (event.persisted) {\r\n                this.logger.verbose(\"Page was restored from back/forward cache. Clearing temporary cache.\");\r\n                this.browserStorage.resetRequestCache();\r\n                this.eventHandler.emitEvent(EventType.RESTORE_FROM_BFCACHE, InteractionType.Redirect);\r\n            }\r\n        };\r\n        const redirectStartPage = this.getRedirectStartPage(request.redirectStartPage);\r\n        this.logger.verbosePii(`Redirect start page: ${redirectStartPage}`);\r\n        // Cache start page, returns to this page after redirectUri if navigateToLoginRequestUrl is true\r\n        this.browserStorage.setTemporaryCache(TemporaryCacheKeys.ORIGIN_URI, redirectStartPage, true);\r\n        // Clear temporary cache if the back button is clicked during the redirect flow.\r\n        window.addEventListener(\"pageshow\", handleBackButton);\r\n        try {\r\n            if (this.config.auth.protocolMode === ProtocolMode.EAR) {\r\n                await this.executeEarFlow(validRequest);\r\n            }\r\n            else {\r\n                await this.executeCodeFlow(validRequest, request.onRedirectNavigate);\r\n            }\r\n        }\r\n        catch (e) {\r\n            if (e instanceof AuthError) {\r\n                e.setCorrelationId(this.correlationId);\r\n            }\r\n            window.removeEventListener(\"pageshow\", handleBackButton);\r\n            throw e;\r\n        }\r\n    }\r\n    /**\r\n     * Executes auth code + PKCE flow\r\n     * @param request\r\n     * @returns\r\n     */\r\n    async executeCodeFlow(request, onRedirectNavigate) {\r\n        const correlationId = request.correlationId;\r\n        const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.acquireTokenRedirect);\r\n        const pkceCodes = await invokeAsync(generatePkceCodes, PerformanceEvents.GeneratePkceCodes, this.logger, this.performanceClient, correlationId)(this.performanceClient, this.logger, correlationId);\r\n        const redirectRequest = {\r\n            ...request,\r\n            codeChallenge: pkceCodes.challenge,\r\n        };\r\n        this.browserStorage.cacheAuthorizeRequest(redirectRequest, pkceCodes.verifier);\r\n        try {\r\n            if (redirectRequest.httpMethod === HttpMethod.POST) {\r\n                return await this.executeCodeFlowWithPost(redirectRequest);\r\n            }\r\n            else {\r\n                // Initialize the client\r\n                const authClient = await invokeAsync(this.createAuthCodeClient.bind(this), PerformanceEvents.StandardInteractionClientCreateAuthCodeClient, this.logger, this.performanceClient, this.correlationId)({\r\n                    serverTelemetryManager,\r\n                    requestAuthority: redirectRequest.authority,\r\n                    requestAzureCloudOptions: redirectRequest.azureCloudOptions,\r\n                    requestExtraQueryParameters: redirectRequest.extraQueryParameters,\r\n                    account: redirectRequest.account,\r\n                });\r\n                // Create acquire token url.\r\n                const navigateUrl = await invokeAsync(getAuthCodeRequestUrl, PerformanceEvents.GetAuthCodeUrl, this.logger, this.performanceClient, request.correlationId)(this.config, authClient.authority, redirectRequest, this.logger, this.performanceClient);\r\n                // Show the UI once the url has been created. Response will come back in the hash, which will be handled in the handleRedirectCallback function.\r\n                return await this.initiateAuthRequest(navigateUrl, onRedirectNavigate);\r\n            }\r\n        }\r\n        catch (e) {\r\n            if (e instanceof AuthError) {\r\n                e.setCorrelationId(this.correlationId);\r\n                serverTelemetryManager.cacheFailedRequest(e);\r\n            }\r\n            throw e;\r\n        }\r\n    }\r\n    /**\r\n     * Executes EAR flow\r\n     * @param request\r\n     */\r\n    async executeEarFlow(request) {\r\n        const correlationId = request.correlationId;\r\n        // Get the frame handle for the silent request\r\n        const discoveredAuthority = await invokeAsync(this.getDiscoveredAuthority.bind(this), PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority, this.logger, this.performanceClient, correlationId)({\r\n            requestAuthority: request.authority,\r\n            requestAzureCloudOptions: request.azureCloudOptions,\r\n            requestExtraQueryParameters: request.extraQueryParameters,\r\n            account: request.account,\r\n        });\r\n        const earJwk = await invokeAsync(generateEarKey, PerformanceEvents.GenerateEarKey, this.logger, this.performanceClient, correlationId)();\r\n        const pkceCodes = await invokeAsync(generatePkceCodes, PerformanceEvents.GeneratePkceCodes, this.logger, this.performanceClient, correlationId)(this.performanceClient, this.logger, correlationId);\r\n        const redirectRequest = {\r\n            ...request,\r\n            earJwk: earJwk,\r\n            codeChallenge: pkceCodes.challenge,\r\n        };\r\n        this.browserStorage.cacheAuthorizeRequest(redirectRequest, pkceCodes.verifier);\r\n        const form = await getEARForm(document, this.config, discoveredAuthority, redirectRequest, this.logger, this.performanceClient);\r\n        form.submit();\r\n        return new Promise((resolve, reject) => {\r\n            setTimeout(() => {\r\n                reject(createBrowserAuthError(timedOut, \"failed_to_redirect\"));\r\n            }, this.config.system.redirectNavigationTimeout);\r\n        });\r\n    }\r\n    /**\r\n     * Executes classic Authorization Code flow with a POST request.\r\n     * @param request\r\n     */\r\n    async executeCodeFlowWithPost(request) {\r\n        const correlationId = request.correlationId;\r\n        // Get the frame handle for the silent request\r\n        const discoveredAuthority = await invokeAsync(this.getDiscoveredAuthority.bind(this), PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority, this.logger, this.performanceClient, correlationId)({\r\n            requestAuthority: request.authority,\r\n            requestAzureCloudOptions: request.azureCloudOptions,\r\n            requestExtraQueryParameters: request.extraQueryParameters,\r\n            account: request.account,\r\n        });\r\n        this.browserStorage.cacheAuthorizeRequest(request);\r\n        const form = await getCodeForm(document, this.config, discoveredAuthority, request, this.logger, this.performanceClient);\r\n        form.submit();\r\n        return new Promise((resolve, reject) => {\r\n            setTimeout(() => {\r\n                reject(createBrowserAuthError(timedOut, \"failed_to_redirect\"));\r\n            }, this.config.system.redirectNavigationTimeout);\r\n        });\r\n    }\r\n    /**\r\n     * Checks if navigateToLoginRequestUrl is set, and:\r\n     * - if true, performs logic to cache and navigate\r\n     * - if false, handles hash string and parses response\r\n     * @param hash {string} url hash\r\n     * @param parentMeasurement {InProgressPerformanceEvent} parent measurement\r\n     */\r\n    async handleRedirectPromise(hash = \"\", request, pkceVerifier, parentMeasurement) {\r\n        const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.handleRedirectPromise);\r\n        try {\r\n            const [serverParams, responseString] = this.getRedirectResponse(hash || \"\");\r\n            if (!serverParams) {\r\n                // Not a recognized server response hash or hash not associated with a redirect request\r\n                this.logger.info(\"handleRedirectPromise did not detect a response as a result of a redirect. Cleaning temporary cache.\");\r\n                this.browserStorage.resetRequestCache();\r\n                // Do not instrument \"no_server_response\" if user clicked back button\r\n                if (getNavigationType() !== \"back_forward\") {\r\n                    parentMeasurement.event.errorCode = \"no_server_response\";\r\n                }\r\n                else {\r\n                    this.logger.verbose(\"Back navigation event detected. Muting no_server_response error\");\r\n                }\r\n                return null;\r\n            }\r\n            // If navigateToLoginRequestUrl is true, get the url where the redirect request was initiated\r\n            const loginRequestUrl = this.browserStorage.getTemporaryCache(TemporaryCacheKeys.ORIGIN_URI, true) || Constants.EMPTY_STRING;\r\n            const loginRequestUrlNormalized = UrlUtils.normalizeUrlForComparison(loginRequestUrl);\r\n            const currentUrlNormalized = UrlUtils.normalizeUrlForComparison(window.location.href);\r\n            if (loginRequestUrlNormalized === currentUrlNormalized &&\r\n                this.config.auth.navigateToLoginRequestUrl) {\r\n                // We are on the page we need to navigate to - handle hash\r\n                this.logger.verbose(\"Current page is loginRequestUrl, handling response\");\r\n                if (loginRequestUrl.indexOf(\"#\") > -1) {\r\n                    // Replace current hash with non-msal hash, if present\r\n                    replaceHash(loginRequestUrl);\r\n                }\r\n                const handleHashResult = await this.handleResponse(serverParams, request, pkceVerifier, serverTelemetryManager);\r\n                return handleHashResult;\r\n            }\r\n            else if (!this.config.auth.navigateToLoginRequestUrl) {\r\n                this.logger.verbose(\"NavigateToLoginRequestUrl set to false, handling response\");\r\n                return await this.handleResponse(serverParams, request, pkceVerifier, serverTelemetryManager);\r\n            }\r\n            else if (!isInIframe() ||\r\n                this.config.system.allowRedirectInIframe) {\r\n                /*\r\n                 * Returned from authority using redirect - need to perform navigation before processing response\r\n                 * Cache the hash to be retrieved after the next redirect\r\n                 */\r\n                this.browserStorage.setTemporaryCache(TemporaryCacheKeys.URL_HASH, responseString, true);\r\n                const navigationOptions = {\r\n                    apiId: ApiId.handleRedirectPromise,\r\n                    timeout: this.config.system.redirectNavigationTimeout,\r\n                    noHistory: true,\r\n                };\r\n                /**\r\n                 * Default behavior is to redirect to the start page and not process the hash now.\r\n                 * The start page is expected to also call handleRedirectPromise which will process the hash in one of the checks above.\r\n                 */\r\n                let processHashOnRedirect = true;\r\n                if (!loginRequestUrl || loginRequestUrl === \"null\") {\r\n                    // Redirect to home page if login request url is null (real null or the string null)\r\n                    const homepage = getHomepage();\r\n                    // Cache the homepage under ORIGIN_URI to ensure cached hash is processed on homepage\r\n                    this.browserStorage.setTemporaryCache(TemporaryCacheKeys.ORIGIN_URI, homepage, true);\r\n                    this.logger.warning(\"Unable to get valid login request url from cache, redirecting to home page\");\r\n                    processHashOnRedirect =\r\n                        await this.navigationClient.navigateInternal(homepage, navigationOptions);\r\n                }\r\n                else {\r\n                    // Navigate to page that initiated the redirect request\r\n                    this.logger.verbose(`Navigating to loginRequestUrl: ${loginRequestUrl}`);\r\n                    processHashOnRedirect =\r\n                        await this.navigationClient.navigateInternal(loginRequestUrl, navigationOptions);\r\n                }\r\n                // If navigateInternal implementation returns false, handle the hash now\r\n                if (!processHashOnRedirect) {\r\n                    return await this.handleResponse(serverParams, request, pkceVerifier, serverTelemetryManager);\r\n                }\r\n            }\r\n            return null;\r\n        }\r\n        catch (e) {\r\n            if (e instanceof AuthError) {\r\n                e.setCorrelationId(this.correlationId);\r\n                serverTelemetryManager.cacheFailedRequest(e);\r\n            }\r\n            throw e;\r\n        }\r\n    }\r\n    /**\r\n     * Gets the response hash for a redirect request\r\n     * Returns null if interactionType in the state value is not \"redirect\" or the hash does not contain known properties\r\n     * @param hash\r\n     */\r\n    getRedirectResponse(userProvidedResponse) {\r\n        this.logger.verbose(\"getRedirectResponseHash called\");\r\n        // Get current location hash from window or cache.\r\n        let responseString = userProvidedResponse;\r\n        if (!responseString) {\r\n            if (this.config.auth.OIDCOptions.serverResponseType ===\r\n                ServerResponseType.QUERY) {\r\n                responseString = window.location.search;\r\n            }\r\n            else {\r\n                responseString = window.location.hash;\r\n            }\r\n        }\r\n        let response = UrlUtils.getDeserializedResponse(responseString);\r\n        if (response) {\r\n            try {\r\n                validateInteractionType(response, this.browserCrypto, InteractionType.Redirect);\r\n            }\r\n            catch (e) {\r\n                if (e instanceof AuthError) {\r\n                    this.logger.error(`Interaction type validation failed due to ${e.errorCode}: ${e.errorMessage}`);\r\n                }\r\n                return [null, \"\"];\r\n            }\r\n            clearHash(window);\r\n            this.logger.verbose(\"Hash contains known properties, returning response hash\");\r\n            return [response, responseString];\r\n        }\r\n        const cachedHash = this.browserStorage.getTemporaryCache(TemporaryCacheKeys.URL_HASH, true);\r\n        this.browserStorage.removeItem(this.browserStorage.generateCacheKey(TemporaryCacheKeys.URL_HASH));\r\n        if (cachedHash) {\r\n            response = UrlUtils.getDeserializedResponse(cachedHash);\r\n            if (response) {\r\n                this.logger.verbose(\"Hash does not contain known properties, returning cached hash\");\r\n                return [response, cachedHash];\r\n            }\r\n        }\r\n        return [null, \"\"];\r\n    }\r\n    /**\r\n     * Checks if hash exists and handles in window.\r\n     * @param hash\r\n     * @param state\r\n     */\r\n    async handleResponse(serverParams, request, codeVerifier, serverTelemetryManager) {\r\n        const state = serverParams.state;\r\n        if (!state) {\r\n            throw createBrowserAuthError(noStateInHash);\r\n        }\r\n        if (serverParams.ear_jwe) {\r\n            const discoveredAuthority = await invokeAsync(this.getDiscoveredAuthority.bind(this), PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority, this.logger, this.performanceClient, request.correlationId)({\r\n                requestAuthority: request.authority,\r\n                requestAzureCloudOptions: request.azureCloudOptions,\r\n                requestExtraQueryParameters: request.extraQueryParameters,\r\n                account: request.account,\r\n            });\r\n            return invokeAsync(handleResponseEAR, PerformanceEvents.HandleResponseEar, this.logger, this.performanceClient, request.correlationId)(request, serverParams, ApiId.acquireTokenRedirect, this.config, discoveredAuthority, this.browserStorage, this.nativeStorage, this.eventHandler, this.logger, this.performanceClient, this.platformAuthProvider);\r\n        }\r\n        const authClient = await invokeAsync(this.createAuthCodeClient.bind(this), PerformanceEvents.StandardInteractionClientCreateAuthCodeClient, this.logger, this.performanceClient, this.correlationId)({ serverTelemetryManager, requestAuthority: request.authority });\r\n        return invokeAsync(handleResponseCode, PerformanceEvents.HandleResponseCode, this.logger, this.performanceClient, request.correlationId)(request, serverParams, codeVerifier, ApiId.acquireTokenRedirect, this.config, authClient, this.browserStorage, this.nativeStorage, this.eventHandler, this.logger, this.performanceClient, this.platformAuthProvider);\r\n    }\r\n    /**\r\n     * Redirects window to given URL.\r\n     * @param urlNavigate\r\n     * @param onRedirectNavigateRequest - onRedirectNavigate callback provided on the request\r\n     */\r\n    async initiateAuthRequest(requestUrl, onRedirectNavigateRequest) {\r\n        this.logger.verbose(\"RedirectHandler.initiateAuthRequest called\");\r\n        // Navigate if valid URL\r\n        if (requestUrl) {\r\n            this.logger.infoPii(`RedirectHandler.initiateAuthRequest: Navigate to: ${requestUrl}`);\r\n            const navigationOptions = {\r\n                apiId: ApiId.acquireTokenRedirect,\r\n                timeout: this.config.system.redirectNavigationTimeout,\r\n                noHistory: false,\r\n            };\r\n            const onRedirectNavigate = onRedirectNavigateRequest ||\r\n                this.config.auth.onRedirectNavigate;\r\n            // If onRedirectNavigate is implemented, invoke it and provide requestUrl\r\n            if (typeof onRedirectNavigate === \"function\") {\r\n                this.logger.verbose(\"RedirectHandler.initiateAuthRequest: Invoking onRedirectNavigate callback\");\r\n                const navigate = onRedirectNavigate(requestUrl);\r\n                // Returning false from onRedirectNavigate will stop navigation\r\n                if (navigate !== false) {\r\n                    this.logger.verbose(\"RedirectHandler.initiateAuthRequest: onRedirectNavigate did not return false, navigating\");\r\n                    await this.navigationClient.navigateExternal(requestUrl, navigationOptions);\r\n                    return;\r\n                }\r\n                else {\r\n                    this.logger.verbose(\"RedirectHandler.initiateAuthRequest: onRedirectNavigate returned false, stopping navigation\");\r\n                    return;\r\n                }\r\n            }\r\n            else {\r\n                // Navigate window to request URL\r\n                this.logger.verbose(\"RedirectHandler.initiateAuthRequest: Navigating window to navigate url\");\r\n                await this.navigationClient.navigateExternal(requestUrl, navigationOptions);\r\n                return;\r\n            }\r\n        }\r\n        else {\r\n            // Throw error if request URL is empty.\r\n            this.logger.info(\"RedirectHandler.initiateAuthRequest: Navigate url is empty\");\r\n            throw createBrowserAuthError(emptyNavigateUri);\r\n        }\r\n    }\r\n    /**\r\n     * Use to log out the current user, and redirect the user to the postLogoutRedirectUri.\r\n     * Default behaviour is to redirect the user to `window.location.href`.\r\n     * @param logoutRequest\r\n     */\r\n    async logout(logoutRequest) {\r\n        this.logger.verbose(\"logoutRedirect called\");\r\n        const validLogoutRequest = this.initializeLogoutRequest(logoutRequest);\r\n        const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.logout);\r\n        try {\r\n            this.eventHandler.emitEvent(EventType.LOGOUT_START, InteractionType.Redirect, logoutRequest);\r\n            // Clear cache on logout\r\n            await this.clearCacheOnLogout(this.correlationId, validLogoutRequest.account);\r\n            const navigationOptions = {\r\n                apiId: ApiId.logout,\r\n                timeout: this.config.system.redirectNavigationTimeout,\r\n                noHistory: false,\r\n            };\r\n            const authClient = await invokeAsync(this.createAuthCodeClient.bind(this), PerformanceEvents.StandardInteractionClientCreateAuthCodeClient, this.logger, this.performanceClient, this.correlationId)({\r\n                serverTelemetryManager,\r\n                requestAuthority: logoutRequest && logoutRequest.authority,\r\n                requestExtraQueryParameters: logoutRequest?.extraQueryParameters,\r\n                account: (logoutRequest && logoutRequest.account) || undefined,\r\n            });\r\n            if (authClient.authority.protocolMode === ProtocolMode.OIDC) {\r\n                try {\r\n                    authClient.authority.endSessionEndpoint;\r\n                }\r\n                catch {\r\n                    if (validLogoutRequest.account?.homeAccountId) {\r\n                        this.eventHandler.emitEvent(EventType.LOGOUT_SUCCESS, InteractionType.Redirect, validLogoutRequest);\r\n                        return;\r\n                    }\r\n                }\r\n            }\r\n            // Create logout string and navigate user window to logout.\r\n            const logoutUri = authClient.getLogoutUri(validLogoutRequest);\r\n            this.eventHandler.emitEvent(EventType.LOGOUT_SUCCESS, InteractionType.Redirect, validLogoutRequest);\r\n            // Check if onRedirectNavigate is implemented, and invoke it if so\r\n            if (logoutRequest &&\r\n                typeof logoutRequest.onRedirectNavigate === \"function\") {\r\n                const navigate = logoutRequest.onRedirectNavigate(logoutUri);\r\n                if (navigate !== false) {\r\n                    this.logger.verbose(\"Logout onRedirectNavigate did not return false, navigating\");\r\n                    // Ensure interaction is in progress\r\n                    if (!this.browserStorage.getInteractionInProgress()) {\r\n                        this.browserStorage.setInteractionInProgress(true, INTERACTION_TYPE.SIGNOUT);\r\n                    }\r\n                    await this.navigationClient.navigateExternal(logoutUri, navigationOptions);\r\n                    return;\r\n                }\r\n                else {\r\n                    // Ensure interaction is not in progress\r\n                    this.browserStorage.setInteractionInProgress(false);\r\n                    this.logger.verbose(\"Logout onRedirectNavigate returned false, stopping navigation\");\r\n                }\r\n            }\r\n            else {\r\n                // Ensure interaction is in progress\r\n                if (!this.browserStorage.getInteractionInProgress()) {\r\n                    this.browserStorage.setInteractionInProgress(true, INTERACTION_TYPE.SIGNOUT);\r\n                }\r\n                await this.navigationClient.navigateExternal(logoutUri, navigationOptions);\r\n                return;\r\n            }\r\n        }\r\n        catch (e) {\r\n            if (e instanceof AuthError) {\r\n                e.setCorrelationId(this.correlationId);\r\n                serverTelemetryManager.cacheFailedRequest(e);\r\n            }\r\n            this.eventHandler.emitEvent(EventType.LOGOUT_FAILURE, InteractionType.Redirect, null, e);\r\n            this.eventHandler.emitEvent(EventType.LOGOUT_END, InteractionType.Redirect);\r\n            throw e;\r\n        }\r\n        this.eventHandler.emitEvent(EventType.LOGOUT_END, InteractionType.Redirect);\r\n    }\r\n    /**\r\n     * Use to get the redirectStartPage either from request or use current window\r\n     * @param requestStartPage\r\n     */\r\n    getRedirectStartPage(requestStartPage) {\r\n        const redirectStartPage = requestStartPage || window.location.href;\r\n        return UrlString.getAbsoluteUrl(redirectStartPage, getCurrentUri());\r\n    }\r\n}\n\nexport { RedirectClient };\n//# sourceMappingURL=RedirectClient.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { PerformanceEvents, invoke, invokeAsync, ServerResponseType } from '@azure/msal-common/browser';\nimport { createBrowserAuthError } from '../error/BrowserAuthError.mjs';\nimport { DEFAULT_IFRAME_TIMEOUT_MS } from '../config/Configuration.mjs';\nimport { getEARForm, getCodeForm } from '../protocol/Authorize.mjs';\nimport { monitorWindowTimeout, emptyNavigateUri } from '../error/BrowserAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Creates a hidden iframe to given URL using user-requested scopes as an id.\r\n * @param urlNavigate\r\n * @param userRequestScopes\r\n */\r\nasync function initiateCodeRequest(requestUrl, performanceClient, logger, correlationId, navigateFrameWait) {\r\n    performanceClient.addQueueMeasurement(PerformanceEvents.SilentHandlerInitiateAuthRequest, correlationId);\r\n    if (!requestUrl) {\r\n        // Throw error if request URL is empty.\r\n        logger.info(\"Navigate url is empty\");\r\n        throw createBrowserAuthError(emptyNavigateUri);\r\n    }\r\n    if (navigateFrameWait) {\r\n        return invokeAsync(loadFrame, PerformanceEvents.SilentHandlerLoadFrame, logger, performanceClient, correlationId)(requestUrl, navigateFrameWait, performanceClient, correlationId);\r\n    }\r\n    return invoke(loadFrameSync, PerformanceEvents.SilentHandlerLoadFrameSync, logger, performanceClient, correlationId)(requestUrl);\r\n}\r\nasync function initiateCodeFlowWithPost(config, authority, request, logger, performanceClient) {\r\n    const frame = createHiddenIframe();\r\n    if (!frame.contentDocument) {\r\n        throw \"No document associated with iframe!\";\r\n    }\r\n    const form = await getCodeForm(frame.contentDocument, config, authority, request, logger, performanceClient);\r\n    form.submit();\r\n    return frame;\r\n}\r\nasync function initiateEarRequest(config, authority, request, logger, performanceClient) {\r\n    const frame = createHiddenIframe();\r\n    if (!frame.contentDocument) {\r\n        throw \"No document associated with iframe!\";\r\n    }\r\n    const form = await getEARForm(frame.contentDocument, config, authority, request, logger, performanceClient);\r\n    form.submit();\r\n    return frame;\r\n}\r\n/**\r\n * Monitors an iframe content window until it loads a url with a known hash, or hits a specified timeout.\r\n * @param iframe\r\n * @param timeout\r\n */\r\nasync function monitorIframeForHash(iframe, timeout, pollIntervalMilliseconds, performanceClient, logger, correlationId, responseType) {\r\n    performanceClient.addQueueMeasurement(PerformanceEvents.SilentHandlerMonitorIframeForHash, correlationId);\r\n    performanceClient.addFields({\r\n        iframePollIntervalMs: pollIntervalMilliseconds,\r\n        iframeTimeoutMs: timeout,\r\n    }, correlationId);\r\n    let totalTickCount = 0;\r\n    let crossOriginTickCount = 0;\r\n    return new Promise((resolve, reject) => {\r\n        if (timeout < DEFAULT_IFRAME_TIMEOUT_MS) {\r\n            logger.warning(`system.loadFrameTimeout or system.iframeHashTimeout set to lower (${timeout}ms) than the default (${DEFAULT_IFRAME_TIMEOUT_MS}ms). This may result in timeouts.`);\r\n        }\r\n        /*\r\n         * Polling for iframes can be purely timing based,\r\n         * since we don't need to account for interaction.\r\n         */\r\n        const timeoutId = window.setTimeout(() => {\r\n            window.clearInterval(intervalId);\r\n            reject(createBrowserAuthError(monitorWindowTimeout));\r\n        }, timeout);\r\n        const intervalId = window.setInterval(() => {\r\n            totalTickCount++;\r\n            let href = \"\";\r\n            const contentWindow = iframe.contentWindow;\r\n            try {\r\n                /*\r\n                 * Will throw if cross origin,\r\n                 * which should be caught and ignored\r\n                 * since we need the interval to keep running while on STS UI.\r\n                 */\r\n                href = contentWindow ? contentWindow.location.href : \"\";\r\n            }\r\n            catch (e) {\r\n                crossOriginTickCount++;\r\n            }\r\n            if (!href || href === \"about:blank\") {\r\n                return;\r\n            }\r\n            let responseString = \"\";\r\n            if (contentWindow) {\r\n                if (responseType === ServerResponseType.QUERY) {\r\n                    responseString = contentWindow.location.search;\r\n                }\r\n                else {\r\n                    responseString = contentWindow.location.hash;\r\n                }\r\n            }\r\n            window.clearTimeout(timeoutId);\r\n            window.clearInterval(intervalId);\r\n            resolve(responseString);\r\n        }, pollIntervalMilliseconds);\r\n    }).finally(() => {\r\n        performanceClient.addFields({\r\n            iframeTickCount: totalTickCount,\r\n            crossOriginTickCount: crossOriginTickCount,\r\n        }, correlationId);\r\n        invoke(removeHiddenIframe, PerformanceEvents.RemoveHiddenIframe, logger, performanceClient, correlationId)(iframe);\r\n    });\r\n}\r\n/**\r\n * @hidden\r\n * Loads iframe with authorization endpoint URL\r\n * @ignore\r\n * @deprecated\r\n */\r\nfunction loadFrame(urlNavigate, navigateFrameWait, performanceClient, correlationId) {\r\n    performanceClient.addQueueMeasurement(PerformanceEvents.SilentHandlerLoadFrame, correlationId);\r\n    /*\r\n     * This trick overcomes iframe navigation in IE\r\n     * IE does not load the page consistently in iframe\r\n     */\r\n    return new Promise((resolve, reject) => {\r\n        const frameHandle = createHiddenIframe();\r\n        window.setTimeout(() => {\r\n            if (!frameHandle) {\r\n                reject(\"Unable to load iframe\");\r\n                return;\r\n            }\r\n            frameHandle.src = urlNavigate;\r\n            resolve(frameHandle);\r\n        }, navigateFrameWait);\r\n    });\r\n}\r\n/**\r\n * @hidden\r\n * Loads the iframe synchronously when the navigateTimeFrame is set to `0`\r\n * @param urlNavigate\r\n * @param frameName\r\n * @param logger\r\n */\r\nfunction loadFrameSync(urlNavigate) {\r\n    const frameHandle = createHiddenIframe();\r\n    frameHandle.src = urlNavigate;\r\n    return frameHandle;\r\n}\r\n/**\r\n * @hidden\r\n * Creates a new hidden iframe or gets an existing one for silent token renewal.\r\n * @ignore\r\n */\r\nfunction createHiddenIframe() {\r\n    const authFrame = document.createElement(\"iframe\");\r\n    authFrame.className = \"msalSilentIframe\";\r\n    authFrame.style.visibility = \"hidden\";\r\n    authFrame.style.position = \"absolute\";\r\n    authFrame.style.width = authFrame.style.height = \"0\";\r\n    authFrame.style.border = \"0\";\r\n    authFrame.setAttribute(\"sandbox\", \"allow-scripts allow-same-origin allow-forms\");\r\n    authFrame.setAttribute(\"allow\", \"local-network-access *\");\r\n    document.body.appendChild(authFrame);\r\n    return authFrame;\r\n}\r\n/**\r\n * @hidden\r\n * Removes a hidden iframe from the page.\r\n * @ignore\r\n */\r\nfunction removeHiddenIframe(iframe) {\r\n    if (document.body === iframe.parentNode) {\r\n        document.body.removeChild(iframe);\r\n    }\r\n}\n\nexport { initiateCodeFlowWithPost, initiateCodeRequest, initiateEarRequest, monitorIframeForHash };\n//# sourceMappingURL=SilentHandler.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { PerformanceEvents, PromptValue, invokeAsync, ProtocolMode, AuthError, invoke, AuthorizeProtocol, HttpMethod } from '@azure/msal-common/browser';\nimport { StandardInteractionClient } from './StandardInteractionClient.mjs';\nimport { createBrowserAuthError } from '../error/BrowserAuthError.mjs';\nimport { InteractionType, BrowserConstants } from '../utils/BrowserConstants.mjs';\nimport { initiateEarRequest, monitorIframeForHash, initiateCodeRequest, initiateCodeFlowWithPost } from '../interaction_handler/SilentHandler.mjs';\nimport { preconnect } from '../utils/BrowserUtils.mjs';\nimport { deserializeResponse } from '../response/ResponseHandler.mjs';\nimport { handleResponseCode, handleResponseEAR, getAuthCodeRequestUrl } from '../protocol/Authorize.mjs';\nimport { generatePkceCodes } from '../crypto/PkceGenerator.mjs';\nimport { isPlatformAuthAllowed } from '../broker/nativeBroker/PlatformAuthProvider.mjs';\nimport { generateEarKey } from '../crypto/BrowserCrypto.mjs';\nimport { silentLogoutUnsupported } from '../error/BrowserAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass SilentIframeClient extends StandardInteractionClient {\r\n    constructor(config, storageImpl, browserCrypto, logger, eventHandler, navigationClient, apiId, performanceClient, nativeStorageImpl, platformAuthProvider, correlationId) {\r\n        super(config, storageImpl, browserCrypto, logger, eventHandler, navigationClient, performanceClient, platformAuthProvider, correlationId);\r\n        this.apiId = apiId;\r\n        this.nativeStorage = nativeStorageImpl;\r\n    }\r\n    /**\r\n     * Acquires a token silently by opening a hidden iframe to the /authorize endpoint with prompt=none or prompt=no_session\r\n     * @param request\r\n     */\r\n    async acquireToken(request) {\r\n        this.performanceClient.addQueueMeasurement(PerformanceEvents.SilentIframeClientAcquireToken, request.correlationId);\r\n        // Check that we have some SSO data\r\n        if (!request.loginHint &&\r\n            !request.sid &&\r\n            (!request.account || !request.account.username)) {\r\n            this.logger.warning(\"No user hint provided. The authorization server may need more information to complete this request.\");\r\n        }\r\n        // Check the prompt value\r\n        const inputRequest = { ...request };\r\n        if (inputRequest.prompt) {\r\n            if (inputRequest.prompt !== PromptValue.NONE &&\r\n                inputRequest.prompt !== PromptValue.NO_SESSION) {\r\n                this.logger.warning(`SilentIframeClient. Replacing invalid prompt ${inputRequest.prompt} with ${PromptValue.NONE}`);\r\n                inputRequest.prompt = PromptValue.NONE;\r\n            }\r\n        }\r\n        else {\r\n            inputRequest.prompt = PromptValue.NONE;\r\n        }\r\n        // Create silent request\r\n        const silentRequest = await invokeAsync(this.initializeAuthorizationRequest.bind(this), PerformanceEvents.StandardInteractionClientInitializeAuthorizationRequest, this.logger, this.performanceClient, request.correlationId)(inputRequest, InteractionType.Silent);\r\n        silentRequest.platformBroker = isPlatformAuthAllowed(this.config, this.logger, this.platformAuthProvider, silentRequest.authenticationScheme);\r\n        preconnect(silentRequest.authority);\r\n        if (this.config.auth.protocolMode === ProtocolMode.EAR) {\r\n            return this.executeEarFlow(silentRequest);\r\n        }\r\n        else {\r\n            return this.executeCodeFlow(silentRequest);\r\n        }\r\n    }\r\n    /**\r\n     * Executes auth code + PKCE flow\r\n     * @param request\r\n     * @returns\r\n     */\r\n    async executeCodeFlow(request) {\r\n        let authClient;\r\n        const serverTelemetryManager = this.initializeServerTelemetryManager(this.apiId);\r\n        try {\r\n            // Initialize the client\r\n            authClient = await invokeAsync(this.createAuthCodeClient.bind(this), PerformanceEvents.StandardInteractionClientCreateAuthCodeClient, this.logger, this.performanceClient, request.correlationId)({\r\n                serverTelemetryManager,\r\n                requestAuthority: request.authority,\r\n                requestAzureCloudOptions: request.azureCloudOptions,\r\n                requestExtraQueryParameters: request.extraQueryParameters,\r\n                account: request.account,\r\n            });\r\n            return await invokeAsync(this.silentTokenHelper.bind(this), PerformanceEvents.SilentIframeClientTokenHelper, this.logger, this.performanceClient, request.correlationId)(authClient, request);\r\n        }\r\n        catch (e) {\r\n            if (e instanceof AuthError) {\r\n                e.setCorrelationId(this.correlationId);\r\n                serverTelemetryManager.cacheFailedRequest(e);\r\n            }\r\n            if (!authClient ||\r\n                !(e instanceof AuthError) ||\r\n                e.errorCode !== BrowserConstants.INVALID_GRANT_ERROR) {\r\n                throw e;\r\n            }\r\n            this.performanceClient.addFields({\r\n                retryError: e.errorCode,\r\n            }, this.correlationId);\r\n            return await invokeAsync(this.silentTokenHelper.bind(this), PerformanceEvents.SilentIframeClientTokenHelper, this.logger, this.performanceClient, this.correlationId)(authClient, request);\r\n        }\r\n    }\r\n    /**\r\n     * Executes EAR flow\r\n     * @param request\r\n     */\r\n    async executeEarFlow(request) {\r\n        const correlationId = request.correlationId;\r\n        const discoveredAuthority = await invokeAsync(this.getDiscoveredAuthority.bind(this), PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority, this.logger, this.performanceClient, correlationId)({\r\n            requestAuthority: request.authority,\r\n            requestAzureCloudOptions: request.azureCloudOptions,\r\n            requestExtraQueryParameters: request.extraQueryParameters,\r\n            account: request.account,\r\n        });\r\n        const earJwk = await invokeAsync(generateEarKey, PerformanceEvents.GenerateEarKey, this.logger, this.performanceClient, correlationId)();\r\n        const pkceCodes = await invokeAsync(generatePkceCodes, PerformanceEvents.GeneratePkceCodes, this.logger, this.performanceClient, correlationId)(this.performanceClient, this.logger, correlationId);\r\n        const silentRequest = {\r\n            ...request,\r\n            earJwk: earJwk,\r\n            codeChallenge: pkceCodes.challenge,\r\n        };\r\n        const msalFrame = await invokeAsync(initiateEarRequest, PerformanceEvents.SilentHandlerInitiateAuthRequest, this.logger, this.performanceClient, correlationId)(this.config, discoveredAuthority, silentRequest, this.logger, this.performanceClient);\r\n        const responseType = this.config.auth.OIDCOptions.serverResponseType;\r\n        // Monitor the window for the hash. Return the string value and close the popup when the hash is received. Default timeout is 60 seconds.\r\n        const responseString = await invokeAsync(monitorIframeForHash, PerformanceEvents.SilentHandlerMonitorIframeForHash, this.logger, this.performanceClient, correlationId)(msalFrame, this.config.system.iframeHashTimeout, this.config.system.pollIntervalMilliseconds, this.performanceClient, this.logger, correlationId, responseType);\r\n        const serverParams = invoke(deserializeResponse, PerformanceEvents.DeserializeResponse, this.logger, this.performanceClient, correlationId)(responseString, responseType, this.logger);\r\n        if (!serverParams.ear_jwe && serverParams.code) {\r\n            // If server doesn't support EAR, they may fallback to auth code flow instead\r\n            const authClient = await invokeAsync(this.createAuthCodeClient.bind(this), PerformanceEvents.StandardInteractionClientCreateAuthCodeClient, this.logger, this.performanceClient, correlationId)({\r\n                serverTelemetryManager: this.initializeServerTelemetryManager(this.apiId),\r\n                requestAuthority: request.authority,\r\n                requestAzureCloudOptions: request.azureCloudOptions,\r\n                requestExtraQueryParameters: request.extraQueryParameters,\r\n                account: request.account,\r\n                authority: discoveredAuthority,\r\n            });\r\n            return invokeAsync(handleResponseCode, PerformanceEvents.HandleResponseCode, this.logger, this.performanceClient, correlationId)(silentRequest, serverParams, pkceCodes.verifier, this.apiId, this.config, authClient, this.browserStorage, this.nativeStorage, this.eventHandler, this.logger, this.performanceClient, this.platformAuthProvider);\r\n        }\r\n        else {\r\n            return invokeAsync(handleResponseEAR, PerformanceEvents.HandleResponseEar, this.logger, this.performanceClient, correlationId)(silentRequest, serverParams, this.apiId, this.config, discoveredAuthority, this.browserStorage, this.nativeStorage, this.eventHandler, this.logger, this.performanceClient, this.platformAuthProvider);\r\n        }\r\n    }\r\n    /**\r\n     * Verifies SSO capability by making an iframe request to /authorize without exchanging the code for tokens.\r\n     * This is useful for verifying SSO capability in the background without the overhead of a full token exchange.\r\n     * @param request - The SSO silent request\r\n     * @returns true if SSO verification was successful with a valid authorization code, false otherwise\r\n     */\r\n    async verifySso(request) {\r\n        this.performanceClient.addQueueMeasurement(PerformanceEvents.SilentIframeClientAcquireToken, request.correlationId);\r\n        const inputRequest = { ...request };\r\n        if (!inputRequest.prompt) {\r\n            inputRequest.prompt = PromptValue.NONE;\r\n        }\r\n        // Create silent request\r\n        const silentRequest = await invokeAsync(this.initializeAuthorizationRequest.bind(this), PerformanceEvents.StandardInteractionClientInitializeAuthorizationRequest, this.logger, this.performanceClient, request.correlationId)(inputRequest, InteractionType.Silent);\r\n        const authClient = await invokeAsync(this.createAuthCodeClient.bind(this), PerformanceEvents.StandardInteractionClientCreateAuthCodeClient, this.logger, this.performanceClient, request.correlationId)({\r\n            serverTelemetryManager: this.initializeServerTelemetryManager(this.apiId),\r\n            requestAuthority: silentRequest.authority,\r\n            requestAzureCloudOptions: silentRequest.azureCloudOptions,\r\n            requestExtraQueryParameters: silentRequest.extraQueryParameters,\r\n            account: silentRequest.account,\r\n        });\r\n        const correlationId = silentRequest.correlationId;\r\n        const pkceCodes = await invokeAsync(generatePkceCodes, PerformanceEvents.GeneratePkceCodes, this.logger, this.performanceClient, correlationId)(this.performanceClient, this.logger, correlationId);\r\n        const requestWithPkce = {\r\n            ...silentRequest,\r\n            codeChallenge: pkceCodes.challenge,\r\n        };\r\n        // Create authorize request url\r\n        const navigateUrl = await invokeAsync(getAuthCodeRequestUrl, PerformanceEvents.GetAuthCodeUrl, this.logger, this.performanceClient, correlationId)(this.config, authClient.authority, requestWithPkce, this.logger, this.performanceClient);\r\n        // Get the frame handle for the silent request - this triggers the SSO verification\r\n        const msalFrame = await invokeAsync(initiateCodeRequest, PerformanceEvents.SilentHandlerInitiateAuthRequest, this.logger, this.performanceClient, correlationId)(navigateUrl, this.performanceClient, this.logger, correlationId, this.config.system.navigateFrameWait);\r\n        const responseType = this.config.auth.OIDCOptions.serverResponseType;\r\n        // Monitor the iframe for the response\r\n        const responseString = await invokeAsync(monitorIframeForHash, PerformanceEvents.SilentHandlerMonitorIframeForHash, this.logger, this.performanceClient, correlationId)(msalFrame, this.config.system.iframeHashTimeout, this.config.system.pollIntervalMilliseconds, this.performanceClient, this.logger, correlationId, responseType);\r\n        // Deserialize the response\r\n        const serverParams = invoke(deserializeResponse, PerformanceEvents.DeserializeResponse, this.logger, this.performanceClient, correlationId)(responseString, responseType, this.logger);\r\n        // Validate the response - this checks for errors and validates state\r\n        AuthorizeProtocol.validateAuthorizationResponse(serverParams, silentRequest.state);\r\n        // Verify a valid authorization code is present\r\n        if (!serverParams.code) {\r\n            this.logger.warning(\"SSO verification response did not contain an authorization code\", correlationId);\r\n            return false;\r\n        }\r\n        this.logger.verbose(\"SSO verification completed successfully with valid authorization code - skipped token exchange\", correlationId);\r\n        return true;\r\n    }\r\n    /**\r\n     * Currently Unsupported\r\n     */\r\n    logout() {\r\n        // Synchronous so we must reject\r\n        return Promise.reject(createBrowserAuthError(silentLogoutUnsupported));\r\n    }\r\n    /**\r\n     * Helper which acquires an authorization code silently using a hidden iframe from given url\r\n     * using the scopes requested as part of the id, and exchanges the code for a set of OAuth tokens.\r\n     * @param navigateUrl\r\n     * @param userRequestScopes\r\n     */\r\n    async silentTokenHelper(authClient, request) {\r\n        const correlationId = request.correlationId;\r\n        this.performanceClient.addQueueMeasurement(PerformanceEvents.SilentIframeClientTokenHelper, correlationId);\r\n        const pkceCodes = await invokeAsync(generatePkceCodes, PerformanceEvents.GeneratePkceCodes, this.logger, this.performanceClient, correlationId)(this.performanceClient, this.logger, correlationId);\r\n        const silentRequest = {\r\n            ...request,\r\n            codeChallenge: pkceCodes.challenge,\r\n        };\r\n        let msalFrame;\r\n        if (request.httpMethod === HttpMethod.POST) {\r\n            msalFrame = await invokeAsync(initiateCodeFlowWithPost, PerformanceEvents.SilentHandlerInitiateAuthRequest, this.logger, this.performanceClient, correlationId)(this.config, authClient.authority, silentRequest, this.logger, this.performanceClient);\r\n        }\r\n        else {\r\n            // Create authorize request url\r\n            const navigateUrl = await invokeAsync(getAuthCodeRequestUrl, PerformanceEvents.GetAuthCodeUrl, this.logger, this.performanceClient, correlationId)(this.config, authClient.authority, silentRequest, this.logger, this.performanceClient);\r\n            // Get the frame handle for the silent request\r\n            msalFrame = await invokeAsync(initiateCodeRequest, PerformanceEvents.SilentHandlerInitiateAuthRequest, this.logger, this.performanceClient, correlationId)(navigateUrl, this.performanceClient, this.logger, correlationId, this.config.system.navigateFrameWait);\r\n        }\r\n        const responseType = this.config.auth.OIDCOptions.serverResponseType;\r\n        // Monitor the window for the hash. Return the string value and close the popup when the hash is received. Default timeout is 60 seconds.\r\n        const responseString = await invokeAsync(monitorIframeForHash, PerformanceEvents.SilentHandlerMonitorIframeForHash, this.logger, this.performanceClient, correlationId)(msalFrame, this.config.system.iframeHashTimeout, this.config.system.pollIntervalMilliseconds, this.performanceClient, this.logger, correlationId, responseType);\r\n        const serverParams = invoke(deserializeResponse, PerformanceEvents.DeserializeResponse, this.logger, this.performanceClient, correlationId)(responseString, responseType, this.logger);\r\n        return invokeAsync(handleResponseCode, PerformanceEvents.HandleResponseCode, this.logger, this.performanceClient, correlationId)(request, serverParams, pkceCodes.verifier, this.apiId, this.config, authClient, this.browserStorage, this.nativeStorage, this.eventHandler, this.logger, this.performanceClient, this.platformAuthProvider);\r\n    }\r\n}\n\nexport { SilentIframeClient };\n//# sourceMappingURL=SilentIframeClient.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { StandardInteractionClient } from './StandardInteractionClient.mjs';\nimport { PerformanceEvents, invokeAsync, RefreshTokenClient } from '@azure/msal-common/browser';\nimport { ApiId } from '../utils/BrowserConstants.mjs';\nimport { createBrowserAuthError } from '../error/BrowserAuthError.mjs';\nimport { initializeBaseRequest } from '../request/RequestHelpers.mjs';\nimport { silentLogoutUnsupported } from '../error/BrowserAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass SilentRefreshClient extends StandardInteractionClient {\r\n    /**\r\n     * Exchanges the refresh token for new tokens\r\n     * @param request\r\n     */\r\n    async acquireToken(request) {\r\n        this.performanceClient.addQueueMeasurement(PerformanceEvents.SilentRefreshClientAcquireToken, request.correlationId);\r\n        const baseRequest = await invokeAsync(initializeBaseRequest, PerformanceEvents.InitializeBaseRequest, this.logger, this.performanceClient, request.correlationId)(request, this.config, this.performanceClient, this.logger);\r\n        const silentRequest = {\r\n            ...request,\r\n            ...baseRequest,\r\n        };\r\n        if (request.redirectUri) {\r\n            // Make sure any passed redirectUri is converted to an absolute URL - redirectUri is not a required parameter for refresh token redemption so only include if explicitly provided\r\n            silentRequest.redirectUri = this.getRedirectUri(request.redirectUri);\r\n        }\r\n        const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.acquireTokenSilent_silentFlow);\r\n        const refreshTokenClient = await this.createRefreshTokenClient({\r\n            serverTelemetryManager,\r\n            authorityUrl: silentRequest.authority,\r\n            azureCloudOptions: silentRequest.azureCloudOptions,\r\n            account: silentRequest.account,\r\n        });\r\n        // Send request to renew token. Auth module will throw errors if token cannot be renewed.\r\n        return invokeAsync(refreshTokenClient.acquireTokenByRefreshToken.bind(refreshTokenClient), PerformanceEvents.RefreshTokenClientAcquireTokenByRefreshToken, this.logger, this.performanceClient, request.correlationId)(silentRequest, ApiId.acquireTokenSilent_silentFlow).catch((e) => {\r\n            e.setCorrelationId(this.correlationId);\r\n            serverTelemetryManager.cacheFailedRequest(e);\r\n            throw e;\r\n        });\r\n    }\r\n    /**\r\n     * Currently Unsupported\r\n     */\r\n    logout() {\r\n        // Synchronous so we must reject\r\n        return Promise.reject(createBrowserAuthError(silentLogoutUnsupported));\r\n    }\r\n    /**\r\n     * Creates a Refresh Client with the given authority, or the default authority.\r\n     * @param params {\r\n     *         serverTelemetryManager: ServerTelemetryManager;\r\n     *         authorityUrl?: string;\r\n     *         azureCloudOptions?: AzureCloudOptions;\r\n     *         extraQueryParams?: StringDict;\r\n     *         account?: AccountInfo;\r\n     *        }\r\n     */\r\n    async createRefreshTokenClient(params) {\r\n        // Create auth module.\r\n        const clientConfig = await invokeAsync(this.getClientConfiguration.bind(this), PerformanceEvents.StandardInteractionClientGetClientConfiguration, this.logger, this.performanceClient, this.correlationId)({\r\n            serverTelemetryManager: params.serverTelemetryManager,\r\n            requestAuthority: params.authorityUrl,\r\n            requestAzureCloudOptions: params.azureCloudOptions,\r\n            requestExtraQueryParameters: params.extraQueryParameters,\r\n            account: params.account,\r\n        });\r\n        return new RefreshTokenClient(clientConfig, this.performanceClient);\r\n    }\r\n}\n\nexport { SilentRefreshClient };\n//# sourceMappingURL=SilentRefreshClient.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { PerformanceEvents, AuthToken, AuthorityFactory, Authority, invokeAsync, AccountEntity, buildAccountToCache, CacheHelpers, ScopeSet, TimeUtils } from '@azure/msal-common/browser';\nimport { createBrowserAuthError } from '../error/BrowserAuthError.mjs';\nimport { base64Decode } from '../encode/Base64Decode.mjs';\nimport { createNewGuid } from '../crypto/BrowserCrypto.mjs';\nimport { ApiId } from '../utils/BrowserConstants.mjs';\nimport { nonBrowserEnvironment, unableToLoadToken } from '../error/BrowserAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Token cache manager\r\n */\r\nclass TokenCache {\r\n    constructor(configuration, storage, logger, cryptoObj, performanceClient) {\r\n        this.isBrowserEnvironment = typeof window !== \"undefined\";\r\n        this.config = configuration;\r\n        this.storage = storage;\r\n        this.logger = logger;\r\n        this.cryptoObj = cryptoObj;\r\n        this.performanceClient = performanceClient;\r\n    }\r\n    // Move getAllAccounts here and cache utility APIs\r\n    /**\r\n     * API to load tokens to msal-browser cache.\r\n     * @param request\r\n     * @param response\r\n     * @param options\r\n     * @returns `AuthenticationResult` for the response that was loaded.\r\n     */\r\n    async loadExternalTokens(request, response, options) {\r\n        if (!this.isBrowserEnvironment) {\r\n            throw createBrowserAuthError(nonBrowserEnvironment);\r\n        }\r\n        const correlationId = request.correlationId || createNewGuid();\r\n        const rootMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.LoadExternalTokens, correlationId);\r\n        try {\r\n            const idTokenClaims = response.id_token\r\n                ? AuthToken.extractTokenClaims(response.id_token, base64Decode)\r\n                : undefined;\r\n            const kmsi = AuthToken.isKmsi(idTokenClaims || {});\r\n            const authorityOptions = {\r\n                protocolMode: this.config.auth.protocolMode,\r\n                knownAuthorities: this.config.auth.knownAuthorities,\r\n                cloudDiscoveryMetadata: this.config.auth.cloudDiscoveryMetadata,\r\n                authorityMetadata: this.config.auth.authorityMetadata,\r\n                skipAuthorityMetadataCache: this.config.auth.skipAuthorityMetadataCache,\r\n            };\r\n            const authorityString = request.authority || this.config.auth.authority;\r\n            const authority = await AuthorityFactory.createDiscoveredInstance(Authority.generateAuthority(authorityString, request.azureCloudOptions), this.config.system.networkClient, this.storage, authorityOptions, this.logger, correlationId, this.performanceClient);\r\n            const cacheRecordAccount = await invokeAsync(this.loadAccount.bind(this), PerformanceEvents.LoadAccount, this.logger, this.performanceClient, correlationId)(request, options.clientInfo || response.client_info || \"\", correlationId, authority, idTokenClaims);\r\n            const idToken = await invokeAsync(this.loadIdToken.bind(this), PerformanceEvents.LoadIdToken, this.logger, this.performanceClient, correlationId)(response, cacheRecordAccount.homeAccountId, cacheRecordAccount.environment, cacheRecordAccount.realm, correlationId, kmsi);\r\n            const accessToken = await invokeAsync(this.loadAccessToken.bind(this), PerformanceEvents.LoadAccessToken, this.logger, this.performanceClient, correlationId)(request, response, cacheRecordAccount.homeAccountId, cacheRecordAccount.environment, cacheRecordAccount.realm, options, correlationId, kmsi);\r\n            const refreshToken = await invokeAsync(this.loadRefreshToken.bind(this), PerformanceEvents.LoadRefreshToken, this.logger, this.performanceClient, correlationId)(response, cacheRecordAccount.homeAccountId, cacheRecordAccount.environment, correlationId, kmsi);\r\n            rootMeasurement.end({ success: true }, undefined, AccountEntity.getAccountInfo(cacheRecordAccount));\r\n            return this.generateAuthenticationResult(request, {\r\n                account: cacheRecordAccount,\r\n                idToken,\r\n                accessToken,\r\n                refreshToken,\r\n            }, authority, idTokenClaims);\r\n        }\r\n        catch (error) {\r\n            rootMeasurement.end({ success: false }, error);\r\n            throw error;\r\n        }\r\n    }\r\n    /**\r\n     * Helper function to load account to msal-browser cache\r\n     * @param idToken\r\n     * @param environment\r\n     * @param clientInfo\r\n     * @param authorityType\r\n     * @param requestHomeAccountId\r\n     * @returns `AccountEntity`\r\n     */\r\n    async loadAccount(request, clientInfo, correlationId, authority, idTokenClaims) {\r\n        this.logger.verbose(\"TokenCache - loading account\");\r\n        if (request.account) {\r\n            const accountEntity = AccountEntity.createFromAccountInfo(request.account);\r\n            await this.storage.setAccount(accountEntity, correlationId, AuthToken.isKmsi(idTokenClaims || {}), ApiId.loadExternalTokens);\r\n            return accountEntity;\r\n        }\r\n        else if (!clientInfo && !idTokenClaims) {\r\n            this.logger.error(\"TokenCache - if an account is not provided on the request, clientInfo or idToken must be provided instead.\");\r\n            throw createBrowserAuthError(unableToLoadToken);\r\n        }\r\n        const homeAccountId = AccountEntity.generateHomeAccountId(clientInfo, authority.authorityType, this.logger, this.cryptoObj, idTokenClaims);\r\n        const claimsTenantId = idTokenClaims?.tid;\r\n        const cachedAccount = buildAccountToCache(this.storage, authority, homeAccountId, base64Decode, correlationId, idTokenClaims, clientInfo, authority.getPreferredCache(), claimsTenantId, undefined, // authCodePayload\r\n        undefined, // nativeAccountId\r\n        this.logger);\r\n        await this.storage.setAccount(cachedAccount, correlationId, AuthToken.isKmsi(idTokenClaims || {}), ApiId.loadExternalTokens);\r\n        return cachedAccount;\r\n    }\r\n    /**\r\n     * Helper function to load id tokens to msal-browser cache\r\n     * @param idToken\r\n     * @param homeAccountId\r\n     * @param environment\r\n     * @param tenantId\r\n     * @returns `IdTokenEntity`\r\n     */\r\n    async loadIdToken(response, homeAccountId, environment, tenantId, correlationId, kmsi) {\r\n        if (!response.id_token) {\r\n            this.logger.verbose(\"TokenCache - no id token found in response\");\r\n            return null;\r\n        }\r\n        this.logger.verbose(\"TokenCache - loading id token\");\r\n        const idTokenEntity = CacheHelpers.createIdTokenEntity(homeAccountId, environment, response.id_token, this.config.auth.clientId, tenantId);\r\n        await this.storage.setIdTokenCredential(idTokenEntity, correlationId, kmsi);\r\n        return idTokenEntity;\r\n    }\r\n    /**\r\n     * Helper function to load access tokens to msal-browser cache\r\n     * @param request\r\n     * @param response\r\n     * @param homeAccountId\r\n     * @param environment\r\n     * @param tenantId\r\n     * @returns `AccessTokenEntity`\r\n     */\r\n    async loadAccessToken(request, response, homeAccountId, environment, tenantId, options, correlationId, kmsi) {\r\n        if (!response.access_token) {\r\n            this.logger.verbose(\"TokenCache - no access token found in response\");\r\n            return null;\r\n        }\r\n        else if (!response.expires_in) {\r\n            this.logger.error(\"TokenCache - no expiration set on the access token. Cannot add it to the cache.\");\r\n            return null;\r\n        }\r\n        else if (!response.scope &&\r\n            (!request.scopes || !request.scopes.length)) {\r\n            this.logger.error(\"TokenCache - scopes not specified in the request or response. Cannot add token to the cache.\");\r\n            return null;\r\n        }\r\n        this.logger.verbose(\"TokenCache - loading access token\");\r\n        const scopes = response.scope\r\n            ? ScopeSet.fromString(response.scope)\r\n            : new ScopeSet(request.scopes);\r\n        const expiresOn = options.expiresOn || response.expires_in + TimeUtils.nowSeconds();\r\n        const extendedExpiresOn = options.extendedExpiresOn ||\r\n            (response.ext_expires_in || response.expires_in) +\r\n                TimeUtils.nowSeconds();\r\n        const accessTokenEntity = CacheHelpers.createAccessTokenEntity(homeAccountId, environment, response.access_token, this.config.auth.clientId, tenantId, scopes.printScopes(), expiresOn, extendedExpiresOn, base64Decode);\r\n        await this.storage.setAccessTokenCredential(accessTokenEntity, correlationId, kmsi);\r\n        return accessTokenEntity;\r\n    }\r\n    /**\r\n     * Helper function to load refresh tokens to msal-browser cache\r\n     * @param request\r\n     * @param response\r\n     * @param homeAccountId\r\n     * @param environment\r\n     * @returns `RefreshTokenEntity`\r\n     */\r\n    async loadRefreshToken(response, homeAccountId, environment, correlationId, kmsi) {\r\n        if (!response.refresh_token) {\r\n            this.logger.verbose(\"TokenCache - no refresh token found in response\");\r\n            return null;\r\n        }\r\n        const expiresOn = response.refresh_token_expires_in\r\n            ? response.refresh_token_expires_in + TimeUtils.nowSeconds()\r\n            : undefined;\r\n        this.performanceClient.addFields({\r\n            extRtExpiresOnSeconds: expiresOn,\r\n        }, correlationId);\r\n        this.logger.verbose(\"TokenCache - loading refresh token\");\r\n        const refreshTokenEntity = CacheHelpers.createRefreshTokenEntity(homeAccountId, environment, response.refresh_token, this.config.auth.clientId, response.foci, undefined, // userAssertionHash\r\n        expiresOn);\r\n        await this.storage.setRefreshTokenCredential(refreshTokenEntity, correlationId, kmsi);\r\n        return refreshTokenEntity;\r\n    }\r\n    /**\r\n     * Helper function to generate an `AuthenticationResult` for the result.\r\n     * @param request\r\n     * @param idTokenObj\r\n     * @param cacheRecord\r\n     * @param authority\r\n     * @returns `AuthenticationResult`\r\n     */\r\n    generateAuthenticationResult(request, cacheRecord, authority, idTokenClaims) {\r\n        let accessToken = \"\";\r\n        let responseScopes = [];\r\n        let expiresOn = null;\r\n        let extExpiresOn;\r\n        if (cacheRecord?.accessToken) {\r\n            accessToken = cacheRecord.accessToken.secret;\r\n            responseScopes = ScopeSet.fromString(cacheRecord.accessToken.target).asArray();\r\n            // Access token expiresOn stored in seconds, converting to Date for AuthenticationResult\r\n            expiresOn = TimeUtils.toDateFromSeconds(cacheRecord.accessToken.expiresOn);\r\n            extExpiresOn = TimeUtils.toDateFromSeconds(cacheRecord.accessToken.extendedExpiresOn);\r\n        }\r\n        const accountEntity = cacheRecord.account;\r\n        return {\r\n            authority: authority ? authority.canonicalAuthority : \"\",\r\n            uniqueId: cacheRecord.account.localAccountId,\r\n            tenantId: cacheRecord.account.realm,\r\n            scopes: responseScopes,\r\n            account: AccountEntity.getAccountInfo(accountEntity),\r\n            idToken: cacheRecord.idToken?.secret || \"\",\r\n            idTokenClaims: idTokenClaims || {},\r\n            accessToken: accessToken,\r\n            fromCache: true,\r\n            expiresOn: expiresOn,\r\n            correlationId: request.correlationId || \"\",\r\n            requestId: \"\",\r\n            extExpiresOn: extExpiresOn,\r\n            familyId: cacheRecord.refreshToken?.familyId || \"\",\r\n            tokenType: cacheRecord?.accessToken?.tokenType || \"\",\r\n            state: request.state || \"\",\r\n            cloudGraphHostName: accountEntity.cloudGraphHostName || \"\",\r\n            msGraphHost: accountEntity.msGraphHost || \"\",\r\n            fromNativeBroker: false,\r\n        };\r\n    }\r\n}\n\nexport { TokenCache };\n//# sourceMappingURL=TokenCache.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { AuthorizationCodeClient } from '@azure/msal-common/browser';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass HybridSpaAuthorizationCodeClient extends AuthorizationCodeClient {\r\n    constructor(config) {\r\n        super(config);\r\n        this.includeRedirectUri = false;\r\n    }\r\n}\n\nexport { HybridSpaAuthorizationCodeClient };\n//# sourceMappingURL=HybridSpaAuthorizationCodeClient.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { invokeAsync, PerformanceEvents, AuthError } from '@azure/msal-common/browser';\nimport { StandardInteractionClient } from './StandardInteractionClient.mjs';\nimport { createBrowserAuthError } from '../error/BrowserAuthError.mjs';\nimport { InteractionType } from '../utils/BrowserConstants.mjs';\nimport { HybridSpaAuthorizationCodeClient } from './HybridSpaAuthorizationCodeClient.mjs';\nimport { InteractionHandler } from '../interaction_handler/InteractionHandler.mjs';\nimport { authCodeRequired, silentLogoutUnsupported } from '../error/BrowserAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass SilentAuthCodeClient extends StandardInteractionClient {\r\n    constructor(config, storageImpl, browserCrypto, logger, eventHandler, navigationClient, apiId, performanceClient, platformAuthProvider, correlationId) {\r\n        super(config, storageImpl, browserCrypto, logger, eventHandler, navigationClient, performanceClient, platformAuthProvider, correlationId);\r\n        this.apiId = apiId;\r\n    }\r\n    /**\r\n     * Acquires a token silently by redeeming an authorization code against the /token endpoint\r\n     * @param request\r\n     */\r\n    async acquireToken(request) {\r\n        // Auth code payload is required\r\n        if (!request.code) {\r\n            throw createBrowserAuthError(authCodeRequired);\r\n        }\r\n        // Create silent request\r\n        const silentRequest = await invokeAsync(this.initializeAuthorizationRequest.bind(this), PerformanceEvents.StandardInteractionClientInitializeAuthorizationRequest, this.logger, this.performanceClient, request.correlationId)(request, InteractionType.Silent);\r\n        const serverTelemetryManager = this.initializeServerTelemetryManager(this.apiId);\r\n        try {\r\n            // Create auth code request (PKCE not needed)\r\n            const authCodeRequest = {\r\n                ...silentRequest,\r\n                code: request.code,\r\n            };\r\n            // Initialize the client\r\n            const clientConfig = await invokeAsync(this.getClientConfiguration.bind(this), PerformanceEvents.StandardInteractionClientGetClientConfiguration, this.logger, this.performanceClient, request.correlationId)({\r\n                serverTelemetryManager,\r\n                requestAuthority: silentRequest.authority,\r\n                requestAzureCloudOptions: silentRequest.azureCloudOptions,\r\n                requestExtraQueryParameters: silentRequest.extraQueryParameters,\r\n                account: silentRequest.account,\r\n            });\r\n            const authClient = new HybridSpaAuthorizationCodeClient(clientConfig);\r\n            this.logger.verbose(\"Auth code client created\");\r\n            // Create silent handler\r\n            const interactionHandler = new InteractionHandler(authClient, this.browserStorage, authCodeRequest, this.logger, this.performanceClient);\r\n            // Handle auth code parameters from request\r\n            return await invokeAsync(interactionHandler.handleCodeResponseFromServer.bind(interactionHandler), PerformanceEvents.HandleCodeResponseFromServer, this.logger, this.performanceClient, request.correlationId)({\r\n                code: request.code,\r\n                msgraph_host: request.msGraphHost,\r\n                cloud_graph_host_name: request.cloudGraphHostName,\r\n                cloud_instance_host_name: request.cloudInstanceHostName,\r\n            }, silentRequest, this.apiId, false);\r\n        }\r\n        catch (e) {\r\n            if (e instanceof AuthError) {\r\n                e.setCorrelationId(this.correlationId);\r\n                serverTelemetryManager.cacheFailedRequest(e);\r\n            }\r\n            throw e;\r\n        }\r\n    }\r\n    /**\r\n     * Currently Unsupported\r\n     */\r\n    logout() {\r\n        // Synchronous so we must reject\r\n        return Promise.reject(createBrowserAuthError(silentLogoutUnsupported));\r\n    }\r\n}\n\nexport { SilentAuthCodeClient };\n//# sourceMappingURL=SilentAuthCodeClient.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * Get network information for telemetry purposes. This is only supported in Chromium-based browsers.\r\n * @returns Network connection information, or an empty object if not available.\r\n */\r\nfunction getNetworkInfo() {\r\n    if (typeof window === \"undefined\" || !window.navigator) {\r\n        return {};\r\n    }\r\n    const connection = \"connection\" in window.navigator\r\n        ? window.navigator.connection\r\n        : undefined;\r\n    return {\r\n        effectiveType: connection?.effectiveType,\r\n        rtt: connection?.rtt,\r\n    };\r\n}\r\nfunction collectInstanceStats(currentClientId, performanceEvent, logger) {\r\n    const frameInstances = \r\n    // @ts-ignore\r\n    window.msal?.clientIds || [];\r\n    const msalInstanceCount = frameInstances.length;\r\n    const sameClientIdInstanceCount = frameInstances.filter((i) => i === currentClientId).length;\r\n    if (sameClientIdInstanceCount > 1) {\r\n        logger.warning(\"There is already an instance of MSAL.js in the window with the same client id.\");\r\n    }\r\n    performanceEvent.add({\r\n        msalInstanceCount: msalInstanceCount,\r\n        sameClientIdInstanceCount: sameClientIdInstanceCount,\r\n    });\r\n}\n\nexport { collectInstanceStats, getNetworkInfo };\n//# sourceMappingURL=MsalFrameStatsUtils.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { CryptoOps } from '../crypto/CryptoOps.mjs';\nimport { DEFAULT_CRYPTO_IMPLEMENTATION, buildStaticAuthorityOptions, PerformanceEvents, invokeAsync, invoke, InteractionRequiredAuthError, createClientAuthError, ClientAuthErrorCodes, AccountEntity, AuthToken, PromptValue, Constants, AuthError, getRequestThumbprint, InteractionRequiredAuthErrorCodes } from '@azure/msal-common/browser';\nimport { BrowserCacheManager, DEFAULT_BROWSER_CACHE_MANAGER } from '../cache/BrowserCacheManager.mjs';\nimport { getAllAccounts, getAccount, getAccountByUsername, getAccountByHomeId, getAccountByLocalId, setActiveAccount, getActiveAccount } from '../cache/AccountManager.mjs';\nimport { BrowserCacheLocation, INTERACTION_TYPE, InteractionType, ApiId, CacheLookupPolicy, DEFAULT_REQUEST, iFrameRenewalPolicies, BrowserConstants } from '../utils/BrowserConstants.mjs';\nimport { blockAPICallsBeforeInitialize, redirectPreflightCheck, preflightCheck as preflightCheck$1, blockNonBrowserEnvironment } from '../utils/BrowserUtils.mjs';\nimport { EventType } from '../event/EventType.mjs';\nimport { EventHandler } from '../event/EventHandler.mjs';\nimport { PopupClient } from '../interaction_client/PopupClient.mjs';\nimport { RedirectClient } from '../interaction_client/RedirectClient.mjs';\nimport { SilentIframeClient } from '../interaction_client/SilentIframeClient.mjs';\nimport { SilentRefreshClient } from '../interaction_client/SilentRefreshClient.mjs';\nimport { TokenCache } from '../cache/TokenCache.mjs';\nimport { PlatformAuthInteractionClient } from '../interaction_client/PlatformAuthInteractionClient.mjs';\nimport { NativeAuthError, isFatalNativeAuthError } from '../error/NativeAuthError.mjs';\nimport { SilentCacheClient } from '../interaction_client/SilentCacheClient.mjs';\nimport { SilentAuthCodeClient } from '../interaction_client/SilentAuthCodeClient.mjs';\nimport { createBrowserAuthError } from '../error/BrowserAuthError.mjs';\nimport { createNewGuid } from '../crypto/BrowserCrypto.mjs';\nimport { initializeSilentRequest } from '../request/RequestHelpers.mjs';\nimport { generatePkceCodes } from '../crypto/PkceGenerator.mjs';\nimport { getPlatformAuthProvider, isPlatformAuthAllowed } from '../broker/nativeBroker/PlatformAuthProvider.mjs';\nimport { collectInstanceStats } from '../utils/MsalFrameStatsUtils.mjs';\nimport { spaCodeAndNativeAccountIdPresent, unableToAcquireTokenFromNativePlatform, authCodeOrNativeAccountIdRequired, nativeConnectionNotEstablished, noAccountError } from '../error/BrowserAuthErrorCodes.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nfunction preflightCheck(initialized, performanceEvent, account) {\r\n    try {\r\n        preflightCheck$1(initialized);\r\n    }\r\n    catch (e) {\r\n        performanceEvent.end({ success: false }, e, account);\r\n        throw e;\r\n    }\r\n}\r\nclass StandardController {\r\n    /**\r\n     * @constructor\r\n     * Constructor for the PublicClientApplication used to instantiate the PublicClientApplication object\r\n     *\r\n     * Important attributes in the Configuration object for auth are:\r\n     * - clientID: the application ID of your application. You can obtain one by registering your application with our Application registration portal : https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredAppsPreview\r\n     * - authority: the authority URL for your application.\r\n     * - redirect_uri: the uri of your application registered in the portal.\r\n     *\r\n     * In Azure AD, authority is a URL indicating the Azure active directory that MSAL uses to obtain tokens.\r\n     * It is of the form https://login.microsoftonline.com/{Enter_the_Tenant_Info_Here}\r\n     * If your application supports Accounts in one organizational directory, replace \"Enter_the_Tenant_Info_Here\" value with the Tenant Id or Tenant name (for example, contoso.microsoft.com).\r\n     * If your application supports Accounts in any organizational directory, replace \"Enter_the_Tenant_Info_Here\" value with organizations.\r\n     * If your application supports Accounts in any organizational directory and personal Microsoft accounts, replace \"Enter_the_Tenant_Info_Here\" value with common.\r\n     * To restrict support to Personal Microsoft accounts only, replace \"Enter_the_Tenant_Info_Here\" value with consumers.\r\n     *\r\n     * In Azure B2C, authority is of the form https://{instance}/tfp/{tenant}/{policyName}/\r\n     * Full B2C functionality will be available in this library in future versions.\r\n     *\r\n     * @param configuration Object for the MSAL PublicClientApplication instance\r\n     */\r\n    constructor(operatingContext) {\r\n        this.operatingContext = operatingContext;\r\n        this.isBrowserEnvironment =\r\n            this.operatingContext.isBrowserEnvironment();\r\n        // Set the configuration.\r\n        this.config = operatingContext.getConfig();\r\n        this.initialized = false;\r\n        // Initialize logger\r\n        this.logger = this.operatingContext.getLogger();\r\n        // Initialize the network module class.\r\n        this.networkClient = this.config.system.networkClient;\r\n        // Initialize the navigation client class.\r\n        this.navigationClient = this.config.system.navigationClient;\r\n        // Initialize redirectResponse Map\r\n        this.redirectResponse = new Map();\r\n        // Initial hybrid spa map\r\n        this.hybridAuthCodeResponses = new Map();\r\n        // Initialize performance client\r\n        this.performanceClient = this.config.telemetry.client;\r\n        // Initialize the crypto class.\r\n        this.browserCrypto = this.isBrowserEnvironment\r\n            ? new CryptoOps(this.logger, this.performanceClient)\r\n            : DEFAULT_CRYPTO_IMPLEMENTATION;\r\n        this.eventHandler = new EventHandler(this.logger);\r\n        // Initialize the browser storage class.\r\n        this.browserStorage = this.isBrowserEnvironment\r\n            ? new BrowserCacheManager(this.config.auth.clientId, this.config.cache, this.browserCrypto, this.logger, this.performanceClient, this.eventHandler, buildStaticAuthorityOptions(this.config.auth))\r\n            : DEFAULT_BROWSER_CACHE_MANAGER(this.config.auth.clientId, this.logger, this.performanceClient, this.eventHandler);\r\n        // initialize in memory storage for native flows\r\n        const nativeCacheOptions = {\r\n            cacheLocation: BrowserCacheLocation.MemoryStorage,\r\n            cacheRetentionDays: 5,\r\n            temporaryCacheLocation: BrowserCacheLocation.MemoryStorage,\r\n            storeAuthStateInCookie: false,\r\n            secureCookies: false,\r\n            cacheMigrationEnabled: false,\r\n            claimsBasedCachingEnabled: false,\r\n        };\r\n        this.nativeInternalStorage = new BrowserCacheManager(this.config.auth.clientId, nativeCacheOptions, this.browserCrypto, this.logger, this.performanceClient, this.eventHandler);\r\n        // Initialize the token cache\r\n        this.tokenCache = new TokenCache(this.config, this.browserStorage, this.logger, this.browserCrypto, this.performanceClient);\r\n        this.activeSilentTokenRequests = new Map();\r\n        // Register listener functions\r\n        this.trackStateChangeWithMeasurement =\r\n            this.trackStateChangeWithMeasurement.bind(this);\r\n    }\r\n    static async createController(operatingContext, request) {\r\n        const controller = new StandardController(operatingContext);\r\n        await controller.initialize(request);\r\n        return controller;\r\n    }\r\n    trackStateChange(correlationId, event) {\r\n        if (!correlationId) {\r\n            return;\r\n        }\r\n        if (event.type === \"visibilitychange\") {\r\n            this.logger.info(\"Perf: Visibility change detected\");\r\n            this.performanceClient.incrementFields({ visibilityChangeCount: 1 }, correlationId);\r\n        }\r\n        else if (event.type === \"online\") {\r\n            this.logger.info(\"Perf: Online status change detected\");\r\n            this.performanceClient.incrementFields({ onlineStatusChangeCount: 1 }, correlationId);\r\n        }\r\n        else if (event.type === \"offline\") {\r\n            this.logger.info(\"Perf: Offline status change detected\");\r\n            this.performanceClient.incrementFields({ onlineStatusChangeCount: 1 }, correlationId);\r\n        }\r\n    }\r\n    /**\r\n     * Initializer function to perform async startup tasks such as connecting to WAM extension\r\n     * @param request {?InitializeApplicationRequest} correlation id\r\n     */\r\n    async initialize(request, isBroker) {\r\n        this.logger.trace(\"initialize called\");\r\n        if (this.initialized) {\r\n            this.logger.info(\"initialize has already been called, exiting early.\");\r\n            return;\r\n        }\r\n        if (!this.isBrowserEnvironment) {\r\n            this.logger.info(\"in non-browser environment, exiting early.\");\r\n            this.initialized = true;\r\n            this.eventHandler.emitEvent(EventType.INITIALIZE_END);\r\n            return;\r\n        }\r\n        const initCorrelationId = request?.correlationId || this.getRequestCorrelationId();\r\n        const allowPlatformBroker = this.config.system.allowPlatformBroker;\r\n        const initMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.InitializeClientApplication, initCorrelationId);\r\n        this.eventHandler.emitEvent(EventType.INITIALIZE_START);\r\n        // Broker applications are initialized twice, so we avoid double-counting it\r\n        if (!isBroker) {\r\n            try {\r\n                this.logMultipleInstances(initMeasurement);\r\n            }\r\n            catch { }\r\n        }\r\n        await invokeAsync(this.browserStorage.initialize.bind(this.browserStorage), PerformanceEvents.InitializeCache, this.logger, this.performanceClient, initCorrelationId)(initCorrelationId);\r\n        if (allowPlatformBroker) {\r\n            try {\r\n                // check if platform authentication is available via DOM or browser extension and create relevant handlers\r\n                this.platformAuthProvider = await getPlatformAuthProvider(this.logger, this.performanceClient, initCorrelationId, this.config.system.nativeBrokerHandshakeTimeout, this.config.system.allowPlatformBrokerWithDOM);\r\n            }\r\n            catch (e) {\r\n                this.logger.verbose(e);\r\n            }\r\n        }\r\n        if (!this.config.cache.claimsBasedCachingEnabled) {\r\n            this.logger.verbose(\"Claims-based caching is disabled. Clearing the previous cache with claims\");\r\n            invoke(this.browserStorage.clearTokensAndKeysWithClaims.bind(this.browserStorage), PerformanceEvents.ClearTokensAndKeysWithClaims, this.logger, this.performanceClient, initCorrelationId)(initCorrelationId);\r\n        }\r\n        this.config.system.asyncPopups &&\r\n            (await this.preGeneratePkceCodes(initCorrelationId));\r\n        this.initialized = true;\r\n        this.eventHandler.emitEvent(EventType.INITIALIZE_END);\r\n        initMeasurement.end({\r\n            allowPlatformBroker: allowPlatformBroker,\r\n            success: true,\r\n        });\r\n    }\r\n    // #region Redirect Flow\r\n    /**\r\n     * Event handler function which allows users to fire events after the PublicClientApplication object\r\n     * has loaded during redirect flows. This should be invoked on all page loads involved in redirect\r\n     * auth flows.\r\n     * @param hash Hash to process. Defaults to the current value of window.location.hash. Only needs to be provided explicitly if the response to be handled is not contained in the current value.\r\n     * @returns Token response or null. If the return value is null, then no auth redirect was detected.\r\n     */\r\n    async handleRedirectPromise(hash) {\r\n        this.logger.verbose(\"handleRedirectPromise called\");\r\n        // Block token acquisition before initialize has been called\r\n        blockAPICallsBeforeInitialize(this.initialized);\r\n        if (this.isBrowserEnvironment) {\r\n            /**\r\n             * Store the promise on the PublicClientApplication instance if this is the first invocation of handleRedirectPromise,\r\n             * otherwise return the promise from the first invocation. Prevents race conditions when handleRedirectPromise is called\r\n             * several times concurrently.\r\n             */\r\n            const redirectResponseKey = hash || \"\";\r\n            let response = this.redirectResponse.get(redirectResponseKey);\r\n            if (typeof response === \"undefined\") {\r\n                response = this.handleRedirectPromiseInternal(hash);\r\n                this.redirectResponse.set(redirectResponseKey, response);\r\n                this.logger.verbose(\"handleRedirectPromise has been called for the first time, storing the promise\");\r\n            }\r\n            else {\r\n                this.logger.verbose(\"handleRedirectPromise has been called previously, returning the result from the first call\");\r\n            }\r\n            return response;\r\n        }\r\n        this.logger.verbose(\"handleRedirectPromise returns null, not browser environment\");\r\n        return null;\r\n    }\r\n    /**\r\n     * The internal details of handleRedirectPromise. This is separated out to a helper to allow handleRedirectPromise to memoize requests\r\n     * @param hash\r\n     * @returns\r\n     */\r\n    async handleRedirectPromiseInternal(hash) {\r\n        if (!this.browserStorage.isInteractionInProgress(true)) {\r\n            this.logger.info(\"handleRedirectPromise called but there is no interaction in progress, returning null.\");\r\n            return null;\r\n        }\r\n        const interactionType = this.browserStorage.getInteractionInProgress()?.type;\r\n        if (interactionType === INTERACTION_TYPE.SIGNOUT) {\r\n            this.logger.verbose(\"handleRedirectPromise removing interaction_in_progress flag and returning null after sign-out\");\r\n            this.browserStorage.setInteractionInProgress(false);\r\n            return Promise.resolve(null);\r\n        }\r\n        const loggedInAccounts = this.getAllAccounts();\r\n        const platformBrokerRequest = this.browserStorage.getCachedNativeRequest();\r\n        const useNative = platformBrokerRequest && this.platformAuthProvider && !hash;\r\n        let rootMeasurement;\r\n        this.eventHandler.emitEvent(EventType.HANDLE_REDIRECT_START, InteractionType.Redirect);\r\n        let redirectResponse;\r\n        try {\r\n            if (useNative && this.platformAuthProvider) {\r\n                rootMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.AcquireTokenRedirect, platformBrokerRequest?.correlationId || \"\");\r\n                this.logger.trace(\"handleRedirectPromise - acquiring token from native platform\");\r\n                rootMeasurement.add({\r\n                    isPlatformBrokerRequest: true,\r\n                });\r\n                const nativeClient = new PlatformAuthInteractionClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, ApiId.handleRedirectPromise, this.performanceClient, this.platformAuthProvider, platformBrokerRequest.accountId, this.nativeInternalStorage, platformBrokerRequest.correlationId);\r\n                redirectResponse = invokeAsync(nativeClient.handleRedirectPromise.bind(nativeClient), PerformanceEvents.HandleNativeRedirectPromiseMeasurement, this.logger, this.performanceClient, rootMeasurement.event.correlationId)(this.performanceClient, rootMeasurement.event.correlationId);\r\n            }\r\n            else {\r\n                const [standardRequest, codeVerifier] = this.browserStorage.getCachedRequest();\r\n                const correlationId = standardRequest.correlationId;\r\n                // Reset rootMeasurement now that we have correlationId\r\n                rootMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.AcquireTokenRedirect, correlationId);\r\n                this.logger.trace(\"handleRedirectPromise - acquiring token from web flow\");\r\n                const redirectClient = this.createRedirectClient(correlationId);\r\n                redirectResponse = invokeAsync(redirectClient.handleRedirectPromise.bind(redirectClient), PerformanceEvents.HandleRedirectPromiseMeasurement, this.logger, this.performanceClient, rootMeasurement.event.correlationId)(hash, standardRequest, codeVerifier, rootMeasurement);\r\n            }\r\n        }\r\n        catch (e) {\r\n            this.browserStorage.resetRequestCache();\r\n            throw e;\r\n        }\r\n        return redirectResponse\r\n            .then((result) => {\r\n            if (result) {\r\n                this.browserStorage.resetRequestCache();\r\n                // Emit login event if number of accounts change\r\n                const isLoggingIn = loggedInAccounts.length < this.getAllAccounts().length;\r\n                if (isLoggingIn) {\r\n                    this.eventHandler.emitEvent(EventType.LOGIN_SUCCESS, InteractionType.Redirect, result);\r\n                    this.logger.verbose(\"handleRedirectResponse returned result, login success\");\r\n                }\r\n                else {\r\n                    this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_SUCCESS, InteractionType.Redirect, result);\r\n                    this.logger.verbose(\"handleRedirectResponse returned result, acquire token success\");\r\n                }\r\n                rootMeasurement.end({\r\n                    success: true,\r\n                }, undefined, result.account);\r\n                // Fire-and-forget SSO capability verification in background\r\n                this.verifySsoCapability(result.account, InteractionType.Redirect);\r\n            }\r\n            else {\r\n                /*\r\n                 * Instrument an event only if an error code is set. Otherwise, discard it when the redirect response\r\n                 * is empty and the error code is missing.\r\n                 */\r\n                if (rootMeasurement.event.errorCode) {\r\n                    rootMeasurement.end({ success: false }, undefined);\r\n                }\r\n                else {\r\n                    rootMeasurement.discard();\r\n                }\r\n            }\r\n            this.eventHandler.emitEvent(EventType.HANDLE_REDIRECT_END, InteractionType.Redirect);\r\n            return result;\r\n        })\r\n            .catch((e) => {\r\n            this.browserStorage.resetRequestCache();\r\n            const eventError = e;\r\n            // Emit login event if there is an account\r\n            if (loggedInAccounts.length > 0) {\r\n                this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_FAILURE, InteractionType.Redirect, null, eventError);\r\n            }\r\n            else {\r\n                this.eventHandler.emitEvent(EventType.LOGIN_FAILURE, InteractionType.Redirect, null, eventError);\r\n            }\r\n            this.eventHandler.emitEvent(EventType.HANDLE_REDIRECT_END, InteractionType.Redirect);\r\n            rootMeasurement.end({\r\n                success: false,\r\n            }, eventError);\r\n            throw e;\r\n        });\r\n    }\r\n    /**\r\n     * Use when you want to obtain an access_token for your API by redirecting the user's browser window to the authorization endpoint. This function redirects\r\n     * the page, so any code that follows this function will not execute.\r\n     *\r\n     * IMPORTANT: It is NOT recommended to have code that is dependent on the resolution of the Promise. This function will navigate away from the current\r\n     * browser window. It currently returns a Promise in order to reflect the asynchronous nature of the code running in this function.\r\n     *\r\n     * @param request\r\n     */\r\n    async acquireTokenRedirect(request) {\r\n        // Preflight request\r\n        const correlationId = this.getRequestCorrelationId(request);\r\n        this.logger.verbose(\"acquireTokenRedirect called\", correlationId);\r\n        const atrMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.AcquireTokenPreRedirect, correlationId);\r\n        atrMeasurement.add({\r\n            scenarioId: request.scenarioId,\r\n        });\r\n        // Override on request only if set, as onRedirectNavigate field is deprecated\r\n        const onRedirectNavigateCb = request.onRedirectNavigate;\r\n        if (onRedirectNavigateCb) {\r\n            request.onRedirectNavigate = (url) => {\r\n                const navigate = typeof onRedirectNavigateCb === \"function\"\r\n                    ? onRedirectNavigateCb(url)\r\n                    : undefined;\r\n                atrMeasurement.add({\r\n                    navigateCallbackResult: navigate !== false,\r\n                });\r\n                atrMeasurement.event =\r\n                    atrMeasurement.end({ success: true }, undefined, request.account) || atrMeasurement.event;\r\n                return navigate;\r\n            };\r\n        }\r\n        else {\r\n            const configOnRedirectNavigateCb = this.config.auth.onRedirectNavigate;\r\n            this.config.auth.onRedirectNavigate = (url) => {\r\n                const navigate = typeof configOnRedirectNavigateCb === \"function\"\r\n                    ? configOnRedirectNavigateCb(url)\r\n                    : undefined;\r\n                atrMeasurement.add({\r\n                    navigateCallbackResult: navigate !== false,\r\n                });\r\n                atrMeasurement.event =\r\n                    atrMeasurement.end({ success: true }, undefined, request.account) || atrMeasurement.event;\r\n                return navigate;\r\n            };\r\n        }\r\n        // If logged in, emit acquire token events\r\n        const isLoggedIn = this.getAllAccounts().length > 0;\r\n        try {\r\n            redirectPreflightCheck(this.initialized, this.config);\r\n            this.browserStorage.setInteractionInProgress(true, INTERACTION_TYPE.SIGNIN);\r\n            if (isLoggedIn) {\r\n                this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_START, InteractionType.Redirect, request);\r\n            }\r\n            else {\r\n                this.eventHandler.emitEvent(EventType.LOGIN_START, InteractionType.Redirect, request);\r\n            }\r\n            let result;\r\n            if (this.platformAuthProvider &&\r\n                this.canUsePlatformBroker(request)) {\r\n                const nativeClient = new PlatformAuthInteractionClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, ApiId.acquireTokenRedirect, this.performanceClient, this.platformAuthProvider, this.getNativeAccountId(request), this.nativeInternalStorage, correlationId);\r\n                result = nativeClient\r\n                    .acquireTokenRedirect(request, atrMeasurement)\r\n                    .catch((e) => {\r\n                    atrMeasurement.add({\r\n                        brokerErrorName: e.name,\r\n                        brokerErrorCode: e.errorCode,\r\n                    });\r\n                    if (e instanceof NativeAuthError &&\r\n                        isFatalNativeAuthError(e)) {\r\n                        this.platformAuthProvider = undefined; // If extension gets uninstalled during session prevent future requests from continuing to attempt platform broker calls\r\n                        const redirectClient = this.createRedirectClient(correlationId);\r\n                        return redirectClient.acquireToken(request);\r\n                    }\r\n                    else if (e instanceof InteractionRequiredAuthError) {\r\n                        this.logger.verbose(\"acquireTokenRedirect - Resolving interaction required error thrown by native broker by falling back to web flow\");\r\n                        const redirectClient = this.createRedirectClient(correlationId);\r\n                        return redirectClient.acquireToken(request);\r\n                    }\r\n                    throw e;\r\n                });\r\n            }\r\n            else {\r\n                const redirectClient = this.createRedirectClient(correlationId);\r\n                result = redirectClient.acquireToken(request);\r\n            }\r\n            return await result;\r\n        }\r\n        catch (e) {\r\n            this.browserStorage.resetRequestCache();\r\n            /*\r\n             * Pre-redirect event completes before navigation occurs.\r\n             * Timed out navigation needs to be instrumented separately as a post-redirect event.\r\n             */\r\n            if (atrMeasurement.event.status === 2) {\r\n                this.performanceClient\r\n                    .startMeasurement(PerformanceEvents.AcquireTokenRedirect, correlationId)\r\n                    .end({ success: false }, e, request.account);\r\n            }\r\n            else {\r\n                atrMeasurement.end({ success: false }, e, request.account);\r\n            }\r\n            if (isLoggedIn) {\r\n                this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_FAILURE, InteractionType.Redirect, null, e);\r\n            }\r\n            else {\r\n                this.eventHandler.emitEvent(EventType.LOGIN_FAILURE, InteractionType.Redirect, null, e);\r\n            }\r\n            throw e;\r\n        }\r\n    }\r\n    // #endregion\r\n    // #region Popup Flow\r\n    /**\r\n     * Use when you want to obtain an access_token for your API via opening a popup window in the user's browser\r\n     *\r\n     * @param request\r\n     *\r\n     * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\r\n     */\r\n    acquireTokenPopup(request) {\r\n        const correlationId = this.getRequestCorrelationId(request);\r\n        const atPopupMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.AcquireTokenPopup, correlationId);\r\n        atPopupMeasurement.add({\r\n            scenarioId: request.scenarioId,\r\n        });\r\n        try {\r\n            this.logger.verbose(\"acquireTokenPopup called\", correlationId);\r\n            preflightCheck(this.initialized, atPopupMeasurement, request.account);\r\n            this.browserStorage.setInteractionInProgress(true, INTERACTION_TYPE.SIGNIN);\r\n        }\r\n        catch (e) {\r\n            // Since this function is syncronous we need to reject\r\n            return Promise.reject(e);\r\n        }\r\n        // If logged in, emit acquire token events\r\n        const loggedInAccounts = this.getAllAccounts();\r\n        if (loggedInAccounts.length > 0) {\r\n            this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_START, InteractionType.Popup, request);\r\n        }\r\n        else {\r\n            this.eventHandler.emitEvent(EventType.LOGIN_START, InteractionType.Popup, request);\r\n        }\r\n        let result;\r\n        const pkce = this.getPreGeneratedPkceCodes(correlationId);\r\n        if (this.canUsePlatformBroker(request)) {\r\n            atPopupMeasurement.add({\r\n                isPlatformBrokerRequest: true,\r\n            });\r\n            result = this.acquireTokenNative({\r\n                ...request,\r\n                correlationId,\r\n            }, ApiId.acquireTokenPopup)\r\n                .then((response) => {\r\n                atPopupMeasurement.end({\r\n                    success: true,\r\n                }, undefined, response.account);\r\n                return response;\r\n            })\r\n                .catch((e) => {\r\n                atPopupMeasurement.add({\r\n                    brokerErrorName: e.name,\r\n                    brokerErrorCode: e.errorCode,\r\n                });\r\n                if (e instanceof NativeAuthError &&\r\n                    isFatalNativeAuthError(e)) {\r\n                    this.platformAuthProvider = undefined; // If extension gets uninstalled during session prevent future requests from continuing to continuing to attempt platform broker calls\r\n                    const popupClient = this.createPopupClient(correlationId);\r\n                    return popupClient.acquireToken(request, pkce);\r\n                }\r\n                else if (e instanceof InteractionRequiredAuthError) {\r\n                    this.logger.verbose(\"acquireTokenPopup - Resolving interaction required error thrown by native broker by falling back to web flow\");\r\n                    const popupClient = this.createPopupClient(correlationId);\r\n                    return popupClient.acquireToken(request, pkce);\r\n                }\r\n                throw e;\r\n            });\r\n        }\r\n        else {\r\n            const popupClient = this.createPopupClient(correlationId);\r\n            result = popupClient.acquireToken(request, pkce);\r\n        }\r\n        return result\r\n            .then((result) => {\r\n            /*\r\n             *  If logged in, emit acquire token events\r\n             */\r\n            const isLoggingIn = loggedInAccounts.length < this.getAllAccounts().length;\r\n            if (isLoggingIn) {\r\n                this.eventHandler.emitEvent(EventType.LOGIN_SUCCESS, InteractionType.Popup, result);\r\n            }\r\n            else {\r\n                this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_SUCCESS, InteractionType.Popup, result);\r\n            }\r\n            atPopupMeasurement.end({\r\n                success: true,\r\n                accessTokenSize: result.accessToken.length,\r\n                idTokenSize: result.idToken.length,\r\n            }, undefined, result.account);\r\n            // SSO capability verification in background\r\n            this.verifySsoCapability(result.account, InteractionType.Popup);\r\n            return result;\r\n        })\r\n            .catch((e) => {\r\n            if (loggedInAccounts.length > 0) {\r\n                this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_FAILURE, InteractionType.Popup, null, e);\r\n            }\r\n            else {\r\n                this.eventHandler.emitEvent(EventType.LOGIN_FAILURE, InteractionType.Popup, null, e);\r\n            }\r\n            atPopupMeasurement.end({\r\n                success: false,\r\n            }, e, request.account);\r\n            // Since this function is syncronous we need to reject\r\n            return Promise.reject(e);\r\n        })\r\n            .finally(async () => {\r\n            this.browserStorage.setInteractionInProgress(false);\r\n            if (this.config.system.asyncPopups) {\r\n                await this.preGeneratePkceCodes(correlationId);\r\n            }\r\n        });\r\n    }\r\n    trackStateChangeWithMeasurement(event) {\r\n        const measurement = this.ssoSilentMeasurement ||\r\n            this.acquireTokenByCodeAsyncMeasurement;\r\n        if (!measurement) {\r\n            return;\r\n        }\r\n        if (event.type === \"visibilitychange\") {\r\n            this.logger.info(\"Perf: Visibility change detected in \", measurement.event.name);\r\n            measurement.increment({\r\n                visibilityChangeCount: 1,\r\n            });\r\n        }\r\n        else if (event.type === \"online\") {\r\n            this.logger.info(\"Perf: Online status change detected in \", measurement.event.name);\r\n            measurement.increment({\r\n                onlineStatusChangeCount: 1,\r\n            });\r\n        }\r\n        else if (event.type === \"offline\") {\r\n            this.logger.info(\"Perf: Offline status change detected in \", measurement.event.name);\r\n            measurement.increment({\r\n                onlineStatusChangeCount: 1,\r\n            });\r\n        }\r\n    }\r\n    addStateChangeListeners(listener) {\r\n        document.addEventListener(\"visibilitychange\", listener);\r\n        window.addEventListener(\"online\", listener);\r\n        window.addEventListener(\"offline\", listener);\r\n    }\r\n    removeStateChangeListeners(listener) {\r\n        document.removeEventListener(\"visibilitychange\", listener);\r\n        window.removeEventListener(\"online\", listener);\r\n        window.removeEventListener(\"offline\", listener);\r\n    }\r\n    /**\r\n     * SSO capability verification in the background.\r\n     * This method makes an iframe request to /authorize to verify SSO capability without calling /token.\r\n     * This method does not block the caller and tracks telemetry for success/failure.\r\n     * This method only executes if verifySSO is set to true in the auth configuration.\r\n     * @param account - The account to use for the SSO verification\r\n     * @param parentApi - The API ID of the parent operation for logging purposes\r\n     */\r\n    verifySsoCapability(account, parentApi) {\r\n        // Check if SSO capability verification is enabled\r\n        if (!this.config.auth.verifySSO) {\r\n            return;\r\n        }\r\n        const correlationId = this.browserCrypto.createNewGuid();\r\n        const ssoCapableMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.SsoCapable, correlationId);\r\n        ssoCapableMeasurement.add({\r\n            parentApi: parentApi,\r\n        });\r\n        this.logger.verbose(`SSO capability verification initiated after ${parentApi}`, correlationId);\r\n        /*\r\n         * Use setTimeout to ensure this runs in a separate macrotask after the current call stack completes\r\n         * This ensures the result is returned to the caller before the SSO verification starts and doesn't affect performance\r\n         */\r\n        setTimeout(() => {\r\n            const ssoVerificationRequest = {\r\n                account: account,\r\n                correlationId: correlationId,\r\n            };\r\n            const silentIframeClient = this.createSilentIframeClient(correlationId);\r\n            silentIframeClient\r\n                .verifySso(ssoVerificationRequest)\r\n                .then((success) => {\r\n                this.logger.verbose(`SSO capability verification completed after ${parentApi}, success: ${success}`, correlationId);\r\n                ssoCapableMeasurement.end({\r\n                    fromCache: false,\r\n                    success: success,\r\n                }, undefined, account);\r\n            })\r\n                .catch((error) => {\r\n                this.logger.warning(`SSO capability verification failed after ${parentApi}: ${error.message}`, correlationId);\r\n                ssoCapableMeasurement.end({\r\n                    fromCache: false,\r\n                    success: false,\r\n                }, error, account);\r\n            });\r\n        }, 0);\r\n    }\r\n    // #endregion\r\n    // #region Silent Flow\r\n    /**\r\n     * This function uses a hidden iframe to fetch an authorization code from the eSTS. There are cases where this may not work:\r\n     * - Any browser using a form of Intelligent Tracking Prevention\r\n     * - If there is not an established session with the service\r\n     *\r\n     * In these cases, the request must be done inside a popup or full frame redirect.\r\n     *\r\n     * For the cases where interaction is required, you cannot send a request with prompt=none.\r\n     *\r\n     * If your refresh token has expired, you can use this function to fetch a new set of tokens silently as long as\r\n     * you session on the server still exists.\r\n     * @param request {@link SsoSilentRequest}\r\n     *\r\n     * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\r\n     */\r\n    async ssoSilent(request) {\r\n        const correlationId = this.getRequestCorrelationId(request);\r\n        const validRequest = {\r\n            ...request,\r\n            // will be PromptValue.NONE or PromptValue.NO_SESSION\r\n            prompt: request.prompt,\r\n            correlationId: correlationId,\r\n        };\r\n        this.ssoSilentMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.SsoSilent, correlationId);\r\n        this.ssoSilentMeasurement?.add({\r\n            scenarioId: request.scenarioId,\r\n        });\r\n        preflightCheck(this.initialized, this.ssoSilentMeasurement, request.account);\r\n        this.ssoSilentMeasurement?.increment({\r\n            visibilityChangeCount: 0,\r\n            onlineStatusChangeCount: 0,\r\n        });\r\n        this.addStateChangeListeners(this.trackStateChangeWithMeasurement);\r\n        this.logger.verbose(\"ssoSilent called\", correlationId);\r\n        this.eventHandler.emitEvent(EventType.SSO_SILENT_START, InteractionType.Silent, validRequest);\r\n        let result;\r\n        if (this.canUsePlatformBroker(validRequest)) {\r\n            this.ssoSilentMeasurement?.add({\r\n                isPlatformBrokerRequest: true,\r\n            });\r\n            result = this.acquireTokenNative(validRequest, ApiId.ssoSilent).catch((e) => {\r\n                this.ssoSilentMeasurement?.add({\r\n                    brokerErrorName: e.name,\r\n                    brokerErrorCode: e.errorCode,\r\n                });\r\n                // If native token acquisition fails for availability reasons fallback to standard flow\r\n                if (e instanceof NativeAuthError && isFatalNativeAuthError(e)) {\r\n                    this.platformAuthProvider = undefined; // If extension gets uninstalled during session prevent future requests from continuing to attempt\r\n                    const silentIframeClient = this.createSilentIframeClient(validRequest.correlationId);\r\n                    return silentIframeClient.acquireToken(validRequest);\r\n                }\r\n                throw e;\r\n            });\r\n        }\r\n        else {\r\n            const silentIframeClient = this.createSilentIframeClient(validRequest.correlationId);\r\n            result = silentIframeClient.acquireToken(validRequest);\r\n        }\r\n        return result\r\n            .then((response) => {\r\n            this.eventHandler.emitEvent(EventType.SSO_SILENT_SUCCESS, InteractionType.Silent, response);\r\n            this.ssoSilentMeasurement?.end({\r\n                success: true,\r\n                accessTokenSize: response.accessToken.length,\r\n                idTokenSize: response.idToken.length,\r\n            }, undefined, response.account);\r\n            return response;\r\n        })\r\n            .catch((e) => {\r\n            this.eventHandler.emitEvent(EventType.SSO_SILENT_FAILURE, InteractionType.Silent, null, e);\r\n            this.ssoSilentMeasurement?.end({\r\n                success: false,\r\n            }, e, request.account);\r\n            throw e;\r\n        })\r\n            .finally(() => {\r\n            this.removeStateChangeListeners(this.trackStateChangeWithMeasurement);\r\n        });\r\n    }\r\n    /**\r\n     * This function redeems an authorization code (passed as code) from the eSTS token endpoint.\r\n     * This authorization code should be acquired server-side using a confidential client to acquire a spa_code.\r\n     * This API is not indended for normal authorization code acquisition and redemption.\r\n     *\r\n     * Redemption of this authorization code will not require PKCE, as it was acquired by a confidential client.\r\n     *\r\n     * @param request {@link AuthorizationCodeRequest}\r\n     * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\r\n     */\r\n    async acquireTokenByCode(request) {\r\n        const correlationId = this.getRequestCorrelationId(request);\r\n        this.logger.trace(\"acquireTokenByCode called\", correlationId);\r\n        const atbcMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.AcquireTokenByCode, correlationId);\r\n        preflightCheck(this.initialized, atbcMeasurement);\r\n        this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_BY_CODE_START, InteractionType.Silent, request);\r\n        atbcMeasurement.add({ scenarioId: request.scenarioId });\r\n        try {\r\n            if (request.code && request.nativeAccountId) {\r\n                // Throw error in case server returns both spa_code and spa_accountid in exchange for auth code.\r\n                throw createBrowserAuthError(spaCodeAndNativeAccountIdPresent);\r\n            }\r\n            else if (request.code) {\r\n                const hybridAuthCode = request.code;\r\n                let response = this.hybridAuthCodeResponses.get(hybridAuthCode);\r\n                if (!response) {\r\n                    this.logger.verbose(\"Initiating new acquireTokenByCode request\", correlationId);\r\n                    response = this.acquireTokenByCodeAsync({\r\n                        ...request,\r\n                        correlationId,\r\n                    })\r\n                        .then((result) => {\r\n                        this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_BY_CODE_SUCCESS, InteractionType.Silent, result);\r\n                        this.hybridAuthCodeResponses.delete(hybridAuthCode);\r\n                        atbcMeasurement.end({\r\n                            success: true,\r\n                            accessTokenSize: result.accessToken.length,\r\n                            idTokenSize: result.idToken.length,\r\n                        }, undefined, result.account);\r\n                        return result;\r\n                    })\r\n                        .catch((error) => {\r\n                        this.hybridAuthCodeResponses.delete(hybridAuthCode);\r\n                        this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_BY_CODE_FAILURE, InteractionType.Silent, null, error);\r\n                        atbcMeasurement.end({\r\n                            success: false,\r\n                        }, error);\r\n                        throw error;\r\n                    });\r\n                    this.hybridAuthCodeResponses.set(hybridAuthCode, response);\r\n                }\r\n                else {\r\n                    this.logger.verbose(\"Existing acquireTokenByCode request found\", correlationId);\r\n                    atbcMeasurement.discard();\r\n                }\r\n                return await response;\r\n            }\r\n            else if (request.nativeAccountId) {\r\n                if (this.canUsePlatformBroker(request, request.nativeAccountId)) {\r\n                    atbcMeasurement.add({\r\n                        isPlatformBrokerRequest: true,\r\n                    });\r\n                    const result = await this.acquireTokenNative({\r\n                        ...request,\r\n                        correlationId,\r\n                    }, ApiId.acquireTokenByCode, request.nativeAccountId).catch((e) => {\r\n                        // If native token acquisition fails for availability reasons fallback to standard flow\r\n                        if (e instanceof NativeAuthError &&\r\n                            isFatalNativeAuthError(e)) {\r\n                            this.platformAuthProvider = undefined; // If extension gets uninstalled during session prevent future requests from continuing to attempt\r\n                        }\r\n                        atbcMeasurement.add({\r\n                            brokerErrorName: e.name,\r\n                            brokerErrorCode: e.errorCode,\r\n                        });\r\n                        throw e;\r\n                    });\r\n                    atbcMeasurement.end({\r\n                        success: true,\r\n                    }, undefined, result.account);\r\n                    return result;\r\n                }\r\n                else {\r\n                    throw createBrowserAuthError(unableToAcquireTokenFromNativePlatform);\r\n                }\r\n            }\r\n            else {\r\n                throw createBrowserAuthError(authCodeOrNativeAccountIdRequired);\r\n            }\r\n        }\r\n        catch (e) {\r\n            this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_BY_CODE_FAILURE, InteractionType.Silent, null, e);\r\n            atbcMeasurement.end({\r\n                success: false,\r\n            }, e);\r\n            throw e;\r\n        }\r\n    }\r\n    /**\r\n     * Creates a SilentAuthCodeClient to redeem an authorization code.\r\n     * @param request\r\n     * @returns Result of the operation to redeem the authorization code\r\n     */\r\n    async acquireTokenByCodeAsync(request) {\r\n        this.logger.trace(\"acquireTokenByCodeAsync called\", request.correlationId);\r\n        this.acquireTokenByCodeAsyncMeasurement =\r\n            this.performanceClient.startMeasurement(PerformanceEvents.AcquireTokenByCodeAsync, request.correlationId);\r\n        this.acquireTokenByCodeAsyncMeasurement?.increment({\r\n            visibilityChangeCount: 0,\r\n            onlineStatusChangeCount: 0,\r\n        });\r\n        this.addStateChangeListeners(this.trackStateChangeWithMeasurement);\r\n        const silentAuthCodeClient = this.createSilentAuthCodeClient(request.correlationId);\r\n        const silentTokenResult = await silentAuthCodeClient\r\n            .acquireToken(request)\r\n            .then((response) => {\r\n            this.acquireTokenByCodeAsyncMeasurement?.end({\r\n                success: true,\r\n                fromCache: response.fromCache,\r\n            });\r\n            return response;\r\n        })\r\n            .catch((tokenRenewalError) => {\r\n            this.acquireTokenByCodeAsyncMeasurement?.end({\r\n                success: false,\r\n            }, tokenRenewalError);\r\n            throw tokenRenewalError;\r\n        })\r\n            .finally(() => {\r\n            this.removeStateChangeListeners(this.trackStateChangeWithMeasurement);\r\n        });\r\n        return silentTokenResult;\r\n    }\r\n    /**\r\n     * Attempt to acquire an access token from the cache\r\n     * @param silentCacheClient SilentCacheClient\r\n     * @param commonRequest CommonSilentFlowRequest\r\n     * @param silentRequest SilentRequest\r\n     * @returns A promise that, when resolved, returns the access token\r\n     */\r\n    async acquireTokenFromCache(commonRequest, cacheLookupPolicy) {\r\n        this.performanceClient.addQueueMeasurement(PerformanceEvents.AcquireTokenFromCache, commonRequest.correlationId);\r\n        switch (cacheLookupPolicy) {\r\n            case CacheLookupPolicy.Default:\r\n            case CacheLookupPolicy.AccessToken:\r\n            case CacheLookupPolicy.AccessTokenAndRefreshToken:\r\n                const silentCacheClient = this.createSilentCacheClient(commonRequest.correlationId);\r\n                return invokeAsync(silentCacheClient.acquireToken.bind(silentCacheClient), PerformanceEvents.SilentCacheClientAcquireToken, this.logger, this.performanceClient, commonRequest.correlationId)(commonRequest);\r\n            default:\r\n                throw createClientAuthError(ClientAuthErrorCodes.tokenRefreshRequired);\r\n        }\r\n    }\r\n    /**\r\n     * Attempt to acquire an access token via a refresh token\r\n     * @param commonRequest CommonSilentFlowRequest\r\n     * @param cacheLookupPolicy CacheLookupPolicy\r\n     * @returns A promise that, when resolved, returns the access token\r\n     */\r\n    async acquireTokenByRefreshToken(commonRequest, cacheLookupPolicy) {\r\n        this.performanceClient.addQueueMeasurement(PerformanceEvents.AcquireTokenByRefreshToken, commonRequest.correlationId);\r\n        switch (cacheLookupPolicy) {\r\n            case CacheLookupPolicy.Default:\r\n            case CacheLookupPolicy.AccessTokenAndRefreshToken:\r\n            case CacheLookupPolicy.RefreshToken:\r\n            case CacheLookupPolicy.RefreshTokenAndNetwork:\r\n                const silentRefreshClient = this.createSilentRefreshClient(commonRequest.correlationId);\r\n                return invokeAsync(silentRefreshClient.acquireToken.bind(silentRefreshClient), PerformanceEvents.SilentRefreshClientAcquireToken, this.logger, this.performanceClient, commonRequest.correlationId)(commonRequest);\r\n            default:\r\n                throw createClientAuthError(ClientAuthErrorCodes.tokenRefreshRequired);\r\n        }\r\n    }\r\n    /**\r\n     * Attempt to acquire an access token via an iframe\r\n     * @param request CommonSilentFlowRequest\r\n     * @returns A promise that, when resolved, returns the access token\r\n     */\r\n    async acquireTokenBySilentIframe(request) {\r\n        this.performanceClient.addQueueMeasurement(PerformanceEvents.AcquireTokenBySilentIframe, request.correlationId);\r\n        const silentIframeClient = this.createSilentIframeClient(request.correlationId);\r\n        return invokeAsync(silentIframeClient.acquireToken.bind(silentIframeClient), PerformanceEvents.SilentIframeClientAcquireToken, this.logger, this.performanceClient, request.correlationId)(request);\r\n    }\r\n    // #endregion\r\n    // #region Logout\r\n    /**\r\n     * Deprecated logout function. Use logoutRedirect or logoutPopup instead\r\n     * @param logoutRequest\r\n     * @deprecated\r\n     */\r\n    async logout(logoutRequest) {\r\n        const correlationId = this.getRequestCorrelationId(logoutRequest);\r\n        this.logger.warning(\"logout API is deprecated and will be removed in msal-browser v3.0.0. Use logoutRedirect instead.\", correlationId);\r\n        return this.logoutRedirect({\r\n            correlationId,\r\n            ...logoutRequest,\r\n        });\r\n    }\r\n    /**\r\n     * Use to log out the current user, and redirect the user to the postLogoutRedirectUri.\r\n     * Default behaviour is to redirect the user to `window.location.href`.\r\n     * @param logoutRequest\r\n     */\r\n    async logoutRedirect(logoutRequest) {\r\n        const correlationId = this.getRequestCorrelationId(logoutRequest);\r\n        redirectPreflightCheck(this.initialized, this.config);\r\n        this.browserStorage.setInteractionInProgress(true, INTERACTION_TYPE.SIGNOUT);\r\n        const redirectClient = this.createRedirectClient(correlationId);\r\n        return redirectClient.logout(logoutRequest);\r\n    }\r\n    /**\r\n     * Clears local cache for the current user then opens a popup window prompting the user to sign-out of the server\r\n     * @param logoutRequest\r\n     */\r\n    logoutPopup(logoutRequest) {\r\n        try {\r\n            const correlationId = this.getRequestCorrelationId(logoutRequest);\r\n            preflightCheck$1(this.initialized);\r\n            this.browserStorage.setInteractionInProgress(true, INTERACTION_TYPE.SIGNOUT);\r\n            const popupClient = this.createPopupClient(correlationId);\r\n            return popupClient.logout(logoutRequest).finally(() => {\r\n                this.browserStorage.setInteractionInProgress(false);\r\n            });\r\n        }\r\n        catch (e) {\r\n            // Since this function is syncronous we need to reject\r\n            return Promise.reject(e);\r\n        }\r\n    }\r\n    /**\r\n     * Creates a cache interaction client to clear broswer cache.\r\n     * @param logoutRequest\r\n     */\r\n    async clearCache(logoutRequest) {\r\n        if (!this.isBrowserEnvironment) {\r\n            this.logger.info(\"in non-browser environment, returning early.\");\r\n            return;\r\n        }\r\n        const correlationId = this.getRequestCorrelationId(logoutRequest);\r\n        const cacheClient = this.createSilentCacheClient(correlationId);\r\n        return cacheClient.logout(logoutRequest);\r\n    }\r\n    // #endregion\r\n    // #region Account APIs\r\n    /**\r\n     * Returns all the accounts in the cache that match the optional filter. If no filter is provided, all accounts are returned.\r\n     * @param accountFilter - (Optional) filter to narrow down the accounts returned\r\n     * @returns Array of AccountInfo objects in cache\r\n     */\r\n    getAllAccounts(accountFilter) {\r\n        const correlationId = this.getRequestCorrelationId();\r\n        return getAllAccounts(this.logger, this.browserStorage, this.isBrowserEnvironment, correlationId, accountFilter);\r\n    }\r\n    /**\r\n     * Returns the first account found in the cache that matches the account filter passed in.\r\n     * @param accountFilter\r\n     * @returns The first account found in the cache matching the provided filter or null if no account could be found.\r\n     */\r\n    getAccount(accountFilter) {\r\n        const correlationId = this.getRequestCorrelationId();\r\n        return getAccount(accountFilter, this.logger, this.browserStorage, correlationId);\r\n    }\r\n    /**\r\n     * Returns the signed in account matching username.\r\n     * (the account object is created at the time of successful login)\r\n     * or null when no matching account is found.\r\n     * This API is provided for convenience but getAccountById should be used for best reliability\r\n     * @param username\r\n     * @returns The account object stored in MSAL\r\n     */\r\n    getAccountByUsername(username) {\r\n        const correlationId = this.getRequestCorrelationId();\r\n        return getAccountByUsername(username, this.logger, this.browserStorage, correlationId);\r\n    }\r\n    /**\r\n     * Returns the signed in account matching homeAccountId.\r\n     * (the account object is created at the time of successful login)\r\n     * or null when no matching account is found\r\n     * @param homeAccountId\r\n     * @returns The account object stored in MSAL\r\n     */\r\n    getAccountByHomeId(homeAccountId) {\r\n        const correlationId = this.getRequestCorrelationId();\r\n        return getAccountByHomeId(homeAccountId, this.logger, this.browserStorage, correlationId);\r\n    }\r\n    /**\r\n     * Returns the signed in account matching localAccountId.\r\n     * (the account object is created at the time of successful login)\r\n     * or null when no matching account is found\r\n     * @param localAccountId\r\n     * @returns The account object stored in MSAL\r\n     */\r\n    getAccountByLocalId(localAccountId) {\r\n        const correlationId = this.getRequestCorrelationId();\r\n        return getAccountByLocalId(localAccountId, this.logger, this.browserStorage, correlationId);\r\n    }\r\n    /**\r\n     * Sets the account to use as the active account. If no account is passed to the acquireToken APIs, then MSAL will use this active account.\r\n     * @param account\r\n     */\r\n    setActiveAccount(account) {\r\n        const correlationId = this.getRequestCorrelationId();\r\n        setActiveAccount(account, this.browserStorage, correlationId);\r\n    }\r\n    /**\r\n     * Gets the currently active account\r\n     */\r\n    getActiveAccount() {\r\n        const correlationId = this.getRequestCorrelationId();\r\n        return getActiveAccount(this.browserStorage, correlationId);\r\n    }\r\n    // #endregion\r\n    /**\r\n     * Hydrates the cache with the tokens from an AuthenticationResult\r\n     * @param result\r\n     * @param request\r\n     * @returns\r\n     */\r\n    async hydrateCache(result, request) {\r\n        this.logger.verbose(\"hydrateCache called\");\r\n        // Account gets saved to browser storage regardless of native or not\r\n        const accountEntity = AccountEntity.createFromAccountInfo(result.account, result.cloudGraphHostName, result.msGraphHost);\r\n        await this.browserStorage.setAccount(accountEntity, result.correlationId, AuthToken.isKmsi(result.idTokenClaims), ApiId.hydrateCache);\r\n        if (result.fromNativeBroker) {\r\n            this.logger.verbose(\"Response was from native broker, storing in-memory\");\r\n            // Tokens from native broker are stored in-memory\r\n            return this.nativeInternalStorage.hydrateCache(result, request);\r\n        }\r\n        else {\r\n            return this.browserStorage.hydrateCache(result, request);\r\n        }\r\n    }\r\n    // #region Helpers\r\n    /**\r\n     * Acquire a token from native device (e.g. WAM)\r\n     * @param request\r\n     */\r\n    async acquireTokenNative(request, apiId, accountId, cacheLookupPolicy) {\r\n        this.logger.trace(\"acquireTokenNative called\");\r\n        if (!this.platformAuthProvider) {\r\n            throw createBrowserAuthError(nativeConnectionNotEstablished);\r\n        }\r\n        const nativeClient = new PlatformAuthInteractionClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, apiId, this.performanceClient, this.platformAuthProvider, accountId || this.getNativeAccountId(request), this.nativeInternalStorage, request.correlationId);\r\n        return nativeClient.acquireToken(request, cacheLookupPolicy);\r\n    }\r\n    /**\r\n     * Returns boolean indicating if this request can use the platform broker\r\n     * @param request\r\n     */\r\n    canUsePlatformBroker(request, accountId) {\r\n        this.logger.trace(\"canUsePlatformBroker called\");\r\n        if (!this.platformAuthProvider) {\r\n            this.logger.trace(\"canUsePlatformBroker: platform broker unavilable, returning false\");\r\n            return false;\r\n        }\r\n        if (!isPlatformAuthAllowed(this.config, this.logger, this.platformAuthProvider, request.authenticationScheme)) {\r\n            this.logger.trace(\"canUsePlatformBroker: isBrokerAvailable returned false, returning false\");\r\n            return false;\r\n        }\r\n        if (request.prompt) {\r\n            switch (request.prompt) {\r\n                case PromptValue.NONE:\r\n                case PromptValue.CONSENT:\r\n                case PromptValue.LOGIN:\r\n                case PromptValue.SELECT_ACCOUNT:\r\n                    this.logger.trace(\"canUsePlatformBroker: prompt is compatible with platform broker flow\");\r\n                    break;\r\n                default:\r\n                    this.logger.trace(`canUsePlatformBroker: prompt = ${request.prompt} is not compatible with platform broker flow, returning false`);\r\n                    return false;\r\n            }\r\n        }\r\n        if (!accountId && !this.getNativeAccountId(request)) {\r\n            this.logger.trace(\"canUsePlatformBroker: nativeAccountId is not available, returning false\");\r\n            return false;\r\n        }\r\n        return true;\r\n    }\r\n    /**\r\n     * Get the native accountId from the account\r\n     * @param request\r\n     * @returns\r\n     */\r\n    getNativeAccountId(request) {\r\n        const account = request.account ||\r\n            this.getAccount({\r\n                loginHint: request.loginHint,\r\n                sid: request.sid,\r\n            }) ||\r\n            this.getActiveAccount();\r\n        return (account && account.nativeAccountId) || \"\";\r\n    }\r\n    /**\r\n     * Returns new instance of the Popup Interaction Client\r\n     * @param correlationId\r\n     */\r\n    createPopupClient(correlationId) {\r\n        return new PopupClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, this.performanceClient, this.nativeInternalStorage, this.platformAuthProvider, correlationId);\r\n    }\r\n    /**\r\n     * Returns new instance of the Redirect Interaction Client\r\n     * @param correlationId\r\n     */\r\n    createRedirectClient(correlationId) {\r\n        return new RedirectClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, this.performanceClient, this.nativeInternalStorage, this.platformAuthProvider, correlationId);\r\n    }\r\n    /**\r\n     * Returns new instance of the Silent Iframe Interaction Client\r\n     * @param correlationId\r\n     */\r\n    createSilentIframeClient(correlationId) {\r\n        return new SilentIframeClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, ApiId.ssoSilent, this.performanceClient, this.nativeInternalStorage, this.platformAuthProvider, correlationId);\r\n    }\r\n    /**\r\n     * Returns new instance of the Silent Cache Interaction Client\r\n     */\r\n    createSilentCacheClient(correlationId) {\r\n        return new SilentCacheClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, this.performanceClient, this.platformAuthProvider, correlationId);\r\n    }\r\n    /**\r\n     * Returns new instance of the Silent Refresh Interaction Client\r\n     */\r\n    createSilentRefreshClient(correlationId) {\r\n        return new SilentRefreshClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, this.performanceClient, this.platformAuthProvider, correlationId);\r\n    }\r\n    /**\r\n     * Returns new instance of the Silent AuthCode Interaction Client\r\n     */\r\n    createSilentAuthCodeClient(correlationId) {\r\n        return new SilentAuthCodeClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, ApiId.acquireTokenByCode, this.performanceClient, this.platformAuthProvider, correlationId);\r\n    }\r\n    /**\r\n     * Adds event callbacks to array\r\n     * @param callback\r\n     */\r\n    addEventCallback(callback, eventTypes) {\r\n        return this.eventHandler.addEventCallback(callback, eventTypes);\r\n    }\r\n    /**\r\n     * Removes callback with provided id from callback array\r\n     * @param callbackId\r\n     */\r\n    removeEventCallback(callbackId) {\r\n        this.eventHandler.removeEventCallback(callbackId);\r\n    }\r\n    /**\r\n     * Registers a callback to receive performance events.\r\n     *\r\n     * @param {PerformanceCallbackFunction} callback\r\n     * @returns {string}\r\n     */\r\n    addPerformanceCallback(callback) {\r\n        blockNonBrowserEnvironment();\r\n        return this.performanceClient.addPerformanceCallback(callback);\r\n    }\r\n    /**\r\n     * Removes a callback registered with addPerformanceCallback.\r\n     *\r\n     * @param {string} callbackId\r\n     * @returns {boolean}\r\n     */\r\n    removePerformanceCallback(callbackId) {\r\n        return this.performanceClient.removePerformanceCallback(callbackId);\r\n    }\r\n    /**\r\n     * Adds event listener that emits an event when a user account is added or removed from localstorage in a different browser tab or window\r\n     * @deprecated These events will be raised by default and this method will be removed in a future major version.\r\n     */\r\n    enableAccountStorageEvents() {\r\n        if (this.config.cache.cacheLocation !==\r\n            BrowserCacheLocation.LocalStorage) {\r\n            this.logger.info(\"Account storage events are only available when cacheLocation is set to localStorage\");\r\n            return;\r\n        }\r\n        this.eventHandler.subscribeCrossTab();\r\n    }\r\n    /**\r\n     * Removes event listener that emits an event when a user account is added or removed from localstorage in a different browser tab or window\r\n     * @deprecated These events will be raised by default and this method will be removed in a future major version.\r\n     */\r\n    disableAccountStorageEvents() {\r\n        if (this.config.cache.cacheLocation !==\r\n            BrowserCacheLocation.LocalStorage) {\r\n            this.logger.info(\"Account storage events are only available when cacheLocation is set to localStorage\");\r\n            return;\r\n        }\r\n        this.eventHandler.unsubscribeCrossTab();\r\n    }\r\n    /**\r\n     * Gets the token cache for the application.\r\n     */\r\n    getTokenCache() {\r\n        return this.tokenCache;\r\n    }\r\n    /**\r\n     * Returns the logger instance\r\n     */\r\n    getLogger() {\r\n        return this.logger;\r\n    }\r\n    /**\r\n     * Replaces the default logger set in configurations with new Logger with new configurations\r\n     * @param logger Logger instance\r\n     */\r\n    setLogger(logger) {\r\n        this.logger = logger;\r\n    }\r\n    /**\r\n     * Called by wrapper libraries (Angular & React) to set SKU and Version passed down to telemetry, logger, etc.\r\n     * @param sku\r\n     * @param version\r\n     */\r\n    initializeWrapperLibrary(sku, version) {\r\n        // Validate the SKU passed in is one we expect\r\n        this.browserStorage.setWrapperMetadata(sku, version);\r\n    }\r\n    /**\r\n     * Sets navigation client\r\n     * @param navigationClient\r\n     */\r\n    setNavigationClient(navigationClient) {\r\n        this.navigationClient = navigationClient;\r\n    }\r\n    /**\r\n     * Returns the configuration object\r\n     */\r\n    getConfiguration() {\r\n        return this.config;\r\n    }\r\n    /**\r\n     * Returns the performance client\r\n     */\r\n    getPerformanceClient() {\r\n        return this.performanceClient;\r\n    }\r\n    /**\r\n     * Returns the browser env indicator\r\n     */\r\n    isBrowserEnv() {\r\n        return this.isBrowserEnvironment;\r\n    }\r\n    /**\r\n     * Generates a correlation id for a request if none is provided.\r\n     *\r\n     * @protected\r\n     * @param {?Partial<BaseAuthRequest>} [request]\r\n     * @returns {string}\r\n     */\r\n    getRequestCorrelationId(request) {\r\n        if (request?.correlationId) {\r\n            return request.correlationId;\r\n        }\r\n        if (this.isBrowserEnvironment) {\r\n            return createNewGuid();\r\n        }\r\n        /*\r\n         * Included for fallback for non-browser environments,\r\n         * and to ensure this method always returns a string.\r\n         */\r\n        return Constants.EMPTY_STRING;\r\n    }\r\n    // #endregion\r\n    /**\r\n     * Use when initiating the login process by redirecting the user's browser to the authorization endpoint. This function redirects the page, so\r\n     * any code that follows this function will not execute.\r\n     *\r\n     * IMPORTANT: It is NOT recommended to have code that is dependent on the resolution of the Promise. This function will navigate away from the current\r\n     * browser window. It currently returns a Promise in order to reflect the asynchronous nature of the code running in this function.\r\n     *\r\n     * @param request\r\n     */\r\n    async loginRedirect(request) {\r\n        const correlationId = this.getRequestCorrelationId(request);\r\n        this.logger.verbose(\"loginRedirect called\", correlationId);\r\n        return this.acquireTokenRedirect({\r\n            correlationId,\r\n            ...(request || DEFAULT_REQUEST),\r\n        });\r\n    }\r\n    /**\r\n     * Use when initiating the login process via opening a popup window in the user's browser\r\n     *\r\n     * @param request\r\n     *\r\n     * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\r\n     */\r\n    loginPopup(request) {\r\n        const correlationId = this.getRequestCorrelationId(request);\r\n        this.logger.verbose(\"loginPopup called\", correlationId);\r\n        return this.acquireTokenPopup({\r\n            correlationId,\r\n            ...(request || DEFAULT_REQUEST),\r\n        });\r\n    }\r\n    /**\r\n     * Silently acquire an access token for a given set of scopes. Returns currently processing promise if parallel requests are made.\r\n     *\r\n     * @param {@link (SilentRequest:type)}\r\n     * @returns {Promise.<AuthenticationResult>} - a promise that is fulfilled when this function has completed, or rejected if an error was raised. Returns the {@link AuthResponse} object\r\n     */\r\n    async acquireTokenSilent(request) {\r\n        const correlationId = this.getRequestCorrelationId(request);\r\n        const atsMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.AcquireTokenSilent, correlationId);\r\n        atsMeasurement.add({\r\n            cacheLookupPolicy: request.cacheLookupPolicy,\r\n            scenarioId: request.scenarioId,\r\n        });\r\n        preflightCheck(this.initialized, atsMeasurement, request.account);\r\n        this.logger.verbose(\"acquireTokenSilent called\", correlationId);\r\n        const account = request.account || this.getActiveAccount();\r\n        if (!account) {\r\n            throw createBrowserAuthError(noAccountError);\r\n        }\r\n        return this.acquireTokenSilentDeduped(request, account, correlationId)\r\n            .then((result) => {\r\n            atsMeasurement.end({\r\n                success: true,\r\n                fromCache: result.fromCache,\r\n                accessTokenSize: result.accessToken.length,\r\n                idTokenSize: result.idToken.length,\r\n            }, undefined, result.account);\r\n            return {\r\n                ...result,\r\n                state: request.state,\r\n                correlationId: correlationId, // Ensures PWB scenarios can correctly match request to response\r\n            };\r\n        })\r\n            .catch((error) => {\r\n            if (error instanceof AuthError) {\r\n                // Ensures PWB scenarios can correctly match request to response\r\n                error.setCorrelationId(correlationId);\r\n            }\r\n            atsMeasurement.end({\r\n                success: false,\r\n            }, error, account);\r\n            throw error;\r\n        });\r\n    }\r\n    /**\r\n     * Checks if identical request is already in flight and returns reference to the existing promise or fires off a new one if this is the first\r\n     * @param request\r\n     * @param account\r\n     * @param correlationId\r\n     * @returns\r\n     */\r\n    async acquireTokenSilentDeduped(request, account, correlationId) {\r\n        const thumbprint = getRequestThumbprint(this.config.auth.clientId, {\r\n            ...request,\r\n            authority: request.authority || this.config.auth.authority,\r\n            correlationId: correlationId,\r\n        }, account.homeAccountId);\r\n        const silentRequestKey = JSON.stringify(thumbprint);\r\n        const inProgressRequest = this.activeSilentTokenRequests.get(silentRequestKey);\r\n        if (typeof inProgressRequest === \"undefined\") {\r\n            this.logger.verbose(\"acquireTokenSilent called for the first time, storing active request\", correlationId);\r\n            this.performanceClient.addFields({ deduped: false }, correlationId);\r\n            const activeRequest = invokeAsync(this.acquireTokenSilentAsync.bind(this), PerformanceEvents.AcquireTokenSilentAsync, this.logger, this.performanceClient, correlationId)({\r\n                ...request,\r\n                correlationId,\r\n            }, account);\r\n            this.activeSilentTokenRequests.set(silentRequestKey, activeRequest);\r\n            return activeRequest.finally(() => {\r\n                this.activeSilentTokenRequests.delete(silentRequestKey);\r\n            });\r\n        }\r\n        else {\r\n            this.logger.verbose(\"acquireTokenSilent has been called previously, returning the result from the first call\", correlationId);\r\n            this.performanceClient.addFields({ deduped: true }, correlationId);\r\n            return inProgressRequest;\r\n        }\r\n    }\r\n    /**\r\n     * Silently acquire an access token for a given set of scopes. Will use cached token if available, otherwise will attempt to acquire a new token from the network via refresh token.\r\n     * @param {@link (SilentRequest:type)}\r\n     * @param {@link (AccountInfo:type)}\r\n     * @returns {Promise.<AuthenticationResult>} - a promise that is fulfilled when this function has completed, or rejected if an error was raised. Returns the {@link AuthResponse}\r\n     */\r\n    async acquireTokenSilentAsync(request, account) {\r\n        const trackStateChange = (event) => this.trackStateChange(request.correlationId, event);\r\n        this.performanceClient.addQueueMeasurement(PerformanceEvents.AcquireTokenSilentAsync, request.correlationId);\r\n        this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_START, InteractionType.Silent, request);\r\n        if (request.correlationId) {\r\n            this.performanceClient.incrementFields({ visibilityChangeCount: 0, onlineStatusChangeCount: 0 }, request.correlationId);\r\n        }\r\n        this.addStateChangeListeners(trackStateChange);\r\n        const silentRequest = await invokeAsync(initializeSilentRequest, PerformanceEvents.InitializeSilentRequest, this.logger, this.performanceClient, request.correlationId)(request, account, this.config, this.performanceClient, this.logger);\r\n        const cacheLookupPolicy = request.cacheLookupPolicy || CacheLookupPolicy.Default;\r\n        const result = this.acquireTokenSilentNoIframe(silentRequest, cacheLookupPolicy).catch(async (refreshTokenError) => {\r\n            const shouldTryToResolveSilently = checkIfRefreshTokenErrorCanBeResolvedSilently(refreshTokenError, cacheLookupPolicy);\r\n            if (shouldTryToResolveSilently) {\r\n                const silentRefreshReason = `${refreshTokenError.errorCode}${refreshTokenError.subError\r\n                    ? `|${refreshTokenError.subError}`\r\n                    : \"\"}`;\r\n                this.performanceClient.addFields({ silentRefreshReason }, silentRequest.correlationId);\r\n                if (!this.activeIframeRequest) {\r\n                    let _resolve;\r\n                    // Always set the active request tracker immediately after checking it to prevent races\r\n                    this.activeIframeRequest = [\r\n                        new Promise((resolve) => {\r\n                            _resolve = resolve;\r\n                        }),\r\n                        silentRequest.correlationId,\r\n                    ];\r\n                    this.logger.verbose(\"Refresh token expired/invalid or CacheLookupPolicy is set to Skip, attempting acquire token by iframe.\", silentRequest.correlationId);\r\n                    return invokeAsync(this.acquireTokenBySilentIframe.bind(this), PerformanceEvents.AcquireTokenBySilentIframe, this.logger, this.performanceClient, silentRequest.correlationId)(silentRequest)\r\n                        .then((iframeResult) => {\r\n                        _resolve(true);\r\n                        return iframeResult;\r\n                    })\r\n                        .catch((e) => {\r\n                        _resolve(false);\r\n                        throw e;\r\n                    })\r\n                        .finally(() => {\r\n                        this.activeIframeRequest = undefined;\r\n                    });\r\n                }\r\n                else if (cacheLookupPolicy !== CacheLookupPolicy.Skip) {\r\n                    const [activePromise, activeCorrelationId] = this.activeIframeRequest;\r\n                    this.logger.verbose(`Iframe request is already in progress, awaiting resolution for request with correlationId: ${activeCorrelationId}`, silentRequest.correlationId);\r\n                    const awaitConcurrentIframeMeasure = this.performanceClient.startMeasurement(PerformanceEvents.AwaitConcurrentIframe, silentRequest.correlationId);\r\n                    awaitConcurrentIframeMeasure.add({\r\n                        awaitIframeCorrelationId: activeCorrelationId,\r\n                    });\r\n                    const activePromiseResult = await activePromise;\r\n                    awaitConcurrentIframeMeasure.end({\r\n                        success: activePromiseResult,\r\n                    });\r\n                    if (activePromiseResult) {\r\n                        this.logger.verbose(`Parallel iframe request with correlationId: ${activeCorrelationId} succeeded. Retrying cache and/or RT redemption`, silentRequest.correlationId);\r\n                        // Retry cache lookup and/or RT exchange after iframe completes\r\n                        return this.acquireTokenSilentNoIframe(silentRequest, cacheLookupPolicy);\r\n                    }\r\n                    else {\r\n                        this.logger.info(`Iframe request with correlationId: ${activeCorrelationId} failed. Interaction is required.`);\r\n                        // If previous iframe request failed, it's unlikely to succeed this time. Throw original error.\r\n                        throw refreshTokenError;\r\n                    }\r\n                }\r\n                else {\r\n                    // Cache policy set to skip and another iframe request is already in progress\r\n                    this.logger.warning(\"Another iframe request is currently in progress and CacheLookupPolicy is set to Skip. This may result in degraded performance and/or reliability for both calls. Please consider changing the CacheLookupPolicy to take advantage of request queuing and token cache.\", silentRequest.correlationId);\r\n                    return invokeAsync(this.acquireTokenBySilentIframe.bind(this), PerformanceEvents.AcquireTokenBySilentIframe, this.logger, this.performanceClient, silentRequest.correlationId)(silentRequest);\r\n                }\r\n            }\r\n            else {\r\n                // Error cannot be silently resolved or iframe renewal is not allowed, interaction required\r\n                throw refreshTokenError;\r\n            }\r\n        });\r\n        return result\r\n            .then((response) => {\r\n            this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_SUCCESS, InteractionType.Silent, response);\r\n            this.performanceClient.addFields({\r\n                fromCache: response.fromCache,\r\n            }, request.correlationId);\r\n            return response;\r\n        })\r\n            .catch((tokenRenewalError) => {\r\n            this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_FAILURE, InteractionType.Silent, null, tokenRenewalError);\r\n            throw tokenRenewalError;\r\n        })\r\n            .finally(() => {\r\n            this.removeStateChangeListeners(trackStateChange);\r\n        });\r\n    }\r\n    /**\r\n     * AcquireTokenSilent without the iframe fallback. This is used to enable the correct fallbacks in cases where there's a potential for multiple silent requests to be made in parallel and prevent those requests from making concurrent iframe requests.\r\n     * @param silentRequest\r\n     * @param cacheLookupPolicy\r\n     * @returns\r\n     */\r\n    async acquireTokenSilentNoIframe(silentRequest, cacheLookupPolicy) {\r\n        // if the cache policy is set to access_token only, we should not be hitting the native layer yet\r\n        if (isPlatformAuthAllowed(this.config, this.logger, this.platformAuthProvider, silentRequest.authenticationScheme) &&\r\n            silentRequest.account.nativeAccountId) {\r\n            this.logger.verbose(\"acquireTokenSilent - attempting to acquire token from native platform\");\r\n            this.performanceClient.addFields({ isPlatformBrokerRequest: true }, silentRequest.correlationId);\r\n            return this.acquireTokenNative(silentRequest, ApiId.acquireTokenSilent_silentFlow, silentRequest.account.nativeAccountId, cacheLookupPolicy).catch(async (e) => {\r\n                this.performanceClient.addFields({\r\n                    brokerErrorName: e.name,\r\n                    brokerErrorCode: e.errorCode,\r\n                }, silentRequest.correlationId);\r\n                // If native token acquisition fails for availability reasons fallback to web flow\r\n                if (e instanceof NativeAuthError && isFatalNativeAuthError(e)) {\r\n                    this.logger.verbose(\"acquireTokenSilent - native platform unavailable, falling back to web flow\");\r\n                    this.platformAuthProvider = undefined; // Prevent future requests from continuing to attempt\r\n                    // Cache will not contain tokens, given that previous WAM requests succeeded. Skip cache and RT renewal and go straight to iframe renewal\r\n                    throw createClientAuthError(ClientAuthErrorCodes.tokenRefreshRequired);\r\n                }\r\n                throw e;\r\n            });\r\n        }\r\n        else {\r\n            this.logger.verbose(\"acquireTokenSilent - attempting to acquire token from web flow\");\r\n            // add logs to identify embedded cache retrieval\r\n            if (cacheLookupPolicy === CacheLookupPolicy.AccessToken) {\r\n                this.logger.verbose(\"acquireTokenSilent - cache lookup policy set to AccessToken, attempting to acquire token from local cache\");\r\n            }\r\n            return invokeAsync(this.acquireTokenFromCache.bind(this), PerformanceEvents.AcquireTokenFromCache, this.logger, this.performanceClient, silentRequest.correlationId)(silentRequest, cacheLookupPolicy).catch((cacheError) => {\r\n                if (cacheLookupPolicy === CacheLookupPolicy.AccessToken) {\r\n                    throw cacheError;\r\n                }\r\n                this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_NETWORK_START, InteractionType.Silent, silentRequest);\r\n                return invokeAsync(this.acquireTokenByRefreshToken.bind(this), PerformanceEvents.AcquireTokenByRefreshToken, this.logger, this.performanceClient, silentRequest.correlationId)(silentRequest, cacheLookupPolicy);\r\n            });\r\n        }\r\n    }\r\n    /**\r\n     * Pre-generates PKCE codes and stores it in local variable\r\n     * @param correlationId\r\n     */\r\n    async preGeneratePkceCodes(correlationId) {\r\n        this.logger.verbose(\"Generating new PKCE codes\");\r\n        this.pkceCode = await invokeAsync(generatePkceCodes, PerformanceEvents.GeneratePkceCodes, this.logger, this.performanceClient, correlationId)(this.performanceClient, this.logger, correlationId);\r\n        return Promise.resolve();\r\n    }\r\n    /**\r\n     * Provides pre-generated PKCE codes, if any\r\n     * @param correlationId\r\n     */\r\n    getPreGeneratedPkceCodes(correlationId) {\r\n        this.logger.verbose(\"Attempting to pick up pre-generated PKCE codes\");\r\n        const res = this.pkceCode ? { ...this.pkceCode } : undefined;\r\n        this.pkceCode = undefined;\r\n        this.logger.verbose(`${res ? \"Found\" : \"Did not find\"} pre-generated PKCE codes`);\r\n        this.performanceClient.addFields({ usePreGeneratedPkce: !!res }, correlationId);\r\n        return res;\r\n    }\r\n    logMultipleInstances(performanceEvent) {\r\n        const clientId = this.config.auth.clientId;\r\n        if (!window)\r\n            return;\r\n        // @ts-ignore\r\n        window.msal = window.msal || {};\r\n        // @ts-ignore\r\n        window.msal.clientIds = window.msal.clientIds || [];\r\n        // @ts-ignore\r\n        const clientIds = window.msal.clientIds;\r\n        if (clientIds.length > 0) {\r\n            this.logger.verbose(\"There is already an instance of MSAL.js in the window.\");\r\n        }\r\n        // @ts-ignore\r\n        window.msal.clientIds.push(clientId);\r\n        collectInstanceStats(clientId, performanceEvent, this.logger);\r\n    }\r\n}\r\n/**\r\n * Determines whether an error thrown by the refresh token endpoint can be resolved without interaction\r\n * @param refreshTokenError\r\n * @param silentRequest\r\n * @param cacheLookupPolicy\r\n * @returns\r\n */\r\nfunction checkIfRefreshTokenErrorCanBeResolvedSilently(refreshTokenError, cacheLookupPolicy) {\r\n    const noInteractionRequired = !(refreshTokenError instanceof InteractionRequiredAuthError &&\r\n        // For refresh token errors, bad_token does not always require interaction (silently resolvable)\r\n        refreshTokenError.subError !==\r\n            InteractionRequiredAuthErrorCodes.badToken);\r\n    // Errors that result when the refresh token needs to be replaced\r\n    const refreshTokenRefreshRequired = refreshTokenError.errorCode === BrowserConstants.INVALID_GRANT_ERROR ||\r\n        refreshTokenError.errorCode ===\r\n            ClientAuthErrorCodes.tokenRefreshRequired;\r\n    // Errors that may be resolved before falling back to interaction (through iframe renewal)\r\n    const isSilentlyResolvable = (noInteractionRequired && refreshTokenRefreshRequired) ||\r\n        refreshTokenError.errorCode ===\r\n            InteractionRequiredAuthErrorCodes.noTokensFound ||\r\n        refreshTokenError.errorCode ===\r\n            InteractionRequiredAuthErrorCodes.refreshTokenExpired;\r\n    // Only these policies allow for an iframe renewal attempt\r\n    const tryIframeRenewal = iFrameRenewalPolicies.includes(cacheLookupPolicy);\r\n    return isSilentlyResolvable && tryIframeRenewal;\r\n}\n\nexport { StandardController };\n//# sourceMappingURL=StandardController.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { NestedAppOperatingContext } from '../operatingcontext/NestedAppOperatingContext.mjs';\nimport { StandardOperatingContext } from '../operatingcontext/StandardOperatingContext.mjs';\nimport { StandardController } from './StandardController.mjs';\nimport { NestedAppAuthController } from './NestedAppAuthController.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nasync function createV3Controller(config, request) {\r\n    const standard = new StandardOperatingContext(config);\r\n    await standard.initialize();\r\n    return StandardController.createController(standard, request);\r\n}\r\nasync function createController(config) {\r\n    const standard = new StandardOperatingContext(config);\r\n    const nestedApp = new NestedAppOperatingContext(config);\r\n    const operatingContexts = [standard.initialize(), nestedApp.initialize()];\r\n    await Promise.all(operatingContexts);\r\n    if (nestedApp.isAvailable() && config.auth.supportsNestedAppAuth) {\r\n        return NestedAppAuthController.createController(nestedApp);\r\n    }\r\n    else if (standard.isAvailable()) {\r\n        return StandardController.createController(standard);\r\n    }\r\n    else {\r\n        // Since neither of the actual operating contexts are available keep the UnknownOperatingContextController\r\n        return null;\r\n    }\r\n}\n\nexport { createController, createV3Controller };\n//# sourceMappingURL=ControllerFactory.mjs.map\n","/*! @azure/msal-browser v4.30.0 2026-03-18 */\n'use strict';\nimport { createV3Controller } from '../controllers/ControllerFactory.mjs';\nimport { StandardController } from '../controllers/StandardController.mjs';\nimport { StandardOperatingContext } from '../operatingcontext/StandardOperatingContext.mjs';\nimport { NestedAppAuthController } from '../controllers/NestedAppAuthController.mjs';\nimport { NestedAppOperatingContext } from '../operatingcontext/NestedAppOperatingContext.mjs';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * The PublicClientApplication class is the object exposed by the library to perform authentication and authorization functions in Single Page Applications\r\n * to obtain JWT tokens as described in the OAuth 2.0 Authorization Code Flow with PKCE specification.\r\n */\r\nclass PublicClientApplication {\r\n    /**\r\n     * Creates StandardController and passes it to the PublicClientApplication\r\n     *\r\n     * @param configuration {Configuration}\r\n     */\r\n    static async createPublicClientApplication(configuration) {\r\n        const controller = await createV3Controller(configuration);\r\n        const pca = new PublicClientApplication(configuration, controller);\r\n        return pca;\r\n    }\r\n    /**\r\n     * @constructor\r\n     * Constructor for the PublicClientApplication used to instantiate the PublicClientApplication object\r\n     *\r\n     * Important attributes in the Configuration object for auth are:\r\n     * - clientID: the application ID of your application. You can obtain one by registering your application with our Application registration portal : https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredAppsPreview\r\n     * - authority: the authority URL for your application.\r\n     * - redirect_uri: the uri of your application registered in the portal.\r\n     *\r\n     * In Azure AD, authority is a URL indicating the Azure active directory that MSAL uses to obtain tokens.\r\n     * It is of the form https://login.microsoftonline.com/{Enter_the_Tenant_Info_Here}\r\n     * If your application supports Accounts in one organizational directory, replace \"Enter_the_Tenant_Info_Here\" value with the Tenant Id or Tenant name (for example, contoso.microsoft.com).\r\n     * If your application supports Accounts in any organizational directory, replace \"Enter_the_Tenant_Info_Here\" value with organizations.\r\n     * If your application supports Accounts in any organizational directory and personal Microsoft accounts, replace \"Enter_the_Tenant_Info_Here\" value with common.\r\n     * To restrict support to Personal Microsoft accounts only, replace \"Enter_the_Tenant_Info_Here\" value with consumers.\r\n     *\r\n     * In Azure B2C, authority is of the form https://{instance}/tfp/{tenant}/{policyName}/\r\n     * Full B2C functionality will be available in this library in future versions.\r\n     *\r\n     * @param configuration Object for the MSAL PublicClientApplication instance\r\n     * @param IController Optional parameter to explictly set the controller. (Will be removed when we remove public constructor)\r\n     */\r\n    constructor(configuration, controller) {\r\n        this.isBroker = false;\r\n        this.controller =\r\n            controller ||\r\n                new StandardController(new StandardOperatingContext(configuration));\r\n    }\r\n    /**\r\n     * Initializer function to perform async startup tasks such as connecting to WAM extension\r\n     * @param request {?InitializeApplicationRequest}\r\n     */\r\n    async initialize(request) {\r\n        return this.controller.initialize(request, this.isBroker);\r\n    }\r\n    /**\r\n     * Use when you want to obtain an access_token for your API via opening a popup window in the user's browser\r\n     *\r\n     * @param request\r\n     *\r\n     * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\r\n     */\r\n    async acquireTokenPopup(request) {\r\n        return this.controller.acquireTokenPopup(request);\r\n    }\r\n    /**\r\n     * Use when you want to obtain an access_token for your API by redirecting the user's browser window to the authorization endpoint. This function redirects\r\n     * the page, so any code that follows this function will not execute.\r\n     *\r\n     * IMPORTANT: It is NOT recommended to have code that is dependent on the resolution of the Promise. This function will navigate away from the current\r\n     * browser window. It currently returns a Promise in order to reflect the asynchronous nature of the code running in this function.\r\n     *\r\n     * @param request\r\n     */\r\n    acquireTokenRedirect(request) {\r\n        return this.controller.acquireTokenRedirect(request);\r\n    }\r\n    /**\r\n     * Silently acquire an access token for a given set of scopes. Returns currently processing promise if parallel requests are made.\r\n     *\r\n     * @param {@link (SilentRequest:type)}\r\n     * @returns {Promise.<AuthenticationResult>} - a promise that is fulfilled when this function has completed, or rejected if an error was raised. Returns the {@link AuthenticationResult} object\r\n     */\r\n    acquireTokenSilent(silentRequest) {\r\n        return this.controller.acquireTokenSilent(silentRequest);\r\n    }\r\n    /**\r\n     * This function redeems an authorization code (passed as code) from the eSTS token endpoint.\r\n     * This authorization code should be acquired server-side using a confidential client to acquire a spa_code.\r\n     * This API is not indended for normal authorization code acquisition and redemption.\r\n     *\r\n     * Redemption of this authorization code will not require PKCE, as it was acquired by a confidential client.\r\n     *\r\n     * @param request {@link AuthorizationCodeRequest}\r\n     * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\r\n     */\r\n    acquireTokenByCode(request) {\r\n        return this.controller.acquireTokenByCode(request);\r\n    }\r\n    /**\r\n     * Adds event callbacks to array\r\n     * @param callback\r\n     * @param eventTypes\r\n     */\r\n    addEventCallback(callback, eventTypes) {\r\n        return this.controller.addEventCallback(callback, eventTypes);\r\n    }\r\n    /**\r\n     * Removes callback with provided id from callback array\r\n     * @param callbackId\r\n     */\r\n    removeEventCallback(callbackId) {\r\n        return this.controller.removeEventCallback(callbackId);\r\n    }\r\n    /**\r\n     * Registers a callback to receive performance events.\r\n     *\r\n     * @param {PerformanceCallbackFunction} callback\r\n     * @returns {string}\r\n     */\r\n    addPerformanceCallback(callback) {\r\n        return this.controller.addPerformanceCallback(callback);\r\n    }\r\n    /**\r\n     * Removes a callback registered with addPerformanceCallback.\r\n     *\r\n     * @param {string} callbackId\r\n     * @returns {boolean}\r\n     */\r\n    removePerformanceCallback(callbackId) {\r\n        return this.controller.removePerformanceCallback(callbackId);\r\n    }\r\n    /**\r\n     * Adds event listener that emits an event when a user account is added or removed from localstorage in a different browser tab or window\r\n     */\r\n    enableAccountStorageEvents() {\r\n        this.controller.enableAccountStorageEvents();\r\n    }\r\n    /**\r\n     * Removes event listener that emits an event when a user account is added or removed from localstorage in a different browser tab or window\r\n     */\r\n    disableAccountStorageEvents() {\r\n        this.controller.disableAccountStorageEvents();\r\n    }\r\n    /**\r\n     * Returns the first account found in the cache that matches the account filter passed in.\r\n     * @param accountFilter\r\n     * @returns The first account found in the cache matching the provided filter or null if no account could be found.\r\n     */\r\n    getAccount(accountFilter) {\r\n        return this.controller.getAccount(accountFilter);\r\n    }\r\n    /**\r\n     * Returns the signed in account matching homeAccountId.\r\n     * (the account object is created at the time of successful login)\r\n     * or null when no matching account is found\r\n     * @param homeAccountId\r\n     * @returns The account object stored in MSAL\r\n     * @deprecated - Use getAccount instead\r\n     */\r\n    getAccountByHomeId(homeAccountId) {\r\n        return this.controller.getAccountByHomeId(homeAccountId);\r\n    }\r\n    /**\r\n     * Returns the signed in account matching localAccountId.\r\n     * (the account object is created at the time of successful login)\r\n     * or null when no matching account is found\r\n     * @param localAccountId\r\n     * @returns The account object stored in MSAL\r\n     * @deprecated - Use getAccount instead\r\n     */\r\n    getAccountByLocalId(localId) {\r\n        return this.controller.getAccountByLocalId(localId);\r\n    }\r\n    /**\r\n     * Returns the signed in account matching username.\r\n     * (the account object is created at the time of successful login)\r\n     * or null when no matching account is found.\r\n     * This API is provided for convenience but getAccountById should be used for best reliability\r\n     * @param userName\r\n     * @returns The account object stored in MSAL\r\n     * @deprecated - Use getAccount instead\r\n     */\r\n    getAccountByUsername(userName) {\r\n        return this.controller.getAccountByUsername(userName);\r\n    }\r\n    /**\r\n     * Returns all the accounts in the cache that match the optional filter. If no filter is provided, all accounts are returned.\r\n     * @param accountFilter - (Optional) filter to narrow down the accounts returned\r\n     * @returns Array of AccountInfo objects in cache\r\n     */\r\n    getAllAccounts(accountFilter) {\r\n        return this.controller.getAllAccounts(accountFilter);\r\n    }\r\n    /**\r\n     * Event handler function which allows users to fire events after the PublicClientApplication object\r\n     * has loaded during redirect flows. This should be invoked on all page loads involved in redirect\r\n     * auth flows.\r\n     * @param hash Hash to process. Defaults to the current value of window.location.hash. Only needs to be provided explicitly if the response to be handled is not contained in the current value.\r\n     * @returns Token response or null. If the return value is null, then no auth redirect was detected.\r\n     */\r\n    handleRedirectPromise(hash) {\r\n        return this.controller.handleRedirectPromise(hash);\r\n    }\r\n    /**\r\n     * Use when initiating the login process via opening a popup window in the user's browser\r\n     *\r\n     * @param request\r\n     *\r\n     * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\r\n     */\r\n    loginPopup(request) {\r\n        return this.controller.loginPopup(request);\r\n    }\r\n    /**\r\n     * Use when initiating the login process by redirecting the user's browser to the authorization endpoint. This function redirects the page, so\r\n     * any code that follows this function will not execute.\r\n     *\r\n     * IMPORTANT: It is NOT recommended to have code that is dependent on the resolution of the Promise. This function will navigate away from the current\r\n     * browser window. It currently returns a Promise in order to reflect the asynchronous nature of the code running in this function.\r\n     *\r\n     * @param request\r\n     */\r\n    loginRedirect(request) {\r\n        return this.controller.loginRedirect(request);\r\n    }\r\n    /**\r\n     * Deprecated logout function. Use logoutRedirect or logoutPopup instead\r\n     * @param logoutRequest\r\n     * @deprecated\r\n     */\r\n    logout(logoutRequest) {\r\n        return this.controller.logout(logoutRequest);\r\n    }\r\n    /**\r\n     * Use to log out the current user, and redirect the user to the postLogoutRedirectUri.\r\n     * Default behaviour is to redirect the user to `window.location.href`.\r\n     * @param logoutRequest\r\n     */\r\n    logoutRedirect(logoutRequest) {\r\n        return this.controller.logoutRedirect(logoutRequest);\r\n    }\r\n    /**\r\n     * Clears local cache for the current user then opens a popup window prompting the user to sign-out of the server\r\n     * @param logoutRequest\r\n     */\r\n    logoutPopup(logoutRequest) {\r\n        return this.controller.logoutPopup(logoutRequest);\r\n    }\r\n    /**\r\n     * This function uses a hidden iframe to fetch an authorization code from the eSTS. There are cases where this may not work:\r\n     * - Any browser using a form of Intelligent Tracking Prevention\r\n     * - If there is not an established session with the service\r\n     *\r\n     * In these cases, the request must be done inside a popup or full frame redirect.\r\n     *\r\n     * For the cases where interaction is required, you cannot send a request with prompt=none.\r\n     *\r\n     * If your refresh token has expired, you can use this function to fetch a new set of tokens silently as long as\r\n     * you session on the server still exists.\r\n     * @param request {@link SsoSilentRequest}\r\n     *\r\n     * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\r\n     */\r\n    ssoSilent(request) {\r\n        return this.controller.ssoSilent(request);\r\n    }\r\n    /**\r\n     * Gets the token cache for the application.\r\n     */\r\n    getTokenCache() {\r\n        return this.controller.getTokenCache();\r\n    }\r\n    /**\r\n     * Returns the logger instance\r\n     */\r\n    getLogger() {\r\n        return this.controller.getLogger();\r\n    }\r\n    /**\r\n     * Replaces the default logger set in configurations with new Logger with new configurations\r\n     * @param logger Logger instance\r\n     */\r\n    setLogger(logger) {\r\n        this.controller.setLogger(logger);\r\n    }\r\n    /**\r\n     * Sets the account to use as the active account. If no account is passed to the acquireToken APIs, then MSAL will use this active account.\r\n     * @param account\r\n     */\r\n    setActiveAccount(account) {\r\n        this.controller.setActiveAccount(account);\r\n    }\r\n    /**\r\n     * Gets the currently active account\r\n     */\r\n    getActiveAccount() {\r\n        return this.controller.getActiveAccount();\r\n    }\r\n    /**\r\n     * Called by wrapper libraries (Angular & React) to set SKU and Version passed down to telemetry, logger, etc.\r\n     * @param sku\r\n     * @param version\r\n     */\r\n    initializeWrapperLibrary(sku, version) {\r\n        return this.controller.initializeWrapperLibrary(sku, version);\r\n    }\r\n    /**\r\n     * Sets navigation client\r\n     * @param navigationClient\r\n     */\r\n    setNavigationClient(navigationClient) {\r\n        this.controller.setNavigationClient(navigationClient);\r\n    }\r\n    /**\r\n     * Returns the configuration object\r\n     * @internal\r\n     */\r\n    getConfiguration() {\r\n        return this.controller.getConfiguration();\r\n    }\r\n    /**\r\n     * Hydrates cache with the tokens and account in the AuthenticationResult object\r\n     * @param result\r\n     * @param request - The request object that was used to obtain the AuthenticationResult\r\n     * @returns\r\n     */\r\n    async hydrateCache(result, request) {\r\n        return this.controller.hydrateCache(result, request);\r\n    }\r\n    /**\r\n     * Clears tokens and account from the browser cache.\r\n     * @param logoutRequest\r\n     */\r\n    clearCache(logoutRequest) {\r\n        return this.controller.clearCache(logoutRequest);\r\n    }\r\n}\r\n/**\r\n * creates NestedAppAuthController and passes it to the PublicClientApplication,\r\n * falls back to StandardController if NestedAppAuthController is not available\r\n *\r\n * @param configuration\r\n * @returns IPublicClientApplication\r\n *\r\n */\r\nasync function createNestablePublicClientApplication(configuration) {\r\n    const nestedAppAuth = new NestedAppOperatingContext(configuration);\r\n    await nestedAppAuth.initialize();\r\n    if (nestedAppAuth.isAvailable()) {\r\n        const controller = new NestedAppAuthController(nestedAppAuth);\r\n        const nestablePCA = new PublicClientApplication(configuration, controller);\r\n        await nestablePCA.initialize();\r\n        return nestablePCA;\r\n    }\r\n    return createStandardPublicClientApplication(configuration);\r\n}\r\n/**\r\n * creates PublicClientApplication using StandardController\r\n *\r\n * @param configuration\r\n * @returns IPublicClientApplication\r\n *\r\n */\r\nasync function createStandardPublicClientApplication(configuration) {\r\n    const pca = new PublicClientApplication(configuration);\r\n    await pca.initialize();\r\n    return pca;\r\n}\n\nexport { PublicClientApplication, createNestablePublicClientApplication, createStandardPublicClientApplication };\n//# sourceMappingURL=PublicClientApplication.mjs.map\n","import * as React from \"react\";\nfunction ArrowDownTrayIcon({\n  title,\n  titleId,\n  ...props\n}, svgRef) {\n  return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    fill: \"none\",\n    viewBox: \"0 0 24 24\",\n    strokeWidth: 1.5,\n    stroke: \"currentColor\",\n    \"aria-hidden\": \"true\",\n    \"data-slot\": \"icon\",\n    ref: svgRef,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n    strokeLinecap: \"round\",\n    strokeLinejoin: \"round\",\n    d: \"M3 16.5v2.25A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75V16.5M16.5 12 12 16.5m0 0L7.5 12m4.5 4.5V3\"\n  }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(ArrowDownTrayIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction ArrowPathIcon({\n  title,\n  titleId,\n  ...props\n}, svgRef) {\n  return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    fill: \"none\",\n    viewBox: \"0 0 24 24\",\n    strokeWidth: 1.5,\n    stroke: \"currentColor\",\n    \"aria-hidden\": \"true\",\n    \"data-slot\": \"icon\",\n    ref: svgRef,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n    strokeLinecap: \"round\",\n    strokeLinejoin: \"round\",\n    d: \"M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0 3.181 3.183a8.25 8.25 0 0 0 13.803-3.7M4.031 9.865a8.25 8.25 0 0 1 13.803-3.7l3.181 3.182m0-4.991v4.99\"\n  }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(ArrowPathIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction ArrowUpTrayIcon({\n  title,\n  titleId,\n  ...props\n}, svgRef) {\n  return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    fill: \"none\",\n    viewBox: \"0 0 24 24\",\n    strokeWidth: 1.5,\n    stroke: \"currentColor\",\n    \"aria-hidden\": \"true\",\n    \"data-slot\": \"icon\",\n    ref: svgRef,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n    strokeLinecap: \"round\",\n    strokeLinejoin: \"round\",\n    d: \"M3 16.5v2.25A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75V16.5m-13.5-9L12 3m0 0 4.5 4.5M12 3v13.5\"\n  }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(ArrowUpTrayIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction ClockIcon({\n  title,\n  titleId,\n  ...props\n}, svgRef) {\n  return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    fill: \"none\",\n    viewBox: \"0 0 24 24\",\n    strokeWidth: 1.5,\n    stroke: \"currentColor\",\n    \"aria-hidden\": \"true\",\n    \"data-slot\": \"icon\",\n    ref: svgRef,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n    strokeLinecap: \"round\",\n    strokeLinejoin: \"round\",\n    d: \"M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z\"\n  }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(ClockIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction FolderPlusIcon({\n  title,\n  titleId,\n  ...props\n}, svgRef) {\n  return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    fill: \"none\",\n    viewBox: \"0 0 24 24\",\n    strokeWidth: 1.5,\n    stroke: \"currentColor\",\n    \"aria-hidden\": \"true\",\n    \"data-slot\": \"icon\",\n    ref: svgRef,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n    strokeLinecap: \"round\",\n    strokeLinejoin: \"round\",\n    d: \"M12 10.5v6m3-3H9m4.06-7.19-2.12-2.12a1.5 1.5 0 0 0-1.061-.44H4.5A2.25 2.25 0 0 0 2.25 6v12a2.25 2.25 0 0 0 2.25 2.25h15A2.25 2.25 0 0 0 21.75 18V9a2.25 2.25 0 0 0-2.25-2.25h-5.379a1.5 1.5 0 0 1-1.06-.44Z\"\n  }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(FolderPlusIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction FolderIcon({\n  title,\n  titleId,\n  ...props\n}, svgRef) {\n  return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    fill: \"none\",\n    viewBox: \"0 0 24 24\",\n    strokeWidth: 1.5,\n    stroke: \"currentColor\",\n    \"aria-hidden\": \"true\",\n    \"data-slot\": \"icon\",\n    ref: svgRef,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n    strokeLinecap: \"round\",\n    strokeLinejoin: \"round\",\n    d: \"M2.25 12.75V12A2.25 2.25 0 0 1 4.5 9.75h15A2.25 2.25 0 0 1 21.75 12v.75m-8.69-6.44-2.12-2.12a1.5 1.5 0 0 0-1.061-.44H4.5A2.25 2.25 0 0 0 2.25 6v12a2.25 2.25 0 0 0 2.25 2.25h15A2.25 2.25 0 0 0 21.75 18V9a2.25 2.25 0 0 0-2.25-2.25h-5.379a1.5 1.5 0 0 1-1.06-.44Z\"\n  }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(FolderIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction GlobeAltIcon({\n  title,\n  titleId,\n  ...props\n}, svgRef) {\n  return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    fill: \"none\",\n    viewBox: \"0 0 24 24\",\n    strokeWidth: 1.5,\n    stroke: \"currentColor\",\n    \"aria-hidden\": \"true\",\n    \"data-slot\": \"icon\",\n    ref: svgRef,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n    strokeLinecap: \"round\",\n    strokeLinejoin: \"round\",\n    d: \"M12 21a9.004 9.004 0 0 0 8.716-6.747M12 21a9.004 9.004 0 0 1-8.716-6.747M12 21c2.485 0 4.5-4.03 4.5-9S14.485 3 12 3m0 18c-2.485 0-4.5-4.03-4.5-9S9.515 3 12 3m0 0a8.997 8.997 0 0 1 7.843 4.582M12 3a8.997 8.997 0 0 0-7.843 4.582m15.686 0A11.953 11.953 0 0 1 12 10.5c-2.998 0-5.74-1.1-7.843-2.918m15.686 0A8.959 8.959 0 0 1 21 12c0 .778-.099 1.533-.284 2.253m0 0A17.919 17.919 0 0 1 12 16.5c-3.162 0-6.133-.815-8.716-2.247m0 0A9.015 9.015 0 0 1 3 12c0-1.605.42-3.113 1.157-4.418\"\n  }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(GlobeAltIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction PencilIcon({\n  title,\n  titleId,\n  ...props\n}, svgRef) {\n  return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    fill: \"none\",\n    viewBox: \"0 0 24 24\",\n    strokeWidth: 1.5,\n    stroke: \"currentColor\",\n    \"aria-hidden\": \"true\",\n    \"data-slot\": \"icon\",\n    ref: svgRef,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n    strokeLinecap: \"round\",\n    strokeLinejoin: \"round\",\n    d: \"m16.862 4.487 1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8.8-2.685a4.5 4.5 0 0 1 1.13-1.897L16.863 4.487Zm0 0L19.5 7.125\"\n  }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(PencilIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction PlusIcon({\n  title,\n  titleId,\n  ...props\n}, svgRef) {\n  return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    fill: \"none\",\n    viewBox: \"0 0 24 24\",\n    strokeWidth: 1.5,\n    stroke: \"currentColor\",\n    \"aria-hidden\": \"true\",\n    \"data-slot\": \"icon\",\n    ref: svgRef,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n    strokeLinecap: \"round\",\n    strokeLinejoin: \"round\",\n    d: \"M12 4.5v15m7.5-7.5h-15\"\n  }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(PlusIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction ShareIcon({\n  title,\n  titleId,\n  ...props\n}, svgRef) {\n  return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    fill: \"none\",\n    viewBox: \"0 0 24 24\",\n    strokeWidth: 1.5,\n    stroke: \"currentColor\",\n    \"aria-hidden\": \"true\",\n    \"data-slot\": \"icon\",\n    ref: svgRef,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n    strokeLinecap: \"round\",\n    strokeLinejoin: \"round\",\n    d: \"M7.217 10.907a2.25 2.25 0 1 0 0 2.186m0-2.186c.18.324.283.696.283 1.093s-.103.77-.283 1.093m0-2.186 9.566-5.314m-9.566 7.5 9.566 5.314m0 0a2.25 2.25 0 1 0 3.935 2.186 2.25 2.25 0 0 0-3.935-2.186Zm0-12.814a2.25 2.25 0 1 0 3.933-2.185 2.25 2.25 0 0 0-3.933 2.185Z\"\n  }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(ShareIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction StopIcon({\n  title,\n  titleId,\n  ...props\n}, svgRef) {\n  return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    fill: \"none\",\n    viewBox: \"0 0 24 24\",\n    strokeWidth: 1.5,\n    stroke: \"currentColor\",\n    \"aria-hidden\": \"true\",\n    \"data-slot\": \"icon\",\n    ref: svgRef,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n    strokeLinecap: \"round\",\n    strokeLinejoin: \"round\",\n    d: \"M5.25 7.5A2.25 2.25 0 0 1 7.5 5.25h9a2.25 2.25 0 0 1 2.25 2.25v9a2.25 2.25 0 0 1-2.25 2.25h-9a2.25 2.25 0 0 1-2.25-2.25v-9Z\"\n  }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(StopIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction TrashIcon({\n  title,\n  titleId,\n  ...props\n}, svgRef) {\n  return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    fill: \"none\",\n    viewBox: \"0 0 24 24\",\n    strokeWidth: 1.5,\n    stroke: \"currentColor\",\n    \"aria-hidden\": \"true\",\n    \"data-slot\": \"icon\",\n    ref: svgRef,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n    strokeLinecap: \"round\",\n    strokeLinejoin: \"round\",\n    d: \"m14.74 9-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 0 1-2.244 2.077H8.084a2.25 2.25 0 0 1-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 0 0-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 0 1 3.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 0 0-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 0 0-7.5 0\"\n  }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(TrashIcon);\nexport default ForwardRef;","// src/primitive.tsx\nvar canUseDOM = !!(typeof window !== \"undefined\" && window.document && window.document.createElement);\nfunction composeEventHandlers(originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) {\n  return function handleEvent(event) {\n    originalEventHandler?.(event);\n    if (checkForDefaultPrevented === false || !event.defaultPrevented) {\n      return ourEventHandler?.(event);\n    }\n  };\n}\nfunction getOwnerWindow(element) {\n  if (!canUseDOM) {\n    throw new Error(\"Cannot access window outside of the DOM\");\n  }\n  return element?.ownerDocument?.defaultView ?? window;\n}\nfunction getOwnerDocument(element) {\n  if (!canUseDOM) {\n    throw new Error(\"Cannot access document outside of the DOM\");\n  }\n  return element?.ownerDocument ?? document;\n}\nfunction getActiveElement(node, activeDescendant = false) {\n  const { activeElement } = getOwnerDocument(node);\n  if (!activeElement?.nodeName) {\n    return null;\n  }\n  if (isFrame(activeElement) && activeElement.contentDocument) {\n    return getActiveElement(activeElement.contentDocument.body, activeDescendant);\n  }\n  if (activeDescendant) {\n    const id = activeElement.getAttribute(\"aria-activedescendant\");\n    if (id) {\n      const element = getOwnerDocument(activeElement).getElementById(id);\n      if (element) {\n        return element;\n      }\n    }\n  }\n  return activeElement;\n}\nfunction isFrame(element) {\n  return element.tagName === \"IFRAME\";\n}\nexport {\n  canUseDOM,\n  composeEventHandlers,\n  getActiveElement,\n  getOwnerDocument,\n  getOwnerWindow,\n  isFrame\n};\n//# sourceMappingURL=index.mjs.map\n","// src/compose-refs.tsx\nimport * as React from \"react\";\nfunction setRef(ref, value) {\n  if (typeof ref === \"function\") {\n    return ref(value);\n  } else if (ref !== null && ref !== void 0) {\n    ref.current = value;\n  }\n}\nfunction composeRefs(...refs) {\n  return (node) => {\n    let hasCleanup = false;\n    const cleanups = refs.map((ref) => {\n      const cleanup = setRef(ref, node);\n      if (!hasCleanup && typeof cleanup == \"function\") {\n        hasCleanup = true;\n      }\n      return cleanup;\n    });\n    if (hasCleanup) {\n      return () => {\n        for (let i = 0; i < cleanups.length; i++) {\n          const cleanup = cleanups[i];\n          if (typeof cleanup == \"function\") {\n            cleanup();\n          } else {\n            setRef(refs[i], null);\n          }\n        }\n      };\n    }\n  };\n}\nfunction useComposedRefs(...refs) {\n  return React.useCallback(composeRefs(...refs), refs);\n}\nexport {\n  composeRefs,\n  useComposedRefs\n};\n//# sourceMappingURL=index.mjs.map\n","// src/create-context.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createContext2(rootComponentName, defaultContext) {\n  const Context = React.createContext(defaultContext);\n  Context.displayName = rootComponentName + \"Context\";\n  const Provider = (props) => {\n    const { children, ...context } = props;\n    const value = React.useMemo(() => context, Object.values(context));\n    return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n  };\n  Provider.displayName = rootComponentName + \"Provider\";\n  function useContext2(consumerName) {\n    const context = React.useContext(Context);\n    if (context) return context;\n    if (defaultContext !== void 0) return defaultContext;\n    throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n  }\n  return [Provider, useContext2];\n}\nfunction createContextScope(scopeName, createContextScopeDeps = []) {\n  let defaultContexts = [];\n  function createContext3(rootComponentName, defaultContext) {\n    const BaseContext = React.createContext(defaultContext);\n    BaseContext.displayName = rootComponentName + \"Context\";\n    const index = defaultContexts.length;\n    defaultContexts = [...defaultContexts, defaultContext];\n    const Provider = (props) => {\n      const { scope, children, ...context } = props;\n      const Context = scope?.[scopeName]?.[index] || BaseContext;\n      const value = React.useMemo(() => context, Object.values(context));\n      return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n    };\n    Provider.displayName = rootComponentName + \"Provider\";\n    function useContext2(consumerName, scope) {\n      const Context = scope?.[scopeName]?.[index] || BaseContext;\n      const context = React.useContext(Context);\n      if (context) return context;\n      if (defaultContext !== void 0) return defaultContext;\n      throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n    }\n    return [Provider, useContext2];\n  }\n  const createScope = () => {\n    const scopeContexts = defaultContexts.map((defaultContext) => {\n      return React.createContext(defaultContext);\n    });\n    return function useScope(scope) {\n      const contexts = scope?.[scopeName] || scopeContexts;\n      return React.useMemo(\n        () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n        [scope, contexts]\n      );\n    };\n  };\n  createScope.scopeName = scopeName;\n  return [createContext3, composeContextScopes(createScope, ...createContextScopeDeps)];\n}\nfunction composeContextScopes(...scopes) {\n  const baseScope = scopes[0];\n  if (scopes.length === 1) return baseScope;\n  const createScope = () => {\n    const scopeHooks = scopes.map((createScope2) => ({\n      useScope: createScope2(),\n      scopeName: createScope2.scopeName\n    }));\n    return function useComposedScopes(overrideScopes) {\n      const nextScopes = scopeHooks.reduce((nextScopes2, { useScope, scopeName }) => {\n        const scopeProps = useScope(overrideScopes);\n        const currentScope = scopeProps[`__scope${scopeName}`];\n        return { ...nextScopes2, ...currentScope };\n      }, {});\n      return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n    };\n  };\n  createScope.scopeName = baseScope.scopeName;\n  return createScope;\n}\nexport {\n  createContext2 as createContext,\n  createContextScope\n};\n//# sourceMappingURL=index.mjs.map\n","// src/use-layout-effect.tsx\nimport * as React from \"react\";\nvar useLayoutEffect2 = globalThis?.document ? React.useLayoutEffect : () => {\n};\nexport {\n  useLayoutEffect2 as useLayoutEffect\n};\n//# sourceMappingURL=index.mjs.map\n","// src/id.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nvar useReactId = React[\" useId \".trim().toString()] || (() => void 0);\nvar count = 0;\nfunction useId(deterministicId) {\n  const [id, setId] = React.useState(useReactId());\n  useLayoutEffect(() => {\n    if (!deterministicId) setId((reactId) => reactId ?? String(count++));\n  }, [deterministicId]);\n  return deterministicId || (id ? `radix-${id}` : \"\");\n}\nexport {\n  useId\n};\n//# sourceMappingURL=index.mjs.map\n","// src/use-effect-event.tsx\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport * as React from \"react\";\nvar useReactEffectEvent = React[\" useEffectEvent \".trim().toString()];\nvar useReactInsertionEffect = React[\" useInsertionEffect \".trim().toString()];\nfunction useEffectEvent(callback) {\n  if (typeof useReactEffectEvent === \"function\") {\n    return useReactEffectEvent(callback);\n  }\n  const ref = React.useRef(() => {\n    throw new Error(\"Cannot call an event handler while rendering.\");\n  });\n  if (typeof useReactInsertionEffect === \"function\") {\n    useReactInsertionEffect(() => {\n      ref.current = callback;\n    });\n  } else {\n    useLayoutEffect(() => {\n      ref.current = callback;\n    });\n  }\n  return React.useMemo(() => ((...args) => ref.current?.(...args)), []);\n}\nexport {\n  useEffectEvent\n};\n//# sourceMappingURL=index.mjs.map\n","// src/use-controllable-state.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nvar useInsertionEffect = React[\" useInsertionEffect \".trim().toString()] || useLayoutEffect;\nfunction useControllableState({\n  prop,\n  defaultProp,\n  onChange = () => {\n  },\n  caller\n}) {\n  const [uncontrolledProp, setUncontrolledProp, onChangeRef] = useUncontrolledState({\n    defaultProp,\n    onChange\n  });\n  const isControlled = prop !== void 0;\n  const value = isControlled ? prop : uncontrolledProp;\n  if (true) {\n    const isControlledRef = React.useRef(prop !== void 0);\n    React.useEffect(() => {\n      const wasControlled = isControlledRef.current;\n      if (wasControlled !== isControlled) {\n        const from = wasControlled ? \"controlled\" : \"uncontrolled\";\n        const to = isControlled ? \"controlled\" : \"uncontrolled\";\n        console.warn(\n          `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n        );\n      }\n      isControlledRef.current = isControlled;\n    }, [isControlled, caller]);\n  }\n  const setValue = React.useCallback(\n    (nextValue) => {\n      if (isControlled) {\n        const value2 = isFunction(nextValue) ? nextValue(prop) : nextValue;\n        if (value2 !== prop) {\n          onChangeRef.current?.(value2);\n        }\n      } else {\n        setUncontrolledProp(nextValue);\n      }\n    },\n    [isControlled, prop, setUncontrolledProp, onChangeRef]\n  );\n  return [value, setValue];\n}\nfunction useUncontrolledState({\n  defaultProp,\n  onChange\n}) {\n  const [value, setValue] = React.useState(defaultProp);\n  const prevValueRef = React.useRef(value);\n  const onChangeRef = React.useRef(onChange);\n  useInsertionEffect(() => {\n    onChangeRef.current = onChange;\n  }, [onChange]);\n  React.useEffect(() => {\n    if (prevValueRef.current !== value) {\n      onChangeRef.current?.(value);\n      prevValueRef.current = value;\n    }\n  }, [value, prevValueRef]);\n  return [value, setValue, onChangeRef];\n}\nfunction isFunction(value) {\n  return typeof value === \"function\";\n}\n\n// src/use-controllable-state-reducer.tsx\nimport * as React2 from \"react\";\nimport { useEffectEvent } from \"@radix-ui/react-use-effect-event\";\nvar SYNC_STATE = Symbol(\"RADIX:SYNC_STATE\");\nfunction useControllableStateReducer(reducer, userArgs, initialArg, init) {\n  const { prop: controlledState, defaultProp, onChange: onChangeProp, caller } = userArgs;\n  const isControlled = controlledState !== void 0;\n  const onChange = useEffectEvent(onChangeProp);\n  if (true) {\n    const isControlledRef = React2.useRef(controlledState !== void 0);\n    React2.useEffect(() => {\n      const wasControlled = isControlledRef.current;\n      if (wasControlled !== isControlled) {\n        const from = wasControlled ? \"controlled\" : \"uncontrolled\";\n        const to = isControlled ? \"controlled\" : \"uncontrolled\";\n        console.warn(\n          `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n        );\n      }\n      isControlledRef.current = isControlled;\n    }, [isControlled, caller]);\n  }\n  const args = [{ ...initialArg, state: defaultProp }];\n  if (init) {\n    args.push(init);\n  }\n  const [internalState, dispatch] = React2.useReducer(\n    (state2, action) => {\n      if (action.type === SYNC_STATE) {\n        return { ...state2, state: action.state };\n      }\n      const next = reducer(state2, action);\n      if (isControlled && !Object.is(next.state, state2.state)) {\n        onChange(next.state);\n      }\n      return next;\n    },\n    ...args\n  );\n  const uncontrolledState = internalState.state;\n  const prevValueRef = React2.useRef(uncontrolledState);\n  React2.useEffect(() => {\n    if (prevValueRef.current !== uncontrolledState) {\n      prevValueRef.current = uncontrolledState;\n      if (!isControlled) {\n        onChange(uncontrolledState);\n      }\n    }\n  }, [uncontrolledState, prevValueRef, isControlled]);\n  const state = React2.useMemo(() => {\n    const isControlled2 = controlledState !== void 0;\n    if (isControlled2) {\n      return { ...internalState, state: controlledState };\n    }\n    return internalState;\n  }, [internalState, controlledState]);\n  React2.useEffect(() => {\n    if (isControlled && !Object.is(controlledState, internalState.state)) {\n      dispatch({ type: SYNC_STATE, state: controlledState });\n    }\n  }, [controlledState, internalState.state, isControlled]);\n  return [state, dispatch];\n}\nexport {\n  useControllableState,\n  useControllableStateReducer\n};\n//# sourceMappingURL=index.mjs.map\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n  const Slot2 = React.forwardRef((props, forwardedRef) => {\n    let { children, ...slotProps } = props;\n    let slottableElement = null;\n    let hasSlottable = false;\n    const newChildren = [];\n    if (isLazyComponent(children) && typeof use === \"function\") {\n      children = use(children._payload);\n    }\n    React.Children.forEach(children, (maybeSlottable) => {\n      if (isSlottable(maybeSlottable)) {\n        hasSlottable = true;\n        const slottable = maybeSlottable;\n        let child = \"child\" in slottable.props ? slottable.props.child : slottable.props.children;\n        if (isLazyComponent(child) && typeof use === \"function\") {\n          child = use(child._payload);\n        }\n        slottableElement = getSlottableElementFromSlottable(slottable, child);\n        newChildren.push(slottableElement?.props?.children);\n      } else {\n        newChildren.push(maybeSlottable);\n      }\n    });\n    if (slottableElement) {\n      slottableElement = React.cloneElement(slottableElement, void 0, newChildren);\n    } else if (\n      // A `Slottable` was found but it didn't resolve to a single element (e.g.\n      // it wrapped multiple elements, text, or a render-prop `child` that\n      // wasn't an element). Don't fall back to treating the `Slottable` wrapper\n      // itself as the slot target — throw a descriptive error below instead.\n      !hasSlottable && React.Children.count(children) === 1 && React.isValidElement(children)\n    ) {\n      slottableElement = children;\n    }\n    const slottableElementRef = slottableElement ? getElementRef(slottableElement) : void 0;\n    const composedRef = useComposedRefs(forwardedRef, slottableElementRef);\n    if (!slottableElement) {\n      if (children || children === 0) {\n        throw new Error(\n          hasSlottable ? createSlottableError(ownerName) : createSlotError(ownerName)\n        );\n      }\n      return children;\n    }\n    const mergedProps = mergeProps(slotProps, slottableElement.props ?? {});\n    if (slottableElement.type !== React.Fragment) {\n      mergedProps.ref = forwardedRef ? composedRef : slottableElementRef;\n    }\n    return React.cloneElement(slottableElement, mergedProps);\n  });\n  Slot2.displayName = `${ownerName}.Slot`;\n  return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\nvar SLOTTABLE_IDENTIFIER = Symbol.for(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n  const Slottable2 = (props) => \"child\" in props ? props.children(props.child) : props.children;\n  Slottable2.displayName = `${ownerName}.Slottable`;\n  Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n  return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nvar getSlottableElementFromSlottable = (slottable, child) => {\n  if (\"child\" in slottable.props) {\n    const child2 = slottable.props.child;\n    if (!React.isValidElement(child2)) return null;\n    return React.cloneElement(child2, void 0, slottable.props.children(child2.props.children));\n  }\n  return React.isValidElement(child) ? child : null;\n};\nfunction mergeProps(slotProps, childProps) {\n  const overrideProps = { ...childProps };\n  for (const propName in childProps) {\n    const slotPropValue = slotProps[propName];\n    const childPropValue = childProps[propName];\n    const isHandler = /^on[A-Z]/.test(propName);\n    if (isHandler) {\n      if (slotPropValue && childPropValue) {\n        overrideProps[propName] = (...args) => {\n          const result = childPropValue(...args);\n          slotPropValue(...args);\n          return result;\n        };\n      } else if (slotPropValue) {\n        overrideProps[propName] = slotPropValue;\n      }\n    } else if (propName === \"style\") {\n      overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n    } else if (propName === \"className\") {\n      overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n    }\n  }\n  return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n  let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n  let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n  if (mayWarn) {\n    return element.ref;\n  }\n  getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n  mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n  if (mayWarn) {\n    return element.props.ref;\n  }\n  return element.props.ref || element.ref;\n}\nfunction isSlottable(child) {\n  return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nvar REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\nfunction isLazyComponent(element) {\n  return element != null && typeof element === \"object\" && \"$$typeof\" in element && element.$$typeof === REACT_LAZY_TYPE && \"_payload\" in element && isPromiseLike(element._payload);\n}\nfunction isPromiseLike(value) {\n  return typeof value === \"object\" && value !== null && \"then\" in value;\n}\nvar createSlotError = (ownerName) => {\n  return `${ownerName} failed to slot onto its children. Expected a single React element child or \\`Slottable\\`.`;\n};\nvar createSlottableError = (ownerName) => {\n  return `${ownerName} failed to slot onto its \\`Slottable\\`. Expected \\`Slottable\\` to receive a single React element child.`;\n};\nvar use = React[\" use \".trim().toString()];\nexport {\n  Slot as Root,\n  Slot,\n  Slottable,\n  createSlot,\n  createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","// src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n  \"a\",\n  \"button\",\n  \"div\",\n  \"form\",\n  \"h2\",\n  \"h3\",\n  \"img\",\n  \"input\",\n  \"label\",\n  \"li\",\n  \"nav\",\n  \"ol\",\n  \"p\",\n  \"select\",\n  \"span\",\n  \"svg\",\n  \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n  const Slot = createSlot(`Primitive.${node}`);\n  const Node = React.forwardRef((props, forwardedRef) => {\n    const { asChild, ...primitiveProps } = props;\n    const Comp = asChild ? Slot : node;\n    if (typeof window !== \"undefined\") {\n      window[Symbol.for(\"radix-ui\")] = true;\n    }\n    return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n  });\n  Node.displayName = `Primitive.${node}`;\n  return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n  if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\nvar Root = Primitive;\nexport {\n  Primitive,\n  Root,\n  dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","// src/use-callback-ref.tsx\nimport * as React from \"react\";\nfunction useCallbackRef(callback) {\n  const callbackRef = React.useRef(callback);\n  React.useEffect(() => {\n    callbackRef.current = callback;\n  });\n  return React.useMemo(() => ((...args) => callbackRef.current?.(...args)), []);\n}\nexport {\n  useCallbackRef\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/dismissable-layer.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { Primitive, dispatchDiscreteCustomEvent } from \"@radix-ui/react-primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useEffectEvent } from \"@radix-ui/react-use-effect-event\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DISMISSABLE_LAYER_NAME = \"DismissableLayer\";\nvar CONTEXT_UPDATE = \"dismissableLayer.update\";\nvar POINTER_DOWN_OUTSIDE = \"dismissableLayer.pointerDownOutside\";\nvar FOCUS_OUTSIDE = \"dismissableLayer.focusOutside\";\nvar originalBodyPointerEvents;\nvar DismissableLayerContext = React.createContext({\n  layers: /* @__PURE__ */ new Set(),\n  layersWithOutsidePointerEventsDisabled: /* @__PURE__ */ new Set(),\n  branches: /* @__PURE__ */ new Set(),\n  // Outside elements that belong to a layer's own dismiss affordance (eg, a\n  // dialog overlay). Pressing them should dismiss the layer regardless of\n  // whether or not they stop propagation.\n  //\n  // See https://github.com/radix-ui/primitives/issues/3346\n  dismissableSurfaces: /* @__PURE__ */ new Set()\n});\nvar DismissableLayer = React.forwardRef(\n  (props, forwardedRef) => {\n    const {\n      disableOutsidePointerEvents = false,\n      deferPointerDownOutside = false,\n      onEscapeKeyDown,\n      onPointerDownOutside,\n      onFocusOutside,\n      onInteractOutside,\n      onDismiss,\n      ...layerProps\n    } = props;\n    const context = React.useContext(DismissableLayerContext);\n    const [node, setNode] = React.useState(null);\n    const ownerDocument = node?.ownerDocument ?? globalThis?.document;\n    const [, force] = React.useState({});\n    const composedRefs = useComposedRefs(forwardedRef, setNode);\n    const layers = Array.from(context.layers);\n    const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1);\n    const highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled);\n    const index = node ? layers.indexOf(node) : -1;\n    const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0;\n    const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex;\n    const isDeferredPointerDownOutsideRef = React.useRef(false);\n    const pointerDownOutside = usePointerDownOutside(\n      (event) => {\n        const target = event.target;\n        if (!(target instanceof Node)) {\n          return;\n        }\n        const isPointerDownOnBranch = [...context.branches].some(\n          (branch) => branch.contains(target)\n        );\n        if (!isPointerEventsEnabled || isPointerDownOnBranch) return;\n        onPointerDownOutside?.(event);\n        onInteractOutside?.(event);\n        if (!event.defaultPrevented) onDismiss?.();\n      },\n      {\n        ownerDocument,\n        deferPointerDownOutside,\n        isDeferredPointerDownOutsideRef,\n        dismissableSurfaces: context.dismissableSurfaces\n      }\n    );\n    const focusOutside = useFocusOutside((event) => {\n      if (deferPointerDownOutside && isDeferredPointerDownOutsideRef.current) {\n        return;\n      }\n      const target = event.target;\n      const isFocusInBranch = [...context.branches].some((branch) => branch.contains(target));\n      if (isFocusInBranch) return;\n      onFocusOutside?.(event);\n      onInteractOutside?.(event);\n      if (!event.defaultPrevented) onDismiss?.();\n    }, ownerDocument);\n    const isHighestLayer = node ? index === layers.length - 1 : false;\n    const handleKeyDown = useEffectEvent((event) => {\n      if (event.key !== \"Escape\") {\n        return;\n      }\n      onEscapeKeyDown?.(event);\n      if (!event.defaultPrevented && onDismiss) {\n        event.preventDefault();\n        onDismiss();\n      }\n    });\n    React.useEffect(() => {\n      if (!isHighestLayer) {\n        return;\n      }\n      ownerDocument.addEventListener(\"keydown\", handleKeyDown, { capture: true });\n      return () => ownerDocument.removeEventListener(\"keydown\", handleKeyDown, { capture: true });\n    }, [ownerDocument, isHighestLayer]);\n    React.useEffect(() => {\n      if (!node) return;\n      if (disableOutsidePointerEvents) {\n        if (context.layersWithOutsidePointerEventsDisabled.size === 0) {\n          originalBodyPointerEvents = ownerDocument.body.style.pointerEvents;\n          ownerDocument.body.style.pointerEvents = \"none\";\n        }\n        context.layersWithOutsidePointerEventsDisabled.add(node);\n      }\n      context.layers.add(node);\n      dispatchUpdate();\n      return () => {\n        if (disableOutsidePointerEvents) {\n          context.layersWithOutsidePointerEventsDisabled.delete(node);\n          if (context.layersWithOutsidePointerEventsDisabled.size === 0) {\n            ownerDocument.body.style.pointerEvents = originalBodyPointerEvents;\n          }\n        }\n      };\n    }, [node, ownerDocument, disableOutsidePointerEvents, context]);\n    React.useEffect(() => {\n      return () => {\n        if (!node) return;\n        context.layers.delete(node);\n        context.layersWithOutsidePointerEventsDisabled.delete(node);\n        dispatchUpdate();\n      };\n    }, [node, context]);\n    React.useEffect(() => {\n      const handleUpdate = () => force({});\n      document.addEventListener(CONTEXT_UPDATE, handleUpdate);\n      return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);\n    }, []);\n    return /* @__PURE__ */ jsx(\n      Primitive.div,\n      {\n        ...layerProps,\n        ref: composedRefs,\n        style: {\n          pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? \"auto\" : \"none\" : void 0,\n          ...props.style\n        },\n        onFocusCapture: composeEventHandlers(props.onFocusCapture, focusOutside.onFocusCapture),\n        onBlurCapture: composeEventHandlers(props.onBlurCapture, focusOutside.onBlurCapture),\n        onPointerDownCapture: composeEventHandlers(\n          props.onPointerDownCapture,\n          pointerDownOutside.onPointerDownCapture\n        )\n      }\n    );\n  }\n);\nDismissableLayer.displayName = DISMISSABLE_LAYER_NAME;\nvar BRANCH_NAME = \"DismissableLayerBranch\";\nvar DismissableLayerBranch = React.forwardRef((props, forwardedRef) => {\n  const context = React.useContext(DismissableLayerContext);\n  const ref = React.useRef(null);\n  const composedRefs = useComposedRefs(forwardedRef, ref);\n  React.useEffect(() => {\n    const node = ref.current;\n    if (node) {\n      context.branches.add(node);\n      return () => {\n        context.branches.delete(node);\n      };\n    }\n  }, [context.branches]);\n  return /* @__PURE__ */ jsx(Primitive.div, { ...props, ref: composedRefs });\n});\nDismissableLayerBranch.displayName = BRANCH_NAME;\nfunction useDismissableLayerSurface() {\n  const context = React.useContext(DismissableLayerContext);\n  const [node, setNode] = React.useState(null);\n  React.useEffect(() => {\n    if (!node) {\n      return;\n    }\n    context.dismissableSurfaces.add(node);\n    return () => {\n      context.dismissableSurfaces.delete(node);\n    };\n  }, [node, context.dismissableSurfaces]);\n  return setNode;\n}\nfunction usePointerDownOutside(onPointerDownOutside, args) {\n  const {\n    ownerDocument = globalThis?.document,\n    deferPointerDownOutside = false,\n    isDeferredPointerDownOutsideRef,\n    dismissableSurfaces\n  } = args;\n  const handlePointerDownOutside = useCallbackRef(onPointerDownOutside);\n  const isPointerInsideReactTreeRef = React.useRef(false);\n  const isPointerDownOutsideRef = React.useRef(false);\n  const interceptedOutsideInteractionEventsRef = React.useRef(/* @__PURE__ */ new Map());\n  const handleClickRef = React.useRef(() => {\n  });\n  React.useEffect(() => {\n    function resetOutsideInteraction() {\n      isPointerDownOutsideRef.current = false;\n      isDeferredPointerDownOutsideRef.current = false;\n      interceptedOutsideInteractionEventsRef.current.clear();\n    }\n    function isOutsideInteractionIntercepted() {\n      return Array.from(interceptedOutsideInteractionEventsRef.current.values()).some(Boolean);\n    }\n    function handleInteractionCapture(event) {\n      if (!isPointerDownOutsideRef.current) {\n        return;\n      }\n      const target = event.target;\n      const isDismissableSurface = target instanceof Node && [...dismissableSurfaces].some((surface) => surface.contains(target));\n      if (!isDismissableSurface) {\n        interceptedOutsideInteractionEventsRef.current.set(event.type, true);\n      }\n      if (event.type === \"click\") {\n        window.setTimeout(() => {\n          if (isPointerDownOutsideRef.current) {\n            handleClickRef.current();\n          }\n        }, 0);\n      }\n    }\n    function handleInteractionBubble(event) {\n      if (isPointerDownOutsideRef.current) {\n        interceptedOutsideInteractionEventsRef.current.set(event.type, false);\n      }\n    }\n    const handlePointerDown = (event) => {\n      if (event.target && !isPointerInsideReactTreeRef.current) {\n        let handleAndDispatchPointerDownOutsideEvent2 = function() {\n          ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n          const wasOutsideInteractionIntercepted = isOutsideInteractionIntercepted();\n          resetOutsideInteraction();\n          if (!wasOutsideInteractionIntercepted) {\n            handleAndDispatchCustomEvent(\n              POINTER_DOWN_OUTSIDE,\n              handlePointerDownOutside,\n              eventDetail,\n              { discrete: true }\n            );\n          }\n        };\n        var handleAndDispatchPointerDownOutsideEvent = handleAndDispatchPointerDownOutsideEvent2;\n        const eventDetail = { originalEvent: event };\n        isPointerDownOutsideRef.current = true;\n        isDeferredPointerDownOutsideRef.current = deferPointerDownOutside && event.button === 0;\n        interceptedOutsideInteractionEventsRef.current.clear();\n        if (!deferPointerDownOutside || event.button !== 0) {\n          handleAndDispatchPointerDownOutsideEvent2();\n        } else {\n          ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n          handleClickRef.current = handleAndDispatchPointerDownOutsideEvent2;\n          ownerDocument.addEventListener(\"click\", handleClickRef.current, { once: true });\n        }\n      } else {\n        ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n        resetOutsideInteraction();\n      }\n      isPointerInsideReactTreeRef.current = false;\n    };\n    const outsideInteractionEvents = [\n      \"pointerup\",\n      \"mousedown\",\n      \"mouseup\",\n      \"touchstart\",\n      \"touchend\",\n      \"click\"\n    ];\n    for (const eventName of outsideInteractionEvents) {\n      ownerDocument.addEventListener(eventName, handleInteractionCapture, true);\n      ownerDocument.addEventListener(eventName, handleInteractionBubble);\n    }\n    const timerId = window.setTimeout(() => {\n      ownerDocument.addEventListener(\"pointerdown\", handlePointerDown);\n    }, 0);\n    return () => {\n      window.clearTimeout(timerId);\n      ownerDocument.removeEventListener(\"pointerdown\", handlePointerDown);\n      ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n      for (const eventName of outsideInteractionEvents) {\n        ownerDocument.removeEventListener(eventName, handleInteractionCapture, true);\n        ownerDocument.removeEventListener(eventName, handleInteractionBubble);\n      }\n    };\n  }, [\n    ownerDocument,\n    handlePointerDownOutside,\n    deferPointerDownOutside,\n    isDeferredPointerDownOutsideRef,\n    dismissableSurfaces\n  ]);\n  return {\n    // ensures we check React component tree (not just DOM tree)\n    onPointerDownCapture: () => isPointerInsideReactTreeRef.current = true\n  };\n}\nfunction useFocusOutside(onFocusOutside, ownerDocument = globalThis?.document) {\n  const handleFocusOutside = useCallbackRef(onFocusOutside);\n  const isFocusInsideReactTreeRef = React.useRef(false);\n  React.useEffect(() => {\n    const handleFocus = (event) => {\n      if (event.target && !isFocusInsideReactTreeRef.current) {\n        const eventDetail = { originalEvent: event };\n        handleAndDispatchCustomEvent(FOCUS_OUTSIDE, handleFocusOutside, eventDetail, {\n          discrete: false\n        });\n      }\n    };\n    ownerDocument.addEventListener(\"focusin\", handleFocus);\n    return () => ownerDocument.removeEventListener(\"focusin\", handleFocus);\n  }, [ownerDocument, handleFocusOutside]);\n  return {\n    onFocusCapture: () => isFocusInsideReactTreeRef.current = true,\n    onBlurCapture: () => isFocusInsideReactTreeRef.current = false\n  };\n}\nfunction dispatchUpdate() {\n  const event = new CustomEvent(CONTEXT_UPDATE);\n  document.dispatchEvent(event);\n}\nfunction handleAndDispatchCustomEvent(name, handler, detail, { discrete }) {\n  const target = detail.originalEvent.target;\n  const event = new CustomEvent(name, { bubbles: false, cancelable: true, detail });\n  if (handler) target.addEventListener(name, handler, { once: true });\n  if (discrete) {\n    dispatchDiscreteCustomEvent(target, event);\n  } else {\n    target.dispatchEvent(event);\n  }\n}\nvar Root = DismissableLayer;\nvar Branch = DismissableLayerBranch;\nexport {\n  Branch,\n  DismissableLayer,\n  DismissableLayerBranch,\n  Root,\n  useDismissableLayerSurface\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/focus-scope.tsx\nimport * as React from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { jsx } from \"react/jsx-runtime\";\nvar AUTOFOCUS_ON_MOUNT = \"focusScope.autoFocusOnMount\";\nvar AUTOFOCUS_ON_UNMOUNT = \"focusScope.autoFocusOnUnmount\";\nvar EVENT_OPTIONS = { bubbles: false, cancelable: true };\nvar FOCUS_SCOPE_NAME = \"FocusScope\";\nvar FocusScope = React.forwardRef((props, forwardedRef) => {\n  const {\n    loop = false,\n    trapped = false,\n    onMountAutoFocus: onMountAutoFocusProp,\n    onUnmountAutoFocus: onUnmountAutoFocusProp,\n    ...scopeProps\n  } = props;\n  const [container, setContainer] = React.useState(null);\n  const onMountAutoFocus = useCallbackRef(onMountAutoFocusProp);\n  const onUnmountAutoFocus = useCallbackRef(onUnmountAutoFocusProp);\n  const lastFocusedElementRef = React.useRef(null);\n  const composedRefs = useComposedRefs(forwardedRef, setContainer);\n  const focusScope = React.useRef({\n    paused: false,\n    pause() {\n      this.paused = true;\n    },\n    resume() {\n      this.paused = false;\n    }\n  }).current;\n  React.useEffect(() => {\n    if (trapped) {\n      let handleFocusIn2 = function(event) {\n        if (focusScope.paused || !container) return;\n        const target = event.target;\n        if (container.contains(target)) {\n          lastFocusedElementRef.current = target;\n        } else {\n          focus(lastFocusedElementRef.current, { select: true });\n        }\n      }, handleFocusOut2 = function(event) {\n        if (focusScope.paused || !container) return;\n        const relatedTarget = event.relatedTarget;\n        if (relatedTarget === null) return;\n        if (!container.contains(relatedTarget)) {\n          focus(lastFocusedElementRef.current, { select: true });\n        }\n      }, handleMutations2 = function(mutations) {\n        const focusedElement = document.activeElement;\n        if (focusedElement !== document.body) return;\n        for (const mutation of mutations) {\n          if (mutation.removedNodes.length > 0) focus(container);\n        }\n      };\n      var handleFocusIn = handleFocusIn2, handleFocusOut = handleFocusOut2, handleMutations = handleMutations2;\n      document.addEventListener(\"focusin\", handleFocusIn2);\n      document.addEventListener(\"focusout\", handleFocusOut2);\n      const mutationObserver = new MutationObserver(handleMutations2);\n      if (container) mutationObserver.observe(container, { childList: true, subtree: true });\n      return () => {\n        document.removeEventListener(\"focusin\", handleFocusIn2);\n        document.removeEventListener(\"focusout\", handleFocusOut2);\n        mutationObserver.disconnect();\n      };\n    }\n  }, [trapped, container, focusScope.paused]);\n  React.useEffect(() => {\n    if (container) {\n      focusScopesStack.add(focusScope);\n      const previouslyFocusedElement = document.activeElement;\n      const hasFocusedCandidate = container.contains(previouslyFocusedElement);\n      if (!hasFocusedCandidate) {\n        const mountEvent = new CustomEvent(AUTOFOCUS_ON_MOUNT, EVENT_OPTIONS);\n        container.addEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n        container.dispatchEvent(mountEvent);\n        if (!mountEvent.defaultPrevented) {\n          focusFirst(removeLinks(getTabbableCandidates(container)), { select: true });\n          if (document.activeElement === previouslyFocusedElement) {\n            focus(container);\n          }\n        }\n      }\n      return () => {\n        container.removeEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n        setTimeout(() => {\n          const unmountEvent = new CustomEvent(AUTOFOCUS_ON_UNMOUNT, EVENT_OPTIONS);\n          container.addEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n          container.dispatchEvent(unmountEvent);\n          if (!unmountEvent.defaultPrevented) {\n            focus(previouslyFocusedElement ?? document.body, { select: true });\n          }\n          container.removeEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n          focusScopesStack.remove(focusScope);\n        }, 0);\n      };\n    }\n  }, [container, onMountAutoFocus, onUnmountAutoFocus, focusScope]);\n  const handleKeyDown = React.useCallback(\n    (event) => {\n      if (!loop && !trapped) return;\n      if (focusScope.paused) return;\n      const isTabKey = event.key === \"Tab\" && !event.altKey && !event.ctrlKey && !event.metaKey;\n      const focusedElement = document.activeElement;\n      if (isTabKey && focusedElement) {\n        const container2 = event.currentTarget;\n        const [first, last] = getTabbableEdges(container2);\n        const hasTabbableElementsInside = first && last;\n        if (!hasTabbableElementsInside) {\n          if (focusedElement === container2) event.preventDefault();\n        } else {\n          if (!event.shiftKey && focusedElement === last) {\n            event.preventDefault();\n            if (loop) focus(first, { select: true });\n          } else if (event.shiftKey && focusedElement === first) {\n            event.preventDefault();\n            if (loop) focus(last, { select: true });\n          }\n        }\n      }\n    },\n    [loop, trapped, focusScope.paused]\n  );\n  return /* @__PURE__ */ jsx(Primitive.div, { tabIndex: -1, ...scopeProps, ref: composedRefs, onKeyDown: handleKeyDown });\n});\nFocusScope.displayName = FOCUS_SCOPE_NAME;\nfunction focusFirst(candidates, { select = false } = {}) {\n  const previouslyFocusedElement = document.activeElement;\n  for (const candidate of candidates) {\n    focus(candidate, { select });\n    if (document.activeElement !== previouslyFocusedElement) return;\n  }\n}\nfunction getTabbableEdges(container) {\n  const candidates = getTabbableCandidates(container);\n  const first = findVisible(candidates, container);\n  const last = findVisible(candidates.reverse(), container);\n  return [first, last];\n}\nfunction getTabbableCandidates(container) {\n  const nodes = [];\n  const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {\n    acceptNode: (node) => {\n      const isHiddenInput = node.tagName === \"INPUT\" && node.type === \"hidden\";\n      if (node.disabled || node.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP;\n      return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\n    }\n  });\n  while (walker.nextNode()) nodes.push(walker.currentNode);\n  return nodes;\n}\nfunction findVisible(elements, container) {\n  for (const element of elements) {\n    if (!isHidden(element, { upTo: container })) return element;\n  }\n}\nfunction isHidden(node, { upTo }) {\n  if (getComputedStyle(node).visibility === \"hidden\") return true;\n  while (node) {\n    if (upTo !== void 0 && node === upTo) return false;\n    if (getComputedStyle(node).display === \"none\") return true;\n    node = node.parentElement;\n  }\n  return false;\n}\nfunction isSelectableInput(element) {\n  return element instanceof HTMLInputElement && \"select\" in element;\n}\nfunction focus(element, { select = false } = {}) {\n  if (element && element.focus) {\n    const previouslyFocusedElement = document.activeElement;\n    element.focus({ preventScroll: true });\n    if (element !== previouslyFocusedElement && isSelectableInput(element) && select)\n      element.select();\n  }\n}\nvar focusScopesStack = createFocusScopesStack();\nfunction createFocusScopesStack() {\n  let stack = [];\n  return {\n    add(focusScope) {\n      const activeFocusScope = stack[0];\n      if (focusScope !== activeFocusScope) {\n        activeFocusScope?.pause();\n      }\n      stack = arrayRemove(stack, focusScope);\n      stack.unshift(focusScope);\n    },\n    remove(focusScope) {\n      stack = arrayRemove(stack, focusScope);\n      stack[0]?.resume();\n    }\n  };\n}\nfunction arrayRemove(array, item) {\n  const updatedArray = [...array];\n  const index = updatedArray.indexOf(item);\n  if (index !== -1) {\n    updatedArray.splice(index, 1);\n  }\n  return updatedArray;\n}\nfunction removeLinks(items) {\n  return items.filter((item) => item.tagName !== \"A\");\n}\nvar Root = FocusScope;\nexport {\n  FocusScope,\n  Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/portal.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { jsx } from \"react/jsx-runtime\";\nvar PORTAL_NAME = \"Portal\";\nvar Portal = React.forwardRef((props, forwardedRef) => {\n  const { container: containerProp, ...portalProps } = props;\n  const [mounted, setMounted] = React.useState(false);\n  useLayoutEffect(() => setMounted(true), []);\n  const container = containerProp || mounted && globalThis?.document?.body;\n  return container ? ReactDOM.createPortal(/* @__PURE__ */ jsx(Primitive.div, { ...portalProps, ref: forwardedRef }), container) : null;\n});\nPortal.displayName = PORTAL_NAME;\nvar Root = Portal;\nexport {\n  Portal,\n  Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/presence.tsx\nimport * as React2 from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\n\n// src/use-state-machine.tsx\nimport * as React from \"react\";\nfunction useStateMachine(initialState, machine) {\n  return React.useReducer((state, event) => {\n    const nextState = machine[state][event];\n    return nextState ?? state;\n  }, initialState);\n}\n\n// src/presence.tsx\nvar Presence = (props) => {\n  const { present, children } = props;\n  const presence = usePresence(present);\n  const child = typeof children === \"function\" ? children({ present: presence.isPresent }) : React2.Children.only(children);\n  const ref = useStableComposedRefs(presence.ref, getElementRef(child));\n  const forceMount = typeof children === \"function\";\n  return forceMount || presence.isPresent ? React2.cloneElement(child, { ref }) : null;\n};\nPresence.displayName = \"Presence\";\nfunction usePresence(present) {\n  const [node, setNode] = React2.useState();\n  const stylesRef = React2.useRef(null);\n  const prevPresentRef = React2.useRef(present);\n  const prevAnimationNameRef = React2.useRef(\"none\");\n  const initialState = present ? \"mounted\" : \"unmounted\";\n  const [state, send] = useStateMachine(initialState, {\n    mounted: {\n      UNMOUNT: \"unmounted\",\n      ANIMATION_OUT: \"unmountSuspended\"\n    },\n    unmountSuspended: {\n      MOUNT: \"mounted\",\n      ANIMATION_END: \"unmounted\"\n    },\n    unmounted: {\n      MOUNT: \"mounted\"\n    }\n  });\n  React2.useEffect(() => {\n    const currentAnimationName = getAnimationName(stylesRef.current);\n    prevAnimationNameRef.current = state === \"mounted\" ? currentAnimationName : \"none\";\n  }, [state]);\n  useLayoutEffect(() => {\n    const styles = stylesRef.current;\n    const wasPresent = prevPresentRef.current;\n    const hasPresentChanged = wasPresent !== present;\n    if (hasPresentChanged) {\n      const prevAnimationName = prevAnimationNameRef.current;\n      const currentAnimationName = getAnimationName(styles);\n      if (present) {\n        send(\"MOUNT\");\n      } else if (currentAnimationName === \"none\" || styles?.display === \"none\") {\n        send(\"UNMOUNT\");\n      } else {\n        const isAnimating = prevAnimationName !== currentAnimationName;\n        if (wasPresent && isAnimating) {\n          send(\"ANIMATION_OUT\");\n        } else {\n          send(\"UNMOUNT\");\n        }\n      }\n      prevPresentRef.current = present;\n    }\n  }, [present, send]);\n  useLayoutEffect(() => {\n    if (node) {\n      let timeoutId;\n      const ownerWindow = node.ownerDocument.defaultView ?? window;\n      const handleAnimationEnd = (event) => {\n        const currentAnimationName = getAnimationName(stylesRef.current);\n        const isCurrentAnimation = currentAnimationName.includes(CSS.escape(event.animationName));\n        if (event.target === node && isCurrentAnimation) {\n          send(\"ANIMATION_END\");\n          if (!prevPresentRef.current) {\n            const currentFillMode = node.style.animationFillMode;\n            node.style.animationFillMode = \"forwards\";\n            timeoutId = ownerWindow.setTimeout(() => {\n              if (node.style.animationFillMode === \"forwards\") {\n                node.style.animationFillMode = currentFillMode;\n              }\n            });\n          }\n        }\n      };\n      const handleAnimationStart = (event) => {\n        if (event.target === node) {\n          prevAnimationNameRef.current = getAnimationName(stylesRef.current);\n        }\n      };\n      node.addEventListener(\"animationstart\", handleAnimationStart);\n      node.addEventListener(\"animationcancel\", handleAnimationEnd);\n      node.addEventListener(\"animationend\", handleAnimationEnd);\n      return () => {\n        ownerWindow.clearTimeout(timeoutId);\n        node.removeEventListener(\"animationstart\", handleAnimationStart);\n        node.removeEventListener(\"animationcancel\", handleAnimationEnd);\n        node.removeEventListener(\"animationend\", handleAnimationEnd);\n      };\n    } else {\n      send(\"ANIMATION_END\");\n    }\n  }, [node, send]);\n  return {\n    isPresent: [\"mounted\", \"unmountSuspended\"].includes(state),\n    ref: React2.useCallback((node2) => {\n      stylesRef.current = node2 ? getComputedStyle(node2) : null;\n      setNode(node2);\n    }, [])\n  };\n}\nfunction setRef(ref, value) {\n  if (typeof ref === \"function\") {\n    return ref(value);\n  } else if (ref !== null && ref !== void 0) {\n    ref.current = value;\n  }\n}\nfunction useStableComposedRefs(...refs) {\n  const refsRef = React2.useRef(refs);\n  refsRef.current = refs;\n  return React2.useCallback((node) => {\n    const currentRefs = refsRef.current;\n    let hasCleanup = false;\n    const cleanups = currentRefs.map((ref) => {\n      const cleanup = setRef(ref, node);\n      if (!hasCleanup && typeof cleanup === \"function\") {\n        hasCleanup = true;\n      }\n      return cleanup;\n    });\n    if (hasCleanup) {\n      return () => {\n        for (let i = 0; i < cleanups.length; i++) {\n          const cleanup = cleanups[i];\n          if (typeof cleanup === \"function\") {\n            cleanup();\n          } else {\n            setRef(currentRefs[i], null);\n          }\n        }\n      };\n    }\n  }, []);\n}\nfunction getAnimationName(styles) {\n  return styles?.animationName || \"none\";\n}\nfunction getElementRef(element) {\n  let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n  let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n  if (mayWarn) {\n    return element.ref;\n  }\n  getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n  mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n  if (mayWarn) {\n    return element.props.ref;\n  }\n  return element.props.ref || element.ref;\n}\nvar Root = Presence;\nexport {\n  Presence,\n  Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/focus-guards.tsx\nimport * as React from \"react\";\nvar count = 0;\nvar guards = null;\nfunction FocusGuards(props) {\n  useFocusGuards();\n  return props.children;\n}\nfunction useFocusGuards() {\n  React.useEffect(() => {\n    if (!guards) {\n      guards = { start: createFocusGuard(), end: createFocusGuard() };\n    }\n    const { start, end } = guards;\n    if (document.body.firstElementChild !== start) {\n      document.body.insertAdjacentElement(\"afterbegin\", start);\n    }\n    if (document.body.lastElementChild !== end) {\n      document.body.insertAdjacentElement(\"beforeend\", end);\n    }\n    count++;\n    return () => {\n      if (count === 1) {\n        guards?.start.remove();\n        guards?.end.remove();\n        guards = null;\n      }\n      count = Math.max(0, count - 1);\n    };\n  }, []);\n}\nfunction createFocusGuard() {\n  const element = document.createElement(\"span\");\n  element.setAttribute(\"data-radix-focus-guard\", \"\");\n  element.tabIndex = 0;\n  element.style.outline = \"none\";\n  element.style.opacity = \"0\";\n  element.style.position = \"fixed\";\n  element.style.pointerEvents = \"none\";\n  return element;\n}\nexport {\n  FocusGuards,\n  FocusGuards as Root,\n  useFocusGuards\n};\n//# sourceMappingURL=index.mjs.map\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n  extendStatics = Object.setPrototypeOf ||\n      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n      function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n  return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n  if (typeof b !== \"function\" && b !== null)\n      throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n  extendStatics(d, b);\n  function __() { this.constructor = d; }\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n  __assign = Object.assign || function __assign(t) {\n      for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n      }\n      return t;\n  }\n  return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n      t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n      for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n              t[p[i]] = s[p[i]];\n      }\n  return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n  return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n  function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n  var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n  var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n  var _, done = false;\n  for (var i = decorators.length - 1; i >= 0; i--) {\n      var context = {};\n      for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n      for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n      context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n      var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n      if (kind === \"accessor\") {\n          if (result === void 0) continue;\n          if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n          if (_ = accept(result.get)) descriptor.get = _;\n          if (_ = accept(result.set)) descriptor.set = _;\n          if (_ = accept(result.init)) initializers.unshift(_);\n      }\n      else if (_ = accept(result)) {\n          if (kind === \"field\") initializers.unshift(_);\n          else descriptor[key] = _;\n      }\n  }\n  if (target) Object.defineProperty(target, contextIn.name, descriptor);\n  done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n  var useValue = arguments.length > 2;\n  for (var i = 0; i < initializers.length; i++) {\n      value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n  }\n  return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n  return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n  if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n  return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n  if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n  return new (P || (P = Promise))(function (resolve, reject) {\n      function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n      function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n      function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n      step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n}\n\nexport function __generator(thisArg, body) {\n  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n  return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n  function verb(n) { return function (v) { return step([n, v]); }; }\n  function step(op) {\n      if (f) throw new TypeError(\"Generator is already executing.\");\n      while (g && (g = 0, op[0] && (_ = 0)), _) try {\n          if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n          if (y = 0, t) op = [op[0] & 2, t.value];\n          switch (op[0]) {\n              case 0: case 1: t = op; break;\n              case 4: _.label++; return { value: op[1], done: false };\n              case 5: _.label++; y = op[1]; op = [0]; continue;\n              case 7: op = _.ops.pop(); _.trys.pop(); continue;\n              default:\n                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                  if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                  if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                  if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                  if (t[2]) _.ops.pop();\n                  _.trys.pop(); continue;\n          }\n          op = body.call(thisArg, _);\n      } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n      if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n  }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  var desc = Object.getOwnPropertyDescriptor(m, k);\n  if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n  }\n  Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n  for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n      next: function () {\n          if (o && i >= o.length) o = void 0;\n          return { value: o && o[i++], done: !o };\n      }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o), r, ar = [], e;\n  try {\n      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  }\n  catch (error) { e = { error: error }; }\n  finally {\n      try {\n          if (r && !r.done && (m = i[\"return\"])) m.call(i);\n      }\n      finally { if (e) throw e.error; }\n  }\n  return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n  for (var ar = [], i = 0; i < arguments.length; i++)\n      ar = ar.concat(__read(arguments[i]));\n  return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n  for (var r = Array(s), k = 0, i = 0; i < il; i++)\n      for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n          r[k] = a[j];\n  return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n      if (ar || !(i in from)) {\n          if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n          ar[i] = from[i];\n      }\n  }\n  return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n  return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var g = generator.apply(thisArg, _arguments || []), i, q = [];\n  return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n  function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n  function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n  function fulfill(value) { resume(\"next\", value); }\n  function reject(value) { resume(\"throw\", value); }\n  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n  var i, p;\n  return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n  function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var m = o[Symbol.asyncIterator], i;\n  return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n  function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n  if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n  return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n  Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n  o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n  ownKeys = Object.getOwnPropertyNames || function (o) {\n    var ar = [];\n    for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n    return ar;\n  };\n  return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n  if (mod && mod.__esModule) return mod;\n  var result = {};\n  if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n  __setModuleDefault(result, mod);\n  return result;\n}\n\nexport function __importDefault(mod) {\n  return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n  return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n  if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n  return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n  if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n  return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n  if (value !== null && value !== void 0) {\n    if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n    var dispose, inner;\n    if (async) {\n      if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n      dispose = value[Symbol.asyncDispose];\n    }\n    if (dispose === void 0) {\n      if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n      dispose = value[Symbol.dispose];\n      if (async) inner = dispose;\n    }\n    if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n    if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n    env.stack.push({ value: value, dispose: dispose, async: async });\n  }\n  else if (async) {\n    env.stack.push({ async: true });\n  }\n  return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n  var e = new Error(message);\n  return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n  function fail(e) {\n    env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n    env.hasError = true;\n  }\n  var r, s = 0;\n  function next() {\n    while (r = env.stack.pop()) {\n      try {\n        if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n        if (r.dispose) {\n          var result = r.dispose.call(r.value);\n          if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n        }\n        else s |= 1;\n      }\n      catch (e) {\n        fail(e);\n      }\n    }\n    if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n    if (env.hasError) throw env.error;\n  }\n  return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n  if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n      return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n          return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n      });\n  }\n  return path;\n}\n\nexport default {\n  __extends,\n  __assign,\n  __rest,\n  __decorate,\n  __param,\n  __esDecorate,\n  __runInitializers,\n  __propKey,\n  __setFunctionName,\n  __metadata,\n  __awaiter,\n  __generator,\n  __createBinding,\n  __exportStar,\n  __values,\n  __read,\n  __spread,\n  __spreadArrays,\n  __spreadArray,\n  __await,\n  __asyncGenerator,\n  __asyncDelegator,\n  __asyncValues,\n  __makeTemplateObject,\n  __importStar,\n  __importDefault,\n  __classPrivateFieldGet,\n  __classPrivateFieldSet,\n  __classPrivateFieldIn,\n  __addDisposableResource,\n  __disposeResources,\n  __rewriteRelativeImportExtension,\n};\n","export var zeroRightClassName = 'right-scroll-bar-position';\nexport var fullWidthClassName = 'width-before-scroll-bar';\nexport var noScrollbarsClassName = 'with-scroll-bars-hidden';\n/**\n * Name of a CSS variable containing the amount of \"hidden\" scrollbar\n * ! might be undefined ! use will fallback!\n */\nexport var removedBarSizeVariable = '--removed-body-scroll-bar-size';\n","/**\n * Assigns a value for a given ref, no matter of the ref format\n * @param {RefObject} ref - a callback function or ref object\n * @param value - a new value\n *\n * @see https://github.com/theKashey/use-callback-ref#assignref\n * @example\n * const refObject = useRef();\n * const refFn = (ref) => {....}\n *\n * assignRef(refObject, \"refValue\");\n * assignRef(refFn, \"refValue\");\n */\nexport function assignRef(ref, value) {\n    if (typeof ref === 'function') {\n        ref(value);\n    }\n    else if (ref) {\n        ref.current = value;\n    }\n    return ref;\n}\n","import { useState } from 'react';\n/**\n * creates a MutableRef with ref change callback\n * @param initialValue - initial ref value\n * @param {Function} callback - a callback to run when value changes\n *\n * @example\n * const ref = useCallbackRef(0, (newValue, oldValue) => console.log(oldValue, '->', newValue);\n * ref.current = 1;\n * // prints 0 -> 1\n *\n * @see https://reactjs.org/docs/hooks-reference.html#useref\n * @see https://github.com/theKashey/use-callback-ref#usecallbackref---to-replace-reactuseref\n * @returns {MutableRefObject}\n */\nexport function useCallbackRef(initialValue, callback) {\n    var ref = useState(function () { return ({\n        // value\n        value: initialValue,\n        // last callback\n        callback: callback,\n        // \"memoized\" public interface\n        facade: {\n            get current() {\n                return ref.value;\n            },\n            set current(value) {\n                var last = ref.value;\n                if (last !== value) {\n                    ref.value = value;\n                    ref.callback(value, last);\n                }\n            },\n        },\n    }); })[0];\n    // update callback\n    ref.callback = callback;\n    return ref.facade;\n}\n","import * as React from 'react';\nimport { assignRef } from './assignRef';\nimport { useCallbackRef } from './useRef';\nvar useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\nvar currentValues = new WeakMap();\n/**\n * Merges two or more refs together providing a single interface to set their value\n * @param {RefObject|Ref} refs\n * @returns {MutableRefObject} - a new ref, which translates all changes to {refs}\n *\n * @see {@link mergeRefs} a version without buit-in memoization\n * @see https://github.com/theKashey/use-callback-ref#usemergerefs\n * @example\n * const Component = React.forwardRef((props, ref) => {\n *   const ownRef = useRef();\n *   const domRef = useMergeRefs([ref, ownRef]); // 👈 merge together\n *   return <div ref={domRef}>...</div>\n * }\n */\nexport function useMergeRefs(refs, defaultValue) {\n    var callbackRef = useCallbackRef(defaultValue || null, function (newValue) {\n        return refs.forEach(function (ref) { return assignRef(ref, newValue); });\n    });\n    // handle refs changes - added or removed\n    useIsomorphicLayoutEffect(function () {\n        var oldValue = currentValues.get(callbackRef);\n        if (oldValue) {\n            var prevRefs_1 = new Set(oldValue);\n            var nextRefs_1 = new Set(refs);\n            var current_1 = callbackRef.current;\n            prevRefs_1.forEach(function (ref) {\n                if (!nextRefs_1.has(ref)) {\n                    assignRef(ref, null);\n                }\n            });\n            nextRefs_1.forEach(function (ref) {\n                if (!prevRefs_1.has(ref)) {\n                    assignRef(ref, current_1);\n                }\n            });\n        }\n        currentValues.set(callbackRef, refs);\n    }, [refs]);\n    return callbackRef;\n}\n","import { __assign } from \"tslib\";\nfunction ItoI(a) {\n    return a;\n}\nfunction innerCreateMedium(defaults, middleware) {\n    if (middleware === void 0) { middleware = ItoI; }\n    var buffer = [];\n    var assigned = false;\n    var medium = {\n        read: function () {\n            if (assigned) {\n                throw new Error('Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.');\n            }\n            if (buffer.length) {\n                return buffer[buffer.length - 1];\n            }\n            return defaults;\n        },\n        useMedium: function (data) {\n            var item = middleware(data, assigned);\n            buffer.push(item);\n            return function () {\n                buffer = buffer.filter(function (x) { return x !== item; });\n            };\n        },\n        assignSyncMedium: function (cb) {\n            assigned = true;\n            while (buffer.length) {\n                var cbs = buffer;\n                buffer = [];\n                cbs.forEach(cb);\n            }\n            buffer = {\n                push: function (x) { return cb(x); },\n                filter: function () { return buffer; },\n            };\n        },\n        assignMedium: function (cb) {\n            assigned = true;\n            var pendingQueue = [];\n            if (buffer.length) {\n                var cbs = buffer;\n                buffer = [];\n                cbs.forEach(cb);\n                pendingQueue = buffer;\n            }\n            var executeQueue = function () {\n                var cbs = pendingQueue;\n                pendingQueue = [];\n                cbs.forEach(cb);\n            };\n            var cycle = function () { return Promise.resolve().then(executeQueue); };\n            cycle();\n            buffer = {\n                push: function (x) {\n                    pendingQueue.push(x);\n                    cycle();\n                },\n                filter: function (filter) {\n                    pendingQueue = pendingQueue.filter(filter);\n                    return buffer;\n                },\n            };\n        },\n    };\n    return medium;\n}\nexport function createMedium(defaults, middleware) {\n    if (middleware === void 0) { middleware = ItoI; }\n    return innerCreateMedium(defaults, middleware);\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function createSidecarMedium(options) {\n    if (options === void 0) { options = {}; }\n    var medium = innerCreateMedium(null);\n    medium.options = __assign({ async: true, ssr: false }, options);\n    return medium;\n}\n","import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nvar SideCar = function (_a) {\n    var sideCar = _a.sideCar, rest = __rest(_a, [\"sideCar\"]);\n    if (!sideCar) {\n        throw new Error('Sidecar: please provide `sideCar` property to import the right car');\n    }\n    var Target = sideCar.read();\n    if (!Target) {\n        throw new Error('Sidecar medium not found');\n    }\n    return React.createElement(Target, __assign({}, rest));\n};\nSideCar.isSideCarExport = true;\nexport function exportSidecar(medium, exported) {\n    medium.useMedium(exported);\n    return SideCar;\n}\n","import { createSidecarMedium } from 'use-sidecar';\nexport var effectCar = createSidecarMedium();\n","import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nimport { fullWidthClassName, zeroRightClassName } from 'react-remove-scroll-bar/constants';\nimport { useMergeRefs } from 'use-callback-ref';\nimport { effectCar } from './medium';\nvar nothing = function () {\n    return;\n};\n/**\n * Removes scrollbar from the page and contain the scroll within the Lock\n */\nvar RemoveScroll = React.forwardRef(function (props, parentRef) {\n    var ref = React.useRef(null);\n    var _a = React.useState({\n        onScrollCapture: nothing,\n        onWheelCapture: nothing,\n        onTouchMoveCapture: nothing,\n    }), callbacks = _a[0], setCallbacks = _a[1];\n    var forwardProps = props.forwardProps, children = props.children, className = props.className, removeScrollBar = props.removeScrollBar, enabled = props.enabled, shards = props.shards, sideCar = props.sideCar, noRelative = props.noRelative, noIsolation = props.noIsolation, inert = props.inert, allowPinchZoom = props.allowPinchZoom, _b = props.as, Container = _b === void 0 ? 'div' : _b, gapMode = props.gapMode, rest = __rest(props, [\"forwardProps\", \"children\", \"className\", \"removeScrollBar\", \"enabled\", \"shards\", \"sideCar\", \"noRelative\", \"noIsolation\", \"inert\", \"allowPinchZoom\", \"as\", \"gapMode\"]);\n    var SideCar = sideCar;\n    var containerRef = useMergeRefs([ref, parentRef]);\n    var containerProps = __assign(__assign({}, rest), callbacks);\n    return (React.createElement(React.Fragment, null,\n        enabled && (React.createElement(SideCar, { sideCar: effectCar, removeScrollBar: removeScrollBar, shards: shards, noRelative: noRelative, noIsolation: noIsolation, inert: inert, setCallbacks: setCallbacks, allowPinchZoom: !!allowPinchZoom, lockRef: ref, gapMode: gapMode })),\n        forwardProps ? (React.cloneElement(React.Children.only(children), __assign(__assign({}, containerProps), { ref: containerRef }))) : (React.createElement(Container, __assign({}, containerProps, { className: className, ref: containerRef }), children))));\n});\nRemoveScroll.defaultProps = {\n    enabled: true,\n    removeScrollBar: true,\n    inert: false,\n};\nRemoveScroll.classNames = {\n    fullWidth: fullWidthClassName,\n    zeroRight: zeroRightClassName,\n};\nexport { RemoveScroll };\n","var currentNonce;\nexport var setNonce = function (nonce) {\n    currentNonce = nonce;\n};\nexport var getNonce = function () {\n    if (currentNonce) {\n        return currentNonce;\n    }\n    if (typeof __webpack_nonce__ !== 'undefined') {\n        return __webpack_nonce__;\n    }\n    return undefined;\n};\n","import { getNonce } from 'get-nonce';\nfunction makeStyleTag() {\n    if (!document)\n        return null;\n    var tag = document.createElement('style');\n    tag.type = 'text/css';\n    var nonce = getNonce();\n    if (nonce) {\n        tag.setAttribute('nonce', nonce);\n    }\n    return tag;\n}\nfunction injectStyles(tag, css) {\n    // @ts-ignore\n    if (tag.styleSheet) {\n        // @ts-ignore\n        tag.styleSheet.cssText = css;\n    }\n    else {\n        tag.appendChild(document.createTextNode(css));\n    }\n}\nfunction insertStyleTag(tag) {\n    var head = document.head || document.getElementsByTagName('head')[0];\n    head.appendChild(tag);\n}\nexport var stylesheetSingleton = function () {\n    var counter = 0;\n    var stylesheet = null;\n    return {\n        add: function (style) {\n            if (counter == 0) {\n                if ((stylesheet = makeStyleTag())) {\n                    injectStyles(stylesheet, style);\n                    insertStyleTag(stylesheet);\n                }\n            }\n            counter++;\n        },\n        remove: function () {\n            counter--;\n            if (!counter && stylesheet) {\n                stylesheet.parentNode && stylesheet.parentNode.removeChild(stylesheet);\n                stylesheet = null;\n            }\n        },\n    };\n};\n","import * as React from 'react';\nimport { stylesheetSingleton } from './singleton';\n/**\n * creates a hook to control style singleton\n * @see {@link styleSingleton} for a safer component version\n * @example\n * ```tsx\n * const useStyle = styleHookSingleton();\n * ///\n * useStyle('body { overflow: hidden}');\n */\nexport var styleHookSingleton = function () {\n    var sheet = stylesheetSingleton();\n    return function (styles, isDynamic) {\n        React.useEffect(function () {\n            sheet.add(styles);\n            return function () {\n                sheet.remove();\n            };\n        }, [styles && isDynamic]);\n    };\n};\n","import { styleHookSingleton } from './hook';\n/**\n * create a Component to add styles on demand\n * - styles are added when first instance is mounted\n * - styles are removed when the last instance is unmounted\n * - changing styles in runtime does nothing unless dynamic is set. But with multiple components that can lead to the undefined behavior\n */\nexport var styleSingleton = function () {\n    var useStyle = styleHookSingleton();\n    var Sheet = function (_a) {\n        var styles = _a.styles, dynamic = _a.dynamic;\n        useStyle(styles, dynamic);\n        return null;\n    };\n    return Sheet;\n};\n","export var zeroGap = {\n    left: 0,\n    top: 0,\n    right: 0,\n    gap: 0,\n};\nvar parse = function (x) { return parseInt(x || '', 10) || 0; };\nvar getOffset = function (gapMode) {\n    var cs = window.getComputedStyle(document.body);\n    var left = cs[gapMode === 'padding' ? 'paddingLeft' : 'marginLeft'];\n    var top = cs[gapMode === 'padding' ? 'paddingTop' : 'marginTop'];\n    var right = cs[gapMode === 'padding' ? 'paddingRight' : 'marginRight'];\n    return [parse(left), parse(top), parse(right)];\n};\nexport var getGapWidth = function (gapMode) {\n    if (gapMode === void 0) { gapMode = 'margin'; }\n    if (typeof window === 'undefined') {\n        return zeroGap;\n    }\n    var offsets = getOffset(gapMode);\n    var documentWidth = document.documentElement.clientWidth;\n    var windowWidth = window.innerWidth;\n    return {\n        left: offsets[0],\n        top: offsets[1],\n        right: offsets[2],\n        gap: Math.max(0, windowWidth - documentWidth + offsets[2] - offsets[0]),\n    };\n};\n","import * as React from 'react';\nimport { styleSingleton } from 'react-style-singleton';\nimport { fullWidthClassName, zeroRightClassName, noScrollbarsClassName, removedBarSizeVariable } from './constants';\nimport { getGapWidth } from './utils';\nvar Style = styleSingleton();\nexport var lockAttribute = 'data-scroll-locked';\n// important tip - once we measure scrollBar width and remove them\n// we could not repeat this operation\n// thus we are using style-singleton - only the first \"yet correct\" style will be applied.\nvar getStyles = function (_a, allowRelative, gapMode, important) {\n    var left = _a.left, top = _a.top, right = _a.right, gap = _a.gap;\n    if (gapMode === void 0) { gapMode = 'margin'; }\n    return \"\\n  .\".concat(noScrollbarsClassName, \" {\\n   overflow: hidden \").concat(important, \";\\n   padding-right: \").concat(gap, \"px \").concat(important, \";\\n  }\\n  body[\").concat(lockAttribute, \"] {\\n    overflow: hidden \").concat(important, \";\\n    overscroll-behavior: contain;\\n    \").concat([\n        allowRelative && \"position: relative \".concat(important, \";\"),\n        gapMode === 'margin' &&\n            \"\\n    padding-left: \".concat(left, \"px;\\n    padding-top: \").concat(top, \"px;\\n    padding-right: \").concat(right, \"px;\\n    margin-left:0;\\n    margin-top:0;\\n    margin-right: \").concat(gap, \"px \").concat(important, \";\\n    \"),\n        gapMode === 'padding' && \"padding-right: \".concat(gap, \"px \").concat(important, \";\"),\n    ]\n        .filter(Boolean)\n        .join(''), \"\\n  }\\n  \\n  .\").concat(zeroRightClassName, \" {\\n    right: \").concat(gap, \"px \").concat(important, \";\\n  }\\n  \\n  .\").concat(fullWidthClassName, \" {\\n    margin-right: \").concat(gap, \"px \").concat(important, \";\\n  }\\n  \\n  .\").concat(zeroRightClassName, \" .\").concat(zeroRightClassName, \" {\\n    right: 0 \").concat(important, \";\\n  }\\n  \\n  .\").concat(fullWidthClassName, \" .\").concat(fullWidthClassName, \" {\\n    margin-right: 0 \").concat(important, \";\\n  }\\n  \\n  body[\").concat(lockAttribute, \"] {\\n    \").concat(removedBarSizeVariable, \": \").concat(gap, \"px;\\n  }\\n\");\n};\nvar getCurrentUseCounter = function () {\n    var counter = parseInt(document.body.getAttribute(lockAttribute) || '0', 10);\n    return isFinite(counter) ? counter : 0;\n};\nexport var useLockAttribute = function () {\n    React.useEffect(function () {\n        document.body.setAttribute(lockAttribute, (getCurrentUseCounter() + 1).toString());\n        return function () {\n            var newCounter = getCurrentUseCounter() - 1;\n            if (newCounter <= 0) {\n                document.body.removeAttribute(lockAttribute);\n            }\n            else {\n                document.body.setAttribute(lockAttribute, newCounter.toString());\n            }\n        };\n    }, []);\n};\n/**\n * Removes page scrollbar and blocks page scroll when mounted\n */\nexport var RemoveScrollBar = function (_a) {\n    var noRelative = _a.noRelative, noImportant = _a.noImportant, _b = _a.gapMode, gapMode = _b === void 0 ? 'margin' : _b;\n    useLockAttribute();\n    /*\n     gap will be measured on every component mount\n     however it will be used only by the \"first\" invocation\n     due to singleton nature of <Style\n     */\n    var gap = React.useMemo(function () { return getGapWidth(gapMode); }, [gapMode]);\n    return React.createElement(Style, { styles: getStyles(gap, !noRelative, gapMode, !noImportant ? '!important' : '') });\n};\n","var passiveSupported = false;\nif (typeof window !== 'undefined') {\n    try {\n        var options = Object.defineProperty({}, 'passive', {\n            get: function () {\n                passiveSupported = true;\n                return true;\n            },\n        });\n        // @ts-ignore\n        window.addEventListener('test', options, options);\n        // @ts-ignore\n        window.removeEventListener('test', options, options);\n    }\n    catch (err) {\n        passiveSupported = false;\n    }\n}\nexport var nonPassive = passiveSupported ? { passive: false } : false;\n","var alwaysContainsScroll = function (node) {\n    // textarea will always _contain_ scroll inside self. It only can be hidden\n    return node.tagName === 'TEXTAREA';\n};\nvar elementCanBeScrolled = function (node, overflow) {\n    if (!(node instanceof Element)) {\n        return false;\n    }\n    var styles = window.getComputedStyle(node);\n    return (\n    // not-not-scrollable\n    styles[overflow] !== 'hidden' &&\n        // contains scroll inside self\n        !(styles.overflowY === styles.overflowX && !alwaysContainsScroll(node) && styles[overflow] === 'visible'));\n};\nvar elementCouldBeVScrolled = function (node) { return elementCanBeScrolled(node, 'overflowY'); };\nvar elementCouldBeHScrolled = function (node) { return elementCanBeScrolled(node, 'overflowX'); };\nexport var locationCouldBeScrolled = function (axis, node) {\n    var ownerDocument = node.ownerDocument;\n    var current = node;\n    do {\n        // Skip over shadow root\n        if (typeof ShadowRoot !== 'undefined' && current instanceof ShadowRoot) {\n            current = current.host;\n        }\n        var isScrollable = elementCouldBeScrolled(axis, current);\n        if (isScrollable) {\n            var _a = getScrollVariables(axis, current), scrollHeight = _a[1], clientHeight = _a[2];\n            if (scrollHeight > clientHeight) {\n                return true;\n            }\n        }\n        current = current.parentNode;\n    } while (current && current !== ownerDocument.body);\n    return false;\n};\nvar getVScrollVariables = function (_a) {\n    var scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight;\n    return [\n        scrollTop,\n        scrollHeight,\n        clientHeight,\n    ];\n};\nvar getHScrollVariables = function (_a) {\n    var scrollLeft = _a.scrollLeft, scrollWidth = _a.scrollWidth, clientWidth = _a.clientWidth;\n    return [\n        scrollLeft,\n        scrollWidth,\n        clientWidth,\n    ];\n};\nvar elementCouldBeScrolled = function (axis, node) {\n    return axis === 'v' ? elementCouldBeVScrolled(node) : elementCouldBeHScrolled(node);\n};\nvar getScrollVariables = function (axis, node) {\n    return axis === 'v' ? getVScrollVariables(node) : getHScrollVariables(node);\n};\nvar getDirectionFactor = function (axis, direction) {\n    /**\n     * If the element's direction is rtl (right-to-left), then scrollLeft is 0 when the scrollbar is at its rightmost position,\n     * and then increasingly negative as you scroll towards the end of the content.\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollLeft\n     */\n    return axis === 'h' && direction === 'rtl' ? -1 : 1;\n};\nexport var handleScroll = function (axis, endTarget, event, sourceDelta, noOverscroll) {\n    var directionFactor = getDirectionFactor(axis, window.getComputedStyle(endTarget).direction);\n    var delta = directionFactor * sourceDelta;\n    // find scrollable target\n    var target = event.target;\n    var targetInLock = endTarget.contains(target);\n    var shouldCancelScroll = false;\n    var isDeltaPositive = delta > 0;\n    var availableScroll = 0;\n    var availableScrollTop = 0;\n    do {\n        if (!target) {\n            break;\n        }\n        var _a = getScrollVariables(axis, target), position = _a[0], scroll_1 = _a[1], capacity = _a[2];\n        var elementScroll = scroll_1 - capacity - directionFactor * position;\n        if (position || elementScroll) {\n            if (elementCouldBeScrolled(axis, target)) {\n                availableScroll += elementScroll;\n                availableScrollTop += position;\n            }\n        }\n        var parent_1 = target.parentNode;\n        // we will \"bubble\" from ShadowDom in case we are, or just to the parent in normal case\n        // this is the same logic used in focus-lock\n        target = (parent_1 && parent_1.nodeType === Node.DOCUMENT_FRAGMENT_NODE ? parent_1.host : parent_1);\n    } while (\n    // portaled content\n    (!targetInLock && target !== document.body) ||\n        // self content\n        (targetInLock && (endTarget.contains(target) || endTarget === target)));\n    // handle epsilon around 0 (non standard zoom levels)\n    if (isDeltaPositive &&\n        ((noOverscroll && Math.abs(availableScroll) < 1) || (!noOverscroll && delta > availableScroll))) {\n        shouldCancelScroll = true;\n    }\n    else if (!isDeltaPositive &&\n        ((noOverscroll && Math.abs(availableScrollTop) < 1) || (!noOverscroll && -delta > availableScrollTop))) {\n        shouldCancelScroll = true;\n    }\n    return shouldCancelScroll;\n};\n","import { __spreadArray } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScrollBar } from 'react-remove-scroll-bar';\nimport { styleSingleton } from 'react-style-singleton';\nimport { nonPassive } from './aggresiveCapture';\nimport { handleScroll, locationCouldBeScrolled } from './handleScroll';\nexport var getTouchXY = function (event) {\n    return 'changedTouches' in event ? [event.changedTouches[0].clientX, event.changedTouches[0].clientY] : [0, 0];\n};\nexport var getDeltaXY = function (event) { return [event.deltaX, event.deltaY]; };\nvar extractRef = function (ref) {\n    return ref && 'current' in ref ? ref.current : ref;\n};\nvar deltaCompare = function (x, y) { return x[0] === y[0] && x[1] === y[1]; };\nvar generateStyle = function (id) { return \"\\n  .block-interactivity-\".concat(id, \" {pointer-events: none;}\\n  .allow-interactivity-\").concat(id, \" {pointer-events: all;}\\n\"); };\nvar idCounter = 0;\nvar lockStack = [];\nexport function RemoveScrollSideCar(props) {\n    var shouldPreventQueue = React.useRef([]);\n    var touchStartRef = React.useRef([0, 0]);\n    var activeAxis = React.useRef();\n    var id = React.useState(idCounter++)[0];\n    var Style = React.useState(styleSingleton)[0];\n    var lastProps = React.useRef(props);\n    React.useEffect(function () {\n        lastProps.current = props;\n    }, [props]);\n    React.useEffect(function () {\n        if (props.inert) {\n            document.body.classList.add(\"block-interactivity-\".concat(id));\n            var allow_1 = __spreadArray([props.lockRef.current], (props.shards || []).map(extractRef), true).filter(Boolean);\n            allow_1.forEach(function (el) { return el.classList.add(\"allow-interactivity-\".concat(id)); });\n            return function () {\n                document.body.classList.remove(\"block-interactivity-\".concat(id));\n                allow_1.forEach(function (el) { return el.classList.remove(\"allow-interactivity-\".concat(id)); });\n            };\n        }\n        return;\n    }, [props.inert, props.lockRef.current, props.shards]);\n    var shouldCancelEvent = React.useCallback(function (event, parent) {\n        if (('touches' in event && event.touches.length === 2) || (event.type === 'wheel' && event.ctrlKey)) {\n            return !lastProps.current.allowPinchZoom;\n        }\n        var touch = getTouchXY(event);\n        var touchStart = touchStartRef.current;\n        var deltaX = 'deltaX' in event ? event.deltaX : touchStart[0] - touch[0];\n        var deltaY = 'deltaY' in event ? event.deltaY : touchStart[1] - touch[1];\n        var currentAxis;\n        var target = event.target;\n        var moveDirection = Math.abs(deltaX) > Math.abs(deltaY) ? 'h' : 'v';\n        // allow horizontal touch move on Range inputs. They will not cause any scroll\n        if ('touches' in event && moveDirection === 'h' && target.type === 'range') {\n            return false;\n        }\n        // allow drag selection (iOS); check if selection's anchorNode is the same as target or contains target\n        var selection = window.getSelection();\n        var anchorNode = selection && selection.anchorNode;\n        var isTouchingSelection = anchorNode ? anchorNode === target || anchorNode.contains(target) : false;\n        if (isTouchingSelection) {\n            return false;\n        }\n        var canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n        if (!canBeScrolledInMainDirection) {\n            return true;\n        }\n        if (canBeScrolledInMainDirection) {\n            currentAxis = moveDirection;\n        }\n        else {\n            currentAxis = moveDirection === 'v' ? 'h' : 'v';\n            canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n            // other axis might be not scrollable\n        }\n        if (!canBeScrolledInMainDirection) {\n            return false;\n        }\n        if (!activeAxis.current && 'changedTouches' in event && (deltaX || deltaY)) {\n            activeAxis.current = currentAxis;\n        }\n        if (!currentAxis) {\n            return true;\n        }\n        var cancelingAxis = activeAxis.current || currentAxis;\n        return handleScroll(cancelingAxis, parent, event, cancelingAxis === 'h' ? deltaX : deltaY, true);\n    }, []);\n    var shouldPrevent = React.useCallback(function (_event) {\n        var event = _event;\n        if (!lockStack.length || lockStack[lockStack.length - 1] !== Style) {\n            // not the last active\n            return;\n        }\n        var delta = 'deltaY' in event ? getDeltaXY(event) : getTouchXY(event);\n        var sourceEvent = shouldPreventQueue.current.filter(function (e) { return e.name === event.type && (e.target === event.target || event.target === e.shadowParent) && deltaCompare(e.delta, delta); })[0];\n        // self event, and should be canceled\n        if (sourceEvent && sourceEvent.should) {\n            if (event.cancelable) {\n                event.preventDefault();\n            }\n            return;\n        }\n        // outside or shard event\n        if (!sourceEvent) {\n            var shardNodes = (lastProps.current.shards || [])\n                .map(extractRef)\n                .filter(Boolean)\n                .filter(function (node) { return node.contains(event.target); });\n            var shouldStop = shardNodes.length > 0 ? shouldCancelEvent(event, shardNodes[0]) : !lastProps.current.noIsolation;\n            if (shouldStop) {\n                if (event.cancelable) {\n                    event.preventDefault();\n                }\n            }\n        }\n    }, []);\n    var shouldCancel = React.useCallback(function (name, delta, target, should) {\n        var event = { name: name, delta: delta, target: target, should: should, shadowParent: getOutermostShadowParent(target) };\n        shouldPreventQueue.current.push(event);\n        setTimeout(function () {\n            shouldPreventQueue.current = shouldPreventQueue.current.filter(function (e) { return e !== event; });\n        }, 1);\n    }, []);\n    var scrollTouchStart = React.useCallback(function (event) {\n        touchStartRef.current = getTouchXY(event);\n        activeAxis.current = undefined;\n    }, []);\n    var scrollWheel = React.useCallback(function (event) {\n        shouldCancel(event.type, getDeltaXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n    }, []);\n    var scrollTouchMove = React.useCallback(function (event) {\n        shouldCancel(event.type, getTouchXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n    }, []);\n    React.useEffect(function () {\n        lockStack.push(Style);\n        props.setCallbacks({\n            onScrollCapture: scrollWheel,\n            onWheelCapture: scrollWheel,\n            onTouchMoveCapture: scrollTouchMove,\n        });\n        document.addEventListener('wheel', shouldPrevent, nonPassive);\n        document.addEventListener('touchmove', shouldPrevent, nonPassive);\n        document.addEventListener('touchstart', scrollTouchStart, nonPassive);\n        return function () {\n            lockStack = lockStack.filter(function (inst) { return inst !== Style; });\n            document.removeEventListener('wheel', shouldPrevent, nonPassive);\n            document.removeEventListener('touchmove', shouldPrevent, nonPassive);\n            document.removeEventListener('touchstart', scrollTouchStart, nonPassive);\n        };\n    }, []);\n    var removeScrollBar = props.removeScrollBar, inert = props.inert;\n    return (React.createElement(React.Fragment, null,\n        inert ? React.createElement(Style, { styles: generateStyle(id) }) : null,\n        removeScrollBar ? React.createElement(RemoveScrollBar, { noRelative: props.noRelative, gapMode: props.gapMode }) : null));\n}\nfunction getOutermostShadowParent(node) {\n    var shadowParent = null;\n    while (node !== null) {\n        if (node instanceof ShadowRoot) {\n            shadowParent = node.host;\n            node = node.host;\n        }\n        node = node.parentNode;\n    }\n    return shadowParent;\n}\n","import { exportSidecar } from 'use-sidecar';\nimport { RemoveScrollSideCar } from './SideEffect';\nimport { effectCar } from './medium';\nexport default exportSidecar(effectCar, RemoveScrollSideCar);\n","import { __assign } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScroll } from './UI';\nimport SideCar from './sidecar';\nvar ReactRemoveScroll = React.forwardRef(function (props, ref) { return (React.createElement(RemoveScroll, __assign({}, props, { ref: ref, sideCar: SideCar }))); });\nReactRemoveScroll.classNames = RemoveScroll.classNames;\nexport default ReactRemoveScroll;\n","var getDefaultParent = function (originalTarget) {\n    if (typeof document === 'undefined') {\n        return null;\n    }\n    var sampleTarget = Array.isArray(originalTarget) ? originalTarget[0] : originalTarget;\n    return sampleTarget.ownerDocument.body;\n};\nvar counterMap = new WeakMap();\nvar uncontrolledNodes = new WeakMap();\nvar markerMap = {};\nvar lockCount = 0;\nvar unwrapHost = function (node) {\n    return node && (node.host || unwrapHost(node.parentNode));\n};\nvar correctTargets = function (parent, targets) {\n    return targets\n        .map(function (target) {\n        if (parent.contains(target)) {\n            return target;\n        }\n        var correctedTarget = unwrapHost(target);\n        if (correctedTarget && parent.contains(correctedTarget)) {\n            return correctedTarget;\n        }\n        console.error('aria-hidden', target, 'in not contained inside', parent, '. Doing nothing');\n        return null;\n    })\n        .filter(function (x) { return Boolean(x); });\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @param {String} [controlAttribute] - html Attribute to control\n * @return {Undo} undo command\n */\nvar applyAttributeToOthers = function (originalTarget, parentNode, markerName, controlAttribute) {\n    var targets = correctTargets(parentNode, Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n    if (!markerMap[markerName]) {\n        markerMap[markerName] = new WeakMap();\n    }\n    var markerCounter = markerMap[markerName];\n    var hiddenNodes = [];\n    var elementsToKeep = new Set();\n    var elementsToStop = new Set(targets);\n    var keep = function (el) {\n        if (!el || elementsToKeep.has(el)) {\n            return;\n        }\n        elementsToKeep.add(el);\n        keep(el.parentNode);\n    };\n    targets.forEach(keep);\n    var deep = function (parent) {\n        if (!parent || elementsToStop.has(parent)) {\n            return;\n        }\n        Array.prototype.forEach.call(parent.children, function (node) {\n            if (elementsToKeep.has(node)) {\n                deep(node);\n            }\n            else {\n                try {\n                    var attr = node.getAttribute(controlAttribute);\n                    var alreadyHidden = attr !== null && attr !== 'false';\n                    var counterValue = (counterMap.get(node) || 0) + 1;\n                    var markerValue = (markerCounter.get(node) || 0) + 1;\n                    counterMap.set(node, counterValue);\n                    markerCounter.set(node, markerValue);\n                    hiddenNodes.push(node);\n                    if (counterValue === 1 && alreadyHidden) {\n                        uncontrolledNodes.set(node, true);\n                    }\n                    if (markerValue === 1) {\n                        node.setAttribute(markerName, 'true');\n                    }\n                    if (!alreadyHidden) {\n                        node.setAttribute(controlAttribute, 'true');\n                    }\n                }\n                catch (e) {\n                    console.error('aria-hidden: cannot operate on ', node, e);\n                }\n            }\n        });\n    };\n    deep(parentNode);\n    elementsToKeep.clear();\n    lockCount++;\n    return function () {\n        hiddenNodes.forEach(function (node) {\n            var counterValue = counterMap.get(node) - 1;\n            var markerValue = markerCounter.get(node) - 1;\n            counterMap.set(node, counterValue);\n            markerCounter.set(node, markerValue);\n            if (!counterValue) {\n                if (!uncontrolledNodes.has(node)) {\n                    node.removeAttribute(controlAttribute);\n                }\n                uncontrolledNodes.delete(node);\n            }\n            if (!markerValue) {\n                node.removeAttribute(markerName);\n            }\n        });\n        lockCount--;\n        if (!lockCount) {\n            // clear\n            counterMap = new WeakMap();\n            counterMap = new WeakMap();\n            uncontrolledNodes = new WeakMap();\n            markerMap = {};\n        }\n    };\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var hideOthers = function (originalTarget, parentNode, markerName) {\n    if (markerName === void 0) { markerName = 'data-aria-hidden'; }\n    var targets = Array.from(Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n    var activeParentNode = parentNode || getDefaultParent(originalTarget);\n    if (!activeParentNode) {\n        return function () { return null; };\n    }\n    // we should not hide aria-live elements - https://github.com/theKashey/aria-hidden/issues/10\n    // and script elements, as they have no impact on accessibility.\n    targets.push.apply(targets, Array.from(activeParentNode.querySelectorAll('[aria-live], script')));\n    return applyAttributeToOthers(targets, activeParentNode, markerName, 'aria-hidden');\n};\n/**\n * Marks everything except given node(or nodes) as inert\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var inertOthers = function (originalTarget, parentNode, markerName) {\n    if (markerName === void 0) { markerName = 'data-inert-ed'; }\n    var activeParentNode = parentNode || getDefaultParent(originalTarget);\n    if (!activeParentNode) {\n        return function () { return null; };\n    }\n    return applyAttributeToOthers(originalTarget, activeParentNode, markerName, 'inert');\n};\n/**\n * @returns if current browser supports inert\n */\nexport var supportsInert = function () {\n    return typeof HTMLElement !== 'undefined' && HTMLElement.prototype.hasOwnProperty('inert');\n};\n/**\n * Automatic function to \"suppress\" DOM elements - _hide_ or _inert_ in the best possible way\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var suppressOthers = function (originalTarget, parentNode, markerName) {\n    if (markerName === void 0) { markerName = 'data-suppressed'; }\n    return (supportsInert() ? inertOthers : hideOthers)(originalTarget, parentNode, markerName);\n};\n","\"use client\";\n\n// src/dialog.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { DismissableLayer, useDismissableLayerSurface } from \"@radix-ui/react-dismissable-layer\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { hideOthers } from \"aria-hidden\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { Fragment, jsx } from \"react/jsx-runtime\";\nvar DIALOG_NAME = \"Dialog\";\nvar [createDialogContext, createDialogScope] = createContextScope(DIALOG_NAME);\nvar [DialogProvider, useDialogContext] = createDialogContext(DIALOG_NAME);\nvar Dialog = (props) => {\n  const {\n    __scopeDialog,\n    children,\n    open: openProp,\n    defaultOpen,\n    onOpenChange,\n    modal = true\n  } = props;\n  const triggerRef = React.useRef(null);\n  const contentRef = React.useRef(null);\n  const [open, setOpen] = useControllableState({\n    prop: openProp,\n    defaultProp: defaultOpen ?? false,\n    onChange: onOpenChange,\n    caller: DIALOG_NAME\n  });\n  return /* @__PURE__ */ jsx(\n    DialogProvider,\n    {\n      scope: __scopeDialog,\n      triggerRef,\n      contentRef,\n      contentId: useId(),\n      titleId: useId(),\n      descriptionId: useId(),\n      open,\n      onOpenChange: setOpen,\n      onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n      modal,\n      children\n    }\n  );\n};\nDialog.displayName = DIALOG_NAME;\nvar TRIGGER_NAME = \"DialogTrigger\";\nvar DialogTrigger = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeDialog, ...triggerProps } = props;\n    const context = useDialogContext(TRIGGER_NAME, __scopeDialog);\n    const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);\n    return /* @__PURE__ */ jsx(\n      Primitive.button,\n      {\n        type: \"button\",\n        \"aria-haspopup\": \"dialog\",\n        \"aria-expanded\": context.open,\n        \"aria-controls\": context.open ? context.contentId : void 0,\n        \"data-state\": getState(context.open),\n        ...triggerProps,\n        ref: composedTriggerRef,\n        onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n      }\n    );\n  }\n);\nDialogTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"DialogPortal\";\nvar [PortalProvider, usePortalContext] = createDialogContext(PORTAL_NAME, {\n  forceMount: void 0\n});\nvar DialogPortal = (props) => {\n  const { __scopeDialog, forceMount, children, container } = props;\n  const context = useDialogContext(PORTAL_NAME, __scopeDialog);\n  return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeDialog, forceMount, children: React.Children.map(children, (child) => /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children: child }) })) });\n};\nDialogPortal.displayName = PORTAL_NAME;\nvar OVERLAY_NAME = \"DialogOverlay\";\nvar DialogOverlay = React.forwardRef(\n  (props, forwardedRef) => {\n    const portalContext = usePortalContext(OVERLAY_NAME, props.__scopeDialog);\n    const { forceMount = portalContext.forceMount, ...overlayProps } = props;\n    const context = useDialogContext(OVERLAY_NAME, props.__scopeDialog);\n    return context.modal ? /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(DialogOverlayImpl, { ...overlayProps, ref: forwardedRef }) }) : null;\n  }\n);\nDialogOverlay.displayName = OVERLAY_NAME;\nvar Slot = createSlot(\"DialogOverlay.RemoveScroll\");\nvar DialogOverlayImpl = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeDialog, ...overlayProps } = props;\n    const context = useDialogContext(OVERLAY_NAME, __scopeDialog);\n    const registerDismissableSurface = useDismissableLayerSurface();\n    const composedRefs = useComposedRefs(forwardedRef, registerDismissableSurface);\n    return (\n      // Make sure `Content` is scrollable even when it doesn't live inside `RemoveScroll`\n      // ie. when `Overlay` and `Content` are siblings\n      /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, shards: [context.contentRef], children: /* @__PURE__ */ jsx(\n        Primitive.div,\n        {\n          \"data-state\": getState(context.open),\n          ...overlayProps,\n          ref: composedRefs,\n          style: { pointerEvents: \"auto\", ...overlayProps.style }\n        }\n      ) })\n    );\n  }\n);\nvar CONTENT_NAME = \"DialogContent\";\nvar DialogContent = React.forwardRef(\n  (props, forwardedRef) => {\n    const portalContext = usePortalContext(CONTENT_NAME, props.__scopeDialog);\n    const { forceMount = portalContext.forceMount, ...contentProps } = props;\n    const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n    return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.modal ? /* @__PURE__ */ jsx(DialogContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(DialogContentNonModal, { ...contentProps, ref: forwardedRef }) });\n  }\n);\nDialogContent.displayName = CONTENT_NAME;\nvar DialogContentModal = React.forwardRef(\n  (props, forwardedRef) => {\n    const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n    const contentRef = React.useRef(null);\n    const composedRefs = useComposedRefs(forwardedRef, context.contentRef, contentRef);\n    React.useEffect(() => {\n      const content = contentRef.current;\n      if (content) return hideOthers(content);\n    }, []);\n    return /* @__PURE__ */ jsx(\n      DialogContentImpl,\n      {\n        ...props,\n        ref: composedRefs,\n        trapFocus: context.open,\n        disableOutsidePointerEvents: context.open,\n        onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n          event.preventDefault();\n          context.triggerRef.current?.focus();\n        }),\n        onPointerDownOutside: composeEventHandlers(props.onPointerDownOutside, (event) => {\n          const originalEvent = event.detail.originalEvent;\n          const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n          const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n          if (isRightClick) event.preventDefault();\n        }),\n        onFocusOutside: composeEventHandlers(\n          props.onFocusOutside,\n          (event) => event.preventDefault()\n        )\n      }\n    );\n  }\n);\nvar DialogContentNonModal = React.forwardRef(\n  (props, forwardedRef) => {\n    const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n    const hasInteractedOutsideRef = React.useRef(false);\n    const hasPointerDownOutsideRef = React.useRef(false);\n    return /* @__PURE__ */ jsx(\n      DialogContentImpl,\n      {\n        ...props,\n        ref: forwardedRef,\n        trapFocus: false,\n        disableOutsidePointerEvents: false,\n        onCloseAutoFocus: (event) => {\n          props.onCloseAutoFocus?.(event);\n          if (!event.defaultPrevented) {\n            if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n            event.preventDefault();\n          }\n          hasInteractedOutsideRef.current = false;\n          hasPointerDownOutsideRef.current = false;\n        },\n        onInteractOutside: (event) => {\n          props.onInteractOutside?.(event);\n          if (!event.defaultPrevented) {\n            hasInteractedOutsideRef.current = true;\n            if (event.detail.originalEvent.type === \"pointerdown\") {\n              hasPointerDownOutsideRef.current = true;\n            }\n          }\n          const target = event.target;\n          const targetIsTrigger = context.triggerRef.current?.contains(target);\n          if (targetIsTrigger) event.preventDefault();\n          if (event.detail.originalEvent.type === \"focusin\" && hasPointerDownOutsideRef.current) {\n            event.preventDefault();\n          }\n        }\n      }\n    );\n  }\n);\nvar DialogContentImpl = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeDialog, trapFocus, onOpenAutoFocus, onCloseAutoFocus, ...contentProps } = props;\n    const context = useDialogContext(CONTENT_NAME, __scopeDialog);\n    useFocusGuards();\n    return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(\n      FocusScope,\n      {\n        asChild: true,\n        loop: true,\n        trapped: trapFocus,\n        onMountAutoFocus: onOpenAutoFocus,\n        onUnmountAutoFocus: onCloseAutoFocus,\n        children: /* @__PURE__ */ jsx(\n          DismissableLayer,\n          {\n            role: \"dialog\",\n            id: context.contentId,\n            \"aria-describedby\": context.descriptionId,\n            \"aria-labelledby\": context.titleId,\n            \"data-state\": getState(context.open),\n            ...contentProps,\n            ref: forwardedRef,\n            deferPointerDownOutside: true,\n            onDismiss: () => context.onOpenChange(false)\n          }\n        )\n      }\n    ) });\n  }\n);\nvar TITLE_NAME = \"DialogTitle\";\nvar DialogTitle = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeDialog, ...titleProps } = props;\n    const context = useDialogContext(TITLE_NAME, __scopeDialog);\n    return /* @__PURE__ */ jsx(Primitive.h2, { id: context.titleId, ...titleProps, ref: forwardedRef });\n  }\n);\nDialogTitle.displayName = TITLE_NAME;\nvar DESCRIPTION_NAME = \"DialogDescription\";\nvar DialogDescription = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeDialog, ...descriptionProps } = props;\n    const context = useDialogContext(DESCRIPTION_NAME, __scopeDialog);\n    return /* @__PURE__ */ jsx(Primitive.p, { id: context.descriptionId, ...descriptionProps, ref: forwardedRef });\n  }\n);\nDialogDescription.displayName = DESCRIPTION_NAME;\nvar CLOSE_NAME = \"DialogClose\";\nvar DialogClose = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeDialog, ...closeProps } = props;\n    const context = useDialogContext(CLOSE_NAME, __scopeDialog);\n    return /* @__PURE__ */ jsx(\n      Primitive.button,\n      {\n        type: \"button\",\n        ...closeProps,\n        ref: forwardedRef,\n        onClick: composeEventHandlers(props.onClick, () => context.onOpenChange(false))\n      }\n    );\n  }\n);\nDialogClose.displayName = CLOSE_NAME;\nvar WarningProvider = (props) => {\n  return props.children;\n};\nfunction getState(open) {\n  return open ? \"open\" : \"closed\";\n}\nexport {\n  DialogClose as Close,\n  DialogContent as Content,\n  DialogDescription as Description,\n  Dialog,\n  DialogClose,\n  DialogContent,\n  DialogDescription,\n  DialogOverlay,\n  DialogPortal,\n  DialogTitle,\n  DialogTrigger,\n  DialogOverlay as Overlay,\n  DialogPortal as Portal,\n  Dialog as Root,\n  DialogTitle as Title,\n  DialogTrigger as Trigger,\n  WarningProvider,\n  createDialogScope\n};\n//# sourceMappingURL=index.mjs.map\n","'use client'\nimport React, { useState, useRef, useEffect, createContext, useMemo, useContext, useCallback } from 'react';\n\nfunction useLoadGsiScript(options = {}) {\r\n    const { nonce, onScriptLoadSuccess, onScriptLoadError } = options;\r\n    const [scriptLoadedSuccessfully, setScriptLoadedSuccessfully] = useState(false);\r\n    const onScriptLoadSuccessRef = useRef(onScriptLoadSuccess);\r\n    onScriptLoadSuccessRef.current = onScriptLoadSuccess;\r\n    const onScriptLoadErrorRef = useRef(onScriptLoadError);\r\n    onScriptLoadErrorRef.current = onScriptLoadError;\r\n    useEffect(() => {\r\n        const scriptTag = document.createElement('script');\r\n        scriptTag.src = 'https://accounts.google.com/gsi/client';\r\n        scriptTag.async = true;\r\n        scriptTag.defer = true;\r\n        scriptTag.nonce = nonce;\r\n        scriptTag.onload = () => {\r\n            var _a;\r\n            setScriptLoadedSuccessfully(true);\r\n            (_a = onScriptLoadSuccessRef.current) === null || _a === void 0 ? void 0 : _a.call(onScriptLoadSuccessRef);\r\n        };\r\n        scriptTag.onerror = () => {\r\n            var _a;\r\n            setScriptLoadedSuccessfully(false);\r\n            (_a = onScriptLoadErrorRef.current) === null || _a === void 0 ? void 0 : _a.call(onScriptLoadErrorRef);\r\n        };\r\n        document.body.appendChild(scriptTag);\r\n        return () => {\r\n            document.body.removeChild(scriptTag);\r\n        };\r\n    }, [nonce]);\r\n    return scriptLoadedSuccessfully;\r\n}\n\nconst GoogleOAuthContext = createContext(null);\r\nfunction GoogleOAuthProvider({ clientId, nonce, onScriptLoadSuccess, onScriptLoadError, children, }) {\r\n    const scriptLoadedSuccessfully = useLoadGsiScript({\r\n        nonce,\r\n        onScriptLoadSuccess,\r\n        onScriptLoadError,\r\n    });\r\n    const contextValue = useMemo(() => ({\r\n        clientId,\r\n        scriptLoadedSuccessfully,\r\n    }), [clientId, scriptLoadedSuccessfully]);\r\n    return (React.createElement(GoogleOAuthContext.Provider, { value: contextValue }, children));\r\n}\r\nfunction useGoogleOAuth() {\r\n    const context = useContext(GoogleOAuthContext);\r\n    if (!context) {\r\n        throw new Error('Google OAuth components must be used within GoogleOAuthProvider');\r\n    }\r\n    return context;\r\n}\n\nfunction extractClientId(credentialResponse) {\r\n    var _a;\r\n    const clientId = (_a = credentialResponse === null || credentialResponse === void 0 ? void 0 : credentialResponse.clientId) !== null && _a !== void 0 ? _a : credentialResponse === null || credentialResponse === void 0 ? void 0 : credentialResponse.client_id;\r\n    return clientId;\r\n}\n\nconst containerHeightMap = { large: 40, medium: 32, small: 20 };\r\nfunction GoogleLogin({ onSuccess, onError, useOneTap, promptMomentNotification, type = 'standard', theme = 'outline', size = 'large', text, shape, logo_alignment, width, locale, click_listener, containerProps, ...props }) {\r\n    const btnContainerRef = useRef(null);\r\n    const { clientId, scriptLoadedSuccessfully } = useGoogleOAuth();\r\n    const onSuccessRef = useRef(onSuccess);\r\n    onSuccessRef.current = onSuccess;\r\n    const onErrorRef = useRef(onError);\r\n    onErrorRef.current = onError;\r\n    const promptMomentNotificationRef = useRef(promptMomentNotification);\r\n    promptMomentNotificationRef.current = promptMomentNotification;\r\n    useEffect(() => {\r\n        var _a, _b, _c, _d, _e, _f, _g, _h, _j;\r\n        if (!scriptLoadedSuccessfully)\r\n            return;\r\n        (_c = (_b = (_a = window === null || window === void 0 ? void 0 : window.google) === null || _a === void 0 ? void 0 : _a.accounts) === null || _b === void 0 ? void 0 : _b.id) === null || _c === void 0 ? void 0 : _c.initialize({\r\n            client_id: clientId,\r\n            callback: (credentialResponse) => {\r\n                var _a;\r\n                if (!(credentialResponse === null || credentialResponse === void 0 ? void 0 : credentialResponse.credential)) {\r\n                    return (_a = onErrorRef.current) === null || _a === void 0 ? void 0 : _a.call(onErrorRef);\r\n                }\r\n                const { credential, select_by } = credentialResponse;\r\n                onSuccessRef.current({\r\n                    credential,\r\n                    clientId: extractClientId(credentialResponse),\r\n                    select_by,\r\n                });\r\n            },\r\n            ...props,\r\n        });\r\n        (_f = (_e = (_d = window === null || window === void 0 ? void 0 : window.google) === null || _d === void 0 ? void 0 : _d.accounts) === null || _e === void 0 ? void 0 : _e.id) === null || _f === void 0 ? void 0 : _f.renderButton(btnContainerRef.current, {\r\n            type,\r\n            theme,\r\n            size,\r\n            text,\r\n            shape,\r\n            logo_alignment,\r\n            width,\r\n            locale,\r\n            click_listener,\r\n        });\r\n        if (useOneTap)\r\n            (_j = (_h = (_g = window === null || window === void 0 ? void 0 : window.google) === null || _g === void 0 ? void 0 : _g.accounts) === null || _h === void 0 ? void 0 : _h.id) === null || _j === void 0 ? void 0 : _j.prompt(promptMomentNotificationRef.current);\r\n        return () => {\r\n            var _a, _b, _c;\r\n            if (useOneTap)\r\n                (_c = (_b = (_a = window === null || window === void 0 ? void 0 : window.google) === null || _a === void 0 ? void 0 : _a.accounts) === null || _b === void 0 ? void 0 : _b.id) === null || _c === void 0 ? void 0 : _c.cancel();\r\n        };\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [\r\n        clientId,\r\n        scriptLoadedSuccessfully,\r\n        useOneTap,\r\n        type,\r\n        theme,\r\n        size,\r\n        text,\r\n        shape,\r\n        logo_alignment,\r\n        width,\r\n        locale,\r\n    ]);\r\n    return (React.createElement(\"div\", { ...containerProps, ref: btnContainerRef, style: { height: containerHeightMap[size], ...containerProps === null || containerProps === void 0 ? void 0 : containerProps.style } }));\r\n}\n\nfunction googleLogout() {\r\n    var _a, _b, _c;\r\n    (_c = (_b = (_a = window === null || window === void 0 ? void 0 : window.google) === null || _a === void 0 ? void 0 : _a.accounts) === null || _b === void 0 ? void 0 : _b.id) === null || _c === void 0 ? void 0 : _c.disableAutoSelect();\r\n}\n\n/* eslint-disable import/export */\r\nfunction useGoogleLogin({ flow = 'implicit', scope = '', onSuccess, onError, onNonOAuthError, overrideScope, state, ...props }) {\r\n    const { clientId, scriptLoadedSuccessfully } = useGoogleOAuth();\r\n    const clientRef = useRef();\r\n    const onSuccessRef = useRef(onSuccess);\r\n    onSuccessRef.current = onSuccess;\r\n    const onErrorRef = useRef(onError);\r\n    onErrorRef.current = onError;\r\n    const onNonOAuthErrorRef = useRef(onNonOAuthError);\r\n    onNonOAuthErrorRef.current = onNonOAuthError;\r\n    useEffect(() => {\r\n        var _a, _b;\r\n        if (!scriptLoadedSuccessfully)\r\n            return;\r\n        const clientMethod = flow === 'implicit' ? 'initTokenClient' : 'initCodeClient';\r\n        const client = (_b = (_a = window === null || window === void 0 ? void 0 : window.google) === null || _a === void 0 ? void 0 : _a.accounts) === null || _b === void 0 ? void 0 : _b.oauth2[clientMethod]({\r\n            client_id: clientId,\r\n            scope: overrideScope ? scope : `openid profile email ${scope}`,\r\n            callback: (response) => {\r\n                var _a, _b;\r\n                if (response.error)\r\n                    return (_a = onErrorRef.current) === null || _a === void 0 ? void 0 : _a.call(onErrorRef, response);\r\n                (_b = onSuccessRef.current) === null || _b === void 0 ? void 0 : _b.call(onSuccessRef, response);\r\n            },\r\n            error_callback: (nonOAuthError) => {\r\n                var _a;\r\n                (_a = onNonOAuthErrorRef.current) === null || _a === void 0 ? void 0 : _a.call(onNonOAuthErrorRef, nonOAuthError);\r\n            },\r\n            state,\r\n            ...props,\r\n        });\r\n        clientRef.current = client;\r\n        // eslint-disable-next-line react-hooks/exhaustive-deps\r\n    }, [clientId, scriptLoadedSuccessfully, flow, scope, state]);\r\n    const loginImplicitFlow = useCallback((overrideConfig) => { var _a; return (_a = clientRef.current) === null || _a === void 0 ? void 0 : _a.requestAccessToken(overrideConfig); }, []);\r\n    const loginAuthCodeFlow = useCallback(() => { var _a; return (_a = clientRef.current) === null || _a === void 0 ? void 0 : _a.requestCode(); }, []);\r\n    return flow === 'implicit' ? loginImplicitFlow : loginAuthCodeFlow;\r\n}\n\nfunction useGoogleOneTapLogin({ onSuccess, onError, promptMomentNotification, cancel_on_tap_outside, prompt_parent_id, state_cookie_domain, hosted_domain, use_fedcm_for_prompt = false, use_fedcm_for_button = false, disabled, auto_select, }) {\r\n    const { clientId, scriptLoadedSuccessfully } = useGoogleOAuth();\r\n    const onSuccessRef = useRef(onSuccess);\r\n    onSuccessRef.current = onSuccess;\r\n    const onErrorRef = useRef(onError);\r\n    onErrorRef.current = onError;\r\n    const promptMomentNotificationRef = useRef(promptMomentNotification);\r\n    promptMomentNotificationRef.current = promptMomentNotification;\r\n    useEffect(() => {\r\n        var _a, _b, _c, _d, _e, _f, _g, _h, _j;\r\n        if (!scriptLoadedSuccessfully)\r\n            return;\r\n        if (disabled) {\r\n            (_c = (_b = (_a = window === null || window === void 0 ? void 0 : window.google) === null || _a === void 0 ? void 0 : _a.accounts) === null || _b === void 0 ? void 0 : _b.id) === null || _c === void 0 ? void 0 : _c.cancel();\r\n            return;\r\n        }\r\n        (_f = (_e = (_d = window === null || window === void 0 ? void 0 : window.google) === null || _d === void 0 ? void 0 : _d.accounts) === null || _e === void 0 ? void 0 : _e.id) === null || _f === void 0 ? void 0 : _f.initialize({\r\n            client_id: clientId,\r\n            callback: (credentialResponse) => {\r\n                var _a;\r\n                if (!(credentialResponse === null || credentialResponse === void 0 ? void 0 : credentialResponse.credential)) {\r\n                    return (_a = onErrorRef.current) === null || _a === void 0 ? void 0 : _a.call(onErrorRef);\r\n                }\r\n                const { credential, select_by } = credentialResponse;\r\n                onSuccessRef.current({\r\n                    credential,\r\n                    clientId: extractClientId(credentialResponse),\r\n                    select_by,\r\n                });\r\n            },\r\n            hosted_domain,\r\n            cancel_on_tap_outside,\r\n            prompt_parent_id,\r\n            state_cookie_domain,\r\n            use_fedcm_for_prompt,\r\n            use_fedcm_for_button,\r\n            auto_select,\r\n        });\r\n        (_j = (_h = (_g = window === null || window === void 0 ? void 0 : window.google) === null || _g === void 0 ? void 0 : _g.accounts) === null || _h === void 0 ? void 0 : _h.id) === null || _j === void 0 ? void 0 : _j.prompt(promptMomentNotificationRef.current);\r\n        return () => {\r\n            var _a, _b, _c;\r\n            (_c = (_b = (_a = window === null || window === void 0 ? void 0 : window.google) === null || _a === void 0 ? void 0 : _a.accounts) === null || _b === void 0 ? void 0 : _b.id) === null || _c === void 0 ? void 0 : _c.cancel();\r\n        };\r\n    }, [\r\n        clientId,\r\n        scriptLoadedSuccessfully,\r\n        cancel_on_tap_outside,\r\n        prompt_parent_id,\r\n        state_cookie_domain,\r\n        hosted_domain,\r\n        use_fedcm_for_prompt,\r\n        use_fedcm_for_button,\r\n        disabled,\r\n        auto_select,\r\n    ]);\r\n}\n\n/**\r\n * Checks if the user granted all the specified scope or scopes\r\n * @returns True if all the scopes are granted\r\n */\r\nfunction hasGrantedAllScopesGoogle(tokenResponse, firstScope, ...restScopes) {\r\n    var _a, _b, _c;\r\n    if (!(window === null || window === void 0 ? void 0 : window.google))\r\n        return false;\r\n    return (((_c = (_b = (_a = window === null || window === void 0 ? void 0 : window.google) === null || _a === void 0 ? void 0 : _a.accounts) === null || _b === void 0 ? void 0 : _b.oauth2) === null || _c === void 0 ? void 0 : _c.hasGrantedAllScopes(tokenResponse, firstScope, ...restScopes)) || false);\r\n}\n\n/**\r\n * Checks if the user granted any of the specified scope or scopes.\r\n * @returns True if any of the scopes are granted\r\n */\r\nfunction hasGrantedAnyScopeGoogle(tokenResponse, firstScope, ...restScopes) {\r\n    var _a, _b, _c;\r\n    if (!(window === null || window === void 0 ? void 0 : window.google))\r\n        return false;\r\n    return (((_c = (_b = (_a = window === null || window === void 0 ? void 0 : window.google) === null || _a === void 0 ? void 0 : _a.accounts) === null || _b === void 0 ? void 0 : _b.oauth2) === null || _c === void 0 ? void 0 : _c.hasGrantedAnyScope(tokenResponse, firstScope, ...restScopes)) || false);\r\n}\n\nexport { GoogleLogin, GoogleOAuthProvider, googleLogout, hasGrantedAllScopesGoogle, hasGrantedAnyScopeGoogle, useGoogleLogin, useGoogleOAuth, useGoogleOneTapLogin };\n","/**\n   * table-core\n   *\n   * Copyright (c) TanStack\n   *\n   * This source code is licensed under the MIT license found in the\n   * LICENSE.md file in the root directory of this source tree.\n   *\n   * @license MIT\n   */\n// type Person = {\n//   firstName: string\n//   lastName: string\n//   age: number\n//   visits: number\n//   status: string\n//   progress: number\n//   createdAt: Date\n//   nested: {\n//     foo: [\n//       {\n//         bar: 'bar'\n//       }\n//     ]\n//     bar: { subBar: boolean }[]\n//     baz: {\n//       foo: 'foo'\n//       bar: {\n//         baz: 'baz'\n//       }\n//     }\n//   }\n// }\n\n// const test: DeepKeys<Person> = 'nested.foo.0.bar'\n// const test2: DeepKeys<Person> = 'nested.bar'\n\n// const helper = createColumnHelper<Person>()\n\n// helper.accessor('nested.foo', {\n//   cell: info => info.getValue(),\n// })\n\n// helper.accessor('nested.foo.0.bar', {\n//   cell: info => info.getValue(),\n// })\n\n// helper.accessor('nested.bar', {\n//   cell: info => info.getValue(),\n// })\n\nfunction createColumnHelper() {\n  return {\n    accessor: (accessor, column) => {\n      return typeof accessor === 'function' ? {\n        ...column,\n        accessorFn: accessor\n      } : {\n        ...column,\n        accessorKey: accessor\n      };\n    },\n    display: column => column,\n    group: column => column\n  };\n}\n\n// Is this type a tuple?\n\n// If this type is a tuple, what indices are allowed?\n\n///\n\nfunction functionalUpdate(updater, input) {\n  return typeof updater === 'function' ? updater(input) : updater;\n}\nfunction noop() {\n  //\n}\nfunction makeStateUpdater(key, instance) {\n  return updater => {\n    instance.setState(old => {\n      return {\n        ...old,\n        [key]: functionalUpdate(updater, old[key])\n      };\n    });\n  };\n}\nfunction isFunction(d) {\n  return d instanceof Function;\n}\nfunction isNumberArray(d) {\n  return Array.isArray(d) && d.every(val => typeof val === 'number');\n}\nfunction flattenBy(arr, getChildren) {\n  const flat = [];\n  const recurse = subArr => {\n    subArr.forEach(item => {\n      flat.push(item);\n      const children = getChildren(item);\n      if (children != null && children.length) {\n        recurse(children);\n      }\n    });\n  };\n  recurse(arr);\n  return flat;\n}\nfunction memo(getDeps, fn, opts) {\n  let deps = [];\n  let result;\n  return depArgs => {\n    let depTime;\n    if (opts.key && opts.debug) depTime = Date.now();\n    const newDeps = getDeps(depArgs);\n    const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep);\n    if (!depsChanged) {\n      return result;\n    }\n    deps = newDeps;\n    let resultTime;\n    if (opts.key && opts.debug) resultTime = Date.now();\n    result = fn(...newDeps);\n    opts == null || opts.onChange == null || opts.onChange(result);\n    if (opts.key && opts.debug) {\n      if (opts != null && opts.debug()) {\n        const depEndTime = Math.round((Date.now() - depTime) * 100) / 100;\n        const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100;\n        const resultFpsPercentage = resultEndTime / 16;\n        const pad = (str, num) => {\n          str = String(str);\n          while (str.length < num) {\n            str = ' ' + str;\n          }\n          return str;\n        };\n        console.info(`%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`, `\n            font-size: .6rem;\n            font-weight: bold;\n            color: hsl(${Math.max(0, Math.min(120 - 120 * resultFpsPercentage, 120))}deg 100% 31%);`, opts == null ? void 0 : opts.key);\n      }\n    }\n    return result;\n  };\n}\nfunction getMemoOptions(tableOptions, debugLevel, key, onChange) {\n  return {\n    debug: () => {\n      var _tableOptions$debugAl;\n      return (_tableOptions$debugAl = tableOptions == null ? void 0 : tableOptions.debugAll) != null ? _tableOptions$debugAl : tableOptions[debugLevel];\n    },\n    key: process.env.NODE_ENV === 'development' && key,\n    onChange\n  };\n}\n\nfunction createCell(table, row, column, columnId) {\n  const getRenderValue = () => {\n    var _cell$getValue;\n    return (_cell$getValue = cell.getValue()) != null ? _cell$getValue : table.options.renderFallbackValue;\n  };\n  const cell = {\n    id: `${row.id}_${column.id}`,\n    row,\n    column,\n    getValue: () => row.getValue(columnId),\n    renderValue: getRenderValue,\n    getContext: memo(() => [table, column, row, cell], (table, column, row, cell) => ({\n      table,\n      column,\n      row,\n      cell: cell,\n      getValue: cell.getValue,\n      renderValue: cell.renderValue\n    }), getMemoOptions(table.options, 'debugCells', 'cell.getContext'))\n  };\n  table._features.forEach(feature => {\n    feature.createCell == null || feature.createCell(cell, column, row, table);\n  }, {});\n  return cell;\n}\n\nfunction createColumn(table, columnDef, depth, parent) {\n  var _ref, _resolvedColumnDef$id;\n  const defaultColumn = table._getDefaultColumnDef();\n  const resolvedColumnDef = {\n    ...defaultColumn,\n    ...columnDef\n  };\n  const accessorKey = resolvedColumnDef.accessorKey;\n  let id = (_ref = (_resolvedColumnDef$id = resolvedColumnDef.id) != null ? _resolvedColumnDef$id : accessorKey ? typeof String.prototype.replaceAll === 'function' ? accessorKey.replaceAll('.', '_') : accessorKey.replace(/\\./g, '_') : undefined) != null ? _ref : typeof resolvedColumnDef.header === 'string' ? resolvedColumnDef.header : undefined;\n  let accessorFn;\n  if (resolvedColumnDef.accessorFn) {\n    accessorFn = resolvedColumnDef.accessorFn;\n  } else if (accessorKey) {\n    // Support deep accessor keys\n    if (accessorKey.includes('.')) {\n      accessorFn = originalRow => {\n        let result = originalRow;\n        for (const key of accessorKey.split('.')) {\n          var _result;\n          result = (_result = result) == null ? void 0 : _result[key];\n          if (process.env.NODE_ENV !== 'production' && result === undefined) {\n            console.warn(`\"${key}\" in deeply nested key \"${accessorKey}\" returned undefined.`);\n          }\n        }\n        return result;\n      };\n    } else {\n      accessorFn = originalRow => originalRow[resolvedColumnDef.accessorKey];\n    }\n  }\n  if (!id) {\n    if (process.env.NODE_ENV !== 'production') {\n      throw new Error(resolvedColumnDef.accessorFn ? `Columns require an id when using an accessorFn` : `Columns require an id when using a non-string header`);\n    }\n    throw new Error();\n  }\n  let column = {\n    id: `${String(id)}`,\n    accessorFn,\n    parent: parent,\n    depth,\n    columnDef: resolvedColumnDef,\n    columns: [],\n    getFlatColumns: memo(() => [true], () => {\n      var _column$columns;\n      return [column, ...((_column$columns = column.columns) == null ? void 0 : _column$columns.flatMap(d => d.getFlatColumns()))];\n    }, getMemoOptions(table.options, 'debugColumns', 'column.getFlatColumns')),\n    getLeafColumns: memo(() => [table._getOrderColumnsFn()], orderColumns => {\n      var _column$columns2;\n      if ((_column$columns2 = column.columns) != null && _column$columns2.length) {\n        let leafColumns = column.columns.flatMap(column => column.getLeafColumns());\n        return orderColumns(leafColumns);\n      }\n      return [column];\n    }, getMemoOptions(table.options, 'debugColumns', 'column.getLeafColumns'))\n  };\n  for (const feature of table._features) {\n    feature.createColumn == null || feature.createColumn(column, table);\n  }\n\n  // Yes, we have to convert table to unknown, because we know more than the compiler here.\n  return column;\n}\n\nconst debug = 'debugHeaders';\n//\n\nfunction createHeader(table, column, options) {\n  var _options$id;\n  const id = (_options$id = options.id) != null ? _options$id : column.id;\n  let header = {\n    id,\n    column,\n    index: options.index,\n    isPlaceholder: !!options.isPlaceholder,\n    placeholderId: options.placeholderId,\n    depth: options.depth,\n    subHeaders: [],\n    colSpan: 0,\n    rowSpan: 0,\n    headerGroup: null,\n    getLeafHeaders: () => {\n      const leafHeaders = [];\n      const recurseHeader = h => {\n        if (h.subHeaders && h.subHeaders.length) {\n          h.subHeaders.map(recurseHeader);\n        }\n        leafHeaders.push(h);\n      };\n      recurseHeader(header);\n      return leafHeaders;\n    },\n    getContext: () => ({\n      table,\n      header: header,\n      column\n    })\n  };\n  table._features.forEach(feature => {\n    feature.createHeader == null || feature.createHeader(header, table);\n  });\n  return header;\n}\nconst Headers = {\n  createTable: table => {\n    // Header Groups\n\n    table.getHeaderGroups = memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allColumns, leafColumns, left, right) => {\n      var _left$map$filter, _right$map$filter;\n      const leftColumns = (_left$map$filter = left == null ? void 0 : left.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _left$map$filter : [];\n      const rightColumns = (_right$map$filter = right == null ? void 0 : right.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _right$map$filter : [];\n      const centerColumns = leafColumns.filter(column => !(left != null && left.includes(column.id)) && !(right != null && right.includes(column.id)));\n      const headerGroups = buildHeaderGroups(allColumns, [...leftColumns, ...centerColumns, ...rightColumns], table);\n      return headerGroups;\n    }, getMemoOptions(table.options, debug, 'getHeaderGroups'));\n    table.getCenterHeaderGroups = memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allColumns, leafColumns, left, right) => {\n      leafColumns = leafColumns.filter(column => !(left != null && left.includes(column.id)) && !(right != null && right.includes(column.id)));\n      return buildHeaderGroups(allColumns, leafColumns, table, 'center');\n    }, getMemoOptions(table.options, debug, 'getCenterHeaderGroups'));\n    table.getLeftHeaderGroups = memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left], (allColumns, leafColumns, left) => {\n      var _left$map$filter2;\n      const orderedLeafColumns = (_left$map$filter2 = left == null ? void 0 : left.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _left$map$filter2 : [];\n      return buildHeaderGroups(allColumns, orderedLeafColumns, table, 'left');\n    }, getMemoOptions(table.options, debug, 'getLeftHeaderGroups'));\n    table.getRightHeaderGroups = memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.right], (allColumns, leafColumns, right) => {\n      var _right$map$filter2;\n      const orderedLeafColumns = (_right$map$filter2 = right == null ? void 0 : right.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _right$map$filter2 : [];\n      return buildHeaderGroups(allColumns, orderedLeafColumns, table, 'right');\n    }, getMemoOptions(table.options, debug, 'getRightHeaderGroups'));\n\n    // Footer Groups\n\n    table.getFooterGroups = memo(() => [table.getHeaderGroups()], headerGroups => {\n      return [...headerGroups].reverse();\n    }, getMemoOptions(table.options, debug, 'getFooterGroups'));\n    table.getLeftFooterGroups = memo(() => [table.getLeftHeaderGroups()], headerGroups => {\n      return [...headerGroups].reverse();\n    }, getMemoOptions(table.options, debug, 'getLeftFooterGroups'));\n    table.getCenterFooterGroups = memo(() => [table.getCenterHeaderGroups()], headerGroups => {\n      return [...headerGroups].reverse();\n    }, getMemoOptions(table.options, debug, 'getCenterFooterGroups'));\n    table.getRightFooterGroups = memo(() => [table.getRightHeaderGroups()], headerGroups => {\n      return [...headerGroups].reverse();\n    }, getMemoOptions(table.options, debug, 'getRightFooterGroups'));\n\n    // Flat Headers\n\n    table.getFlatHeaders = memo(() => [table.getHeaderGroups()], headerGroups => {\n      return headerGroups.map(headerGroup => {\n        return headerGroup.headers;\n      }).flat();\n    }, getMemoOptions(table.options, debug, 'getFlatHeaders'));\n    table.getLeftFlatHeaders = memo(() => [table.getLeftHeaderGroups()], left => {\n      return left.map(headerGroup => {\n        return headerGroup.headers;\n      }).flat();\n    }, getMemoOptions(table.options, debug, 'getLeftFlatHeaders'));\n    table.getCenterFlatHeaders = memo(() => [table.getCenterHeaderGroups()], left => {\n      return left.map(headerGroup => {\n        return headerGroup.headers;\n      }).flat();\n    }, getMemoOptions(table.options, debug, 'getCenterFlatHeaders'));\n    table.getRightFlatHeaders = memo(() => [table.getRightHeaderGroups()], left => {\n      return left.map(headerGroup => {\n        return headerGroup.headers;\n      }).flat();\n    }, getMemoOptions(table.options, debug, 'getRightFlatHeaders'));\n\n    // Leaf Headers\n\n    table.getCenterLeafHeaders = memo(() => [table.getCenterFlatHeaders()], flatHeaders => {\n      return flatHeaders.filter(header => {\n        var _header$subHeaders;\n        return !((_header$subHeaders = header.subHeaders) != null && _header$subHeaders.length);\n      });\n    }, getMemoOptions(table.options, debug, 'getCenterLeafHeaders'));\n    table.getLeftLeafHeaders = memo(() => [table.getLeftFlatHeaders()], flatHeaders => {\n      return flatHeaders.filter(header => {\n        var _header$subHeaders2;\n        return !((_header$subHeaders2 = header.subHeaders) != null && _header$subHeaders2.length);\n      });\n    }, getMemoOptions(table.options, debug, 'getLeftLeafHeaders'));\n    table.getRightLeafHeaders = memo(() => [table.getRightFlatHeaders()], flatHeaders => {\n      return flatHeaders.filter(header => {\n        var _header$subHeaders3;\n        return !((_header$subHeaders3 = header.subHeaders) != null && _header$subHeaders3.length);\n      });\n    }, getMemoOptions(table.options, debug, 'getRightLeafHeaders'));\n    table.getLeafHeaders = memo(() => [table.getLeftHeaderGroups(), table.getCenterHeaderGroups(), table.getRightHeaderGroups()], (left, center, right) => {\n      var _left$0$headers, _left$, _center$0$headers, _center$, _right$0$headers, _right$;\n      return [...((_left$0$headers = (_left$ = left[0]) == null ? void 0 : _left$.headers) != null ? _left$0$headers : []), ...((_center$0$headers = (_center$ = center[0]) == null ? void 0 : _center$.headers) != null ? _center$0$headers : []), ...((_right$0$headers = (_right$ = right[0]) == null ? void 0 : _right$.headers) != null ? _right$0$headers : [])].map(header => {\n        return header.getLeafHeaders();\n      }).flat();\n    }, getMemoOptions(table.options, debug, 'getLeafHeaders'));\n  }\n};\nfunction buildHeaderGroups(allColumns, columnsToGroup, table, headerFamily) {\n  var _headerGroups$0$heade, _headerGroups$;\n  // Find the max depth of the columns:\n  // build the leaf column row\n  // build each buffer row going up\n  //    placeholder for non-existent level\n  //    real column for existing level\n\n  let maxDepth = 0;\n  const findMaxDepth = function (columns, depth) {\n    if (depth === void 0) {\n      depth = 1;\n    }\n    maxDepth = Math.max(maxDepth, depth);\n    columns.filter(column => column.getIsVisible()).forEach(column => {\n      var _column$columns;\n      if ((_column$columns = column.columns) != null && _column$columns.length) {\n        findMaxDepth(column.columns, depth + 1);\n      }\n    }, 0);\n  };\n  findMaxDepth(allColumns);\n  let headerGroups = [];\n  const createHeaderGroup = (headersToGroup, depth) => {\n    // The header group we are creating\n    const headerGroup = {\n      depth,\n      id: [headerFamily, `${depth}`].filter(Boolean).join('_'),\n      headers: []\n    };\n\n    // The parent columns we're going to scan next\n    const pendingParentHeaders = [];\n\n    // Scan each column for parents\n    headersToGroup.forEach(headerToGroup => {\n      // What is the latest (last) parent column?\n\n      const latestPendingParentHeader = [...pendingParentHeaders].reverse()[0];\n      const isLeafHeader = headerToGroup.column.depth === headerGroup.depth;\n      let column;\n      let isPlaceholder = false;\n      if (isLeafHeader && headerToGroup.column.parent) {\n        // The parent header is new\n        column = headerToGroup.column.parent;\n      } else {\n        // The parent header is repeated\n        column = headerToGroup.column;\n        isPlaceholder = true;\n      }\n      if (latestPendingParentHeader && (latestPendingParentHeader == null ? void 0 : latestPendingParentHeader.column) === column) {\n        // This column is repeated. Add it as a sub header to the next batch\n        latestPendingParentHeader.subHeaders.push(headerToGroup);\n      } else {\n        // This is a new header. Let's create it\n        const header = createHeader(table, column, {\n          id: [headerFamily, depth, column.id, headerToGroup == null ? void 0 : headerToGroup.id].filter(Boolean).join('_'),\n          isPlaceholder,\n          placeholderId: isPlaceholder ? `${pendingParentHeaders.filter(d => d.column === column).length}` : undefined,\n          depth,\n          index: pendingParentHeaders.length\n        });\n\n        // Add the headerToGroup as a subHeader of the new header\n        header.subHeaders.push(headerToGroup);\n        // Add the new header to the pendingParentHeaders to get grouped\n        // in the next batch\n        pendingParentHeaders.push(header);\n      }\n      headerGroup.headers.push(headerToGroup);\n      headerToGroup.headerGroup = headerGroup;\n    });\n    headerGroups.push(headerGroup);\n    if (depth > 0) {\n      createHeaderGroup(pendingParentHeaders, depth - 1);\n    }\n  };\n  const bottomHeaders = columnsToGroup.map((column, index) => createHeader(table, column, {\n    depth: maxDepth,\n    index\n  }));\n  createHeaderGroup(bottomHeaders, maxDepth - 1);\n  headerGroups.reverse();\n\n  // headerGroups = headerGroups.filter(headerGroup => {\n  //   return !headerGroup.headers.every(header => header.isPlaceholder)\n  // })\n\n  const recurseHeadersForSpans = headers => {\n    const filteredHeaders = headers.filter(header => header.column.getIsVisible());\n    return filteredHeaders.map(header => {\n      let colSpan = 0;\n      let rowSpan = 0;\n      let childRowSpans = [0];\n      if (header.subHeaders && header.subHeaders.length) {\n        childRowSpans = [];\n        recurseHeadersForSpans(header.subHeaders).forEach(_ref => {\n          let {\n            colSpan: childColSpan,\n            rowSpan: childRowSpan\n          } = _ref;\n          colSpan += childColSpan;\n          childRowSpans.push(childRowSpan);\n        });\n      } else {\n        colSpan = 1;\n      }\n      const minChildRowSpan = Math.min(...childRowSpans);\n      rowSpan = rowSpan + minChildRowSpan;\n      header.colSpan = colSpan;\n      header.rowSpan = rowSpan;\n      return {\n        colSpan,\n        rowSpan\n      };\n    });\n  };\n  recurseHeadersForSpans((_headerGroups$0$heade = (_headerGroups$ = headerGroups[0]) == null ? void 0 : _headerGroups$.headers) != null ? _headerGroups$0$heade : []);\n  return headerGroups;\n}\n\nconst createRow = (table, id, original, rowIndex, depth, subRows, parentId) => {\n  let row = {\n    id,\n    index: rowIndex,\n    original,\n    depth,\n    parentId,\n    _valuesCache: {},\n    _uniqueValuesCache: {},\n    getValue: columnId => {\n      if (row._valuesCache.hasOwnProperty(columnId)) {\n        return row._valuesCache[columnId];\n      }\n      const column = table.getColumn(columnId);\n      if (!(column != null && column.accessorFn)) {\n        return undefined;\n      }\n      row._valuesCache[columnId] = column.accessorFn(row.original, rowIndex);\n      return row._valuesCache[columnId];\n    },\n    getUniqueValues: columnId => {\n      if (row._uniqueValuesCache.hasOwnProperty(columnId)) {\n        return row._uniqueValuesCache[columnId];\n      }\n      const column = table.getColumn(columnId);\n      if (!(column != null && column.accessorFn)) {\n        return undefined;\n      }\n      if (!column.columnDef.getUniqueValues) {\n        row._uniqueValuesCache[columnId] = [row.getValue(columnId)];\n        return row._uniqueValuesCache[columnId];\n      }\n      row._uniqueValuesCache[columnId] = column.columnDef.getUniqueValues(row.original, rowIndex);\n      return row._uniqueValuesCache[columnId];\n    },\n    renderValue: columnId => {\n      var _row$getValue;\n      return (_row$getValue = row.getValue(columnId)) != null ? _row$getValue : table.options.renderFallbackValue;\n    },\n    subRows: subRows != null ? subRows : [],\n    getLeafRows: () => flattenBy(row.subRows, d => d.subRows),\n    getParentRow: () => row.parentId ? table.getRow(row.parentId, true) : undefined,\n    getParentRows: () => {\n      let parentRows = [];\n      let currentRow = row;\n      while (true) {\n        const parentRow = currentRow.getParentRow();\n        if (!parentRow) break;\n        parentRows.push(parentRow);\n        currentRow = parentRow;\n      }\n      return parentRows.reverse();\n    },\n    getAllCells: memo(() => [table.getAllLeafColumns()], leafColumns => {\n      return leafColumns.map(column => {\n        return createCell(table, row, column, column.id);\n      });\n    }, getMemoOptions(table.options, 'debugRows', 'getAllCells')),\n    _getAllCellsByColumnId: memo(() => [row.getAllCells()], allCells => {\n      return allCells.reduce((acc, cell) => {\n        acc[cell.column.id] = cell;\n        return acc;\n      }, {});\n    }, getMemoOptions(table.options, 'debugRows', 'getAllCellsByColumnId'))\n  };\n  for (let i = 0; i < table._features.length; i++) {\n    const feature = table._features[i];\n    feature == null || feature.createRow == null || feature.createRow(row, table);\n  }\n  return row;\n};\n\n//\n\nconst ColumnFaceting = {\n  createColumn: (column, table) => {\n    column._getFacetedRowModel = table.options.getFacetedRowModel && table.options.getFacetedRowModel(table, column.id);\n    column.getFacetedRowModel = () => {\n      if (!column._getFacetedRowModel) {\n        return table.getPreFilteredRowModel();\n      }\n      return column._getFacetedRowModel();\n    };\n    column._getFacetedUniqueValues = table.options.getFacetedUniqueValues && table.options.getFacetedUniqueValues(table, column.id);\n    column.getFacetedUniqueValues = () => {\n      if (!column._getFacetedUniqueValues) {\n        return new Map();\n      }\n      return column._getFacetedUniqueValues();\n    };\n    column._getFacetedMinMaxValues = table.options.getFacetedMinMaxValues && table.options.getFacetedMinMaxValues(table, column.id);\n    column.getFacetedMinMaxValues = () => {\n      if (!column._getFacetedMinMaxValues) {\n        return undefined;\n      }\n      return column._getFacetedMinMaxValues();\n    };\n  }\n};\n\nconst includesString = (row, columnId, filterValue) => {\n  var _filterValue$toString, _row$getValue;\n  const search = filterValue == null || (_filterValue$toString = filterValue.toString()) == null ? void 0 : _filterValue$toString.toLowerCase();\n  return Boolean((_row$getValue = row.getValue(columnId)) == null || (_row$getValue = _row$getValue.toString()) == null || (_row$getValue = _row$getValue.toLowerCase()) == null ? void 0 : _row$getValue.includes(search));\n};\nincludesString.autoRemove = val => testFalsey(val);\nconst includesStringSensitive = (row, columnId, filterValue) => {\n  var _row$getValue2;\n  return Boolean((_row$getValue2 = row.getValue(columnId)) == null || (_row$getValue2 = _row$getValue2.toString()) == null ? void 0 : _row$getValue2.includes(filterValue));\n};\nincludesStringSensitive.autoRemove = val => testFalsey(val);\nconst equalsString = (row, columnId, filterValue) => {\n  var _row$getValue3;\n  return ((_row$getValue3 = row.getValue(columnId)) == null || (_row$getValue3 = _row$getValue3.toString()) == null ? void 0 : _row$getValue3.toLowerCase()) === (filterValue == null ? void 0 : filterValue.toLowerCase());\n};\nequalsString.autoRemove = val => testFalsey(val);\nconst arrIncludes = (row, columnId, filterValue) => {\n  var _row$getValue4;\n  return (_row$getValue4 = row.getValue(columnId)) == null ? void 0 : _row$getValue4.includes(filterValue);\n};\narrIncludes.autoRemove = val => testFalsey(val);\nconst arrIncludesAll = (row, columnId, filterValue) => {\n  return !filterValue.some(val => {\n    var _row$getValue5;\n    return !((_row$getValue5 = row.getValue(columnId)) != null && _row$getValue5.includes(val));\n  });\n};\narrIncludesAll.autoRemove = val => testFalsey(val) || !(val != null && val.length);\nconst arrIncludesSome = (row, columnId, filterValue) => {\n  return filterValue.some(val => {\n    var _row$getValue6;\n    return (_row$getValue6 = row.getValue(columnId)) == null ? void 0 : _row$getValue6.includes(val);\n  });\n};\narrIncludesSome.autoRemove = val => testFalsey(val) || !(val != null && val.length);\nconst equals = (row, columnId, filterValue) => {\n  return row.getValue(columnId) === filterValue;\n};\nequals.autoRemove = val => testFalsey(val);\nconst weakEquals = (row, columnId, filterValue) => {\n  return row.getValue(columnId) == filterValue;\n};\nweakEquals.autoRemove = val => testFalsey(val);\nconst inNumberRange = (row, columnId, filterValue) => {\n  let [min, max] = filterValue;\n  const rowValue = row.getValue(columnId);\n  return rowValue >= min && rowValue <= max;\n};\ninNumberRange.resolveFilterValue = val => {\n  let [unsafeMin, unsafeMax] = val;\n  let parsedMin = typeof unsafeMin !== 'number' ? parseFloat(unsafeMin) : unsafeMin;\n  let parsedMax = typeof unsafeMax !== 'number' ? parseFloat(unsafeMax) : unsafeMax;\n  let min = unsafeMin === null || Number.isNaN(parsedMin) ? -Infinity : parsedMin;\n  let max = unsafeMax === null || Number.isNaN(parsedMax) ? Infinity : parsedMax;\n  if (min > max) {\n    const temp = min;\n    min = max;\n    max = temp;\n  }\n  return [min, max];\n};\ninNumberRange.autoRemove = val => testFalsey(val) || testFalsey(val[0]) && testFalsey(val[1]);\n\n// Export\n\nconst filterFns = {\n  includesString,\n  includesStringSensitive,\n  equalsString,\n  arrIncludes,\n  arrIncludesAll,\n  arrIncludesSome,\n  equals,\n  weakEquals,\n  inNumberRange\n};\n// Utils\n\nfunction testFalsey(val) {\n  return val === undefined || val === null || val === '';\n}\n\n//\n\nconst ColumnFiltering = {\n  getDefaultColumnDef: () => {\n    return {\n      filterFn: 'auto'\n    };\n  },\n  getInitialState: state => {\n    return {\n      columnFilters: [],\n      ...state\n    };\n  },\n  getDefaultOptions: table => {\n    return {\n      onColumnFiltersChange: makeStateUpdater('columnFilters', table),\n      filterFromLeafRows: false,\n      maxLeafRowFilterDepth: 100\n    };\n  },\n  createColumn: (column, table) => {\n    column.getAutoFilterFn = () => {\n      const firstRow = table.getCoreRowModel().flatRows[0];\n      const value = firstRow == null ? void 0 : firstRow.getValue(column.id);\n      if (typeof value === 'string') {\n        return filterFns.includesString;\n      }\n      if (typeof value === 'number') {\n        return filterFns.inNumberRange;\n      }\n      if (typeof value === 'boolean') {\n        return filterFns.equals;\n      }\n      if (value !== null && typeof value === 'object') {\n        return filterFns.equals;\n      }\n      if (Array.isArray(value)) {\n        return filterFns.arrIncludes;\n      }\n      return filterFns.weakEquals;\n    };\n    column.getFilterFn = () => {\n      var _table$options$filter, _table$options$filter2;\n      return isFunction(column.columnDef.filterFn) ? column.columnDef.filterFn : column.columnDef.filterFn === 'auto' ? column.getAutoFilterFn() : // @ts-ignore\n      (_table$options$filter = (_table$options$filter2 = table.options.filterFns) == null ? void 0 : _table$options$filter2[column.columnDef.filterFn]) != null ? _table$options$filter : filterFns[column.columnDef.filterFn];\n    };\n    column.getCanFilter = () => {\n      var _column$columnDef$ena, _table$options$enable, _table$options$enable2;\n      return ((_column$columnDef$ena = column.columnDef.enableColumnFilter) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableColumnFilters) != null ? _table$options$enable : true) && ((_table$options$enable2 = table.options.enableFilters) != null ? _table$options$enable2 : true) && !!column.accessorFn;\n    };\n    column.getIsFiltered = () => column.getFilterIndex() > -1;\n    column.getFilterValue = () => {\n      var _table$getState$colum;\n      return (_table$getState$colum = table.getState().columnFilters) == null || (_table$getState$colum = _table$getState$colum.find(d => d.id === column.id)) == null ? void 0 : _table$getState$colum.value;\n    };\n    column.getFilterIndex = () => {\n      var _table$getState$colum2, _table$getState$colum3;\n      return (_table$getState$colum2 = (_table$getState$colum3 = table.getState().columnFilters) == null ? void 0 : _table$getState$colum3.findIndex(d => d.id === column.id)) != null ? _table$getState$colum2 : -1;\n    };\n    column.setFilterValue = value => {\n      table.setColumnFilters(old => {\n        const filterFn = column.getFilterFn();\n        const previousFilter = old == null ? void 0 : old.find(d => d.id === column.id);\n        const newFilter = functionalUpdate(value, previousFilter ? previousFilter.value : undefined);\n\n        //\n        if (shouldAutoRemoveFilter(filterFn, newFilter, column)) {\n          var _old$filter;\n          return (_old$filter = old == null ? void 0 : old.filter(d => d.id !== column.id)) != null ? _old$filter : [];\n        }\n        const newFilterObj = {\n          id: column.id,\n          value: newFilter\n        };\n        if (previousFilter) {\n          var _old$map;\n          return (_old$map = old == null ? void 0 : old.map(d => {\n            if (d.id === column.id) {\n              return newFilterObj;\n            }\n            return d;\n          })) != null ? _old$map : [];\n        }\n        if (old != null && old.length) {\n          return [...old, newFilterObj];\n        }\n        return [newFilterObj];\n      });\n    };\n  },\n  createRow: (row, _table) => {\n    row.columnFilters = {};\n    row.columnFiltersMeta = {};\n  },\n  createTable: table => {\n    table.setColumnFilters = updater => {\n      const leafColumns = table.getAllLeafColumns();\n      const updateFn = old => {\n        var _functionalUpdate;\n        return (_functionalUpdate = functionalUpdate(updater, old)) == null ? void 0 : _functionalUpdate.filter(filter => {\n          const column = leafColumns.find(d => d.id === filter.id);\n          if (column) {\n            const filterFn = column.getFilterFn();\n            if (shouldAutoRemoveFilter(filterFn, filter.value, column)) {\n              return false;\n            }\n          }\n          return true;\n        });\n      };\n      table.options.onColumnFiltersChange == null || table.options.onColumnFiltersChange(updateFn);\n    };\n    table.resetColumnFilters = defaultState => {\n      var _table$initialState$c, _table$initialState;\n      table.setColumnFilters(defaultState ? [] : (_table$initialState$c = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.columnFilters) != null ? _table$initialState$c : []);\n    };\n    table.getPreFilteredRowModel = () => table.getCoreRowModel();\n    table.getFilteredRowModel = () => {\n      if (!table._getFilteredRowModel && table.options.getFilteredRowModel) {\n        table._getFilteredRowModel = table.options.getFilteredRowModel(table);\n      }\n      if (table.options.manualFiltering || !table._getFilteredRowModel) {\n        return table.getPreFilteredRowModel();\n      }\n      return table._getFilteredRowModel();\n    };\n  }\n};\nfunction shouldAutoRemoveFilter(filterFn, value, column) {\n  return (filterFn && filterFn.autoRemove ? filterFn.autoRemove(value, column) : false) || typeof value === 'undefined' || typeof value === 'string' && !value;\n}\n\nconst sum = (columnId, _leafRows, childRows) => {\n  // It's faster to just add the aggregations together instead of\n  // process leaf nodes individually\n  return childRows.reduce((sum, next) => {\n    const nextValue = next.getValue(columnId);\n    return sum + (typeof nextValue === 'number' ? nextValue : 0);\n  }, 0);\n};\nconst min = (columnId, _leafRows, childRows) => {\n  let min;\n  childRows.forEach(row => {\n    const value = row.getValue(columnId);\n    if (value != null && (min > value || min === undefined && value >= value)) {\n      min = value;\n    }\n  });\n  return min;\n};\nconst max = (columnId, _leafRows, childRows) => {\n  let max;\n  childRows.forEach(row => {\n    const value = row.getValue(columnId);\n    if (value != null && (max < value || max === undefined && value >= value)) {\n      max = value;\n    }\n  });\n  return max;\n};\nconst extent = (columnId, _leafRows, childRows) => {\n  let min;\n  let max;\n  childRows.forEach(row => {\n    const value = row.getValue(columnId);\n    if (value != null) {\n      if (min === undefined) {\n        if (value >= value) min = max = value;\n      } else {\n        if (min > value) min = value;\n        if (max < value) max = value;\n      }\n    }\n  });\n  return [min, max];\n};\nconst mean = (columnId, leafRows) => {\n  let count = 0;\n  let sum = 0;\n  leafRows.forEach(row => {\n    let value = row.getValue(columnId);\n    if (value != null && (value = +value) >= value) {\n      ++count, sum += value;\n    }\n  });\n  if (count) return sum / count;\n  return;\n};\nconst median = (columnId, leafRows) => {\n  if (!leafRows.length) {\n    return;\n  }\n  const values = leafRows.map(row => row.getValue(columnId));\n  if (!isNumberArray(values)) {\n    return;\n  }\n  if (values.length === 1) {\n    return values[0];\n  }\n  const mid = Math.floor(values.length / 2);\n  const nums = values.sort((a, b) => a - b);\n  return values.length % 2 !== 0 ? nums[mid] : (nums[mid - 1] + nums[mid]) / 2;\n};\nconst unique = (columnId, leafRows) => {\n  return Array.from(new Set(leafRows.map(d => d.getValue(columnId))).values());\n};\nconst uniqueCount = (columnId, leafRows) => {\n  return new Set(leafRows.map(d => d.getValue(columnId))).size;\n};\nconst count = (_columnId, leafRows) => {\n  return leafRows.length;\n};\nconst aggregationFns = {\n  sum,\n  min,\n  max,\n  extent,\n  mean,\n  median,\n  unique,\n  uniqueCount,\n  count\n};\n\n//\n\nconst ColumnGrouping = {\n  getDefaultColumnDef: () => {\n    return {\n      aggregatedCell: props => {\n        var _toString, _props$getValue;\n        return (_toString = (_props$getValue = props.getValue()) == null || _props$getValue.toString == null ? void 0 : _props$getValue.toString()) != null ? _toString : null;\n      },\n      aggregationFn: 'auto'\n    };\n  },\n  getInitialState: state => {\n    return {\n      grouping: [],\n      ...state\n    };\n  },\n  getDefaultOptions: table => {\n    return {\n      onGroupingChange: makeStateUpdater('grouping', table),\n      groupedColumnMode: 'reorder'\n    };\n  },\n  createColumn: (column, table) => {\n    column.toggleGrouping = () => {\n      table.setGrouping(old => {\n        // Find any existing grouping for this column\n        if (old != null && old.includes(column.id)) {\n          return old.filter(d => d !== column.id);\n        }\n        return [...(old != null ? old : []), column.id];\n      });\n    };\n    column.getCanGroup = () => {\n      var _column$columnDef$ena, _table$options$enable;\n      return ((_column$columnDef$ena = column.columnDef.enableGrouping) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableGrouping) != null ? _table$options$enable : true) && (!!column.accessorFn || !!column.columnDef.getGroupingValue);\n    };\n    column.getIsGrouped = () => {\n      var _table$getState$group;\n      return (_table$getState$group = table.getState().grouping) == null ? void 0 : _table$getState$group.includes(column.id);\n    };\n    column.getGroupedIndex = () => {\n      var _table$getState$group2;\n      return (_table$getState$group2 = table.getState().grouping) == null ? void 0 : _table$getState$group2.indexOf(column.id);\n    };\n    column.getToggleGroupingHandler = () => {\n      const canGroup = column.getCanGroup();\n      return () => {\n        if (!canGroup) return;\n        column.toggleGrouping();\n      };\n    };\n    column.getAutoAggregationFn = () => {\n      const firstRow = table.getCoreRowModel().flatRows[0];\n      const value = firstRow == null ? void 0 : firstRow.getValue(column.id);\n      if (typeof value === 'number') {\n        return aggregationFns.sum;\n      }\n      if (Object.prototype.toString.call(value) === '[object Date]') {\n        return aggregationFns.extent;\n      }\n    };\n    column.getAggregationFn = () => {\n      var _table$options$aggreg, _table$options$aggreg2;\n      if (!column) {\n        throw new Error();\n      }\n      return isFunction(column.columnDef.aggregationFn) ? column.columnDef.aggregationFn : column.columnDef.aggregationFn === 'auto' ? column.getAutoAggregationFn() : (_table$options$aggreg = (_table$options$aggreg2 = table.options.aggregationFns) == null ? void 0 : _table$options$aggreg2[column.columnDef.aggregationFn]) != null ? _table$options$aggreg : aggregationFns[column.columnDef.aggregationFn];\n    };\n  },\n  createTable: table => {\n    table.setGrouping = updater => table.options.onGroupingChange == null ? void 0 : table.options.onGroupingChange(updater);\n    table.resetGrouping = defaultState => {\n      var _table$initialState$g, _table$initialState;\n      table.setGrouping(defaultState ? [] : (_table$initialState$g = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.grouping) != null ? _table$initialState$g : []);\n    };\n    table.getPreGroupedRowModel = () => table.getFilteredRowModel();\n    table.getGroupedRowModel = () => {\n      if (!table._getGroupedRowModel && table.options.getGroupedRowModel) {\n        table._getGroupedRowModel = table.options.getGroupedRowModel(table);\n      }\n      if (table.options.manualGrouping || !table._getGroupedRowModel) {\n        return table.getPreGroupedRowModel();\n      }\n      return table._getGroupedRowModel();\n    };\n  },\n  createRow: (row, table) => {\n    row.getIsGrouped = () => !!row.groupingColumnId;\n    row.getGroupingValue = columnId => {\n      if (row._groupingValuesCache.hasOwnProperty(columnId)) {\n        return row._groupingValuesCache[columnId];\n      }\n      const column = table.getColumn(columnId);\n      if (!(column != null && column.columnDef.getGroupingValue)) {\n        return row.getValue(columnId);\n      }\n      row._groupingValuesCache[columnId] = column.columnDef.getGroupingValue(row.original);\n      return row._groupingValuesCache[columnId];\n    };\n    row._groupingValuesCache = {};\n  },\n  createCell: (cell, column, row, table) => {\n    cell.getIsGrouped = () => column.getIsGrouped() && column.id === row.groupingColumnId;\n    cell.getIsPlaceholder = () => !cell.getIsGrouped() && column.getIsGrouped();\n    cell.getIsAggregated = () => {\n      var _row$subRows;\n      return !cell.getIsGrouped() && !cell.getIsPlaceholder() && !!((_row$subRows = row.subRows) != null && _row$subRows.length);\n    };\n  }\n};\nfunction orderColumns(leafColumns, grouping, groupedColumnMode) {\n  if (!(grouping != null && grouping.length) || !groupedColumnMode) {\n    return leafColumns;\n  }\n  const nonGroupingColumns = leafColumns.filter(col => !grouping.includes(col.id));\n  if (groupedColumnMode === 'remove') {\n    return nonGroupingColumns;\n  }\n  const groupingColumns = grouping.map(g => leafColumns.find(col => col.id === g)).filter(Boolean);\n  return [...groupingColumns, ...nonGroupingColumns];\n}\n\n//\n\nconst ColumnOrdering = {\n  getInitialState: state => {\n    return {\n      columnOrder: [],\n      ...state\n    };\n  },\n  getDefaultOptions: table => {\n    return {\n      onColumnOrderChange: makeStateUpdater('columnOrder', table)\n    };\n  },\n  createColumn: (column, table) => {\n    column.getIndex = memo(position => [_getVisibleLeafColumns(table, position)], columns => columns.findIndex(d => d.id === column.id), getMemoOptions(table.options, 'debugColumns', 'getIndex'));\n    column.getIsFirstColumn = position => {\n      var _columns$;\n      const columns = _getVisibleLeafColumns(table, position);\n      return ((_columns$ = columns[0]) == null ? void 0 : _columns$.id) === column.id;\n    };\n    column.getIsLastColumn = position => {\n      var _columns;\n      const columns = _getVisibleLeafColumns(table, position);\n      return ((_columns = columns[columns.length - 1]) == null ? void 0 : _columns.id) === column.id;\n    };\n  },\n  createTable: table => {\n    table.setColumnOrder = updater => table.options.onColumnOrderChange == null ? void 0 : table.options.onColumnOrderChange(updater);\n    table.resetColumnOrder = defaultState => {\n      var _table$initialState$c;\n      table.setColumnOrder(defaultState ? [] : (_table$initialState$c = table.initialState.columnOrder) != null ? _table$initialState$c : []);\n    };\n    table._getOrderColumnsFn = memo(() => [table.getState().columnOrder, table.getState().grouping, table.options.groupedColumnMode], (columnOrder, grouping, groupedColumnMode) => columns => {\n      // Sort grouped columns to the start of the column list\n      // before the headers are built\n      let orderedColumns = [];\n\n      // If there is no order, return the normal columns\n      if (!(columnOrder != null && columnOrder.length)) {\n        orderedColumns = columns;\n      } else {\n        const columnOrderCopy = [...columnOrder];\n\n        // If there is an order, make a copy of the columns\n        const columnsCopy = [...columns];\n\n        // And make a new ordered array of the columns\n\n        // Loop over the columns and place them in order into the new array\n        while (columnsCopy.length && columnOrderCopy.length) {\n          const targetColumnId = columnOrderCopy.shift();\n          const foundIndex = columnsCopy.findIndex(d => d.id === targetColumnId);\n          if (foundIndex > -1) {\n            orderedColumns.push(columnsCopy.splice(foundIndex, 1)[0]);\n          }\n        }\n\n        // If there are any columns left, add them to the end\n        orderedColumns = [...orderedColumns, ...columnsCopy];\n      }\n      return orderColumns(orderedColumns, grouping, groupedColumnMode);\n    }, getMemoOptions(table.options, 'debugTable', '_getOrderColumnsFn'));\n  }\n};\n\n//\n\nconst getDefaultColumnPinningState = () => ({\n  left: [],\n  right: []\n});\nconst ColumnPinning = {\n  getInitialState: state => {\n    return {\n      columnPinning: getDefaultColumnPinningState(),\n      ...state\n    };\n  },\n  getDefaultOptions: table => {\n    return {\n      onColumnPinningChange: makeStateUpdater('columnPinning', table)\n    };\n  },\n  createColumn: (column, table) => {\n    column.pin = position => {\n      const columnIds = column.getLeafColumns().map(d => d.id).filter(Boolean);\n      table.setColumnPinning(old => {\n        var _old$left3, _old$right3;\n        if (position === 'right') {\n          var _old$left, _old$right;\n          return {\n            left: ((_old$left = old == null ? void 0 : old.left) != null ? _old$left : []).filter(d => !(columnIds != null && columnIds.includes(d))),\n            right: [...((_old$right = old == null ? void 0 : old.right) != null ? _old$right : []).filter(d => !(columnIds != null && columnIds.includes(d))), ...columnIds]\n          };\n        }\n        if (position === 'left') {\n          var _old$left2, _old$right2;\n          return {\n            left: [...((_old$left2 = old == null ? void 0 : old.left) != null ? _old$left2 : []).filter(d => !(columnIds != null && columnIds.includes(d))), ...columnIds],\n            right: ((_old$right2 = old == null ? void 0 : old.right) != null ? _old$right2 : []).filter(d => !(columnIds != null && columnIds.includes(d)))\n          };\n        }\n        return {\n          left: ((_old$left3 = old == null ? void 0 : old.left) != null ? _old$left3 : []).filter(d => !(columnIds != null && columnIds.includes(d))),\n          right: ((_old$right3 = old == null ? void 0 : old.right) != null ? _old$right3 : []).filter(d => !(columnIds != null && columnIds.includes(d)))\n        };\n      });\n    };\n    column.getCanPin = () => {\n      const leafColumns = column.getLeafColumns();\n      return leafColumns.some(d => {\n        var _d$columnDef$enablePi, _ref, _table$options$enable;\n        return ((_d$columnDef$enablePi = d.columnDef.enablePinning) != null ? _d$columnDef$enablePi : true) && ((_ref = (_table$options$enable = table.options.enableColumnPinning) != null ? _table$options$enable : table.options.enablePinning) != null ? _ref : true);\n      });\n    };\n    column.getIsPinned = () => {\n      const leafColumnIds = column.getLeafColumns().map(d => d.id);\n      const {\n        left,\n        right\n      } = table.getState().columnPinning;\n      const isLeft = leafColumnIds.some(d => left == null ? void 0 : left.includes(d));\n      const isRight = leafColumnIds.some(d => right == null ? void 0 : right.includes(d));\n      return isLeft ? 'left' : isRight ? 'right' : false;\n    };\n    column.getPinnedIndex = () => {\n      var _table$getState$colum, _table$getState$colum2;\n      const position = column.getIsPinned();\n      return position ? (_table$getState$colum = (_table$getState$colum2 = table.getState().columnPinning) == null || (_table$getState$colum2 = _table$getState$colum2[position]) == null ? void 0 : _table$getState$colum2.indexOf(column.id)) != null ? _table$getState$colum : -1 : 0;\n    };\n  },\n  createRow: (row, table) => {\n    row.getCenterVisibleCells = memo(() => [row._getAllVisibleCells(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allCells, left, right) => {\n      const leftAndRight = [...(left != null ? left : []), ...(right != null ? right : [])];\n      return allCells.filter(d => !leftAndRight.includes(d.column.id));\n    }, getMemoOptions(table.options, 'debugRows', 'getCenterVisibleCells'));\n    row.getLeftVisibleCells = memo(() => [row._getAllVisibleCells(), table.getState().columnPinning.left], (allCells, left) => {\n      const cells = (left != null ? left : []).map(columnId => allCells.find(cell => cell.column.id === columnId)).filter(Boolean).map(d => ({\n        ...d,\n        position: 'left'\n      }));\n      return cells;\n    }, getMemoOptions(table.options, 'debugRows', 'getLeftVisibleCells'));\n    row.getRightVisibleCells = memo(() => [row._getAllVisibleCells(), table.getState().columnPinning.right], (allCells, right) => {\n      const cells = (right != null ? right : []).map(columnId => allCells.find(cell => cell.column.id === columnId)).filter(Boolean).map(d => ({\n        ...d,\n        position: 'right'\n      }));\n      return cells;\n    }, getMemoOptions(table.options, 'debugRows', 'getRightVisibleCells'));\n  },\n  createTable: table => {\n    table.setColumnPinning = updater => table.options.onColumnPinningChange == null ? void 0 : table.options.onColumnPinningChange(updater);\n    table.resetColumnPinning = defaultState => {\n      var _table$initialState$c, _table$initialState;\n      return table.setColumnPinning(defaultState ? getDefaultColumnPinningState() : (_table$initialState$c = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.columnPinning) != null ? _table$initialState$c : getDefaultColumnPinningState());\n    };\n    table.getIsSomeColumnsPinned = position => {\n      var _pinningState$positio;\n      const pinningState = table.getState().columnPinning;\n      if (!position) {\n        var _pinningState$left, _pinningState$right;\n        return Boolean(((_pinningState$left = pinningState.left) == null ? void 0 : _pinningState$left.length) || ((_pinningState$right = pinningState.right) == null ? void 0 : _pinningState$right.length));\n      }\n      return Boolean((_pinningState$positio = pinningState[position]) == null ? void 0 : _pinningState$positio.length);\n    };\n    table.getLeftLeafColumns = memo(() => [table.getAllLeafColumns(), table.getState().columnPinning.left], (allColumns, left) => {\n      return (left != null ? left : []).map(columnId => allColumns.find(column => column.id === columnId)).filter(Boolean);\n    }, getMemoOptions(table.options, 'debugColumns', 'getLeftLeafColumns'));\n    table.getRightLeafColumns = memo(() => [table.getAllLeafColumns(), table.getState().columnPinning.right], (allColumns, right) => {\n      return (right != null ? right : []).map(columnId => allColumns.find(column => column.id === columnId)).filter(Boolean);\n    }, getMemoOptions(table.options, 'debugColumns', 'getRightLeafColumns'));\n    table.getCenterLeafColumns = memo(() => [table.getAllLeafColumns(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allColumns, left, right) => {\n      const leftAndRight = [...(left != null ? left : []), ...(right != null ? right : [])];\n      return allColumns.filter(d => !leftAndRight.includes(d.id));\n    }, getMemoOptions(table.options, 'debugColumns', 'getCenterLeafColumns'));\n  }\n};\n\nfunction safelyAccessDocument(_document) {\n  return _document || (typeof document !== 'undefined' ? document : null);\n}\n\n//\n\n//\n\nconst defaultColumnSizing = {\n  size: 150,\n  minSize: 20,\n  maxSize: Number.MAX_SAFE_INTEGER\n};\nconst getDefaultColumnSizingInfoState = () => ({\n  startOffset: null,\n  startSize: null,\n  deltaOffset: null,\n  deltaPercentage: null,\n  isResizingColumn: false,\n  columnSizingStart: []\n});\nconst ColumnSizing = {\n  getDefaultColumnDef: () => {\n    return defaultColumnSizing;\n  },\n  getInitialState: state => {\n    return {\n      columnSizing: {},\n      columnSizingInfo: getDefaultColumnSizingInfoState(),\n      ...state\n    };\n  },\n  getDefaultOptions: table => {\n    return {\n      columnResizeMode: 'onEnd',\n      columnResizeDirection: 'ltr',\n      onColumnSizingChange: makeStateUpdater('columnSizing', table),\n      onColumnSizingInfoChange: makeStateUpdater('columnSizingInfo', table)\n    };\n  },\n  createColumn: (column, table) => {\n    column.getSize = () => {\n      var _column$columnDef$min, _ref, _column$columnDef$max;\n      const columnSize = table.getState().columnSizing[column.id];\n      return Math.min(Math.max((_column$columnDef$min = column.columnDef.minSize) != null ? _column$columnDef$min : defaultColumnSizing.minSize, (_ref = columnSize != null ? columnSize : column.columnDef.size) != null ? _ref : defaultColumnSizing.size), (_column$columnDef$max = column.columnDef.maxSize) != null ? _column$columnDef$max : defaultColumnSizing.maxSize);\n    };\n    column.getStart = memo(position => [position, _getVisibleLeafColumns(table, position), table.getState().columnSizing], (position, columns) => columns.slice(0, column.getIndex(position)).reduce((sum, column) => sum + column.getSize(), 0), getMemoOptions(table.options, 'debugColumns', 'getStart'));\n    column.getAfter = memo(position => [position, _getVisibleLeafColumns(table, position), table.getState().columnSizing], (position, columns) => columns.slice(column.getIndex(position) + 1).reduce((sum, column) => sum + column.getSize(), 0), getMemoOptions(table.options, 'debugColumns', 'getAfter'));\n    column.resetSize = () => {\n      table.setColumnSizing(_ref2 => {\n        let {\n          [column.id]: _,\n          ...rest\n        } = _ref2;\n        return rest;\n      });\n    };\n    column.getCanResize = () => {\n      var _column$columnDef$ena, _table$options$enable;\n      return ((_column$columnDef$ena = column.columnDef.enableResizing) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableColumnResizing) != null ? _table$options$enable : true);\n    };\n    column.getIsResizing = () => {\n      return table.getState().columnSizingInfo.isResizingColumn === column.id;\n    };\n  },\n  createHeader: (header, table) => {\n    header.getSize = () => {\n      let sum = 0;\n      const recurse = header => {\n        if (header.subHeaders.length) {\n          header.subHeaders.forEach(recurse);\n        } else {\n          var _header$column$getSiz;\n          sum += (_header$column$getSiz = header.column.getSize()) != null ? _header$column$getSiz : 0;\n        }\n      };\n      recurse(header);\n      return sum;\n    };\n    header.getStart = () => {\n      if (header.index > 0) {\n        const prevSiblingHeader = header.headerGroup.headers[header.index - 1];\n        return prevSiblingHeader.getStart() + prevSiblingHeader.getSize();\n      }\n      return 0;\n    };\n    header.getResizeHandler = _contextDocument => {\n      const column = table.getColumn(header.column.id);\n      const canResize = column == null ? void 0 : column.getCanResize();\n      return e => {\n        if (!column || !canResize) {\n          return;\n        }\n        e.persist == null || e.persist();\n        if (isTouchStartEvent(e)) {\n          // lets not respond to multiple touches (e.g. 2 or 3 fingers)\n          if (e.touches && e.touches.length > 1) {\n            return;\n          }\n        }\n        const startSize = header.getSize();\n        const columnSizingStart = header ? header.getLeafHeaders().map(d => [d.column.id, d.column.getSize()]) : [[column.id, column.getSize()]];\n        const clientX = isTouchStartEvent(e) ? Math.round(e.touches[0].clientX) : e.clientX;\n        const newColumnSizing = {};\n        const updateOffset = (eventType, clientXPos) => {\n          if (typeof clientXPos !== 'number') {\n            return;\n          }\n          table.setColumnSizingInfo(old => {\n            var _old$startOffset, _old$startSize;\n            const deltaDirection = table.options.columnResizeDirection === 'rtl' ? -1 : 1;\n            const deltaOffset = (clientXPos - ((_old$startOffset = old == null ? void 0 : old.startOffset) != null ? _old$startOffset : 0)) * deltaDirection;\n            const deltaPercentage = Math.max(deltaOffset / ((_old$startSize = old == null ? void 0 : old.startSize) != null ? _old$startSize : 0), -0.999999);\n            old.columnSizingStart.forEach(_ref3 => {\n              let [columnId, headerSize] = _ref3;\n              newColumnSizing[columnId] = Math.round(Math.max(headerSize + headerSize * deltaPercentage, 0) * 100) / 100;\n            });\n            return {\n              ...old,\n              deltaOffset,\n              deltaPercentage\n            };\n          });\n          if (table.options.columnResizeMode === 'onChange' || eventType === 'end') {\n            table.setColumnSizing(old => ({\n              ...old,\n              ...newColumnSizing\n            }));\n          }\n        };\n        const onMove = clientXPos => updateOffset('move', clientXPos);\n        const onEnd = clientXPos => {\n          updateOffset('end', clientXPos);\n          table.setColumnSizingInfo(old => ({\n            ...old,\n            isResizingColumn: false,\n            startOffset: null,\n            startSize: null,\n            deltaOffset: null,\n            deltaPercentage: null,\n            columnSizingStart: []\n          }));\n        };\n        const contextDocument = safelyAccessDocument(_contextDocument);\n        const mouseEvents = {\n          moveHandler: e => onMove(e.clientX),\n          upHandler: e => {\n            contextDocument == null || contextDocument.removeEventListener('mousemove', mouseEvents.moveHandler);\n            contextDocument == null || contextDocument.removeEventListener('mouseup', mouseEvents.upHandler);\n            onEnd(e.clientX);\n          }\n        };\n        const touchEvents = {\n          moveHandler: e => {\n            if (e.cancelable) {\n              e.preventDefault();\n              e.stopPropagation();\n            }\n            onMove(e.touches[0].clientX);\n            return false;\n          },\n          upHandler: e => {\n            var _e$touches$;\n            contextDocument == null || contextDocument.removeEventListener('touchmove', touchEvents.moveHandler);\n            contextDocument == null || contextDocument.removeEventListener('touchend', touchEvents.upHandler);\n            if (e.cancelable) {\n              e.preventDefault();\n              e.stopPropagation();\n            }\n            onEnd((_e$touches$ = e.touches[0]) == null ? void 0 : _e$touches$.clientX);\n          }\n        };\n        const passiveIfSupported = passiveEventSupported() ? {\n          passive: false\n        } : false;\n        if (isTouchStartEvent(e)) {\n          contextDocument == null || contextDocument.addEventListener('touchmove', touchEvents.moveHandler, passiveIfSupported);\n          contextDocument == null || contextDocument.addEventListener('touchend', touchEvents.upHandler, passiveIfSupported);\n        } else {\n          contextDocument == null || contextDocument.addEventListener('mousemove', mouseEvents.moveHandler, passiveIfSupported);\n          contextDocument == null || contextDocument.addEventListener('mouseup', mouseEvents.upHandler, passiveIfSupported);\n        }\n        table.setColumnSizingInfo(old => ({\n          ...old,\n          startOffset: clientX,\n          startSize,\n          deltaOffset: 0,\n          deltaPercentage: 0,\n          columnSizingStart,\n          isResizingColumn: column.id\n        }));\n      };\n    };\n  },\n  createTable: table => {\n    table.setColumnSizing = updater => table.options.onColumnSizingChange == null ? void 0 : table.options.onColumnSizingChange(updater);\n    table.setColumnSizingInfo = updater => table.options.onColumnSizingInfoChange == null ? void 0 : table.options.onColumnSizingInfoChange(updater);\n    table.resetColumnSizing = defaultState => {\n      var _table$initialState$c;\n      table.setColumnSizing(defaultState ? {} : (_table$initialState$c = table.initialState.columnSizing) != null ? _table$initialState$c : {});\n    };\n    table.resetHeaderSizeInfo = defaultState => {\n      var _table$initialState$c2;\n      table.setColumnSizingInfo(defaultState ? getDefaultColumnSizingInfoState() : (_table$initialState$c2 = table.initialState.columnSizingInfo) != null ? _table$initialState$c2 : getDefaultColumnSizingInfoState());\n    };\n    table.getTotalSize = () => {\n      var _table$getHeaderGroup, _table$getHeaderGroup2;\n      return (_table$getHeaderGroup = (_table$getHeaderGroup2 = table.getHeaderGroups()[0]) == null ? void 0 : _table$getHeaderGroup2.headers.reduce((sum, header) => {\n        return sum + header.getSize();\n      }, 0)) != null ? _table$getHeaderGroup : 0;\n    };\n    table.getLeftTotalSize = () => {\n      var _table$getLeftHeaderG, _table$getLeftHeaderG2;\n      return (_table$getLeftHeaderG = (_table$getLeftHeaderG2 = table.getLeftHeaderGroups()[0]) == null ? void 0 : _table$getLeftHeaderG2.headers.reduce((sum, header) => {\n        return sum + header.getSize();\n      }, 0)) != null ? _table$getLeftHeaderG : 0;\n    };\n    table.getCenterTotalSize = () => {\n      var _table$getCenterHeade, _table$getCenterHeade2;\n      return (_table$getCenterHeade = (_table$getCenterHeade2 = table.getCenterHeaderGroups()[0]) == null ? void 0 : _table$getCenterHeade2.headers.reduce((sum, header) => {\n        return sum + header.getSize();\n      }, 0)) != null ? _table$getCenterHeade : 0;\n    };\n    table.getRightTotalSize = () => {\n      var _table$getRightHeader, _table$getRightHeader2;\n      return (_table$getRightHeader = (_table$getRightHeader2 = table.getRightHeaderGroups()[0]) == null ? void 0 : _table$getRightHeader2.headers.reduce((sum, header) => {\n        return sum + header.getSize();\n      }, 0)) != null ? _table$getRightHeader : 0;\n    };\n  }\n};\nlet passiveSupported = null;\nfunction passiveEventSupported() {\n  if (typeof passiveSupported === 'boolean') return passiveSupported;\n  let supported = false;\n  try {\n    const options = {\n      get passive() {\n        supported = true;\n        return false;\n      }\n    };\n    const noop = () => {};\n    window.addEventListener('test', noop, options);\n    window.removeEventListener('test', noop);\n  } catch (err) {\n    supported = false;\n  }\n  passiveSupported = supported;\n  return passiveSupported;\n}\nfunction isTouchStartEvent(e) {\n  return e.type === 'touchstart';\n}\n\n//\n\nconst ColumnVisibility = {\n  getInitialState: state => {\n    return {\n      columnVisibility: {},\n      ...state\n    };\n  },\n  getDefaultOptions: table => {\n    return {\n      onColumnVisibilityChange: makeStateUpdater('columnVisibility', table)\n    };\n  },\n  createColumn: (column, table) => {\n    column.toggleVisibility = value => {\n      if (column.getCanHide()) {\n        table.setColumnVisibility(old => ({\n          ...old,\n          [column.id]: value != null ? value : !column.getIsVisible()\n        }));\n      }\n    };\n    column.getIsVisible = () => {\n      var _ref, _table$getState$colum;\n      const childColumns = column.columns;\n      return (_ref = childColumns.length ? childColumns.some(c => c.getIsVisible()) : (_table$getState$colum = table.getState().columnVisibility) == null ? void 0 : _table$getState$colum[column.id]) != null ? _ref : true;\n    };\n    column.getCanHide = () => {\n      var _column$columnDef$ena, _table$options$enable;\n      return ((_column$columnDef$ena = column.columnDef.enableHiding) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableHiding) != null ? _table$options$enable : true);\n    };\n    column.getToggleVisibilityHandler = () => {\n      return e => {\n        column.toggleVisibility == null || column.toggleVisibility(e.target.checked);\n      };\n    };\n  },\n  createRow: (row, table) => {\n    row._getAllVisibleCells = memo(() => [row.getAllCells(), table.getState().columnVisibility], cells => {\n      return cells.filter(cell => cell.column.getIsVisible());\n    }, getMemoOptions(table.options, 'debugRows', '_getAllVisibleCells'));\n    row.getVisibleCells = memo(() => [row.getLeftVisibleCells(), row.getCenterVisibleCells(), row.getRightVisibleCells()], (left, center, right) => [...left, ...center, ...right], getMemoOptions(table.options, 'debugRows', 'getVisibleCells'));\n  },\n  createTable: table => {\n    const makeVisibleColumnsMethod = (key, getColumns) => {\n      return memo(() => [getColumns(), getColumns().filter(d => d.getIsVisible()).map(d => d.id).join('_')], columns => {\n        return columns.filter(d => d.getIsVisible == null ? void 0 : d.getIsVisible());\n      }, getMemoOptions(table.options, 'debugColumns', key));\n    };\n    table.getVisibleFlatColumns = makeVisibleColumnsMethod('getVisibleFlatColumns', () => table.getAllFlatColumns());\n    table.getVisibleLeafColumns = makeVisibleColumnsMethod('getVisibleLeafColumns', () => table.getAllLeafColumns());\n    table.getLeftVisibleLeafColumns = makeVisibleColumnsMethod('getLeftVisibleLeafColumns', () => table.getLeftLeafColumns());\n    table.getRightVisibleLeafColumns = makeVisibleColumnsMethod('getRightVisibleLeafColumns', () => table.getRightLeafColumns());\n    table.getCenterVisibleLeafColumns = makeVisibleColumnsMethod('getCenterVisibleLeafColumns', () => table.getCenterLeafColumns());\n    table.setColumnVisibility = updater => table.options.onColumnVisibilityChange == null ? void 0 : table.options.onColumnVisibilityChange(updater);\n    table.resetColumnVisibility = defaultState => {\n      var _table$initialState$c;\n      table.setColumnVisibility(defaultState ? {} : (_table$initialState$c = table.initialState.columnVisibility) != null ? _table$initialState$c : {});\n    };\n    table.toggleAllColumnsVisible = value => {\n      var _value;\n      value = (_value = value) != null ? _value : !table.getIsAllColumnsVisible();\n      table.setColumnVisibility(table.getAllLeafColumns().reduce((obj, column) => ({\n        ...obj,\n        [column.id]: !value ? !(column.getCanHide != null && column.getCanHide()) : value\n      }), {}));\n    };\n    table.getIsAllColumnsVisible = () => !table.getAllLeafColumns().some(column => !(column.getIsVisible != null && column.getIsVisible()));\n    table.getIsSomeColumnsVisible = () => table.getAllLeafColumns().some(column => column.getIsVisible == null ? void 0 : column.getIsVisible());\n    table.getToggleAllColumnsVisibilityHandler = () => {\n      return e => {\n        var _target;\n        table.toggleAllColumnsVisible((_target = e.target) == null ? void 0 : _target.checked);\n      };\n    };\n  }\n};\nfunction _getVisibleLeafColumns(table, position) {\n  return !position ? table.getVisibleLeafColumns() : position === 'center' ? table.getCenterVisibleLeafColumns() : position === 'left' ? table.getLeftVisibleLeafColumns() : table.getRightVisibleLeafColumns();\n}\n\n//\n\nconst GlobalFaceting = {\n  createTable: table => {\n    table._getGlobalFacetedRowModel = table.options.getFacetedRowModel && table.options.getFacetedRowModel(table, '__global__');\n    table.getGlobalFacetedRowModel = () => {\n      if (table.options.manualFiltering || !table._getGlobalFacetedRowModel) {\n        return table.getPreFilteredRowModel();\n      }\n      return table._getGlobalFacetedRowModel();\n    };\n    table._getGlobalFacetedUniqueValues = table.options.getFacetedUniqueValues && table.options.getFacetedUniqueValues(table, '__global__');\n    table.getGlobalFacetedUniqueValues = () => {\n      if (!table._getGlobalFacetedUniqueValues) {\n        return new Map();\n      }\n      return table._getGlobalFacetedUniqueValues();\n    };\n    table._getGlobalFacetedMinMaxValues = table.options.getFacetedMinMaxValues && table.options.getFacetedMinMaxValues(table, '__global__');\n    table.getGlobalFacetedMinMaxValues = () => {\n      if (!table._getGlobalFacetedMinMaxValues) {\n        return;\n      }\n      return table._getGlobalFacetedMinMaxValues();\n    };\n  }\n};\n\n//\n\nconst GlobalFiltering = {\n  getInitialState: state => {\n    return {\n      globalFilter: undefined,\n      ...state\n    };\n  },\n  getDefaultOptions: table => {\n    return {\n      onGlobalFilterChange: makeStateUpdater('globalFilter', table),\n      globalFilterFn: 'auto',\n      getColumnCanGlobalFilter: column => {\n        var _table$getCoreRowMode;\n        const value = (_table$getCoreRowMode = table.getCoreRowModel().flatRows[0]) == null || (_table$getCoreRowMode = _table$getCoreRowMode._getAllCellsByColumnId()[column.id]) == null ? void 0 : _table$getCoreRowMode.getValue();\n        return typeof value === 'string' || typeof value === 'number';\n      }\n    };\n  },\n  createColumn: (column, table) => {\n    column.getCanGlobalFilter = () => {\n      var _column$columnDef$ena, _table$options$enable, _table$options$enable2, _table$options$getCol;\n      return ((_column$columnDef$ena = column.columnDef.enableGlobalFilter) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableGlobalFilter) != null ? _table$options$enable : true) && ((_table$options$enable2 = table.options.enableFilters) != null ? _table$options$enable2 : true) && ((_table$options$getCol = table.options.getColumnCanGlobalFilter == null ? void 0 : table.options.getColumnCanGlobalFilter(column)) != null ? _table$options$getCol : true) && !!column.accessorFn;\n    };\n  },\n  createTable: table => {\n    table.getGlobalAutoFilterFn = () => {\n      return filterFns.includesString;\n    };\n    table.getGlobalFilterFn = () => {\n      var _table$options$filter, _table$options$filter2;\n      const {\n        globalFilterFn: globalFilterFn\n      } = table.options;\n      return isFunction(globalFilterFn) ? globalFilterFn : globalFilterFn === 'auto' ? table.getGlobalAutoFilterFn() : (_table$options$filter = (_table$options$filter2 = table.options.filterFns) == null ? void 0 : _table$options$filter2[globalFilterFn]) != null ? _table$options$filter : filterFns[globalFilterFn];\n    };\n    table.setGlobalFilter = updater => {\n      table.options.onGlobalFilterChange == null || table.options.onGlobalFilterChange(updater);\n    };\n    table.resetGlobalFilter = defaultState => {\n      table.setGlobalFilter(defaultState ? undefined : table.initialState.globalFilter);\n    };\n  }\n};\n\n//\n\nconst RowExpanding = {\n  getInitialState: state => {\n    return {\n      expanded: {},\n      ...state\n    };\n  },\n  getDefaultOptions: table => {\n    return {\n      onExpandedChange: makeStateUpdater('expanded', table),\n      paginateExpandedRows: true\n    };\n  },\n  createTable: table => {\n    let registered = false;\n    let queued = false;\n    table._autoResetExpanded = () => {\n      var _ref, _table$options$autoRe;\n      if (!registered) {\n        table._queue(() => {\n          registered = true;\n        });\n        return;\n      }\n      if ((_ref = (_table$options$autoRe = table.options.autoResetAll) != null ? _table$options$autoRe : table.options.autoResetExpanded) != null ? _ref : !table.options.manualExpanding) {\n        if (queued) return;\n        queued = true;\n        table._queue(() => {\n          table.resetExpanded();\n          queued = false;\n        });\n      }\n    };\n    table.setExpanded = updater => table.options.onExpandedChange == null ? void 0 : table.options.onExpandedChange(updater);\n    table.toggleAllRowsExpanded = expanded => {\n      if (expanded != null ? expanded : !table.getIsAllRowsExpanded()) {\n        table.setExpanded(true);\n      } else {\n        table.setExpanded({});\n      }\n    };\n    table.resetExpanded = defaultState => {\n      var _table$initialState$e, _table$initialState;\n      table.setExpanded(defaultState ? {} : (_table$initialState$e = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.expanded) != null ? _table$initialState$e : {});\n    };\n    table.getCanSomeRowsExpand = () => {\n      return table.getPrePaginationRowModel().flatRows.some(row => row.getCanExpand());\n    };\n    table.getToggleAllRowsExpandedHandler = () => {\n      return e => {\n        e.persist == null || e.persist();\n        table.toggleAllRowsExpanded();\n      };\n    };\n    table.getIsSomeRowsExpanded = () => {\n      const expanded = table.getState().expanded;\n      return expanded === true || Object.values(expanded).some(Boolean);\n    };\n    table.getIsAllRowsExpanded = () => {\n      const expanded = table.getState().expanded;\n\n      // If expanded is true, save some cycles and return true\n      if (typeof expanded === 'boolean') {\n        return expanded === true;\n      }\n      if (!Object.keys(expanded).length) {\n        return false;\n      }\n\n      // If any row is not expanded, return false\n      if (table.getRowModel().flatRows.some(row => !row.getIsExpanded())) {\n        return false;\n      }\n\n      // They must all be expanded :shrug:\n      return true;\n    };\n    table.getExpandedDepth = () => {\n      let maxDepth = 0;\n      const rowIds = table.getState().expanded === true ? Object.keys(table.getRowModel().rowsById) : Object.keys(table.getState().expanded);\n      rowIds.forEach(id => {\n        const splitId = id.split('.');\n        maxDepth = Math.max(maxDepth, splitId.length);\n      });\n      return maxDepth;\n    };\n    table.getPreExpandedRowModel = () => table.getSortedRowModel();\n    table.getExpandedRowModel = () => {\n      if (!table._getExpandedRowModel && table.options.getExpandedRowModel) {\n        table._getExpandedRowModel = table.options.getExpandedRowModel(table);\n      }\n      if (table.options.manualExpanding || !table._getExpandedRowModel) {\n        return table.getPreExpandedRowModel();\n      }\n      return table._getExpandedRowModel();\n    };\n  },\n  createRow: (row, table) => {\n    row.toggleExpanded = expanded => {\n      table.setExpanded(old => {\n        var _expanded;\n        const exists = old === true ? true : !!(old != null && old[row.id]);\n        let oldExpanded = {};\n        if (old === true) {\n          Object.keys(table.getRowModel().rowsById).forEach(rowId => {\n            oldExpanded[rowId] = true;\n          });\n        } else {\n          oldExpanded = old;\n        }\n        expanded = (_expanded = expanded) != null ? _expanded : !exists;\n        if (!exists && expanded) {\n          return {\n            ...oldExpanded,\n            [row.id]: true\n          };\n        }\n        if (exists && !expanded) {\n          const {\n            [row.id]: _,\n            ...rest\n          } = oldExpanded;\n          return rest;\n        }\n        return old;\n      });\n    };\n    row.getIsExpanded = () => {\n      var _table$options$getIsR;\n      const expanded = table.getState().expanded;\n      return !!((_table$options$getIsR = table.options.getIsRowExpanded == null ? void 0 : table.options.getIsRowExpanded(row)) != null ? _table$options$getIsR : expanded === true || (expanded == null ? void 0 : expanded[row.id]));\n    };\n    row.getCanExpand = () => {\n      var _table$options$getRow, _table$options$enable, _row$subRows;\n      return (_table$options$getRow = table.options.getRowCanExpand == null ? void 0 : table.options.getRowCanExpand(row)) != null ? _table$options$getRow : ((_table$options$enable = table.options.enableExpanding) != null ? _table$options$enable : true) && !!((_row$subRows = row.subRows) != null && _row$subRows.length);\n    };\n    row.getIsAllParentsExpanded = () => {\n      let isFullyExpanded = true;\n      let currentRow = row;\n      while (isFullyExpanded && currentRow.parentId) {\n        currentRow = table.getRow(currentRow.parentId, true);\n        isFullyExpanded = currentRow.getIsExpanded();\n      }\n      return isFullyExpanded;\n    };\n    row.getToggleExpandedHandler = () => {\n      const canExpand = row.getCanExpand();\n      return () => {\n        if (!canExpand) return;\n        row.toggleExpanded();\n      };\n    };\n  }\n};\n\n//\n\nconst defaultPageIndex = 0;\nconst defaultPageSize = 10;\nconst getDefaultPaginationState = () => ({\n  pageIndex: defaultPageIndex,\n  pageSize: defaultPageSize\n});\nconst RowPagination = {\n  getInitialState: state => {\n    return {\n      ...state,\n      pagination: {\n        ...getDefaultPaginationState(),\n        ...(state == null ? void 0 : state.pagination)\n      }\n    };\n  },\n  getDefaultOptions: table => {\n    return {\n      onPaginationChange: makeStateUpdater('pagination', table)\n    };\n  },\n  createTable: table => {\n    let registered = false;\n    let queued = false;\n    table._autoResetPageIndex = () => {\n      var _ref, _table$options$autoRe;\n      if (!registered) {\n        table._queue(() => {\n          registered = true;\n        });\n        return;\n      }\n      if ((_ref = (_table$options$autoRe = table.options.autoResetAll) != null ? _table$options$autoRe : table.options.autoResetPageIndex) != null ? _ref : !table.options.manualPagination) {\n        if (queued) return;\n        queued = true;\n        table._queue(() => {\n          table.resetPageIndex();\n          queued = false;\n        });\n      }\n    };\n    table.setPagination = updater => {\n      const safeUpdater = old => {\n        let newState = functionalUpdate(updater, old);\n        return newState;\n      };\n      return table.options.onPaginationChange == null ? void 0 : table.options.onPaginationChange(safeUpdater);\n    };\n    table.resetPagination = defaultState => {\n      var _table$initialState$p;\n      table.setPagination(defaultState ? getDefaultPaginationState() : (_table$initialState$p = table.initialState.pagination) != null ? _table$initialState$p : getDefaultPaginationState());\n    };\n    table.setPageIndex = updater => {\n      table.setPagination(old => {\n        let pageIndex = functionalUpdate(updater, old.pageIndex);\n        const maxPageIndex = typeof table.options.pageCount === 'undefined' || table.options.pageCount === -1 ? Number.MAX_SAFE_INTEGER : table.options.pageCount - 1;\n        pageIndex = Math.max(0, Math.min(pageIndex, maxPageIndex));\n        return {\n          ...old,\n          pageIndex\n        };\n      });\n    };\n    table.resetPageIndex = defaultState => {\n      var _table$initialState$p2, _table$initialState;\n      table.setPageIndex(defaultState ? defaultPageIndex : (_table$initialState$p2 = (_table$initialState = table.initialState) == null || (_table$initialState = _table$initialState.pagination) == null ? void 0 : _table$initialState.pageIndex) != null ? _table$initialState$p2 : defaultPageIndex);\n    };\n    table.resetPageSize = defaultState => {\n      var _table$initialState$p3, _table$initialState2;\n      table.setPageSize(defaultState ? defaultPageSize : (_table$initialState$p3 = (_table$initialState2 = table.initialState) == null || (_table$initialState2 = _table$initialState2.pagination) == null ? void 0 : _table$initialState2.pageSize) != null ? _table$initialState$p3 : defaultPageSize);\n    };\n    table.setPageSize = updater => {\n      table.setPagination(old => {\n        const pageSize = Math.max(1, functionalUpdate(updater, old.pageSize));\n        const topRowIndex = old.pageSize * old.pageIndex;\n        const pageIndex = Math.floor(topRowIndex / pageSize);\n        return {\n          ...old,\n          pageIndex,\n          pageSize\n        };\n      });\n    };\n    //deprecated\n    table.setPageCount = updater => table.setPagination(old => {\n      var _table$options$pageCo;\n      let newPageCount = functionalUpdate(updater, (_table$options$pageCo = table.options.pageCount) != null ? _table$options$pageCo : -1);\n      if (typeof newPageCount === 'number') {\n        newPageCount = Math.max(-1, newPageCount);\n      }\n      return {\n        ...old,\n        pageCount: newPageCount\n      };\n    });\n    table.getPageOptions = memo(() => [table.getPageCount()], pageCount => {\n      let pageOptions = [];\n      if (pageCount && pageCount > 0) {\n        pageOptions = [...new Array(pageCount)].fill(null).map((_, i) => i);\n      }\n      return pageOptions;\n    }, getMemoOptions(table.options, 'debugTable', 'getPageOptions'));\n    table.getCanPreviousPage = () => table.getState().pagination.pageIndex > 0;\n    table.getCanNextPage = () => {\n      const {\n        pageIndex\n      } = table.getState().pagination;\n      const pageCount = table.getPageCount();\n      if (pageCount === -1) {\n        return true;\n      }\n      if (pageCount === 0) {\n        return false;\n      }\n      return pageIndex < pageCount - 1;\n    };\n    table.previousPage = () => {\n      return table.setPageIndex(old => old - 1);\n    };\n    table.nextPage = () => {\n      return table.setPageIndex(old => {\n        return old + 1;\n      });\n    };\n    table.firstPage = () => {\n      return table.setPageIndex(0);\n    };\n    table.lastPage = () => {\n      return table.setPageIndex(table.getPageCount() - 1);\n    };\n    table.getPrePaginationRowModel = () => table.getExpandedRowModel();\n    table.getPaginationRowModel = () => {\n      if (!table._getPaginationRowModel && table.options.getPaginationRowModel) {\n        table._getPaginationRowModel = table.options.getPaginationRowModel(table);\n      }\n      if (table.options.manualPagination || !table._getPaginationRowModel) {\n        return table.getPrePaginationRowModel();\n      }\n      return table._getPaginationRowModel();\n    };\n    table.getPageCount = () => {\n      var _table$options$pageCo2;\n      return (_table$options$pageCo2 = table.options.pageCount) != null ? _table$options$pageCo2 : Math.ceil(table.getRowCount() / table.getState().pagination.pageSize);\n    };\n    table.getRowCount = () => {\n      var _table$options$rowCou;\n      return (_table$options$rowCou = table.options.rowCount) != null ? _table$options$rowCou : table.getPrePaginationRowModel().rows.length;\n    };\n  }\n};\n\n//\n\nconst getDefaultRowPinningState = () => ({\n  top: [],\n  bottom: []\n});\nconst RowPinning = {\n  getInitialState: state => {\n    return {\n      rowPinning: getDefaultRowPinningState(),\n      ...state\n    };\n  },\n  getDefaultOptions: table => {\n    return {\n      onRowPinningChange: makeStateUpdater('rowPinning', table)\n    };\n  },\n  createRow: (row, table) => {\n    row.pin = (position, includeLeafRows, includeParentRows) => {\n      const leafRowIds = includeLeafRows ? row.getLeafRows().map(_ref => {\n        let {\n          id\n        } = _ref;\n        return id;\n      }) : [];\n      const parentRowIds = includeParentRows ? row.getParentRows().map(_ref2 => {\n        let {\n          id\n        } = _ref2;\n        return id;\n      }) : [];\n      const rowIds = new Set([...parentRowIds, row.id, ...leafRowIds]);\n      table.setRowPinning(old => {\n        var _old$top3, _old$bottom3;\n        if (position === 'bottom') {\n          var _old$top, _old$bottom;\n          return {\n            top: ((_old$top = old == null ? void 0 : old.top) != null ? _old$top : []).filter(d => !(rowIds != null && rowIds.has(d))),\n            bottom: [...((_old$bottom = old == null ? void 0 : old.bottom) != null ? _old$bottom : []).filter(d => !(rowIds != null && rowIds.has(d))), ...Array.from(rowIds)]\n          };\n        }\n        if (position === 'top') {\n          var _old$top2, _old$bottom2;\n          return {\n            top: [...((_old$top2 = old == null ? void 0 : old.top) != null ? _old$top2 : []).filter(d => !(rowIds != null && rowIds.has(d))), ...Array.from(rowIds)],\n            bottom: ((_old$bottom2 = old == null ? void 0 : old.bottom) != null ? _old$bottom2 : []).filter(d => !(rowIds != null && rowIds.has(d)))\n          };\n        }\n        return {\n          top: ((_old$top3 = old == null ? void 0 : old.top) != null ? _old$top3 : []).filter(d => !(rowIds != null && rowIds.has(d))),\n          bottom: ((_old$bottom3 = old == null ? void 0 : old.bottom) != null ? _old$bottom3 : []).filter(d => !(rowIds != null && rowIds.has(d)))\n        };\n      });\n    };\n    row.getCanPin = () => {\n      var _ref3;\n      const {\n        enableRowPinning,\n        enablePinning\n      } = table.options;\n      if (typeof enableRowPinning === 'function') {\n        return enableRowPinning(row);\n      }\n      return (_ref3 = enableRowPinning != null ? enableRowPinning : enablePinning) != null ? _ref3 : true;\n    };\n    row.getIsPinned = () => {\n      const rowIds = [row.id];\n      const {\n        top,\n        bottom\n      } = table.getState().rowPinning;\n      const isTop = rowIds.some(d => top == null ? void 0 : top.includes(d));\n      const isBottom = rowIds.some(d => bottom == null ? void 0 : bottom.includes(d));\n      return isTop ? 'top' : isBottom ? 'bottom' : false;\n    };\n    row.getPinnedIndex = () => {\n      var _ref4, _visiblePinnedRowIds$;\n      const position = row.getIsPinned();\n      if (!position) return -1;\n      const visiblePinnedRowIds = (_ref4 = position === 'top' ? table.getTopRows() : table.getBottomRows()) == null ? void 0 : _ref4.map(_ref5 => {\n        let {\n          id\n        } = _ref5;\n        return id;\n      });\n      return (_visiblePinnedRowIds$ = visiblePinnedRowIds == null ? void 0 : visiblePinnedRowIds.indexOf(row.id)) != null ? _visiblePinnedRowIds$ : -1;\n    };\n  },\n  createTable: table => {\n    table.setRowPinning = updater => table.options.onRowPinningChange == null ? void 0 : table.options.onRowPinningChange(updater);\n    table.resetRowPinning = defaultState => {\n      var _table$initialState$r, _table$initialState;\n      return table.setRowPinning(defaultState ? getDefaultRowPinningState() : (_table$initialState$r = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.rowPinning) != null ? _table$initialState$r : getDefaultRowPinningState());\n    };\n    table.getIsSomeRowsPinned = position => {\n      var _pinningState$positio;\n      const pinningState = table.getState().rowPinning;\n      if (!position) {\n        var _pinningState$top, _pinningState$bottom;\n        return Boolean(((_pinningState$top = pinningState.top) == null ? void 0 : _pinningState$top.length) || ((_pinningState$bottom = pinningState.bottom) == null ? void 0 : _pinningState$bottom.length));\n      }\n      return Boolean((_pinningState$positio = pinningState[position]) == null ? void 0 : _pinningState$positio.length);\n    };\n    table._getPinnedRows = (visibleRows, pinnedRowIds, position) => {\n      var _table$options$keepPi;\n      const rows = ((_table$options$keepPi = table.options.keepPinnedRows) != null ? _table$options$keepPi : true) ?\n      //get all rows that are pinned even if they would not be otherwise visible\n      //account for expanded parent rows, but not pagination or filtering\n      (pinnedRowIds != null ? pinnedRowIds : []).map(rowId => {\n        const row = table.getRow(rowId, true);\n        return row.getIsAllParentsExpanded() ? row : null;\n      }) :\n      //else get only visible rows that are pinned\n      (pinnedRowIds != null ? pinnedRowIds : []).map(rowId => visibleRows.find(row => row.id === rowId));\n      return rows.filter(Boolean).map(d => ({\n        ...d,\n        position\n      }));\n    };\n    table.getTopRows = memo(() => [table.getRowModel().rows, table.getState().rowPinning.top], (allRows, topPinnedRowIds) => table._getPinnedRows(allRows, topPinnedRowIds, 'top'), getMemoOptions(table.options, 'debugRows', 'getTopRows'));\n    table.getBottomRows = memo(() => [table.getRowModel().rows, table.getState().rowPinning.bottom], (allRows, bottomPinnedRowIds) => table._getPinnedRows(allRows, bottomPinnedRowIds, 'bottom'), getMemoOptions(table.options, 'debugRows', 'getBottomRows'));\n    table.getCenterRows = memo(() => [table.getRowModel().rows, table.getState().rowPinning.top, table.getState().rowPinning.bottom], (allRows, top, bottom) => {\n      const topAndBottom = new Set([...(top != null ? top : []), ...(bottom != null ? bottom : [])]);\n      return allRows.filter(d => !topAndBottom.has(d.id));\n    }, getMemoOptions(table.options, 'debugRows', 'getCenterRows'));\n  }\n};\n\n//\n\nconst RowSelection = {\n  getInitialState: state => {\n    return {\n      rowSelection: {},\n      ...state\n    };\n  },\n  getDefaultOptions: table => {\n    return {\n      onRowSelectionChange: makeStateUpdater('rowSelection', table),\n      enableRowSelection: true,\n      enableMultiRowSelection: true,\n      enableSubRowSelection: true\n      // enableGroupingRowSelection: false,\n      // isAdditiveSelectEvent: (e: unknown) => !!e.metaKey,\n      // isInclusiveSelectEvent: (e: unknown) => !!e.shiftKey,\n    };\n  },\n  createTable: table => {\n    table.setRowSelection = updater => table.options.onRowSelectionChange == null ? void 0 : table.options.onRowSelectionChange(updater);\n    table.resetRowSelection = defaultState => {\n      var _table$initialState$r;\n      return table.setRowSelection(defaultState ? {} : (_table$initialState$r = table.initialState.rowSelection) != null ? _table$initialState$r : {});\n    };\n    table.toggleAllRowsSelected = value => {\n      table.setRowSelection(old => {\n        value = typeof value !== 'undefined' ? value : !table.getIsAllRowsSelected();\n        const rowSelection = {\n          ...old\n        };\n        const preGroupedFlatRows = table.getPreGroupedRowModel().flatRows;\n\n        // We don't use `mutateRowIsSelected` here for performance reasons.\n        // All of the rows are flat already, so it wouldn't be worth it\n        if (value) {\n          preGroupedFlatRows.forEach(row => {\n            if (!row.getCanSelect()) {\n              return;\n            }\n            rowSelection[row.id] = true;\n          });\n        } else {\n          preGroupedFlatRows.forEach(row => {\n            delete rowSelection[row.id];\n          });\n        }\n        return rowSelection;\n      });\n    };\n    table.toggleAllPageRowsSelected = value => table.setRowSelection(old => {\n      const resolvedValue = typeof value !== 'undefined' ? value : !table.getIsAllPageRowsSelected();\n      const rowSelection = {\n        ...old\n      };\n      table.getRowModel().rows.forEach(row => {\n        mutateRowIsSelected(rowSelection, row.id, resolvedValue, true, table);\n      });\n      return rowSelection;\n    });\n\n    // addRowSelectionRange: rowId => {\n    //   const {\n    //     rows,\n    //     rowsById,\n    //     options: { selectGroupingRows, selectSubRows },\n    //   } = table\n\n    //   const findSelectedRow = (rows: Row[]) => {\n    //     let found\n    //     rows.find(d => {\n    //       if (d.getIsSelected()) {\n    //         found = d\n    //         return true\n    //       }\n    //       const subFound = findSelectedRow(d.subRows || [])\n    //       if (subFound) {\n    //         found = subFound\n    //         return true\n    //       }\n    //       return false\n    //     })\n    //     return found\n    //   }\n\n    //   const firstRow = findSelectedRow(rows) || rows[0]\n    //   const lastRow = rowsById[rowId]\n\n    //   let include = false\n    //   const selectedRowIds = {}\n\n    //   const addRow = (row: Row) => {\n    //     mutateRowIsSelected(selectedRowIds, row.id, true, {\n    //       rowsById,\n    //       selectGroupingRows: selectGroupingRows!,\n    //       selectSubRows: selectSubRows!,\n    //     })\n    //   }\n\n    //   table.rows.forEach(row => {\n    //     const isFirstRow = row.id === firstRow.id\n    //     const isLastRow = row.id === lastRow.id\n\n    //     if (isFirstRow || isLastRow) {\n    //       if (!include) {\n    //         include = true\n    //       } else if (include) {\n    //         addRow(row)\n    //         include = false\n    //       }\n    //     }\n\n    //     if (include) {\n    //       addRow(row)\n    //     }\n    //   })\n\n    //   table.setRowSelection(selectedRowIds)\n    // },\n    table.getPreSelectedRowModel = () => table.getCoreRowModel();\n    table.getSelectedRowModel = memo(() => [table.getState().rowSelection, table.getCoreRowModel()], (rowSelection, rowModel) => {\n      if (!Object.keys(rowSelection).length) {\n        return {\n          rows: [],\n          flatRows: [],\n          rowsById: {}\n        };\n      }\n      return selectRowsFn(table, rowModel);\n    }, getMemoOptions(table.options, 'debugTable', 'getSelectedRowModel'));\n    table.getFilteredSelectedRowModel = memo(() => [table.getState().rowSelection, table.getFilteredRowModel()], (rowSelection, rowModel) => {\n      if (!Object.keys(rowSelection).length) {\n        return {\n          rows: [],\n          flatRows: [],\n          rowsById: {}\n        };\n      }\n      return selectRowsFn(table, rowModel);\n    }, getMemoOptions(table.options, 'debugTable', 'getFilteredSelectedRowModel'));\n    table.getGroupedSelectedRowModel = memo(() => [table.getState().rowSelection, table.getSortedRowModel()], (rowSelection, rowModel) => {\n      if (!Object.keys(rowSelection).length) {\n        return {\n          rows: [],\n          flatRows: [],\n          rowsById: {}\n        };\n      }\n      return selectRowsFn(table, rowModel);\n    }, getMemoOptions(table.options, 'debugTable', 'getGroupedSelectedRowModel'));\n\n    ///\n\n    // getGroupingRowCanSelect: rowId => {\n    //   const row = table.getRow(rowId)\n\n    //   if (!row) {\n    //     throw new Error()\n    //   }\n\n    //   if (typeof table.options.enableGroupingRowSelection === 'function') {\n    //     return table.options.enableGroupingRowSelection(row)\n    //   }\n\n    //   return table.options.enableGroupingRowSelection ?? false\n    // },\n\n    table.getIsAllRowsSelected = () => {\n      const preGroupedFlatRows = table.getFilteredRowModel().flatRows;\n      const {\n        rowSelection\n      } = table.getState();\n      let isAllRowsSelected = Boolean(preGroupedFlatRows.length && Object.keys(rowSelection).length);\n      if (isAllRowsSelected) {\n        if (preGroupedFlatRows.some(row => row.getCanSelect() && !rowSelection[row.id])) {\n          isAllRowsSelected = false;\n        }\n      }\n      return isAllRowsSelected;\n    };\n    table.getIsAllPageRowsSelected = () => {\n      const paginationFlatRows = table.getPaginationRowModel().flatRows.filter(row => row.getCanSelect());\n      const {\n        rowSelection\n      } = table.getState();\n      let isAllPageRowsSelected = !!paginationFlatRows.length;\n      if (isAllPageRowsSelected && paginationFlatRows.some(row => !rowSelection[row.id])) {\n        isAllPageRowsSelected = false;\n      }\n      return isAllPageRowsSelected;\n    };\n    table.getIsSomeRowsSelected = () => {\n      var _table$getState$rowSe;\n      const totalSelected = Object.keys((_table$getState$rowSe = table.getState().rowSelection) != null ? _table$getState$rowSe : {}).length;\n      return totalSelected > 0 && totalSelected < table.getFilteredRowModel().flatRows.length;\n    };\n    table.getIsSomePageRowsSelected = () => {\n      const paginationFlatRows = table.getPaginationRowModel().flatRows;\n      return table.getIsAllPageRowsSelected() ? false : paginationFlatRows.filter(row => row.getCanSelect()).some(d => d.getIsSelected() || d.getIsSomeSelected());\n    };\n    table.getToggleAllRowsSelectedHandler = () => {\n      return e => {\n        table.toggleAllRowsSelected(e.target.checked);\n      };\n    };\n    table.getToggleAllPageRowsSelectedHandler = () => {\n      return e => {\n        table.toggleAllPageRowsSelected(e.target.checked);\n      };\n    };\n  },\n  createRow: (row, table) => {\n    row.toggleSelected = (value, opts) => {\n      const isSelected = row.getIsSelected();\n      table.setRowSelection(old => {\n        var _opts$selectChildren;\n        value = typeof value !== 'undefined' ? value : !isSelected;\n        if (row.getCanSelect() && isSelected === value) {\n          return old;\n        }\n        const selectedRowIds = {\n          ...old\n        };\n        mutateRowIsSelected(selectedRowIds, row.id, value, (_opts$selectChildren = opts == null ? void 0 : opts.selectChildren) != null ? _opts$selectChildren : true, table);\n        return selectedRowIds;\n      });\n    };\n    row.getIsSelected = () => {\n      const {\n        rowSelection\n      } = table.getState();\n      return isRowSelected(row, rowSelection);\n    };\n    row.getIsSomeSelected = () => {\n      const {\n        rowSelection\n      } = table.getState();\n      return isSubRowSelected(row, rowSelection) === 'some';\n    };\n    row.getIsAllSubRowsSelected = () => {\n      const {\n        rowSelection\n      } = table.getState();\n      return isSubRowSelected(row, rowSelection) === 'all';\n    };\n    row.getCanSelect = () => {\n      var _table$options$enable;\n      if (typeof table.options.enableRowSelection === 'function') {\n        return table.options.enableRowSelection(row);\n      }\n      return (_table$options$enable = table.options.enableRowSelection) != null ? _table$options$enable : true;\n    };\n    row.getCanSelectSubRows = () => {\n      var _table$options$enable2;\n      if (typeof table.options.enableSubRowSelection === 'function') {\n        return table.options.enableSubRowSelection(row);\n      }\n      return (_table$options$enable2 = table.options.enableSubRowSelection) != null ? _table$options$enable2 : true;\n    };\n    row.getCanMultiSelect = () => {\n      var _table$options$enable3;\n      if (typeof table.options.enableMultiRowSelection === 'function') {\n        return table.options.enableMultiRowSelection(row);\n      }\n      return (_table$options$enable3 = table.options.enableMultiRowSelection) != null ? _table$options$enable3 : true;\n    };\n    row.getToggleSelectedHandler = () => {\n      const canSelect = row.getCanSelect();\n      return e => {\n        var _target;\n        if (!canSelect) return;\n        row.toggleSelected((_target = e.target) == null ? void 0 : _target.checked);\n      };\n    };\n  }\n};\nconst mutateRowIsSelected = (selectedRowIds, id, value, includeChildren, table) => {\n  var _row$subRows;\n  const row = table.getRow(id, true);\n\n  // const isGrouped = row.getIsGrouped()\n\n  // if ( // TODO: enforce grouping row selection rules\n  //   !isGrouped ||\n  //   (isGrouped && table.options.enableGroupingRowSelection)\n  // ) {\n  if (value) {\n    if (!row.getCanMultiSelect()) {\n      Object.keys(selectedRowIds).forEach(key => delete selectedRowIds[key]);\n    }\n    if (row.getCanSelect()) {\n      selectedRowIds[id] = true;\n    }\n  } else {\n    delete selectedRowIds[id];\n  }\n  // }\n\n  if (includeChildren && (_row$subRows = row.subRows) != null && _row$subRows.length && row.getCanSelectSubRows()) {\n    row.subRows.forEach(row => mutateRowIsSelected(selectedRowIds, row.id, value, includeChildren, table));\n  }\n};\nfunction selectRowsFn(table, rowModel) {\n  const rowSelection = table.getState().rowSelection;\n  const newSelectedFlatRows = [];\n  const newSelectedRowsById = {};\n\n  // Filters top level and nested rows\n  const recurseRows = function (rows, depth) {\n    return rows.map(row => {\n      var _row$subRows2;\n      const isSelected = isRowSelected(row, rowSelection);\n      if (isSelected) {\n        newSelectedFlatRows.push(row);\n        newSelectedRowsById[row.id] = row;\n      }\n      if ((_row$subRows2 = row.subRows) != null && _row$subRows2.length) {\n        row = {\n          ...row,\n          subRows: recurseRows(row.subRows)\n        };\n      }\n      if (isSelected) {\n        return row;\n      }\n    }).filter(Boolean);\n  };\n  return {\n    rows: recurseRows(rowModel.rows),\n    flatRows: newSelectedFlatRows,\n    rowsById: newSelectedRowsById\n  };\n}\nfunction isRowSelected(row, selection) {\n  var _selection$row$id;\n  return (_selection$row$id = selection[row.id]) != null ? _selection$row$id : false;\n}\nfunction isSubRowSelected(row, selection, table) {\n  var _row$subRows3;\n  if (!((_row$subRows3 = row.subRows) != null && _row$subRows3.length)) return false;\n  let allChildrenSelected = true;\n  let someSelected = false;\n  row.subRows.forEach(subRow => {\n    // Bail out early if we know both of these\n    if (someSelected && !allChildrenSelected) {\n      return;\n    }\n    if (subRow.getCanSelect()) {\n      if (isRowSelected(subRow, selection)) {\n        someSelected = true;\n      } else {\n        allChildrenSelected = false;\n      }\n    }\n\n    // Check row selection of nested subrows\n    if (subRow.subRows && subRow.subRows.length) {\n      const subRowChildrenSelected = isSubRowSelected(subRow, selection);\n      if (subRowChildrenSelected === 'all') {\n        someSelected = true;\n      } else if (subRowChildrenSelected === 'some') {\n        someSelected = true;\n        allChildrenSelected = false;\n      } else {\n        allChildrenSelected = false;\n      }\n    }\n  });\n  return allChildrenSelected ? 'all' : someSelected ? 'some' : false;\n}\n\nconst reSplitAlphaNumeric = /([0-9]+)/gm;\nconst alphanumeric = (rowA, rowB, columnId) => {\n  return compareAlphanumeric(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase());\n};\nconst alphanumericCaseSensitive = (rowA, rowB, columnId) => {\n  return compareAlphanumeric(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId)));\n};\n\n// The text filter is more basic (less numeric support)\n// but is much faster\nconst text = (rowA, rowB, columnId) => {\n  return compareBasic(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase());\n};\n\n// The text filter is more basic (less numeric support)\n// but is much faster\nconst textCaseSensitive = (rowA, rowB, columnId) => {\n  return compareBasic(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId)));\n};\nconst datetime = (rowA, rowB, columnId) => {\n  const a = rowA.getValue(columnId);\n  const b = rowB.getValue(columnId);\n\n  // Can handle nullish values\n  // Use > and < because == (and ===) doesn't work with\n  // Date objects (would require calling getTime()).\n  return a > b ? 1 : a < b ? -1 : 0;\n};\nconst basic = (rowA, rowB, columnId) => {\n  return compareBasic(rowA.getValue(columnId), rowB.getValue(columnId));\n};\n\n// Utils\n\nfunction compareBasic(a, b) {\n  return a === b ? 0 : a > b ? 1 : -1;\n}\nfunction toString(a) {\n  if (typeof a === 'number') {\n    if (isNaN(a) || a === Infinity || a === -Infinity) {\n      return '';\n    }\n    return String(a);\n  }\n  if (typeof a === 'string') {\n    return a;\n  }\n  return '';\n}\n\n// Mixed sorting is slow, but very inclusive of many edge cases.\n// It handles numbers, mixed alphanumeric combinations, and even\n// null, undefined, and Infinity\nfunction compareAlphanumeric(aStr, bStr) {\n  // Split on number groups, but keep the delimiter\n  // Then remove falsey split values\n  const a = aStr.split(reSplitAlphaNumeric).filter(Boolean);\n  const b = bStr.split(reSplitAlphaNumeric).filter(Boolean);\n\n  // While\n  while (a.length && b.length) {\n    const aa = a.shift();\n    const bb = b.shift();\n    const an = parseInt(aa, 10);\n    const bn = parseInt(bb, 10);\n    const combo = [an, bn].sort();\n\n    // Both are string\n    if (isNaN(combo[0])) {\n      if (aa > bb) {\n        return 1;\n      }\n      if (bb > aa) {\n        return -1;\n      }\n      continue;\n    }\n\n    // One is a string, one is a number\n    if (isNaN(combo[1])) {\n      return isNaN(an) ? -1 : 1;\n    }\n\n    // Both are numbers\n    if (an > bn) {\n      return 1;\n    }\n    if (bn > an) {\n      return -1;\n    }\n  }\n  return a.length - b.length;\n}\n\n// Exports\n\nconst sortingFns = {\n  alphanumeric,\n  alphanumericCaseSensitive,\n  text,\n  textCaseSensitive,\n  datetime,\n  basic\n};\n\n//\n\nconst RowSorting = {\n  getInitialState: state => {\n    return {\n      sorting: [],\n      ...state\n    };\n  },\n  getDefaultColumnDef: () => {\n    return {\n      sortingFn: 'auto',\n      sortUndefined: 1\n    };\n  },\n  getDefaultOptions: table => {\n    return {\n      onSortingChange: makeStateUpdater('sorting', table),\n      isMultiSortEvent: e => {\n        return e.shiftKey;\n      }\n    };\n  },\n  createColumn: (column, table) => {\n    column.getAutoSortingFn = () => {\n      const firstRows = table.getFilteredRowModel().flatRows.slice(10);\n      let isString = false;\n      for (const row of firstRows) {\n        const value = row == null ? void 0 : row.getValue(column.id);\n        if (Object.prototype.toString.call(value) === '[object Date]') {\n          return sortingFns.datetime;\n        }\n        if (typeof value === 'string') {\n          isString = true;\n          if (value.split(reSplitAlphaNumeric).length > 1) {\n            return sortingFns.alphanumeric;\n          }\n        }\n      }\n      if (isString) {\n        return sortingFns.text;\n      }\n      return sortingFns.basic;\n    };\n    column.getAutoSortDir = () => {\n      const firstRow = table.getFilteredRowModel().flatRows[0];\n      const value = firstRow == null ? void 0 : firstRow.getValue(column.id);\n      if (typeof value === 'string') {\n        return 'asc';\n      }\n      return 'desc';\n    };\n    column.getSortingFn = () => {\n      var _table$options$sortin, _table$options$sortin2;\n      if (!column) {\n        throw new Error();\n      }\n      return isFunction(column.columnDef.sortingFn) ? column.columnDef.sortingFn : column.columnDef.sortingFn === 'auto' ? column.getAutoSortingFn() : (_table$options$sortin = (_table$options$sortin2 = table.options.sortingFns) == null ? void 0 : _table$options$sortin2[column.columnDef.sortingFn]) != null ? _table$options$sortin : sortingFns[column.columnDef.sortingFn];\n    };\n    column.toggleSorting = (desc, multi) => {\n      // if (column.columns.length) {\n      //   column.columns.forEach((c, i) => {\n      //     if (c.id) {\n      //       table.toggleColumnSorting(c.id, undefined, multi || !!i)\n      //     }\n      //   })\n      //   return\n      // }\n\n      // this needs to be outside of table.setSorting to be in sync with rerender\n      const nextSortingOrder = column.getNextSortingOrder();\n      const hasManualValue = typeof desc !== 'undefined' && desc !== null;\n      table.setSorting(old => {\n        // Find any existing sorting for this column\n        const existingSorting = old == null ? void 0 : old.find(d => d.id === column.id);\n        const existingIndex = old == null ? void 0 : old.findIndex(d => d.id === column.id);\n        let newSorting = [];\n\n        // What should we do with this sort action?\n        let sortAction;\n        let nextDesc = hasManualValue ? desc : nextSortingOrder === 'desc';\n\n        // Multi-mode\n        if (old != null && old.length && column.getCanMultiSort() && multi) {\n          if (existingSorting) {\n            sortAction = 'toggle';\n          } else {\n            sortAction = 'add';\n          }\n        } else {\n          // Normal mode\n          if (old != null && old.length && existingIndex !== old.length - 1) {\n            sortAction = 'replace';\n          } else if (existingSorting) {\n            sortAction = 'toggle';\n          } else {\n            sortAction = 'replace';\n          }\n        }\n\n        // Handle toggle states that will remove the sorting\n        if (sortAction === 'toggle') {\n          // If we are \"actually\" toggling (not a manual set value), should we remove the sorting?\n          if (!hasManualValue) {\n            // Is our intention to remove?\n            if (!nextSortingOrder) {\n              sortAction = 'remove';\n            }\n          }\n        }\n        if (sortAction === 'add') {\n          var _table$options$maxMul;\n          newSorting = [...old, {\n            id: column.id,\n            desc: nextDesc\n          }];\n          // Take latest n columns\n          newSorting.splice(0, newSorting.length - ((_table$options$maxMul = table.options.maxMultiSortColCount) != null ? _table$options$maxMul : Number.MAX_SAFE_INTEGER));\n        } else if (sortAction === 'toggle') {\n          // This flips (or sets) the\n          newSorting = old.map(d => {\n            if (d.id === column.id) {\n              return {\n                ...d,\n                desc: nextDesc\n              };\n            }\n            return d;\n          });\n        } else if (sortAction === 'remove') {\n          newSorting = old.filter(d => d.id !== column.id);\n        } else {\n          newSorting = [{\n            id: column.id,\n            desc: nextDesc\n          }];\n        }\n        return newSorting;\n      });\n    };\n    column.getFirstSortDir = () => {\n      var _ref, _column$columnDef$sor;\n      const sortDescFirst = (_ref = (_column$columnDef$sor = column.columnDef.sortDescFirst) != null ? _column$columnDef$sor : table.options.sortDescFirst) != null ? _ref : column.getAutoSortDir() === 'desc';\n      return sortDescFirst ? 'desc' : 'asc';\n    };\n    column.getNextSortingOrder = multi => {\n      var _table$options$enable, _table$options$enable2;\n      const firstSortDirection = column.getFirstSortDir();\n      const isSorted = column.getIsSorted();\n      if (!isSorted) {\n        return firstSortDirection;\n      }\n      if (isSorted !== firstSortDirection && ((_table$options$enable = table.options.enableSortingRemoval) != null ? _table$options$enable : true) && (\n      // If enableSortRemove, enable in general\n      multi ? (_table$options$enable2 = table.options.enableMultiRemove) != null ? _table$options$enable2 : true : true) // If multi, don't allow if enableMultiRemove))\n      ) {\n        return false;\n      }\n      return isSorted === 'desc' ? 'asc' : 'desc';\n    };\n    column.getCanSort = () => {\n      var _column$columnDef$ena, _table$options$enable3;\n      return ((_column$columnDef$ena = column.columnDef.enableSorting) != null ? _column$columnDef$ena : true) && ((_table$options$enable3 = table.options.enableSorting) != null ? _table$options$enable3 : true) && !!column.accessorFn;\n    };\n    column.getCanMultiSort = () => {\n      var _ref2, _column$columnDef$ena2;\n      return (_ref2 = (_column$columnDef$ena2 = column.columnDef.enableMultiSort) != null ? _column$columnDef$ena2 : table.options.enableMultiSort) != null ? _ref2 : !!column.accessorFn;\n    };\n    column.getIsSorted = () => {\n      var _table$getState$sorti;\n      const columnSort = (_table$getState$sorti = table.getState().sorting) == null ? void 0 : _table$getState$sorti.find(d => d.id === column.id);\n      return !columnSort ? false : columnSort.desc ? 'desc' : 'asc';\n    };\n    column.getSortIndex = () => {\n      var _table$getState$sorti2, _table$getState$sorti3;\n      return (_table$getState$sorti2 = (_table$getState$sorti3 = table.getState().sorting) == null ? void 0 : _table$getState$sorti3.findIndex(d => d.id === column.id)) != null ? _table$getState$sorti2 : -1;\n    };\n    column.clearSorting = () => {\n      //clear sorting for just 1 column\n      table.setSorting(old => old != null && old.length ? old.filter(d => d.id !== column.id) : []);\n    };\n    column.getToggleSortingHandler = () => {\n      const canSort = column.getCanSort();\n      return e => {\n        if (!canSort) return;\n        e.persist == null || e.persist();\n        column.toggleSorting == null || column.toggleSorting(undefined, column.getCanMultiSort() ? table.options.isMultiSortEvent == null ? void 0 : table.options.isMultiSortEvent(e) : false);\n      };\n    };\n  },\n  createTable: table => {\n    table.setSorting = updater => table.options.onSortingChange == null ? void 0 : table.options.onSortingChange(updater);\n    table.resetSorting = defaultState => {\n      var _table$initialState$s, _table$initialState;\n      table.setSorting(defaultState ? [] : (_table$initialState$s = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.sorting) != null ? _table$initialState$s : []);\n    };\n    table.getPreSortedRowModel = () => table.getGroupedRowModel();\n    table.getSortedRowModel = () => {\n      if (!table._getSortedRowModel && table.options.getSortedRowModel) {\n        table._getSortedRowModel = table.options.getSortedRowModel(table);\n      }\n      if (table.options.manualSorting || !table._getSortedRowModel) {\n        return table.getPreSortedRowModel();\n      }\n      return table._getSortedRowModel();\n    };\n  }\n};\n\nconst builtInFeatures = [Headers, ColumnVisibility, ColumnOrdering, ColumnPinning, ColumnFaceting, ColumnFiltering, GlobalFaceting,\n//depends on ColumnFaceting\nGlobalFiltering,\n//depends on ColumnFiltering\nRowSorting, ColumnGrouping,\n//depends on RowSorting\nRowExpanding, RowPagination, RowPinning, RowSelection, ColumnSizing];\n\n//\n\nfunction createTable(options) {\n  var _options$_features, _options$initialState;\n  if (process.env.NODE_ENV !== 'production' && (options.debugAll || options.debugTable)) {\n    console.info('Creating Table Instance...');\n  }\n  const _features = [...builtInFeatures, ...((_options$_features = options._features) != null ? _options$_features : [])];\n  let table = {\n    _features\n  };\n  const defaultOptions = table._features.reduce((obj, feature) => {\n    return Object.assign(obj, feature.getDefaultOptions == null ? void 0 : feature.getDefaultOptions(table));\n  }, {});\n  const mergeOptions = options => {\n    if (table.options.mergeOptions) {\n      return table.options.mergeOptions(defaultOptions, options);\n    }\n    return {\n      ...defaultOptions,\n      ...options\n    };\n  };\n  const coreInitialState = {};\n  let initialState = {\n    ...coreInitialState,\n    ...((_options$initialState = options.initialState) != null ? _options$initialState : {})\n  };\n  table._features.forEach(feature => {\n    var _feature$getInitialSt;\n    initialState = (_feature$getInitialSt = feature.getInitialState == null ? void 0 : feature.getInitialState(initialState)) != null ? _feature$getInitialSt : initialState;\n  });\n  const queued = [];\n  let queuedTimeout = false;\n  const coreInstance = {\n    _features,\n    options: {\n      ...defaultOptions,\n      ...options\n    },\n    initialState,\n    _queue: cb => {\n      queued.push(cb);\n      if (!queuedTimeout) {\n        queuedTimeout = true;\n\n        // Schedule a microtask to run the queued callbacks after\n        // the current call stack (render, etc) has finished.\n        Promise.resolve().then(() => {\n          while (queued.length) {\n            queued.shift()();\n          }\n          queuedTimeout = false;\n        }).catch(error => setTimeout(() => {\n          throw error;\n        }));\n      }\n    },\n    reset: () => {\n      table.setState(table.initialState);\n    },\n    setOptions: updater => {\n      const newOptions = functionalUpdate(updater, table.options);\n      table.options = mergeOptions(newOptions);\n    },\n    getState: () => {\n      return table.options.state;\n    },\n    setState: updater => {\n      table.options.onStateChange == null || table.options.onStateChange(updater);\n    },\n    _getRowId: (row, index, parent) => {\n      var _table$options$getRow;\n      return (_table$options$getRow = table.options.getRowId == null ? void 0 : table.options.getRowId(row, index, parent)) != null ? _table$options$getRow : `${parent ? [parent.id, index].join('.') : index}`;\n    },\n    getCoreRowModel: () => {\n      if (!table._getCoreRowModel) {\n        table._getCoreRowModel = table.options.getCoreRowModel(table);\n      }\n      return table._getCoreRowModel();\n    },\n    // The final calls start at the bottom of the model,\n    // expanded rows, which then work their way up\n\n    getRowModel: () => {\n      return table.getPaginationRowModel();\n    },\n    //in next version, we should just pass in the row model as the optional 2nd arg\n    getRow: (id, searchAll) => {\n      let row = (searchAll ? table.getPrePaginationRowModel() : table.getRowModel()).rowsById[id];\n      if (!row) {\n        row = table.getCoreRowModel().rowsById[id];\n        if (!row) {\n          if (process.env.NODE_ENV !== 'production') {\n            throw new Error(`getRow could not find row with ID: ${id}`);\n          }\n          throw new Error();\n        }\n      }\n      return row;\n    },\n    _getDefaultColumnDef: memo(() => [table.options.defaultColumn], defaultColumn => {\n      var _defaultColumn;\n      defaultColumn = (_defaultColumn = defaultColumn) != null ? _defaultColumn : {};\n      return {\n        header: props => {\n          const resolvedColumnDef = props.header.column.columnDef;\n          if (resolvedColumnDef.accessorKey) {\n            return resolvedColumnDef.accessorKey;\n          }\n          if (resolvedColumnDef.accessorFn) {\n            return resolvedColumnDef.id;\n          }\n          return null;\n        },\n        // footer: props => props.header.column.id,\n        cell: props => {\n          var _props$renderValue$to, _props$renderValue;\n          return (_props$renderValue$to = (_props$renderValue = props.renderValue()) == null || _props$renderValue.toString == null ? void 0 : _props$renderValue.toString()) != null ? _props$renderValue$to : null;\n        },\n        ...table._features.reduce((obj, feature) => {\n          return Object.assign(obj, feature.getDefaultColumnDef == null ? void 0 : feature.getDefaultColumnDef());\n        }, {}),\n        ...defaultColumn\n      };\n    }, getMemoOptions(options, 'debugColumns', '_getDefaultColumnDef')),\n    _getColumnDefs: () => table.options.columns,\n    getAllColumns: memo(() => [table._getColumnDefs()], columnDefs => {\n      const recurseColumns = function (columnDefs, parent, depth) {\n        if (depth === void 0) {\n          depth = 0;\n        }\n        return columnDefs.map(columnDef => {\n          const column = createColumn(table, columnDef, depth, parent);\n          const groupingColumnDef = columnDef;\n          column.columns = groupingColumnDef.columns ? recurseColumns(groupingColumnDef.columns, column, depth + 1) : [];\n          return column;\n        });\n      };\n      return recurseColumns(columnDefs);\n    }, getMemoOptions(options, 'debugColumns', 'getAllColumns')),\n    getAllFlatColumns: memo(() => [table.getAllColumns()], allColumns => {\n      return allColumns.flatMap(column => {\n        return column.getFlatColumns();\n      });\n    }, getMemoOptions(options, 'debugColumns', 'getAllFlatColumns')),\n    _getAllFlatColumnsById: memo(() => [table.getAllFlatColumns()], flatColumns => {\n      return flatColumns.reduce((acc, column) => {\n        acc[column.id] = column;\n        return acc;\n      }, {});\n    }, getMemoOptions(options, 'debugColumns', 'getAllFlatColumnsById')),\n    getAllLeafColumns: memo(() => [table.getAllColumns(), table._getOrderColumnsFn()], (allColumns, orderColumns) => {\n      let leafColumns = allColumns.flatMap(column => column.getLeafColumns());\n      return orderColumns(leafColumns);\n    }, getMemoOptions(options, 'debugColumns', 'getAllLeafColumns')),\n    getColumn: columnId => {\n      const column = table._getAllFlatColumnsById()[columnId];\n      if (process.env.NODE_ENV !== 'production' && !column) {\n        console.error(`[Table] Column with id '${columnId}' does not exist.`);\n      }\n      return column;\n    }\n  };\n  Object.assign(table, coreInstance);\n  for (let index = 0; index < table._features.length; index++) {\n    const feature = table._features[index];\n    feature == null || feature.createTable == null || feature.createTable(table);\n  }\n  return table;\n}\n\nfunction getCoreRowModel() {\n  return table => memo(() => [table.options.data], data => {\n    const rowModel = {\n      rows: [],\n      flatRows: [],\n      rowsById: {}\n    };\n    const accessRows = function (originalRows, depth, parentRow) {\n      if (depth === void 0) {\n        depth = 0;\n      }\n      const rows = [];\n      for (let i = 0; i < originalRows.length; i++) {\n        // This could be an expensive check at scale, so we should move it somewhere else, but where?\n        // if (!id) {\n        //   if (process.env.NODE_ENV !== 'production') {\n        //     throw new Error(`getRowId expected an ID, but got ${id}`)\n        //   }\n        // }\n\n        // Make the row\n        const row = createRow(table, table._getRowId(originalRows[i], i, parentRow), originalRows[i], i, depth, undefined, parentRow == null ? void 0 : parentRow.id);\n\n        // Keep track of every row in a flat array\n        rowModel.flatRows.push(row);\n        // Also keep track of every row by its ID\n        rowModel.rowsById[row.id] = row;\n        // Push table row into parent\n        rows.push(row);\n\n        // Get the original subrows\n        if (table.options.getSubRows) {\n          var _row$originalSubRows;\n          row.originalSubRows = table.options.getSubRows(originalRows[i], i);\n\n          // Then recursively access them\n          if ((_row$originalSubRows = row.originalSubRows) != null && _row$originalSubRows.length) {\n            row.subRows = accessRows(row.originalSubRows, depth + 1, row);\n          }\n        }\n      }\n      return rows;\n    };\n    rowModel.rows = accessRows(data);\n    return rowModel;\n  }, getMemoOptions(table.options, 'debugTable', 'getRowModel', () => table._autoResetPageIndex()));\n}\n\nfunction getExpandedRowModel() {\n  return table => memo(() => [table.getState().expanded, table.getPreExpandedRowModel(), table.options.paginateExpandedRows], (expanded, rowModel, paginateExpandedRows) => {\n    if (!rowModel.rows.length || expanded !== true && !Object.keys(expanded != null ? expanded : {}).length) {\n      return rowModel;\n    }\n    if (!paginateExpandedRows) {\n      // Only expand rows at this point if they are being paginated\n      return rowModel;\n    }\n    return expandRows(rowModel);\n  }, getMemoOptions(table.options, 'debugTable', 'getExpandedRowModel'));\n}\nfunction expandRows(rowModel) {\n  const expandedRows = [];\n  const handleRow = row => {\n    var _row$subRows;\n    expandedRows.push(row);\n    if ((_row$subRows = row.subRows) != null && _row$subRows.length && row.getIsExpanded()) {\n      row.subRows.forEach(handleRow);\n    }\n  };\n  rowModel.rows.forEach(handleRow);\n  return {\n    rows: expandedRows,\n    flatRows: rowModel.flatRows,\n    rowsById: rowModel.rowsById\n  };\n}\n\nfunction getFacetedMinMaxValues() {\n  return (table, columnId) => memo(() => {\n    var _table$getColumn;\n    return [(_table$getColumn = table.getColumn(columnId)) == null ? void 0 : _table$getColumn.getFacetedRowModel()];\n  }, facetedRowModel => {\n    if (!facetedRowModel) return undefined;\n    const uniqueValues = facetedRowModel.flatRows.flatMap(flatRow => {\n      var _flatRow$getUniqueVal;\n      return (_flatRow$getUniqueVal = flatRow.getUniqueValues(columnId)) != null ? _flatRow$getUniqueVal : [];\n    }).map(Number).filter(value => !Number.isNaN(value));\n    if (!uniqueValues.length) return;\n    let facetedMinValue = uniqueValues[0];\n    let facetedMaxValue = uniqueValues[uniqueValues.length - 1];\n    for (const value of uniqueValues) {\n      if (value < facetedMinValue) facetedMinValue = value;else if (value > facetedMaxValue) facetedMaxValue = value;\n    }\n    return [facetedMinValue, facetedMaxValue];\n  }, getMemoOptions(table.options, 'debugTable', 'getFacetedMinMaxValues'));\n}\n\nfunction filterRows(rows, filterRowImpl, table) {\n  if (table.options.filterFromLeafRows) {\n    return filterRowModelFromLeafs(rows, filterRowImpl, table);\n  }\n  return filterRowModelFromRoot(rows, filterRowImpl, table);\n}\nfunction filterRowModelFromLeafs(rowsToFilter, filterRow, table) {\n  var _table$options$maxLea;\n  const newFilteredFlatRows = [];\n  const newFilteredRowsById = {};\n  const maxDepth = (_table$options$maxLea = table.options.maxLeafRowFilterDepth) != null ? _table$options$maxLea : 100;\n  const recurseFilterRows = function (rowsToFilter, depth) {\n    if (depth === void 0) {\n      depth = 0;\n    }\n    const rows = [];\n\n    // Filter from children up first\n    for (let i = 0; i < rowsToFilter.length; i++) {\n      var _row$subRows;\n      let row = rowsToFilter[i];\n      const newRow = createRow(table, row.id, row.original, row.index, row.depth, undefined, row.parentId);\n      newRow.columnFilters = row.columnFilters;\n      if ((_row$subRows = row.subRows) != null && _row$subRows.length && depth < maxDepth) {\n        newRow.subRows = recurseFilterRows(row.subRows, depth + 1);\n        row = newRow;\n        if (filterRow(row) && !newRow.subRows.length) {\n          rows.push(row);\n          newFilteredRowsById[row.id] = row;\n          newFilteredFlatRows.push(row);\n          continue;\n        }\n        if (filterRow(row) || newRow.subRows.length) {\n          rows.push(row);\n          newFilteredRowsById[row.id] = row;\n          newFilteredFlatRows.push(row);\n          continue;\n        }\n      } else {\n        row = newRow;\n        if (filterRow(row)) {\n          rows.push(row);\n          newFilteredRowsById[row.id] = row;\n          newFilteredFlatRows.push(row);\n        }\n      }\n    }\n    return rows;\n  };\n  return {\n    rows: recurseFilterRows(rowsToFilter),\n    flatRows: newFilteredFlatRows,\n    rowsById: newFilteredRowsById\n  };\n}\nfunction filterRowModelFromRoot(rowsToFilter, filterRow, table) {\n  var _table$options$maxLea2;\n  const newFilteredFlatRows = [];\n  const newFilteredRowsById = {};\n  const maxDepth = (_table$options$maxLea2 = table.options.maxLeafRowFilterDepth) != null ? _table$options$maxLea2 : 100;\n\n  // Filters top level and nested rows\n  const recurseFilterRows = function (rowsToFilter, depth) {\n    if (depth === void 0) {\n      depth = 0;\n    }\n    // Filter from parents downward first\n\n    const rows = [];\n\n    // Apply the filter to any subRows\n    for (let i = 0; i < rowsToFilter.length; i++) {\n      let row = rowsToFilter[i];\n      const pass = filterRow(row);\n      if (pass) {\n        var _row$subRows2;\n        if ((_row$subRows2 = row.subRows) != null && _row$subRows2.length && depth < maxDepth) {\n          const newRow = createRow(table, row.id, row.original, row.index, row.depth, undefined, row.parentId);\n          newRow.subRows = recurseFilterRows(row.subRows, depth + 1);\n          row = newRow;\n        }\n        rows.push(row);\n        newFilteredFlatRows.push(row);\n        newFilteredRowsById[row.id] = row;\n      }\n    }\n    return rows;\n  };\n  return {\n    rows: recurseFilterRows(rowsToFilter),\n    flatRows: newFilteredFlatRows,\n    rowsById: newFilteredRowsById\n  };\n}\n\nfunction getFacetedRowModel() {\n  return (table, columnId) => memo(() => [table.getPreFilteredRowModel(), table.getState().columnFilters, table.getState().globalFilter, table.getFilteredRowModel()], (preRowModel, columnFilters, globalFilter) => {\n    if (!preRowModel.rows.length || !(columnFilters != null && columnFilters.length) && !globalFilter) {\n      return preRowModel;\n    }\n    const filterableIds = [...columnFilters.map(d => d.id).filter(d => d !== columnId), globalFilter ? '__global__' : undefined].filter(Boolean);\n    const filterRowsImpl = row => {\n      // Horizontally filter rows through each column\n      for (let i = 0; i < filterableIds.length; i++) {\n        if (row.columnFilters[filterableIds[i]] === false) {\n          return false;\n        }\n      }\n      return true;\n    };\n    return filterRows(preRowModel.rows, filterRowsImpl, table);\n  }, getMemoOptions(table.options, 'debugTable', 'getFacetedRowModel'));\n}\n\nfunction getFacetedUniqueValues() {\n  return (table, columnId) => memo(() => {\n    var _table$getColumn;\n    return [(_table$getColumn = table.getColumn(columnId)) == null ? void 0 : _table$getColumn.getFacetedRowModel()];\n  }, facetedRowModel => {\n    if (!facetedRowModel) return new Map();\n    let facetedUniqueValues = new Map();\n    for (let i = 0; i < facetedRowModel.flatRows.length; i++) {\n      const values = facetedRowModel.flatRows[i].getUniqueValues(columnId);\n      for (let j = 0; j < values.length; j++) {\n        const value = values[j];\n        if (facetedUniqueValues.has(value)) {\n          var _facetedUniqueValues$;\n          facetedUniqueValues.set(value, ((_facetedUniqueValues$ = facetedUniqueValues.get(value)) != null ? _facetedUniqueValues$ : 0) + 1);\n        } else {\n          facetedUniqueValues.set(value, 1);\n        }\n      }\n    }\n    return facetedUniqueValues;\n  }, getMemoOptions(table.options, 'debugTable', `getFacetedUniqueValues_${columnId}`));\n}\n\nfunction getFilteredRowModel() {\n  return table => memo(() => [table.getPreFilteredRowModel(), table.getState().columnFilters, table.getState().globalFilter], (rowModel, columnFilters, globalFilter) => {\n    if (!rowModel.rows.length || !(columnFilters != null && columnFilters.length) && !globalFilter) {\n      for (let i = 0; i < rowModel.flatRows.length; i++) {\n        rowModel.flatRows[i].columnFilters = {};\n        rowModel.flatRows[i].columnFiltersMeta = {};\n      }\n      return rowModel;\n    }\n    const resolvedColumnFilters = [];\n    const resolvedGlobalFilters = [];\n    (columnFilters != null ? columnFilters : []).forEach(d => {\n      var _filterFn$resolveFilt;\n      const column = table.getColumn(d.id);\n      if (!column) {\n        return;\n      }\n      const filterFn = column.getFilterFn();\n      if (!filterFn) {\n        if (process.env.NODE_ENV !== 'production') {\n          console.warn(`Could not find a valid 'column.filterFn' for column with the ID: ${column.id}.`);\n        }\n        return;\n      }\n      resolvedColumnFilters.push({\n        id: d.id,\n        filterFn,\n        resolvedValue: (_filterFn$resolveFilt = filterFn.resolveFilterValue == null ? void 0 : filterFn.resolveFilterValue(d.value)) != null ? _filterFn$resolveFilt : d.value\n      });\n    });\n    const filterableIds = (columnFilters != null ? columnFilters : []).map(d => d.id);\n    const globalFilterFn = table.getGlobalFilterFn();\n    const globallyFilterableColumns = table.getAllLeafColumns().filter(column => column.getCanGlobalFilter());\n    if (globalFilter && globalFilterFn && globallyFilterableColumns.length) {\n      filterableIds.push('__global__');\n      globallyFilterableColumns.forEach(column => {\n        var _globalFilterFn$resol;\n        resolvedGlobalFilters.push({\n          id: column.id,\n          filterFn: globalFilterFn,\n          resolvedValue: (_globalFilterFn$resol = globalFilterFn.resolveFilterValue == null ? void 0 : globalFilterFn.resolveFilterValue(globalFilter)) != null ? _globalFilterFn$resol : globalFilter\n        });\n      });\n    }\n    let currentColumnFilter;\n    let currentGlobalFilter;\n\n    // Flag the prefiltered row model with each filter state\n    for (let j = 0; j < rowModel.flatRows.length; j++) {\n      const row = rowModel.flatRows[j];\n      row.columnFilters = {};\n      if (resolvedColumnFilters.length) {\n        for (let i = 0; i < resolvedColumnFilters.length; i++) {\n          currentColumnFilter = resolvedColumnFilters[i];\n          const id = currentColumnFilter.id;\n\n          // Tag the row with the column filter state\n          row.columnFilters[id] = currentColumnFilter.filterFn(row, id, currentColumnFilter.resolvedValue, filterMeta => {\n            row.columnFiltersMeta[id] = filterMeta;\n          });\n        }\n      }\n      if (resolvedGlobalFilters.length) {\n        for (let i = 0; i < resolvedGlobalFilters.length; i++) {\n          currentGlobalFilter = resolvedGlobalFilters[i];\n          const id = currentGlobalFilter.id;\n          // Tag the row with the first truthy global filter state\n          if (currentGlobalFilter.filterFn(row, id, currentGlobalFilter.resolvedValue, filterMeta => {\n            row.columnFiltersMeta[id] = filterMeta;\n          })) {\n            row.columnFilters.__global__ = true;\n            break;\n          }\n        }\n        if (row.columnFilters.__global__ !== true) {\n          row.columnFilters.__global__ = false;\n        }\n      }\n    }\n    const filterRowsImpl = row => {\n      // Horizontally filter rows through each column\n      for (let i = 0; i < filterableIds.length; i++) {\n        if (row.columnFilters[filterableIds[i]] === false) {\n          return false;\n        }\n      }\n      return true;\n    };\n\n    // Filter final rows using all of the active filters\n    return filterRows(rowModel.rows, filterRowsImpl, table);\n  }, getMemoOptions(table.options, 'debugTable', 'getFilteredRowModel', () => table._autoResetPageIndex()));\n}\n\nfunction getGroupedRowModel() {\n  return table => memo(() => [table.getState().grouping, table.getPreGroupedRowModel()], (grouping, rowModel) => {\n    if (!rowModel.rows.length || !grouping.length) {\n      rowModel.rows.forEach(row => {\n        row.depth = 0;\n        row.parentId = undefined;\n      });\n      return rowModel;\n    }\n\n    // Filter the grouping list down to columns that exist\n    const existingGrouping = grouping.filter(columnId => table.getColumn(columnId));\n    const groupedFlatRows = [];\n    const groupedRowsById = {};\n    // const onlyGroupedFlatRows: Row[] = [];\n    // const onlyGroupedRowsById: Record<RowId, Row> = {};\n    // const nonGroupedFlatRows: Row[] = [];\n    // const nonGroupedRowsById: Record<RowId, Row> = {};\n\n    // Recursively group the data\n    const groupUpRecursively = function (rows, depth, parentId) {\n      if (depth === void 0) {\n        depth = 0;\n      }\n      // Grouping depth has been been met\n      // Stop grouping and simply rewrite thd depth and row relationships\n      if (depth >= existingGrouping.length) {\n        return rows.map(row => {\n          row.depth = depth;\n          groupedFlatRows.push(row);\n          groupedRowsById[row.id] = row;\n          if (row.subRows) {\n            row.subRows = groupUpRecursively(row.subRows, depth + 1, row.id);\n          }\n          return row;\n        });\n      }\n      const columnId = existingGrouping[depth];\n\n      // Group the rows together for this level\n      const rowGroupsMap = groupBy(rows, columnId);\n\n      // Perform aggregations for each group\n      const aggregatedGroupedRows = Array.from(rowGroupsMap.entries()).map((_ref, index) => {\n        let [groupingValue, groupedRows] = _ref;\n        let id = `${columnId}:${groupingValue}`;\n        id = parentId ? `${parentId}>${id}` : id;\n\n        // First, Recurse to group sub rows before aggregation\n        const subRows = groupUpRecursively(groupedRows, depth + 1, id);\n        subRows.forEach(subRow => {\n          subRow.parentId = id;\n        });\n\n        // Flatten the leaf rows of the rows in this group\n        const leafRows = depth ? flattenBy(groupedRows, row => row.subRows) : groupedRows;\n        const row = createRow(table, id, leafRows[0].original, index, depth, undefined, parentId);\n        Object.assign(row, {\n          groupingColumnId: columnId,\n          groupingValue,\n          subRows,\n          leafRows,\n          getValue: columnId => {\n            // Don't aggregate columns that are in the grouping\n            if (existingGrouping.includes(columnId)) {\n              if (row._valuesCache.hasOwnProperty(columnId)) {\n                return row._valuesCache[columnId];\n              }\n              if (groupedRows[0]) {\n                var _groupedRows$0$getVal;\n                row._valuesCache[columnId] = (_groupedRows$0$getVal = groupedRows[0].getValue(columnId)) != null ? _groupedRows$0$getVal : undefined;\n              }\n              return row._valuesCache[columnId];\n            }\n            if (row._groupingValuesCache.hasOwnProperty(columnId)) {\n              return row._groupingValuesCache[columnId];\n            }\n\n            // Aggregate the values\n            const column = table.getColumn(columnId);\n            const aggregateFn = column == null ? void 0 : column.getAggregationFn();\n            if (aggregateFn) {\n              row._groupingValuesCache[columnId] = aggregateFn(columnId, leafRows, groupedRows);\n              return row._groupingValuesCache[columnId];\n            }\n          }\n        });\n        subRows.forEach(subRow => {\n          groupedFlatRows.push(subRow);\n          groupedRowsById[subRow.id] = subRow;\n          // if (subRow.getIsGrouped?.()) {\n          //   onlyGroupedFlatRows.push(subRow);\n          //   onlyGroupedRowsById[subRow.id] = subRow;\n          // } else {\n          //   nonGroupedFlatRows.push(subRow);\n          //   nonGroupedRowsById[subRow.id] = subRow;\n          // }\n        });\n        return row;\n      });\n      return aggregatedGroupedRows;\n    };\n    const groupedRows = groupUpRecursively(rowModel.rows, 0);\n    groupedRows.forEach(subRow => {\n      groupedFlatRows.push(subRow);\n      groupedRowsById[subRow.id] = subRow;\n      // if (subRow.getIsGrouped?.()) {\n      //   onlyGroupedFlatRows.push(subRow);\n      //   onlyGroupedRowsById[subRow.id] = subRow;\n      // } else {\n      //   nonGroupedFlatRows.push(subRow);\n      //   nonGroupedRowsById[subRow.id] = subRow;\n      // }\n    });\n    return {\n      rows: groupedRows,\n      flatRows: groupedFlatRows,\n      rowsById: groupedRowsById\n    };\n  }, getMemoOptions(table.options, 'debugTable', 'getGroupedRowModel', () => {\n    table._queue(() => {\n      table._autoResetExpanded();\n      table._autoResetPageIndex();\n    });\n  }));\n}\nfunction groupBy(rows, columnId) {\n  const groupMap = new Map();\n  return rows.reduce((map, row) => {\n    const resKey = `${row.getGroupingValue(columnId)}`;\n    const previous = map.get(resKey);\n    if (!previous) {\n      map.set(resKey, [row]);\n    } else {\n      previous.push(row);\n    }\n    return map;\n  }, groupMap);\n}\n\nfunction getPaginationRowModel(opts) {\n  return table => memo(() => [table.getState().pagination, table.getPrePaginationRowModel(), table.options.paginateExpandedRows ? undefined : table.getState().expanded], (pagination, rowModel) => {\n    if (!rowModel.rows.length) {\n      return rowModel;\n    }\n    const {\n      pageSize,\n      pageIndex\n    } = pagination;\n    let {\n      rows,\n      flatRows,\n      rowsById\n    } = rowModel;\n    const pageStart = pageSize * pageIndex;\n    const pageEnd = pageStart + pageSize;\n    rows = rows.slice(pageStart, pageEnd);\n    let paginatedRowModel;\n    if (!table.options.paginateExpandedRows) {\n      paginatedRowModel = expandRows({\n        rows,\n        flatRows,\n        rowsById\n      });\n    } else {\n      paginatedRowModel = {\n        rows,\n        flatRows,\n        rowsById\n      };\n    }\n    paginatedRowModel.flatRows = [];\n    const handleRow = row => {\n      paginatedRowModel.flatRows.push(row);\n      if (row.subRows.length) {\n        row.subRows.forEach(handleRow);\n      }\n    };\n    paginatedRowModel.rows.forEach(handleRow);\n    return paginatedRowModel;\n  }, getMemoOptions(table.options, 'debugTable', 'getPaginationRowModel'));\n}\n\nfunction getSortedRowModel() {\n  return table => memo(() => [table.getState().sorting, table.getPreSortedRowModel()], (sorting, rowModel) => {\n    if (!rowModel.rows.length || !(sorting != null && sorting.length)) {\n      return rowModel;\n    }\n    const sortingState = table.getState().sorting;\n    const sortedFlatRows = [];\n\n    // Filter out sortings that correspond to non existing columns\n    const availableSorting = sortingState.filter(sort => {\n      var _table$getColumn;\n      return (_table$getColumn = table.getColumn(sort.id)) == null ? void 0 : _table$getColumn.getCanSort();\n    });\n    const columnInfoById = {};\n    availableSorting.forEach(sortEntry => {\n      const column = table.getColumn(sortEntry.id);\n      if (!column) return;\n      columnInfoById[sortEntry.id] = {\n        sortUndefined: column.columnDef.sortUndefined,\n        invertSorting: column.columnDef.invertSorting,\n        sortingFn: column.getSortingFn()\n      };\n    });\n    const sortData = rows => {\n      // This will also perform a stable sorting using the row index\n      // if needed.\n      const sortedData = rows.map(row => ({\n        ...row\n      }));\n      sortedData.sort((rowA, rowB) => {\n        for (let i = 0; i < availableSorting.length; i += 1) {\n          var _sortEntry$desc;\n          const sortEntry = availableSorting[i];\n          const columnInfo = columnInfoById[sortEntry.id];\n          const sortUndefined = columnInfo.sortUndefined;\n          const isDesc = (_sortEntry$desc = sortEntry == null ? void 0 : sortEntry.desc) != null ? _sortEntry$desc : false;\n          let sortInt = 0;\n\n          // All sorting ints should always return in ascending order\n          if (sortUndefined) {\n            const aValue = rowA.getValue(sortEntry.id);\n            const bValue = rowB.getValue(sortEntry.id);\n            const aUndefined = aValue === undefined;\n            const bUndefined = bValue === undefined;\n            if (aUndefined || bUndefined) {\n              if (sortUndefined === 'first') return aUndefined ? -1 : 1;\n              if (sortUndefined === 'last') return aUndefined ? 1 : -1;\n              sortInt = aUndefined && bUndefined ? 0 : aUndefined ? sortUndefined : -sortUndefined;\n            }\n          }\n          if (sortInt === 0) {\n            sortInt = columnInfo.sortingFn(rowA, rowB, sortEntry.id);\n          }\n\n          // If sorting is non-zero, take care of desc and inversion\n          if (sortInt !== 0) {\n            if (isDesc) {\n              sortInt *= -1;\n            }\n            if (columnInfo.invertSorting) {\n              sortInt *= -1;\n            }\n            return sortInt;\n          }\n        }\n        return rowA.index - rowB.index;\n      });\n\n      // If there are sub-rows, sort them\n      sortedData.forEach(row => {\n        var _row$subRows;\n        sortedFlatRows.push(row);\n        if ((_row$subRows = row.subRows) != null && _row$subRows.length) {\n          row.subRows = sortData(row.subRows);\n        }\n      });\n      return sortedData;\n    };\n    return {\n      rows: sortData(rowModel.rows),\n      flatRows: sortedFlatRows,\n      rowsById: rowModel.rowsById\n    };\n  }, getMemoOptions(table.options, 'debugTable', 'getSortedRowModel', () => table._autoResetPageIndex()));\n}\n\nexport { ColumnFaceting, ColumnFiltering, ColumnGrouping, ColumnOrdering, ColumnPinning, ColumnSizing, ColumnVisibility, GlobalFaceting, GlobalFiltering, Headers, RowExpanding, RowPagination, RowPinning, RowSelection, RowSorting, _getVisibleLeafColumns, aggregationFns, buildHeaderGroups, createCell, createColumn, createColumnHelper, createRow, createTable, defaultColumnSizing, expandRows, filterFns, flattenBy, functionalUpdate, getCoreRowModel, getExpandedRowModel, getFacetedMinMaxValues, getFacetedRowModel, getFacetedUniqueValues, getFilteredRowModel, getGroupedRowModel, getMemoOptions, getPaginationRowModel, getSortedRowModel, isFunction, isNumberArray, isRowSelected, isSubRowSelected, makeStateUpdater, memo, noop, orderColumns, passiveEventSupported, reSplitAlphaNumeric, selectRowsFn, shouldAutoRemoveFilter, sortingFns };\n//# sourceMappingURL=index.mjs.map\n","/**\n   * react-table\n   *\n   * Copyright (c) TanStack\n   *\n   * This source code is licensed under the MIT license found in the\n   * LICENSE.md file in the root directory of this source tree.\n   *\n   * @license MIT\n   */\nimport * as React from 'react';\nimport { createTable } from '@tanstack/table-core';\nexport * from '@tanstack/table-core';\n\n//\n\n/**\n * If rendering headers, cells, or footers with custom markup, use flexRender instead of `cell.getValue()` or `cell.renderValue()`.\n */\nfunction flexRender(Comp, props) {\n  return !Comp ? null : isReactComponent(Comp) ? /*#__PURE__*/React.createElement(Comp, props) : Comp;\n}\nfunction isReactComponent(component) {\n  return isClassComponent(component) || typeof component === 'function' || isExoticComponent(component);\n}\nfunction isClassComponent(component) {\n  return typeof component === 'function' && (() => {\n    const proto = Object.getPrototypeOf(component);\n    return proto.prototype && proto.prototype.isReactComponent;\n  })();\n}\nfunction isExoticComponent(component) {\n  return typeof component === 'object' && typeof component.$$typeof === 'symbol' && ['react.memo', 'react.forward_ref'].includes(component.$$typeof.description);\n}\nfunction useReactTable(options) {\n  // Compose in the generic options to the user options\n  const resolvedOptions = {\n    state: {},\n    // Dummy state\n    onStateChange: () => {},\n    // noop\n    renderFallbackValue: null,\n    ...options\n  };\n\n  // Create a new table and store it in state\n  const [tableRef] = React.useState(() => ({\n    current: createTable(resolvedOptions)\n  }));\n\n  // By default, manage table state here using the table's initial state\n  const [state, setState] = React.useState(() => tableRef.current.initialState);\n\n  // Compose the default state above with any user state. This will allow the user\n  // to only control a subset of the state if desired.\n  tableRef.current.setOptions(prev => ({\n    ...prev,\n    ...options,\n    state: {\n      ...state,\n      ...options.state\n    },\n    // Similarly, we'll maintain both our internal state and any user-provided\n    // state.\n    onStateChange: updater => {\n      setState(updater);\n      options.onStateChange == null || options.onStateChange(updater);\n    }\n  }));\n  return tableRef.current;\n}\n\nexport { flexRender, useReactTable };\n//# sourceMappingURL=index.mjs.map\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|YYYY|YY|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),Y=_.prototype;return O.prototype=Y,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){Y[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n  /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n  var undefined;\n\n  /** Used as the semantic version number. */\n  var VERSION = '4.18.1';\n\n  /** Used as the size to enable large array optimizations. */\n  var LARGE_ARRAY_SIZE = 200;\n\n  /** Error message constants. */\n  var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n      FUNC_ERROR_TEXT = 'Expected a function',\n      INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`',\n      INVALID_TEMPL_IMPORTS_ERROR_TEXT = 'Invalid `imports` option passed into `_.template`';\n\n  /** Used to stand-in for `undefined` hash values. */\n  var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n  /** Used as the maximum memoize cache size. */\n  var MAX_MEMOIZE_SIZE = 500;\n\n  /** Used as the internal argument placeholder. */\n  var PLACEHOLDER = '__lodash_placeholder__';\n\n  /** Used to compose bitmasks for cloning. */\n  var CLONE_DEEP_FLAG = 1,\n      CLONE_FLAT_FLAG = 2,\n      CLONE_SYMBOLS_FLAG = 4;\n\n  /** Used to compose bitmasks for value comparisons. */\n  var COMPARE_PARTIAL_FLAG = 1,\n      COMPARE_UNORDERED_FLAG = 2;\n\n  /** Used to compose bitmasks for function metadata. */\n  var WRAP_BIND_FLAG = 1,\n      WRAP_BIND_KEY_FLAG = 2,\n      WRAP_CURRY_BOUND_FLAG = 4,\n      WRAP_CURRY_FLAG = 8,\n      WRAP_CURRY_RIGHT_FLAG = 16,\n      WRAP_PARTIAL_FLAG = 32,\n      WRAP_PARTIAL_RIGHT_FLAG = 64,\n      WRAP_ARY_FLAG = 128,\n      WRAP_REARG_FLAG = 256,\n      WRAP_FLIP_FLAG = 512;\n\n  /** Used as default options for `_.truncate`. */\n  var DEFAULT_TRUNC_LENGTH = 30,\n      DEFAULT_TRUNC_OMISSION = '...';\n\n  /** Used to detect hot functions by number of calls within a span of milliseconds. */\n  var HOT_COUNT = 800,\n      HOT_SPAN = 16;\n\n  /** Used to indicate the type of lazy iteratees. */\n  var LAZY_FILTER_FLAG = 1,\n      LAZY_MAP_FLAG = 2,\n      LAZY_WHILE_FLAG = 3;\n\n  /** Used as references for various `Number` constants. */\n  var INFINITY = 1 / 0,\n      MAX_SAFE_INTEGER = 9007199254740991,\n      MAX_INTEGER = 1.7976931348623157e+308,\n      NAN = 0 / 0;\n\n  /** Used as references for the maximum length and index of an array. */\n  var MAX_ARRAY_LENGTH = 4294967295,\n      MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n  /** Used to associate wrap methods with their bit flags. */\n  var wrapFlags = [\n    ['ary', WRAP_ARY_FLAG],\n    ['bind', WRAP_BIND_FLAG],\n    ['bindKey', WRAP_BIND_KEY_FLAG],\n    ['curry', WRAP_CURRY_FLAG],\n    ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n    ['flip', WRAP_FLIP_FLAG],\n    ['partial', WRAP_PARTIAL_FLAG],\n    ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n    ['rearg', WRAP_REARG_FLAG]\n  ];\n\n  /** `Object#toString` result references. */\n  var argsTag = '[object Arguments]',\n      arrayTag = '[object Array]',\n      asyncTag = '[object AsyncFunction]',\n      boolTag = '[object Boolean]',\n      dateTag = '[object Date]',\n      domExcTag = '[object DOMException]',\n      errorTag = '[object Error]',\n      funcTag = '[object Function]',\n      genTag = '[object GeneratorFunction]',\n      mapTag = '[object Map]',\n      numberTag = '[object Number]',\n      nullTag = '[object Null]',\n      objectTag = '[object Object]',\n      promiseTag = '[object Promise]',\n      proxyTag = '[object Proxy]',\n      regexpTag = '[object RegExp]',\n      setTag = '[object Set]',\n      stringTag = '[object String]',\n      symbolTag = '[object Symbol]',\n      undefinedTag = '[object Undefined]',\n      weakMapTag = '[object WeakMap]',\n      weakSetTag = '[object WeakSet]';\n\n  var arrayBufferTag = '[object ArrayBuffer]',\n      dataViewTag = '[object DataView]',\n      float32Tag = '[object Float32Array]',\n      float64Tag = '[object Float64Array]',\n      int8Tag = '[object Int8Array]',\n      int16Tag = '[object Int16Array]',\n      int32Tag = '[object Int32Array]',\n      uint8Tag = '[object Uint8Array]',\n      uint8ClampedTag = '[object Uint8ClampedArray]',\n      uint16Tag = '[object Uint16Array]',\n      uint32Tag = '[object Uint32Array]';\n\n  /** Used to match empty string literals in compiled template source. */\n  var reEmptyStringLeading = /\\b__p \\+= '';/g,\n      reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n      reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n  /** Used to match HTML entities and HTML characters. */\n  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n      reUnescapedHtml = /[&<>\"']/g,\n      reHasEscapedHtml = RegExp(reEscapedHtml.source),\n      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n  /** Used to match template delimiters. */\n  var reEscape = /<%-([\\s\\S]+?)%>/g,\n      reEvaluate = /<%([\\s\\S]+?)%>/g,\n      reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n  /** Used to match property names within property paths. */\n  var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n      reIsPlainProp = /^\\w*$/,\n      rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n  /**\n   * Used to match `RegExp`\n   * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n   */\n  var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n      reHasRegExpChar = RegExp(reRegExpChar.source);\n\n  /** Used to match leading whitespace. */\n  var reTrimStart = /^\\s+/;\n\n  /** Used to match a single whitespace character. */\n  var reWhitespace = /\\s/;\n\n  /** Used to match wrap detail comments. */\n  var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n      reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n      reSplitDetails = /,? & /;\n\n  /** Used to match words composed of alphanumeric characters. */\n  var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n  /**\n   * Used to validate the `validate` option in `_.template` variable.\n   *\n   * Forbids characters which could potentially change the meaning of the function argument definition:\n   * - \"(),\" (modification of function parameters)\n   * - \"=\" (default value)\n   * - \"[]{}\" (destructuring of function parameters)\n   * - \"/\" (beginning of a comment)\n   * - whitespace\n   */\n  var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n  /** Used to match backslashes in property paths. */\n  var reEscapeChar = /\\\\(\\\\)?/g;\n\n  /**\n   * Used to match\n   * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n   */\n  var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n  /** Used to match `RegExp` flags from their coerced string values. */\n  var reFlags = /\\w*$/;\n\n  /** Used to detect bad signed hexadecimal string values. */\n  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n  /** Used to detect binary string values. */\n  var reIsBinary = /^0b[01]+$/i;\n\n  /** Used to detect host constructors (Safari). */\n  var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n  /** Used to detect octal string values. */\n  var reIsOctal = /^0o[0-7]+$/i;\n\n  /** Used to detect unsigned integer values. */\n  var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n  /** Used to match Latin Unicode letters (excluding mathematical operators). */\n  var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n  /** Used to ensure capturing order of template delimiters. */\n  var reNoMatch = /($^)/;\n\n  /** Used to match unescaped characters in compiled string literals. */\n  var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n  /** Used to compose unicode character classes. */\n  var rsAstralRange = '\\\\ud800-\\\\udfff',\n      rsComboMarksRange = '\\\\u0300-\\\\u036f',\n      reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n      rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n      rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n      rsDingbatRange = '\\\\u2700-\\\\u27bf',\n      rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n      rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n      rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n      rsPunctuationRange = '\\\\u2000-\\\\u206f',\n      rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n      rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n      rsVarRange = '\\\\ufe0e\\\\ufe0f',\n      rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n  /** Used to compose unicode capture groups. */\n  var rsApos = \"['\\u2019]\",\n      rsAstral = '[' + rsAstralRange + ']',\n      rsBreak = '[' + rsBreakRange + ']',\n      rsCombo = '[' + rsComboRange + ']',\n      rsDigits = '\\\\d+',\n      rsDingbat = '[' + rsDingbatRange + ']',\n      rsLower = '[' + rsLowerRange + ']',\n      rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n      rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n      rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n      rsNonAstral = '[^' + rsAstralRange + ']',\n      rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n      rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n      rsUpper = '[' + rsUpperRange + ']',\n      rsZWJ = '\\\\u200d';\n\n  /** Used to compose unicode regexes. */\n  var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n      rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n      rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n      rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n      reOptMod = rsModifier + '?',\n      rsOptVar = '[' + rsVarRange + ']?',\n      rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n      rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n      rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n      rsSeq = rsOptVar + reOptMod + rsOptJoin,\n      rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n      rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n  /** Used to match apostrophes. */\n  var reApos = RegExp(rsApos, 'g');\n\n  /**\n   * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n   * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n   */\n  var reComboMark = RegExp(rsCombo, 'g');\n\n  /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n  var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n  /** Used to match complex or compound words. */\n  var reUnicodeWord = RegExp([\n    rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n    rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n    rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n    rsUpper + '+' + rsOptContrUpper,\n    rsOrdUpper,\n    rsOrdLower,\n    rsDigits,\n    rsEmoji\n  ].join('|'), 'g');\n\n  /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n  var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');\n\n  /** Used to detect strings that need a more robust regexp to match words. */\n  var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n  /** Used to assign default `context` object properties. */\n  var contextProps = [\n    'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n    'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n    '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n  ];\n\n  /** Used to make template sourceURLs easier to identify. */\n  var templateCounter = -1;\n\n  /** Used to identify `toStringTag` values of typed arrays. */\n  var typedArrayTags = {};\n  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n  typedArrayTags[uint32Tag] = true;\n  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n  typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n  typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n  typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n  typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n  typedArrayTags[setTag] = typedArrayTags[stringTag] =\n  typedArrayTags[weakMapTag] = false;\n\n  /** Used to identify `toStringTag` values supported by `_.clone`. */\n  var cloneableTags = {};\n  cloneableTags[argsTag] = cloneableTags[arrayTag] =\n  cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n  cloneableTags[boolTag] = cloneableTags[dateTag] =\n  cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n  cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n  cloneableTags[int32Tag] = cloneableTags[mapTag] =\n  cloneableTags[numberTag] = cloneableTags[objectTag] =\n  cloneableTags[regexpTag] = cloneableTags[setTag] =\n  cloneableTags[stringTag] = cloneableTags[symbolTag] =\n  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n  cloneableTags[errorTag] = cloneableTags[funcTag] =\n  cloneableTags[weakMapTag] = false;\n\n  /** Used to map Latin Unicode letters to basic Latin letters. */\n  var deburredLetters = {\n    // Latin-1 Supplement block.\n    '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n    '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n    '\\xc7': 'C',  '\\xe7': 'c',\n    '\\xd0': 'D',  '\\xf0': 'd',\n    '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n    '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n    '\\xcc': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n    '\\xec': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n    '\\xd1': 'N',  '\\xf1': 'n',\n    '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n    '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n    '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n    '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n    '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n    '\\xc6': 'Ae', '\\xe6': 'ae',\n    '\\xde': 'Th', '\\xfe': 'th',\n    '\\xdf': 'ss',\n    // Latin Extended-A block.\n    '\\u0100': 'A',  '\\u0102': 'A', '\\u0104': 'A',\n    '\\u0101': 'a',  '\\u0103': 'a', '\\u0105': 'a',\n    '\\u0106': 'C',  '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n    '\\u0107': 'c',  '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n    '\\u010e': 'D',  '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n    '\\u0112': 'E',  '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n    '\\u0113': 'e',  '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n    '\\u011c': 'G',  '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n    '\\u011d': 'g',  '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n    '\\u0124': 'H',  '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n    '\\u0128': 'I',  '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n    '\\u0129': 'i',  '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n    '\\u0134': 'J',  '\\u0135': 'j',\n    '\\u0136': 'K',  '\\u0137': 'k', '\\u0138': 'k',\n    '\\u0139': 'L',  '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n    '\\u013a': 'l',  '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n    '\\u0143': 'N',  '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n    '\\u0144': 'n',  '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n    '\\u014c': 'O',  '\\u014e': 'O', '\\u0150': 'O',\n    '\\u014d': 'o',  '\\u014f': 'o', '\\u0151': 'o',\n    '\\u0154': 'R',  '\\u0156': 'R', '\\u0158': 'R',\n    '\\u0155': 'r',  '\\u0157': 'r', '\\u0159': 'r',\n    '\\u015a': 'S',  '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n    '\\u015b': 's',  '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n    '\\u0162': 'T',  '\\u0164': 'T', '\\u0166': 'T',\n    '\\u0163': 't',  '\\u0165': 't', '\\u0167': 't',\n    '\\u0168': 'U',  '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n    '\\u0169': 'u',  '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n    '\\u0174': 'W',  '\\u0175': 'w',\n    '\\u0176': 'Y',  '\\u0177': 'y', '\\u0178': 'Y',\n    '\\u0179': 'Z',  '\\u017b': 'Z', '\\u017d': 'Z',\n    '\\u017a': 'z',  '\\u017c': 'z', '\\u017e': 'z',\n    '\\u0132': 'IJ', '\\u0133': 'ij',\n    '\\u0152': 'Oe', '\\u0153': 'oe',\n    '\\u0149': \"'n\", '\\u017f': 's'\n  };\n\n  /** Used to map characters to HTML entities. */\n  var htmlEscapes = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#39;'\n  };\n\n  /** Used to map HTML entities to characters. */\n  var htmlUnescapes = {\n    '&amp;': '&',\n    '&lt;': '<',\n    '&gt;': '>',\n    '&quot;': '\"',\n    '&#39;': \"'\"\n  };\n\n  /** Used to escape characters for inclusion in compiled string literals. */\n  var stringEscapes = {\n    '\\\\': '\\\\',\n    \"'\": \"'\",\n    '\\n': 'n',\n    '\\r': 'r',\n    '\\u2028': 'u2028',\n    '\\u2029': 'u2029'\n  };\n\n  /** Built-in method references without a dependency on `root`. */\n  var freeParseFloat = parseFloat,\n      freeParseInt = parseInt;\n\n  /** Detect free variable `global` from Node.js. */\n  var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n  /** Detect free variable `self`. */\n  var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n  /** Used as a reference to the global object. */\n  var root = freeGlobal || freeSelf || Function('return this')();\n\n  /** Detect free variable `exports`. */\n  var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n  /** Detect free variable `module`. */\n  var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n  /** Detect the popular CommonJS extension `module.exports`. */\n  var moduleExports = freeModule && freeModule.exports === freeExports;\n\n  /** Detect free variable `process` from Node.js. */\n  var freeProcess = moduleExports && freeGlobal.process;\n\n  /** Used to access faster Node.js helpers. */\n  var nodeUtil = (function() {\n    try {\n      // Use `util.types` for Node.js 10+.\n      var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n      if (types) {\n        return types;\n      }\n\n      // Legacy `process.binding('util')` for Node.js < 10.\n      return freeProcess && freeProcess.binding && freeProcess.binding('util');\n    } catch (e) {}\n  }());\n\n  /* Node.js helper references. */\n  var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n      nodeIsDate = nodeUtil && nodeUtil.isDate,\n      nodeIsMap = nodeUtil && nodeUtil.isMap,\n      nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n      nodeIsSet = nodeUtil && nodeUtil.isSet,\n      nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * A faster alternative to `Function#apply`, this function invokes `func`\n   * with the `this` binding of `thisArg` and the arguments of `args`.\n   *\n   * @private\n   * @param {Function} func The function to invoke.\n   * @param {*} thisArg The `this` binding of `func`.\n   * @param {Array} args The arguments to invoke `func` with.\n   * @returns {*} Returns the result of `func`.\n   */\n  function apply(func, thisArg, args) {\n    switch (args.length) {\n      case 0: return func.call(thisArg);\n      case 1: return func.call(thisArg, args[0]);\n      case 2: return func.call(thisArg, args[0], args[1]);\n      case 3: return func.call(thisArg, args[0], args[1], args[2]);\n    }\n    return func.apply(thisArg, args);\n  }\n\n  /**\n   * A specialized version of `baseAggregator` for arrays.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} setter The function to set `accumulator` values.\n   * @param {Function} iteratee The iteratee to transform keys.\n   * @param {Object} accumulator The initial aggregated object.\n   * @returns {Function} Returns `accumulator`.\n   */\n  function arrayAggregator(array, setter, iteratee, accumulator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      var value = array[index];\n      setter(accumulator, value, iteratee(value), array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.forEach` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEach(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (iteratee(array[index], index, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.forEachRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEachRight(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n\n    while (length--) {\n      if (iteratee(array[length], length, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.every` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if all elements pass the predicate check,\n   *  else `false`.\n   */\n  function arrayEvery(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (!predicate(array[index], index, array)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * A specialized version of `_.filter` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {Array} Returns the new filtered array.\n   */\n  function arrayFilter(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (predicate(value, index, array)) {\n        result[resIndex++] = value;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.includes` for arrays without support for\n   * specifying an index to search from.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludes(array, value) {\n    var length = array == null ? 0 : array.length;\n    return !!length && baseIndexOf(array, value, 0) > -1;\n  }\n\n  /**\n   * This function is like `arrayIncludes` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludesWith(array, value, comparator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (comparator(value, array[index])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * A specialized version of `_.map` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the new mapped array.\n   */\n  function arrayMap(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        result = Array(length);\n\n    while (++index < length) {\n      result[index] = iteratee(array[index], index, array);\n    }\n    return result;\n  }\n\n  /**\n   * Appends the elements of `values` to `array`.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {Array} values The values to append.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayPush(array, values) {\n    var index = -1,\n        length = values.length,\n        offset = array.length;\n\n    while (++index < length) {\n      array[offset + index] = values[index];\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.reduce` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the first element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduce(array, iteratee, accumulator, initAccum) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    if (initAccum && length) {\n      accumulator = array[++index];\n    }\n    while (++index < length) {\n      accumulator = iteratee(accumulator, array[index], index, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.reduceRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the last element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n    var length = array == null ? 0 : array.length;\n    if (initAccum && length) {\n      accumulator = array[--length];\n    }\n    while (length--) {\n      accumulator = iteratee(accumulator, array[length], length, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.some` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if any element passes the predicate check,\n   *  else `false`.\n   */\n  function arraySome(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (predicate(array[index], index, array)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Gets the size of an ASCII `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  var asciiSize = baseProperty('length');\n\n  /**\n   * Converts an ASCII `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function asciiToArray(string) {\n    return string.split('');\n  }\n\n  /**\n   * Splits an ASCII `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function asciiWords(string) {\n    return string.match(reAsciiWord) || [];\n  }\n\n  /**\n   * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n   * without support for iteratee shorthands, which iterates over `collection`\n   * using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the found element or its key, else `undefined`.\n   */\n  function baseFindKey(collection, predicate, eachFunc) {\n    var result;\n    eachFunc(collection, function(value, key, collection) {\n      if (predicate(value, key, collection)) {\n        result = key;\n        return false;\n      }\n    });\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.findIndex` and `_.findLastIndex` without\n   * support for iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {number} fromIndex The index to search from.\n   * @param {boolean} [fromRight] Specify iterating from right to left.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseFindIndex(array, predicate, fromIndex, fromRight) {\n    var length = array.length,\n        index = fromIndex + (fromRight ? 1 : -1);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (predicate(array[index], index, array)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOf(array, value, fromIndex) {\n    return value === value\n      ? strictIndexOf(array, value, fromIndex)\n      : baseFindIndex(array, baseIsNaN, fromIndex);\n  }\n\n  /**\n   * This function is like `baseIndexOf` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOfWith(array, value, fromIndex, comparator) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (comparator(array[index], value)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.isNaN` without support for number objects.\n   *\n   * @private\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n   */\n  function baseIsNaN(value) {\n    return value !== value;\n  }\n\n  /**\n   * The base implementation of `_.mean` and `_.meanBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the mean.\n   */\n  function baseMean(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n    return length ? (baseSum(array, iteratee) / length) : NAN;\n  }\n\n  /**\n   * The base implementation of `_.property` without support for deep paths.\n   *\n   * @private\n   * @param {string} key The key of the property to get.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function baseProperty(key) {\n    return function(object) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.propertyOf` without support for deep paths.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function basePropertyOf(object) {\n    return function(key) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.reduce` and `_.reduceRight`, without support\n   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} accumulator The initial value.\n   * @param {boolean} initAccum Specify using the first or last element of\n   *  `collection` as the initial value.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the accumulated value.\n   */\n  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n    eachFunc(collection, function(value, index, collection) {\n      accumulator = initAccum\n        ? (initAccum = false, value)\n        : iteratee(accumulator, value, index, collection);\n    });\n    return accumulator;\n  }\n\n  /**\n   * The base implementation of `_.sortBy` which uses `comparer` to define the\n   * sort order of `array` and replaces criteria objects with their corresponding\n   * values.\n   *\n   * @private\n   * @param {Array} array The array to sort.\n   * @param {Function} comparer The function to define sort order.\n   * @returns {Array} Returns `array`.\n   */\n  function baseSortBy(array, comparer) {\n    var length = array.length;\n\n    array.sort(comparer);\n    while (length--) {\n      array[length] = array[length].value;\n    }\n    return array;\n  }\n\n  /**\n   * The base implementation of `_.sum` and `_.sumBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the sum.\n   */\n  function baseSum(array, iteratee) {\n    var result,\n        index = -1,\n        length = array.length;\n\n    while (++index < length) {\n      var current = iteratee(array[index]);\n      if (current !== undefined) {\n        result = result === undefined ? current : (result + current);\n      }\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.times` without support for iteratee shorthands\n   * or max array length checks.\n   *\n   * @private\n   * @param {number} n The number of times to invoke `iteratee`.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the array of results.\n   */\n  function baseTimes(n, iteratee) {\n    var index = -1,\n        result = Array(n);\n\n    while (++index < n) {\n      result[index] = iteratee(index);\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n   * of key-value pairs for `object` corresponding to the property names of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the key-value pairs.\n   */\n  function baseToPairs(object, props) {\n    return arrayMap(props, function(key) {\n      return [key, object[key]];\n    });\n  }\n\n  /**\n   * The base implementation of `_.trim`.\n   *\n   * @private\n   * @param {string} string The string to trim.\n   * @returns {string} Returns the trimmed string.\n   */\n  function baseTrim(string) {\n    return string\n      ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n      : string;\n  }\n\n  /**\n   * The base implementation of `_.unary` without support for storing metadata.\n   *\n   * @private\n   * @param {Function} func The function to cap arguments for.\n   * @returns {Function} Returns the new capped function.\n   */\n  function baseUnary(func) {\n    return function(value) {\n      return func(value);\n    };\n  }\n\n  /**\n   * The base implementation of `_.values` and `_.valuesIn` which creates an\n   * array of `object` property values corresponding to the property names\n   * of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the array of property values.\n   */\n  function baseValues(object, props) {\n    return arrayMap(props, function(key) {\n      return object[key];\n    });\n  }\n\n  /**\n   * Checks if a `cache` value for `key` exists.\n   *\n   * @private\n   * @param {Object} cache The cache to query.\n   * @param {string} key The key of the entry to check.\n   * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n   */\n  function cacheHas(cache, key) {\n    return cache.has(key);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the first unmatched string symbol.\n   */\n  function charsStartIndex(strSymbols, chrSymbols) {\n    var index = -1,\n        length = strSymbols.length;\n\n    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the last unmatched string symbol.\n   */\n  function charsEndIndex(strSymbols, chrSymbols) {\n    var index = strSymbols.length;\n\n    while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Gets the number of `placeholder` occurrences in `array`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} placeholder The placeholder to search for.\n   * @returns {number} Returns the placeholder count.\n   */\n  function countHolders(array, placeholder) {\n    var length = array.length,\n        result = 0;\n\n    while (length--) {\n      if (array[length] === placeholder) {\n        ++result;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n   * letters to basic Latin letters.\n   *\n   * @private\n   * @param {string} letter The matched letter to deburr.\n   * @returns {string} Returns the deburred letter.\n   */\n  var deburrLetter = basePropertyOf(deburredLetters);\n\n  /**\n   * Used by `_.escape` to convert characters to HTML entities.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n  /**\n   * Used by `_.template` to escape characters for inclusion in compiled string literals.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  function escapeStringChar(chr) {\n    return '\\\\' + stringEscapes[chr];\n  }\n\n  /**\n   * Gets the value at `key` of `object`.\n   *\n   * @private\n   * @param {Object} [object] The object to query.\n   * @param {string} key The key of the property to get.\n   * @returns {*} Returns the property value.\n   */\n  function getValue(object, key) {\n    return object == null ? undefined : object[key];\n  }\n\n  /**\n   * Checks if `string` contains Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n   */\n  function hasUnicode(string) {\n    return reHasUnicode.test(string);\n  }\n\n  /**\n   * Checks if `string` contains a word composed of Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a word is found, else `false`.\n   */\n  function hasUnicodeWord(string) {\n    return reHasUnicodeWord.test(string);\n  }\n\n  /**\n   * Converts `iterator` to an array.\n   *\n   * @private\n   * @param {Object} iterator The iterator to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function iteratorToArray(iterator) {\n    var data,\n        result = [];\n\n    while (!(data = iterator.next()).done) {\n      result.push(data.value);\n    }\n    return result;\n  }\n\n  /**\n   * Converts `map` to its key-value pairs.\n   *\n   * @private\n   * @param {Object} map The map to convert.\n   * @returns {Array} Returns the key-value pairs.\n   */\n  function mapToArray(map) {\n    var index = -1,\n        result = Array(map.size);\n\n    map.forEach(function(value, key) {\n      result[++index] = [key, value];\n    });\n    return result;\n  }\n\n  /**\n   * Creates a unary function that invokes `func` with its argument transformed.\n   *\n   * @private\n   * @param {Function} func The function to wrap.\n   * @param {Function} transform The argument transform.\n   * @returns {Function} Returns the new function.\n   */\n  function overArg(func, transform) {\n    return function(arg) {\n      return func(transform(arg));\n    };\n  }\n\n  /**\n   * Replaces all `placeholder` elements in `array` with an internal placeholder\n   * and returns an array of their indexes.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {*} placeholder The placeholder to replace.\n   * @returns {Array} Returns the new array of placeholder indexes.\n   */\n  function replaceHolders(array, placeholder) {\n    var index = -1,\n        length = array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (value === placeholder || value === PLACEHOLDER) {\n        array[index] = PLACEHOLDER;\n        result[resIndex++] = index;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Converts `set` to an array of its values.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the values.\n   */\n  function setToArray(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = value;\n    });\n    return result;\n  }\n\n  /**\n   * Converts `set` to its value-value pairs.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the value-value pairs.\n   */\n  function setToPairs(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = [value, value];\n    });\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.indexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictIndexOf(array, value, fromIndex) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * A specialized version of `_.lastIndexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictLastIndexOf(array, value, fromIndex) {\n    var index = fromIndex + 1;\n    while (index--) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return index;\n  }\n\n  /**\n   * Gets the number of symbols in `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the string size.\n   */\n  function stringSize(string) {\n    return hasUnicode(string)\n      ? unicodeSize(string)\n      : asciiSize(string);\n  }\n\n  /**\n   * Converts `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function stringToArray(string) {\n    return hasUnicode(string)\n      ? unicodeToArray(string)\n      : asciiToArray(string);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n   * character of `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the index of the last non-whitespace character.\n   */\n  function trimmedEndIndex(string) {\n    var index = string.length;\n\n    while (index-- && reWhitespace.test(string.charAt(index))) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.unescape` to convert HTML entities to characters.\n   *\n   * @private\n   * @param {string} chr The matched character to unescape.\n   * @returns {string} Returns the unescaped character.\n   */\n  var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n  /**\n   * Gets the size of a Unicode `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  function unicodeSize(string) {\n    var result = reUnicode.lastIndex = 0;\n    while (reUnicode.test(string)) {\n      ++result;\n    }\n    return result;\n  }\n\n  /**\n   * Converts a Unicode `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function unicodeToArray(string) {\n    return string.match(reUnicode) || [];\n  }\n\n  /**\n   * Splits a Unicode `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function unicodeWords(string) {\n    return string.match(reUnicodeWord) || [];\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * Create a new pristine `lodash` function using the `context` object.\n   *\n   * @static\n   * @memberOf _\n   * @since 1.1.0\n   * @category Util\n   * @param {Object} [context=root] The context object.\n   * @returns {Function} Returns a new `lodash` function.\n   * @example\n   *\n   * _.mixin({ 'foo': _.constant('foo') });\n   *\n   * var lodash = _.runInContext();\n   * lodash.mixin({ 'bar': lodash.constant('bar') });\n   *\n   * _.isFunction(_.foo);\n   * // => true\n   * _.isFunction(_.bar);\n   * // => false\n   *\n   * lodash.isFunction(lodash.foo);\n   * // => false\n   * lodash.isFunction(lodash.bar);\n   * // => true\n   *\n   * // Create a suped-up `defer` in Node.js.\n   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n   */\n  var runInContext = (function runInContext(context) {\n    context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n    /** Built-in constructor references. */\n    var Array = context.Array,\n        Date = context.Date,\n        Error = context.Error,\n        Function = context.Function,\n        Math = context.Math,\n        Object = context.Object,\n        RegExp = context.RegExp,\n        String = context.String,\n        TypeError = context.TypeError;\n\n    /** Used for built-in method references. */\n    var arrayProto = Array.prototype,\n        funcProto = Function.prototype,\n        objectProto = Object.prototype;\n\n    /** Used to detect overreaching core-js shims. */\n    var coreJsData = context['__core-js_shared__'];\n\n    /** Used to resolve the decompiled source of functions. */\n    var funcToString = funcProto.toString;\n\n    /** Used to check objects for own properties. */\n    var hasOwnProperty = objectProto.hasOwnProperty;\n\n    /** Used to generate unique IDs. */\n    var idCounter = 0;\n\n    /** Used to detect methods masquerading as native. */\n    var maskSrcKey = (function() {\n      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n      return uid ? ('Symbol(src)_1.' + uid) : '';\n    }());\n\n    /**\n     * Used to resolve the\n     * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n     * of values.\n     */\n    var nativeObjectToString = objectProto.toString;\n\n    /** Used to infer the `Object` constructor. */\n    var objectCtorString = funcToString.call(Object);\n\n    /** Used to restore the original `_` reference in `_.noConflict`. */\n    var oldDash = root._;\n\n    /** Used to detect if a method is native. */\n    var reIsNative = RegExp('^' +\n      funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n      .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n    );\n\n    /** Built-in value references. */\n    var Buffer = moduleExports ? context.Buffer : undefined,\n        Symbol = context.Symbol,\n        Uint8Array = context.Uint8Array,\n        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n        getPrototype = overArg(Object.getPrototypeOf, Object),\n        objectCreate = Object.create,\n        propertyIsEnumerable = objectProto.propertyIsEnumerable,\n        splice = arrayProto.splice,\n        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n        symIterator = Symbol ? Symbol.iterator : undefined,\n        symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n    var defineProperty = (function() {\n      try {\n        var func = getNative(Object, 'defineProperty');\n        func({}, '', {});\n        return func;\n      } catch (e) {}\n    }());\n\n    /** Mocked built-ins. */\n    var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n        ctxNow = Date && Date.now !== root.Date.now && Date.now,\n        ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n    /* Built-in method references for those with the same name as other `lodash` methods. */\n    var nativeCeil = Math.ceil,\n        nativeFloor = Math.floor,\n        nativeGetSymbols = Object.getOwnPropertySymbols,\n        nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n        nativeIsFinite = context.isFinite,\n        nativeJoin = arrayProto.join,\n        nativeKeys = overArg(Object.keys, Object),\n        nativeMax = Math.max,\n        nativeMin = Math.min,\n        nativeNow = Date.now,\n        nativeParseInt = context.parseInt,\n        nativeRandom = Math.random,\n        nativeReverse = arrayProto.reverse;\n\n    /* Built-in method references that are verified to be native. */\n    var DataView = getNative(context, 'DataView'),\n        Map = getNative(context, 'Map'),\n        Promise = getNative(context, 'Promise'),\n        Set = getNative(context, 'Set'),\n        WeakMap = getNative(context, 'WeakMap'),\n        nativeCreate = getNative(Object, 'create');\n\n    /** Used to store function metadata. */\n    var metaMap = WeakMap && new WeakMap;\n\n    /** Used to lookup unminified function names. */\n    var realNames = {};\n\n    /** Used to detect maps, sets, and weakmaps. */\n    var dataViewCtorString = toSource(DataView),\n        mapCtorString = toSource(Map),\n        promiseCtorString = toSource(Promise),\n        setCtorString = toSource(Set),\n        weakMapCtorString = toSource(WeakMap);\n\n    /** Used to convert symbols to primitives and strings. */\n    var symbolProto = Symbol ? Symbol.prototype : undefined,\n        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n        symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` object which wraps `value` to enable implicit method\n     * chain sequences. Methods that operate on and return arrays, collections,\n     * and functions can be chained together. Methods that retrieve a single value\n     * or may return a primitive value will automatically end the chain sequence\n     * and return the unwrapped value. Otherwise, the value must be unwrapped\n     * with `_#value`.\n     *\n     * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n     * enabled using `_.chain`.\n     *\n     * The execution of chained methods is lazy, that is, it's deferred until\n     * `_#value` is implicitly or explicitly called.\n     *\n     * Lazy evaluation allows several methods to support shortcut fusion.\n     * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n     * the creation of intermediate arrays and can greatly reduce the number of\n     * iteratee executions. Sections of a chain sequence qualify for shortcut\n     * fusion if the section is applied to an array and iteratees accept only\n     * one argument. The heuristic for whether a section qualifies for shortcut\n     * fusion is subject to change.\n     *\n     * Chaining is supported in custom builds as long as the `_#value` method is\n     * directly or indirectly included in the build.\n     *\n     * In addition to lodash methods, wrappers have `Array` and `String` methods.\n     *\n     * The wrapper `Array` methods are:\n     * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n     *\n     * The wrapper `String` methods are:\n     * `replace` and `split`\n     *\n     * The wrapper methods that support shortcut fusion are:\n     * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n     * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n     * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n     *\n     * The chainable wrapper methods are:\n     * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n     * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n     * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n     * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n     * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n     * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n     * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n     * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n     * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n     * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n     * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n     * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n     * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n     * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n     * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n     * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n     * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n     * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n     * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n     * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n     * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n     * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n     * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n     * `zipObject`, `zipObjectDeep`, and `zipWith`\n     *\n     * The wrapper methods that are **not** chainable by default are:\n     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n     * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n     * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n     * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n     * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n     * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n     * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n     * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n     * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n     * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n     * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n     * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n     * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n     * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n     * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n     * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n     * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n     * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n     * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n     * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n     * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n     * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n     * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n     * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n     * `upperFirst`, `value`, and `words`\n     *\n     * @name _\n     * @constructor\n     * @category Seq\n     * @param {*} value The value to wrap in a `lodash` instance.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2, 3]);\n     *\n     * // Returns an unwrapped value.\n     * wrapped.reduce(_.add);\n     * // => 6\n     *\n     * // Returns a wrapped value.\n     * var squares = wrapped.map(square);\n     *\n     * _.isArray(squares);\n     * // => false\n     *\n     * _.isArray(squares.value());\n     * // => true\n     */\n    function lodash(value) {\n      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n        if (value instanceof LodashWrapper) {\n          return value;\n        }\n        if (hasOwnProperty.call(value, '__wrapped__')) {\n          return wrapperClone(value);\n        }\n      }\n      return new LodashWrapper(value);\n    }\n\n    /**\n     * The base implementation of `_.create` without support for assigning\n     * properties to the created object.\n     *\n     * @private\n     * @param {Object} proto The object to inherit from.\n     * @returns {Object} Returns the new object.\n     */\n    var baseCreate = (function() {\n      function object() {}\n      return function(proto) {\n        if (!isObject(proto)) {\n          return {};\n        }\n        if (objectCreate) {\n          return objectCreate(proto);\n        }\n        object.prototype = proto;\n        var result = new object;\n        object.prototype = undefined;\n        return result;\n      };\n    }());\n\n    /**\n     * The function whose prototype chain sequence wrappers inherit from.\n     *\n     * @private\n     */\n    function baseLodash() {\n      // No operation performed.\n    }\n\n    /**\n     * The base constructor for creating `lodash` wrapper objects.\n     *\n     * @private\n     * @param {*} value The value to wrap.\n     * @param {boolean} [chainAll] Enable explicit method chain sequences.\n     */\n    function LodashWrapper(value, chainAll) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__chain__ = !!chainAll;\n      this.__index__ = 0;\n      this.__values__ = undefined;\n    }\n\n    /**\n     * By default, the template delimiters used by lodash are like those in\n     * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n     * following template settings to use alternative delimiters.\n     *\n     * **Security:** See\n     * [threat model](https://github.com/lodash/lodash/blob/main/threat-model.md)\n     * — `_.template` is insecure and will be removed in v5.\n     *\n     * @static\n     * @memberOf _\n     * @type {Object}\n     */\n    lodash.templateSettings = {\n\n      /**\n       * Used to detect `data` property values to be HTML-escaped.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'escape': reEscape,\n\n      /**\n       * Used to detect code to be evaluated.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'evaluate': reEvaluate,\n\n      /**\n       * Used to detect `data` property values to inject.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'interpolate': reInterpolate,\n\n      /**\n       * Used to reference the data object in the template text.\n       *\n       * @memberOf _.templateSettings\n       * @type {string}\n       */\n      'variable': '',\n\n      /**\n       * Used to import variables into the compiled template.\n       *\n       * @memberOf _.templateSettings\n       * @type {Object}\n       */\n      'imports': {\n\n        /**\n         * A reference to the `lodash` function.\n         *\n         * @memberOf _.templateSettings.imports\n         * @type {Function}\n         */\n        '_': lodash\n      }\n    };\n\n    // Ensure wrappers are instances of `baseLodash`.\n    lodash.prototype = baseLodash.prototype;\n    lodash.prototype.constructor = lodash;\n\n    LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n    LodashWrapper.prototype.constructor = LodashWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n     *\n     * @private\n     * @constructor\n     * @param {*} value The value to wrap.\n     */\n    function LazyWrapper(value) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__dir__ = 1;\n      this.__filtered__ = false;\n      this.__iteratees__ = [];\n      this.__takeCount__ = MAX_ARRAY_LENGTH;\n      this.__views__ = [];\n    }\n\n    /**\n     * Creates a clone of the lazy wrapper object.\n     *\n     * @private\n     * @name clone\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the cloned `LazyWrapper` object.\n     */\n    function lazyClone() {\n      var result = new LazyWrapper(this.__wrapped__);\n      result.__actions__ = copyArray(this.__actions__);\n      result.__dir__ = this.__dir__;\n      result.__filtered__ = this.__filtered__;\n      result.__iteratees__ = copyArray(this.__iteratees__);\n      result.__takeCount__ = this.__takeCount__;\n      result.__views__ = copyArray(this.__views__);\n      return result;\n    }\n\n    /**\n     * Reverses the direction of lazy iteration.\n     *\n     * @private\n     * @name reverse\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the new reversed `LazyWrapper` object.\n     */\n    function lazyReverse() {\n      if (this.__filtered__) {\n        var result = new LazyWrapper(this);\n        result.__dir__ = -1;\n        result.__filtered__ = true;\n      } else {\n        result = this.clone();\n        result.__dir__ *= -1;\n      }\n      return result;\n    }\n\n    /**\n     * Extracts the unwrapped value from its lazy wrapper.\n     *\n     * @private\n     * @name value\n     * @memberOf LazyWrapper\n     * @returns {*} Returns the unwrapped value.\n     */\n    function lazyValue() {\n      var array = this.__wrapped__.value(),\n          dir = this.__dir__,\n          isArr = isArray(array),\n          isRight = dir < 0,\n          arrLength = isArr ? array.length : 0,\n          view = getView(0, arrLength, this.__views__),\n          start = view.start,\n          end = view.end,\n          length = end - start,\n          index = isRight ? end : (start - 1),\n          iteratees = this.__iteratees__,\n          iterLength = iteratees.length,\n          resIndex = 0,\n          takeCount = nativeMin(length, this.__takeCount__);\n\n      if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n        return baseWrapperValue(array, this.__actions__);\n      }\n      var result = [];\n\n      outer:\n      while (length-- && resIndex < takeCount) {\n        index += dir;\n\n        var iterIndex = -1,\n            value = array[index];\n\n        while (++iterIndex < iterLength) {\n          var data = iteratees[iterIndex],\n              iteratee = data.iteratee,\n              type = data.type,\n              computed = iteratee(value);\n\n          if (type == LAZY_MAP_FLAG) {\n            value = computed;\n          } else if (!computed) {\n            if (type == LAZY_FILTER_FLAG) {\n              continue outer;\n            } else {\n              break outer;\n            }\n          }\n        }\n        result[resIndex++] = value;\n      }\n      return result;\n    }\n\n    // Ensure `LazyWrapper` is an instance of `baseLodash`.\n    LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n    LazyWrapper.prototype.constructor = LazyWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a hash object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Hash(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the hash.\n     *\n     * @private\n     * @name clear\n     * @memberOf Hash\n     */\n    function hashClear() {\n      this.__data__ = nativeCreate ? nativeCreate(null) : {};\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the hash.\n     *\n     * @private\n     * @name delete\n     * @memberOf Hash\n     * @param {Object} hash The hash to modify.\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function hashDelete(key) {\n      var result = this.has(key) && delete this.__data__[key];\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the hash value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Hash\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function hashGet(key) {\n      var data = this.__data__;\n      if (nativeCreate) {\n        var result = data[key];\n        return result === HASH_UNDEFINED ? undefined : result;\n      }\n      return hasOwnProperty.call(data, key) ? data[key] : undefined;\n    }\n\n    /**\n     * Checks if a hash value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Hash\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function hashHas(key) {\n      var data = this.__data__;\n      return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n    }\n\n    /**\n     * Sets the hash `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Hash\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the hash instance.\n     */\n    function hashSet(key, value) {\n      var data = this.__data__;\n      this.size += this.has(key) ? 0 : 1;\n      data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n      return this;\n    }\n\n    // Add methods to `Hash`.\n    Hash.prototype.clear = hashClear;\n    Hash.prototype['delete'] = hashDelete;\n    Hash.prototype.get = hashGet;\n    Hash.prototype.has = hashHas;\n    Hash.prototype.set = hashSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an list cache object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function ListCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the list cache.\n     *\n     * @private\n     * @name clear\n     * @memberOf ListCache\n     */\n    function listCacheClear() {\n      this.__data__ = [];\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the list cache.\n     *\n     * @private\n     * @name delete\n     * @memberOf ListCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function listCacheDelete(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        return false;\n      }\n      var lastIndex = data.length - 1;\n      if (index == lastIndex) {\n        data.pop();\n      } else {\n        splice.call(data, index, 1);\n      }\n      --this.size;\n      return true;\n    }\n\n    /**\n     * Gets the list cache value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf ListCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function listCacheGet(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      return index < 0 ? undefined : data[index][1];\n    }\n\n    /**\n     * Checks if a list cache value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf ListCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function listCacheHas(key) {\n      return assocIndexOf(this.__data__, key) > -1;\n    }\n\n    /**\n     * Sets the list cache `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf ListCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the list cache instance.\n     */\n    function listCacheSet(key, value) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        ++this.size;\n        data.push([key, value]);\n      } else {\n        data[index][1] = value;\n      }\n      return this;\n    }\n\n    // Add methods to `ListCache`.\n    ListCache.prototype.clear = listCacheClear;\n    ListCache.prototype['delete'] = listCacheDelete;\n    ListCache.prototype.get = listCacheGet;\n    ListCache.prototype.has = listCacheHas;\n    ListCache.prototype.set = listCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a map cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function MapCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the map.\n     *\n     * @private\n     * @name clear\n     * @memberOf MapCache\n     */\n    function mapCacheClear() {\n      this.size = 0;\n      this.__data__ = {\n        'hash': new Hash,\n        'map': new (Map || ListCache),\n        'string': new Hash\n      };\n    }\n\n    /**\n     * Removes `key` and its value from the map.\n     *\n     * @private\n     * @name delete\n     * @memberOf MapCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function mapCacheDelete(key) {\n      var result = getMapData(this, key)['delete'](key);\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the map value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf MapCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function mapCacheGet(key) {\n      return getMapData(this, key).get(key);\n    }\n\n    /**\n     * Checks if a map value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf MapCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function mapCacheHas(key) {\n      return getMapData(this, key).has(key);\n    }\n\n    /**\n     * Sets the map `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf MapCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the map cache instance.\n     */\n    function mapCacheSet(key, value) {\n      var data = getMapData(this, key),\n          size = data.size;\n\n      data.set(key, value);\n      this.size += data.size == size ? 0 : 1;\n      return this;\n    }\n\n    // Add methods to `MapCache`.\n    MapCache.prototype.clear = mapCacheClear;\n    MapCache.prototype['delete'] = mapCacheDelete;\n    MapCache.prototype.get = mapCacheGet;\n    MapCache.prototype.has = mapCacheHas;\n    MapCache.prototype.set = mapCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     *\n     * Creates an array cache object to store unique values.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [values] The values to cache.\n     */\n    function SetCache(values) {\n      var index = -1,\n          length = values == null ? 0 : values.length;\n\n      this.__data__ = new MapCache;\n      while (++index < length) {\n        this.add(values[index]);\n      }\n    }\n\n    /**\n     * Adds `value` to the array cache.\n     *\n     * @private\n     * @name add\n     * @memberOf SetCache\n     * @alias push\n     * @param {*} value The value to cache.\n     * @returns {Object} Returns the cache instance.\n     */\n    function setCacheAdd(value) {\n      this.__data__.set(value, HASH_UNDEFINED);\n      return this;\n    }\n\n    /**\n     * Checks if `value` is in the array cache.\n     *\n     * @private\n     * @name has\n     * @memberOf SetCache\n     * @param {*} value The value to search for.\n     * @returns {boolean} Returns `true` if `value` is found, else `false`.\n     */\n    function setCacheHas(value) {\n      return this.__data__.has(value);\n    }\n\n    // Add methods to `SetCache`.\n    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n    SetCache.prototype.has = setCacheHas;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a stack cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Stack(entries) {\n      var data = this.__data__ = new ListCache(entries);\n      this.size = data.size;\n    }\n\n    /**\n     * Removes all key-value entries from the stack.\n     *\n     * @private\n     * @name clear\n     * @memberOf Stack\n     */\n    function stackClear() {\n      this.__data__ = new ListCache;\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the stack.\n     *\n     * @private\n     * @name delete\n     * @memberOf Stack\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function stackDelete(key) {\n      var data = this.__data__,\n          result = data['delete'](key);\n\n      this.size = data.size;\n      return result;\n    }\n\n    /**\n     * Gets the stack value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Stack\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function stackGet(key) {\n      return this.__data__.get(key);\n    }\n\n    /**\n     * Checks if a stack value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Stack\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function stackHas(key) {\n      return this.__data__.has(key);\n    }\n\n    /**\n     * Sets the stack `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Stack\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the stack cache instance.\n     */\n    function stackSet(key, value) {\n      var data = this.__data__;\n      if (data instanceof ListCache) {\n        var pairs = data.__data__;\n        if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n          pairs.push([key, value]);\n          this.size = ++data.size;\n          return this;\n        }\n        data = this.__data__ = new MapCache(pairs);\n      }\n      data.set(key, value);\n      this.size = data.size;\n      return this;\n    }\n\n    // Add methods to `Stack`.\n    Stack.prototype.clear = stackClear;\n    Stack.prototype['delete'] = stackDelete;\n    Stack.prototype.get = stackGet;\n    Stack.prototype.has = stackHas;\n    Stack.prototype.set = stackSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of the enumerable property names of the array-like `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @param {boolean} inherited Specify returning inherited property names.\n     * @returns {Array} Returns the array of property names.\n     */\n    function arrayLikeKeys(value, inherited) {\n      var isArr = isArray(value),\n          isArg = !isArr && isArguments(value),\n          isBuff = !isArr && !isArg && isBuffer(value),\n          isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n          skipIndexes = isArr || isArg || isBuff || isType,\n          result = skipIndexes ? baseTimes(value.length, String) : [],\n          length = result.length;\n\n      for (var key in value) {\n        if ((inherited || hasOwnProperty.call(value, key)) &&\n            !(skipIndexes && (\n               // Safari 9 has enumerable `arguments.length` in strict mode.\n               key == 'length' ||\n               // Node.js 0.10 has enumerable non-index properties on buffers.\n               (isBuff && (key == 'offset' || key == 'parent')) ||\n               // PhantomJS 2 has enumerable non-index properties on typed arrays.\n               (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n               // Skip index properties.\n               isIndex(key, length)\n            ))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `_.sample` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @returns {*} Returns the random element.\n     */\n    function arraySample(array) {\n      var length = array.length;\n      return length ? array[baseRandom(0, length - 1)] : undefined;\n    }\n\n    /**\n     * A specialized version of `_.sampleSize` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function arraySampleSize(array, n) {\n      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * A specialized version of `_.shuffle` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function arrayShuffle(array) {\n      return shuffleSelf(copyArray(array));\n    }\n\n    /**\n     * This function is like `assignValue` except that it doesn't assign\n     * `undefined` values.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignMergeValue(object, key, value) {\n      if ((value !== undefined && !eq(object[key], value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Assigns `value` to `key` of `object` if the existing value is not equivalent\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignValue(object, key, value) {\n      var objValue = object[key];\n      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Gets the index at which the `key` is found in `array` of key-value pairs.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {*} key The key to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     */\n    function assocIndexOf(array, key) {\n      var length = array.length;\n      while (length--) {\n        if (eq(array[length][0], key)) {\n          return length;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * Aggregates elements of `collection` on `accumulator` with keys transformed\n     * by `iteratee` and values set by `setter`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform keys.\n     * @param {Object} accumulator The initial aggregated object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseAggregator(collection, setter, iteratee, accumulator) {\n      baseEach(collection, function(value, key, collection) {\n        setter(accumulator, value, iteratee(value), collection);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.assign` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssign(object, source) {\n      return object && copyObject(source, keys(source), object);\n    }\n\n    /**\n     * The base implementation of `_.assignIn` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssignIn(object, source) {\n      return object && copyObject(source, keysIn(source), object);\n    }\n\n    /**\n     * The base implementation of `assignValue` and `assignMergeValue` without\n     * value checks.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function baseAssignValue(object, key, value) {\n      if (key == '__proto__' && defineProperty) {\n        defineProperty(object, key, {\n          'configurable': true,\n          'enumerable': true,\n          'value': value,\n          'writable': true\n        });\n      } else {\n        object[key] = value;\n      }\n    }\n\n    /**\n     * The base implementation of `_.at` without support for individual paths.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Array} Returns the picked elements.\n     */\n    function baseAt(object, paths) {\n      var index = -1,\n          length = paths.length,\n          result = Array(length),\n          skip = object == null;\n\n      while (++index < length) {\n        result[index] = skip ? undefined : get(object, paths[index]);\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.clamp` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     */\n    function baseClamp(number, lower, upper) {\n      if (number === number) {\n        if (upper !== undefined) {\n          number = number <= upper ? number : upper;\n        }\n        if (lower !== undefined) {\n          number = number >= lower ? number : lower;\n        }\n      }\n      return number;\n    }\n\n    /**\n     * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n     * traversed objects.\n     *\n     * @private\n     * @param {*} value The value to clone.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Deep clone\n     *  2 - Flatten inherited properties\n     *  4 - Clone symbols\n     * @param {Function} [customizer] The function to customize cloning.\n     * @param {string} [key] The key of `value`.\n     * @param {Object} [object] The parent object of `value`.\n     * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n     * @returns {*} Returns the cloned value.\n     */\n    function baseClone(value, bitmask, customizer, key, object, stack) {\n      var result,\n          isDeep = bitmask & CLONE_DEEP_FLAG,\n          isFlat = bitmask & CLONE_FLAT_FLAG,\n          isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n      if (customizer) {\n        result = object ? customizer(value, key, object, stack) : customizer(value);\n      }\n      if (result !== undefined) {\n        return result;\n      }\n      if (!isObject(value)) {\n        return value;\n      }\n      var isArr = isArray(value);\n      if (isArr) {\n        result = initCloneArray(value);\n        if (!isDeep) {\n          return copyArray(value, result);\n        }\n      } else {\n        var tag = getTag(value),\n            isFunc = tag == funcTag || tag == genTag;\n\n        if (isBuffer(value)) {\n          return cloneBuffer(value, isDeep);\n        }\n        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n          result = (isFlat || isFunc) ? {} : initCloneObject(value);\n          if (!isDeep) {\n            return isFlat\n              ? copySymbolsIn(value, baseAssignIn(result, value))\n              : copySymbols(value, baseAssign(result, value));\n          }\n        } else {\n          if (!cloneableTags[tag]) {\n            return object ? value : {};\n          }\n          result = initCloneByTag(value, tag, isDeep);\n        }\n      }\n      // Check for circular references and return its corresponding clone.\n      stack || (stack = new Stack);\n      var stacked = stack.get(value);\n      if (stacked) {\n        return stacked;\n      }\n      stack.set(value, result);\n\n      if (isSet(value)) {\n        value.forEach(function(subValue) {\n          result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n        });\n      } else if (isMap(value)) {\n        value.forEach(function(subValue, key) {\n          result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n        });\n      }\n\n      var keysFunc = isFull\n        ? (isFlat ? getAllKeysIn : getAllKeys)\n        : (isFlat ? keysIn : keys);\n\n      var props = isArr ? undefined : keysFunc(value);\n      arrayEach(props || value, function(subValue, key) {\n        if (props) {\n          key = subValue;\n          subValue = value[key];\n        }\n        // Recursively populate clone (susceptible to call stack limits).\n        assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.conforms` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseConforms(source) {\n      var props = keys(source);\n      return function(object) {\n        return baseConformsTo(object, source, props);\n      };\n    }\n\n    /**\n     * The base implementation of `_.conformsTo` which accepts `props` to check.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     */\n    function baseConformsTo(object, source, props) {\n      var length = props.length;\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (length--) {\n        var key = props[length],\n            predicate = source[key],\n            value = object[key];\n\n        if ((value === undefined && !(key in object)) || !predicate(value)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.delay` and `_.defer` which accepts `args`\n     * to provide to `func`.\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {Array} args The arguments to provide to `func`.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    function baseDelay(func, wait, args) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return setTimeout(function() { func.apply(undefined, args); }, wait);\n    }\n\n    /**\n     * The base implementation of methods like `_.difference` without support\n     * for excluding multiple arrays or iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Array} values The values to exclude.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     */\n    function baseDifference(array, values, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          isCommon = true,\n          length = array.length,\n          result = [],\n          valuesLength = values.length;\n\n      if (!length) {\n        return result;\n      }\n      if (iteratee) {\n        values = arrayMap(values, baseUnary(iteratee));\n      }\n      if (comparator) {\n        includes = arrayIncludesWith;\n        isCommon = false;\n      }\n      else if (values.length >= LARGE_ARRAY_SIZE) {\n        includes = cacheHas;\n        isCommon = false;\n        values = new SetCache(values);\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee == null ? value : iteratee(value);\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var valuesIndex = valuesLength;\n          while (valuesIndex--) {\n            if (values[valuesIndex] === computed) {\n              continue outer;\n            }\n          }\n          result.push(value);\n        }\n        else if (!includes(values, computed, comparator)) {\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.forEach` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEach = createBaseEach(baseForOwn);\n\n    /**\n     * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n    /**\n     * The base implementation of `_.every` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`\n     */\n    function baseEvery(collection, predicate) {\n      var result = true;\n      baseEach(collection, function(value, index, collection) {\n        result = !!predicate(value, index, collection);\n        return result;\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of methods like `_.max` and `_.min` which accepts a\n     * `comparator` to determine the extremum value.\n     *\n     * @private\n     * @param {Array} array The array to iterate over.\n     * @param {Function} iteratee The iteratee invoked per iteration.\n     * @param {Function} comparator The comparator used to compare values.\n     * @returns {*} Returns the extremum value.\n     */\n    function baseExtremum(array, iteratee, comparator) {\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        var value = array[index],\n            current = iteratee(value);\n\n        if (current != null && (computed === undefined\n              ? (current === current && !isSymbol(current))\n              : comparator(current, computed)\n            )) {\n          var computed = current,\n              result = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.fill` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     */\n    function baseFill(array, value, start, end) {\n      var length = array.length;\n\n      start = toInteger(start);\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = (end === undefined || end > length) ? length : toInteger(end);\n      if (end < 0) {\n        end += length;\n      }\n      end = start > end ? 0 : toLength(end);\n      while (start < end) {\n        array[start++] = value;\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.filter` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     */\n    function baseFilter(collection, predicate) {\n      var result = [];\n      baseEach(collection, function(value, index, collection) {\n        if (predicate(value, index, collection)) {\n          result.push(value);\n        }\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.flatten` with support for restricting flattening.\n     *\n     * @private\n     * @param {Array} array The array to flatten.\n     * @param {number} depth The maximum recursion depth.\n     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n     * @param {Array} [result=[]] The initial result value.\n     * @returns {Array} Returns the new flattened array.\n     */\n    function baseFlatten(array, depth, predicate, isStrict, result) {\n      var index = -1,\n          length = array.length;\n\n      predicate || (predicate = isFlattenable);\n      result || (result = []);\n\n      while (++index < length) {\n        var value = array[index];\n        if (depth > 0 && predicate(value)) {\n          if (depth > 1) {\n            // Recursively flatten arrays (susceptible to call stack limits).\n            baseFlatten(value, depth - 1, predicate, isStrict, result);\n          } else {\n            arrayPush(result, value);\n          }\n        } else if (!isStrict) {\n          result[result.length] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `baseForOwn` which iterates over `object`\n     * properties returned by `keysFunc` and invokes `iteratee` for each property.\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseFor = createBaseFor();\n\n    /**\n     * This function is like `baseFor` except that it iterates over properties\n     * in the opposite order.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseForRight = createBaseFor(true);\n\n    /**\n     * The base implementation of `_.forOwn` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwn(object, iteratee) {\n      return object && baseFor(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwnRight(object, iteratee) {\n      return object && baseForRight(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.functions` which creates an array of\n     * `object` function property names filtered from `props`.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Array} props The property names to filter.\n     * @returns {Array} Returns the function names.\n     */\n    function baseFunctions(object, props) {\n      return arrayFilter(props, function(key) {\n        return isFunction(object[key]);\n      });\n    }\n\n    /**\n     * The base implementation of `_.get` without support for default values.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseGet(object, path) {\n      path = castPath(path, object);\n\n      var index = 0,\n          length = path.length;\n\n      while (object != null && index < length) {\n        object = object[toKey(path[index++])];\n      }\n      return (index && index == length) ? object : undefined;\n    }\n\n    /**\n     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n     * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @param {Function} symbolsFunc The function to get the symbols of `object`.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n      var result = keysFunc(object);\n      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n    }\n\n    /**\n     * The base implementation of `getTag` without fallbacks for buggy environments.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    function baseGetTag(value) {\n      if (value == null) {\n        return value === undefined ? undefinedTag : nullTag;\n      }\n      return (symToStringTag && symToStringTag in Object(value))\n        ? getRawTag(value)\n        : objectToString(value);\n    }\n\n    /**\n     * The base implementation of `_.gt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     */\n    function baseGt(value, other) {\n      return value > other;\n    }\n\n    /**\n     * The base implementation of `_.has` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHas(object, key) {\n      return object != null && hasOwnProperty.call(object, key);\n    }\n\n    /**\n     * The base implementation of `_.hasIn` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHasIn(object, key) {\n      return object != null && key in Object(object);\n    }\n\n    /**\n     * The base implementation of `_.inRange` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to check.\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     */\n    function baseInRange(number, start, end) {\n      return number >= nativeMin(start, end) && number < nativeMax(start, end);\n    }\n\n    /**\n     * The base implementation of methods like `_.intersection`, without support\n     * for iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of shared values.\n     */\n    function baseIntersection(arrays, iteratee, comparator) {\n      var includes = comparator ? arrayIncludesWith : arrayIncludes,\n          length = arrays[0].length,\n          othLength = arrays.length,\n          othIndex = othLength,\n          caches = Array(othLength),\n          maxLength = Infinity,\n          result = [];\n\n      while (othIndex--) {\n        var array = arrays[othIndex];\n        if (othIndex && iteratee) {\n          array = arrayMap(array, baseUnary(iteratee));\n        }\n        maxLength = nativeMin(array.length, maxLength);\n        caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n          ? new SetCache(othIndex && array)\n          : undefined;\n      }\n      array = arrays[0];\n\n      var index = -1,\n          seen = caches[0];\n\n      outer:\n      while (++index < length && result.length < maxLength) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (!(seen\n              ? cacheHas(seen, computed)\n              : includes(result, computed, comparator)\n            )) {\n          othIndex = othLength;\n          while (--othIndex) {\n            var cache = caches[othIndex];\n            if (!(cache\n                  ? cacheHas(cache, computed)\n                  : includes(arrays[othIndex], computed, comparator))\n                ) {\n              continue outer;\n            }\n          }\n          if (seen) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.invert` and `_.invertBy` which inverts\n     * `object` with values transformed by `iteratee` and set by `setter`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform values.\n     * @param {Object} accumulator The initial inverted object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseInverter(object, setter, iteratee, accumulator) {\n      baseForOwn(object, function(value, key, object) {\n        setter(accumulator, iteratee(value), key, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.invoke` without support for individual\n     * method arguments.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {Array} args The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     */\n    function baseInvoke(object, path, args) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      var func = object == null ? object : object[toKey(last(path))];\n      return func == null ? undefined : apply(func, object, args);\n    }\n\n    /**\n     * The base implementation of `_.isArguments`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     */\n    function baseIsArguments(value) {\n      return isObjectLike(value) && baseGetTag(value) == argsTag;\n    }\n\n    /**\n     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     */\n    function baseIsArrayBuffer(value) {\n      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n    }\n\n    /**\n     * The base implementation of `_.isDate` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     */\n    function baseIsDate(value) {\n      return isObjectLike(value) && baseGetTag(value) == dateTag;\n    }\n\n    /**\n     * The base implementation of `_.isEqual` which supports partial comparisons\n     * and tracks traversed objects.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Unordered comparison\n     *  2 - Partial comparison\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     */\n    function baseIsEqual(value, other, bitmask, customizer, stack) {\n      if (value === other) {\n        return true;\n      }\n      if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n        return value !== value && other !== other;\n      }\n      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n    }\n\n    /**\n     * A specialized version of `baseIsEqual` for arrays and objects which performs\n     * deep comparisons and tracks traversed objects enabling objects with circular\n     * references to be compared.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n      var objIsArr = isArray(object),\n          othIsArr = isArray(other),\n          objTag = objIsArr ? arrayTag : getTag(object),\n          othTag = othIsArr ? arrayTag : getTag(other);\n\n      objTag = objTag == argsTag ? objectTag : objTag;\n      othTag = othTag == argsTag ? objectTag : othTag;\n\n      var objIsObj = objTag == objectTag,\n          othIsObj = othTag == objectTag,\n          isSameTag = objTag == othTag;\n\n      if (isSameTag && isBuffer(object)) {\n        if (!isBuffer(other)) {\n          return false;\n        }\n        objIsArr = true;\n        objIsObj = false;\n      }\n      if (isSameTag && !objIsObj) {\n        stack || (stack = new Stack);\n        return (objIsArr || isTypedArray(object))\n          ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n          : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n      }\n      if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n        if (objIsWrapped || othIsWrapped) {\n          var objUnwrapped = objIsWrapped ? object.value() : object,\n              othUnwrapped = othIsWrapped ? other.value() : other;\n\n          stack || (stack = new Stack);\n          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n        }\n      }\n      if (!isSameTag) {\n        return false;\n      }\n      stack || (stack = new Stack);\n      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n    }\n\n    /**\n     * The base implementation of `_.isMap` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     */\n    function baseIsMap(value) {\n      return isObjectLike(value) && getTag(value) == mapTag;\n    }\n\n    /**\n     * The base implementation of `_.isMatch` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Array} matchData The property names, values, and compare flags to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     */\n    function baseIsMatch(object, source, matchData, customizer) {\n      var index = matchData.length,\n          length = index,\n          noCustomizer = !customizer;\n\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (index--) {\n        var data = matchData[index];\n        if ((noCustomizer && data[2])\n              ? data[1] !== object[data[0]]\n              : !(data[0] in object)\n            ) {\n          return false;\n        }\n      }\n      while (++index < length) {\n        data = matchData[index];\n        var key = data[0],\n            objValue = object[key],\n            srcValue = data[1];\n\n        if (noCustomizer && data[2]) {\n          if (objValue === undefined && !(key in object)) {\n            return false;\n          }\n        } else {\n          var stack = new Stack;\n          if (customizer) {\n            var result = customizer(objValue, srcValue, key, object, source, stack);\n          }\n          if (!(result === undefined\n                ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n                : result\n              )) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.isNative` without bad shim checks.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     */\n    function baseIsNative(value) {\n      if (!isObject(value) || isMasked(value)) {\n        return false;\n      }\n      var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n      return pattern.test(toSource(value));\n    }\n\n    /**\n     * The base implementation of `_.isRegExp` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     */\n    function baseIsRegExp(value) {\n      return isObjectLike(value) && baseGetTag(value) == regexpTag;\n    }\n\n    /**\n     * The base implementation of `_.isSet` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     */\n    function baseIsSet(value) {\n      return isObjectLike(value) && getTag(value) == setTag;\n    }\n\n    /**\n     * The base implementation of `_.isTypedArray` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     */\n    function baseIsTypedArray(value) {\n      return isObjectLike(value) &&\n        isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n    }\n\n    /**\n     * The base implementation of `_.iteratee`.\n     *\n     * @private\n     * @param {*} [value=_.identity] The value to convert to an iteratee.\n     * @returns {Function} Returns the iteratee.\n     */\n    function baseIteratee(value) {\n      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n      if (typeof value == 'function') {\n        return value;\n      }\n      if (value == null) {\n        return identity;\n      }\n      if (typeof value == 'object') {\n        return isArray(value)\n          ? baseMatchesProperty(value[0], value[1])\n          : baseMatches(value);\n      }\n      return property(value);\n    }\n\n    /**\n     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeys(object) {\n      if (!isPrototype(object)) {\n        return nativeKeys(object);\n      }\n      var result = [];\n      for (var key in Object(object)) {\n        if (hasOwnProperty.call(object, key) && key != 'constructor') {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeysIn(object) {\n      if (!isObject(object)) {\n        return nativeKeysIn(object);\n      }\n      var isProto = isPrototype(object),\n          result = [];\n\n      for (var key in object) {\n        if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.lt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     */\n    function baseLt(value, other) {\n      return value < other;\n    }\n\n    /**\n     * The base implementation of `_.map` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     */\n    function baseMap(collection, iteratee) {\n      var index = -1,\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value, key, collection) {\n        result[++index] = iteratee(value, key, collection);\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.matches` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatches(source) {\n      var matchData = getMatchData(source);\n      if (matchData.length == 1 && matchData[0][2]) {\n        return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n      }\n      return function(object) {\n        return object === source || baseIsMatch(object, source, matchData);\n      };\n    }\n\n    /**\n     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n     *\n     * @private\n     * @param {string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatchesProperty(path, srcValue) {\n      if (isKey(path) && isStrictComparable(srcValue)) {\n        return matchesStrictComparable(toKey(path), srcValue);\n      }\n      return function(object) {\n        var objValue = get(object, path);\n        return (objValue === undefined && objValue === srcValue)\n          ? hasIn(object, path)\n          : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n      };\n    }\n\n    /**\n     * The base implementation of `_.merge` without support for multiple sources.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} [customizer] The function to customize merged values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMerge(object, source, srcIndex, customizer, stack) {\n      if (object === source) {\n        return;\n      }\n      baseFor(source, function(srcValue, key) {\n        stack || (stack = new Stack);\n        if (isObject(srcValue)) {\n          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n        }\n        else {\n          var newValue = customizer\n            ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n            : undefined;\n\n          if (newValue === undefined) {\n            newValue = srcValue;\n          }\n          assignMergeValue(object, key, newValue);\n        }\n      }, keysIn);\n    }\n\n    /**\n     * A specialized version of `baseMerge` for arrays and objects which performs\n     * deep merges and tracks traversed objects enabling objects with circular\n     * references to be merged.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {string} key The key of the value to merge.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} mergeFunc The function to merge values.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n      var objValue = safeGet(object, key),\n          srcValue = safeGet(source, key),\n          stacked = stack.get(srcValue);\n\n      if (stacked) {\n        assignMergeValue(object, key, stacked);\n        return;\n      }\n      var newValue = customizer\n        ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      var isCommon = newValue === undefined;\n\n      if (isCommon) {\n        var isArr = isArray(srcValue),\n            isBuff = !isArr && isBuffer(srcValue),\n            isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n        newValue = srcValue;\n        if (isArr || isBuff || isTyped) {\n          if (isArray(objValue)) {\n            newValue = objValue;\n          }\n          else if (isArrayLikeObject(objValue)) {\n            newValue = copyArray(objValue);\n          }\n          else if (isBuff) {\n            isCommon = false;\n            newValue = cloneBuffer(srcValue, true);\n          }\n          else if (isTyped) {\n            isCommon = false;\n            newValue = cloneTypedArray(srcValue, true);\n          }\n          else {\n            newValue = [];\n          }\n        }\n        else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n          newValue = objValue;\n          if (isArguments(objValue)) {\n            newValue = toPlainObject(objValue);\n          }\n          else if (!isObject(objValue) || isFunction(objValue)) {\n            newValue = initCloneObject(srcValue);\n          }\n        }\n        else {\n          isCommon = false;\n        }\n      }\n      if (isCommon) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, newValue);\n        mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n        stack['delete'](srcValue);\n      }\n      assignMergeValue(object, key, newValue);\n    }\n\n    /**\n     * The base implementation of `_.nth` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {number} n The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     */\n    function baseNth(array, n) {\n      var length = array.length;\n      if (!length) {\n        return;\n      }\n      n += n < 0 ? length : 0;\n      return isIndex(n, length) ? array[n] : undefined;\n    }\n\n    /**\n     * The base implementation of `_.orderBy` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n     * @param {string[]} orders The sort orders of `iteratees`.\n     * @returns {Array} Returns the new sorted array.\n     */\n    function baseOrderBy(collection, iteratees, orders) {\n      if (iteratees.length) {\n        iteratees = arrayMap(iteratees, function(iteratee) {\n          if (isArray(iteratee)) {\n            return function(value) {\n              return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n            };\n          }\n          return iteratee;\n        });\n      } else {\n        iteratees = [identity];\n      }\n\n      var index = -1;\n      iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n\n      var result = baseMap(collection, function(value, key, collection) {\n        var criteria = arrayMap(iteratees, function(iteratee) {\n          return iteratee(value);\n        });\n        return { 'criteria': criteria, 'index': ++index, 'value': value };\n      });\n\n      return baseSortBy(result, function(object, other) {\n        return compareMultiple(object, other, orders);\n      });\n    }\n\n    /**\n     * The base implementation of `_.pick` without support for individual\n     * property identifiers.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Object} Returns the new object.\n     */\n    function basePick(object, paths) {\n      return basePickBy(object, paths, function(value, path) {\n        return hasIn(object, path);\n      });\n    }\n\n    /**\n     * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @param {Function} predicate The function invoked per property.\n     * @returns {Object} Returns the new object.\n     */\n    function basePickBy(object, paths, predicate) {\n      var index = -1,\n          length = paths.length,\n          result = {};\n\n      while (++index < length) {\n        var path = paths[index],\n            value = baseGet(object, path);\n\n        if (predicate(value, path)) {\n          baseSet(result, castPath(path, object), value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseProperty` which supports deep paths.\n     *\n     * @private\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     */\n    function basePropertyDeep(path) {\n      return function(object) {\n        return baseGet(object, path);\n      };\n    }\n\n    /**\n     * The base implementation of `_.pullAllBy` without support for iteratee\n     * shorthands.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAll(array, values, iteratee, comparator) {\n      var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n          index = -1,\n          length = values.length,\n          seen = array;\n\n      if (array === values) {\n        values = copyArray(values);\n      }\n      if (iteratee) {\n        seen = arrayMap(array, baseUnary(iteratee));\n      }\n      while (++index < length) {\n        var fromIndex = 0,\n            value = values[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n          if (seen !== array) {\n            splice.call(seen, fromIndex, 1);\n          }\n          splice.call(array, fromIndex, 1);\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.pullAt` without support for individual\n     * indexes or capturing the removed elements.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {number[]} indexes The indexes of elements to remove.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAt(array, indexes) {\n      var length = array ? indexes.length : 0,\n          lastIndex = length - 1;\n\n      while (length--) {\n        var index = indexes[length];\n        if (length == lastIndex || index !== previous) {\n          var previous = index;\n          if (isIndex(index)) {\n            splice.call(array, index, 1);\n          } else {\n            baseUnset(array, index);\n          }\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.random` without support for returning\n     * floating-point numbers.\n     *\n     * @private\n     * @param {number} lower The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the random number.\n     */\n    function baseRandom(lower, upper) {\n      return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n    }\n\n    /**\n     * The base implementation of `_.range` and `_.rangeRight` which doesn't\n     * coerce arguments.\n     *\n     * @private\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} step The value to increment or decrement by.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the range of numbers.\n     */\n    function baseRange(start, end, step, fromRight) {\n      var index = -1,\n          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n          result = Array(length);\n\n      while (length--) {\n        result[fromRight ? length : ++index] = start;\n        start += step;\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.repeat` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {string} string The string to repeat.\n     * @param {number} n The number of times to repeat the string.\n     * @returns {string} Returns the repeated string.\n     */\n    function baseRepeat(string, n) {\n      var result = '';\n      if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n        return result;\n      }\n      // Leverage the exponentiation by squaring algorithm for a faster repeat.\n      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n      do {\n        if (n % 2) {\n          result += string;\n        }\n        n = nativeFloor(n / 2);\n        if (n) {\n          string += string;\n        }\n      } while (n);\n\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     */\n    function baseRest(func, start) {\n      return setToString(overRest(func, start, identity), func + '');\n    }\n\n    /**\n     * The base implementation of `_.sample`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     */\n    function baseSample(collection) {\n      return arraySample(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.sampleSize` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function baseSampleSize(collection, n) {\n      var array = values(collection);\n      return shuffleSelf(array, baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * The base implementation of `_.set`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseSet(object, path, value, customizer) {\n      if (!isObject(object)) {\n        return object;\n      }\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          lastIndex = length - 1,\n          nested = object;\n\n      while (nested != null && ++index < length) {\n        var key = toKey(path[index]),\n            newValue = value;\n\n        if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n          return object;\n        }\n\n        if (index != lastIndex) {\n          var objValue = nested[key];\n          newValue = customizer ? customizer(objValue, key, nested) : undefined;\n          if (newValue === undefined) {\n            newValue = isObject(objValue)\n              ? objValue\n              : (isIndex(path[index + 1]) ? [] : {});\n          }\n        }\n        assignValue(nested, key, newValue);\n        nested = nested[key];\n      }\n      return object;\n    }\n\n    /**\n     * The base implementation of `setData` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetData = !metaMap ? identity : function(func, data) {\n      metaMap.set(func, data);\n      return func;\n    };\n\n    /**\n     * The base implementation of `setToString` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetToString = !defineProperty ? identity : function(func, string) {\n      return defineProperty(func, 'toString', {\n        'configurable': true,\n        'enumerable': false,\n        'value': constant(string),\n        'writable': true\n      });\n    };\n\n    /**\n     * The base implementation of `_.shuffle`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function baseShuffle(collection) {\n      return shuffleSelf(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.slice` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseSlice(array, start, end) {\n      var index = -1,\n          length = array.length;\n\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = end > length ? length : end;\n      if (end < 0) {\n        end += length;\n      }\n      length = start > end ? 0 : ((end - start) >>> 0);\n      start >>>= 0;\n\n      var result = Array(length);\n      while (++index < length) {\n        result[index] = array[index + start];\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.some` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     */\n    function baseSome(collection, predicate) {\n      var result;\n\n      baseEach(collection, function(value, index, collection) {\n        result = predicate(value, index, collection);\n        return !result;\n      });\n      return !!result;\n    }\n\n    /**\n     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n     * performs a binary search of `array` to determine the index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndex(array, value, retHighest) {\n      var low = 0,\n          high = array == null ? low : array.length;\n\n      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n        while (low < high) {\n          var mid = (low + high) >>> 1,\n              computed = array[mid];\n\n          if (computed !== null && !isSymbol(computed) &&\n              (retHighest ? (computed <= value) : (computed < value))) {\n            low = mid + 1;\n          } else {\n            high = mid;\n          }\n        }\n        return high;\n      }\n      return baseSortedIndexBy(array, value, identity, retHighest);\n    }\n\n    /**\n     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n     * which invokes `iteratee` for `value` and each element of `array` to compute\n     * their sort ranking. The iteratee is invoked with one argument; (value).\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} iteratee The iteratee invoked per element.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndexBy(array, value, iteratee, retHighest) {\n      var low = 0,\n          high = array == null ? 0 : array.length;\n      if (high === 0) {\n        return 0;\n      }\n\n      value = iteratee(value);\n      var valIsNaN = value !== value,\n          valIsNull = value === null,\n          valIsSymbol = isSymbol(value),\n          valIsUndefined = value === undefined;\n\n      while (low < high) {\n        var mid = nativeFloor((low + high) / 2),\n            computed = iteratee(array[mid]),\n            othIsDefined = computed !== undefined,\n            othIsNull = computed === null,\n            othIsReflexive = computed === computed,\n            othIsSymbol = isSymbol(computed);\n\n        if (valIsNaN) {\n          var setLow = retHighest || othIsReflexive;\n        } else if (valIsUndefined) {\n          setLow = othIsReflexive && (retHighest || othIsDefined);\n        } else if (valIsNull) {\n          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n        } else if (valIsSymbol) {\n          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n        } else if (othIsNull || othIsSymbol) {\n          setLow = false;\n        } else {\n          setLow = retHighest ? (computed <= value) : (computed < value);\n        }\n        if (setLow) {\n          low = mid + 1;\n        } else {\n          high = mid;\n        }\n      }\n      return nativeMin(high, MAX_ARRAY_INDEX);\n    }\n\n    /**\n     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n     * support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseSortedUniq(array, iteratee) {\n      var index = -1,\n          length = array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        if (!index || !eq(computed, seen)) {\n          var seen = computed;\n          result[resIndex++] = value === 0 ? 0 : value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.toNumber` which doesn't ensure correct\n     * conversions of binary, hexadecimal, or octal string values.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     */\n    function baseToNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      return +value;\n    }\n\n    /**\n     * The base implementation of `_.toString` which doesn't convert nullish\n     * values to empty strings.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {string} Returns the string.\n     */\n    function baseToString(value) {\n      // Exit early for strings to avoid a performance hit in some environments.\n      if (typeof value == 'string') {\n        return value;\n      }\n      if (isArray(value)) {\n        // Recursively convert values (susceptible to call stack limits).\n        return arrayMap(value, baseToString) + '';\n      }\n      if (isSymbol(value)) {\n        return symbolToString ? symbolToString.call(value) : '';\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseUniq(array, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          length = array.length,\n          isCommon = true,\n          result = [],\n          seen = result;\n\n      if (comparator) {\n        isCommon = false;\n        includes = arrayIncludesWith;\n      }\n      else if (length >= LARGE_ARRAY_SIZE) {\n        var set = iteratee ? null : createSet(array);\n        if (set) {\n          return setToArray(set);\n        }\n        isCommon = false;\n        includes = cacheHas;\n        seen = new SetCache;\n      }\n      else {\n        seen = iteratee ? [] : result;\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var seenIndex = seen.length;\n          while (seenIndex--) {\n            if (seen[seenIndex] === computed) {\n              continue outer;\n            }\n          }\n          if (iteratee) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n        else if (!includes(seen, computed, comparator)) {\n          if (seen !== result) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.unset`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The property path to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     */\n    function baseUnset(object, path) {\n      path = castPath(path, object);\n\n      // Prevent prototype pollution:\n      // https://github.com/lodash/lodash/security/advisories/GHSA-xxjr-mmjv-4gpg\n      // https://github.com/lodash/lodash/security/advisories/GHSA-f23m-r3pf-42rh\n      var index = -1,\n          length = path.length;\n\n      if (!length) {\n        return true;\n      }\n\n      while (++index < length) {\n        var key = toKey(path[index]);\n\n        // Always block \"__proto__\" anywhere in the path if it's not expected\n        if (key === '__proto__' && !hasOwnProperty.call(object, '__proto__')) {\n          return false;\n        }\n\n        // Block constructor/prototype as non-terminal traversal keys to prevent\n        // escaping the object graph into built-in constructors and prototypes.\n        if ((key === 'constructor' || key === 'prototype') && index < length - 1) {\n          return false;\n        }\n      }\n\n      var obj = parent(object, path);\n      return obj == null || delete obj[toKey(last(path))];\n    }\n\n    /**\n     * The base implementation of `_.update`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to update.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseUpdate(object, path, updater, customizer) {\n      return baseSet(object, path, updater(baseGet(object, path)), customizer);\n    }\n\n    /**\n     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n     * without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {Function} predicate The function invoked per iteration.\n     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseWhile(array, predicate, isDrop, fromRight) {\n      var length = array.length,\n          index = fromRight ? length : -1;\n\n      while ((fromRight ? index-- : ++index < length) &&\n        predicate(array[index], index, array)) {}\n\n      return isDrop\n        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n    }\n\n    /**\n     * The base implementation of `wrapperValue` which returns the result of\n     * performing a sequence of actions on the unwrapped `value`, where each\n     * successive action is supplied the return value of the previous.\n     *\n     * @private\n     * @param {*} value The unwrapped value.\n     * @param {Array} actions Actions to perform to resolve the unwrapped value.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseWrapperValue(value, actions) {\n      var result = value;\n      if (result instanceof LazyWrapper) {\n        result = result.value();\n      }\n      return arrayReduce(actions, function(result, action) {\n        return action.func.apply(action.thisArg, arrayPush([result], action.args));\n      }, result);\n    }\n\n    /**\n     * The base implementation of methods like `_.xor`, without support for\n     * iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of values.\n     */\n    function baseXor(arrays, iteratee, comparator) {\n      var length = arrays.length;\n      if (length < 2) {\n        return length ? baseUniq(arrays[0]) : [];\n      }\n      var index = -1,\n          result = Array(length);\n\n      while (++index < length) {\n        var array = arrays[index],\n            othIndex = -1;\n\n        while (++othIndex < length) {\n          if (othIndex != index) {\n            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n          }\n        }\n      }\n      return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n    }\n\n    /**\n     * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n     *\n     * @private\n     * @param {Array} props The property identifiers.\n     * @param {Array} values The property values.\n     * @param {Function} assignFunc The function to assign values.\n     * @returns {Object} Returns the new object.\n     */\n    function baseZipObject(props, values, assignFunc) {\n      var index = -1,\n          length = props.length,\n          valsLength = values.length,\n          result = {};\n\n      while (++index < length) {\n        var value = index < valsLength ? values[index] : undefined;\n        assignFunc(result, props[index], value);\n      }\n      return result;\n    }\n\n    /**\n     * Casts `value` to an empty array if it's not an array like object.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Array|Object} Returns the cast array-like object.\n     */\n    function castArrayLikeObject(value) {\n      return isArrayLikeObject(value) ? value : [];\n    }\n\n    /**\n     * Casts `value` to `identity` if it's not a function.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Function} Returns cast function.\n     */\n    function castFunction(value) {\n      return typeof value == 'function' ? value : identity;\n    }\n\n    /**\n     * Casts `value` to a path array if it's not one.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {Array} Returns the cast property path array.\n     */\n    function castPath(value, object) {\n      if (isArray(value)) {\n        return value;\n      }\n      return isKey(value, object) ? [value] : stringToPath(toString(value));\n    }\n\n    /**\n     * A `baseRest` alias which can be replaced with `identity` by module\n     * replacement plugins.\n     *\n     * @private\n     * @type {Function}\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    var castRest = baseRest;\n\n    /**\n     * Casts `array` to a slice if it's needed.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {number} start The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the cast slice.\n     */\n    function castSlice(array, start, end) {\n      var length = array.length;\n      end = end === undefined ? length : end;\n      return (!start && end >= length) ? array : baseSlice(array, start, end);\n    }\n\n    /**\n     * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n     *\n     * @private\n     * @param {number|Object} id The timer id or timeout object of the timer to clear.\n     */\n    var clearTimeout = ctxClearTimeout || function(id) {\n      return root.clearTimeout(id);\n    };\n\n    /**\n     * Creates a clone of  `buffer`.\n     *\n     * @private\n     * @param {Buffer} buffer The buffer to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Buffer} Returns the cloned buffer.\n     */\n    function cloneBuffer(buffer, isDeep) {\n      if (isDeep) {\n        return buffer.slice();\n      }\n      var length = buffer.length,\n          result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n      buffer.copy(result);\n      return result;\n    }\n\n    /**\n     * Creates a clone of `arrayBuffer`.\n     *\n     * @private\n     * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n     * @returns {ArrayBuffer} Returns the cloned array buffer.\n     */\n    function cloneArrayBuffer(arrayBuffer) {\n      var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n      new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n      return result;\n    }\n\n    /**\n     * Creates a clone of `dataView`.\n     *\n     * @private\n     * @param {Object} dataView The data view to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned data view.\n     */\n    function cloneDataView(dataView, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n      return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n    }\n\n    /**\n     * Creates a clone of `regexp`.\n     *\n     * @private\n     * @param {Object} regexp The regexp to clone.\n     * @returns {Object} Returns the cloned regexp.\n     */\n    function cloneRegExp(regexp) {\n      var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n      result.lastIndex = regexp.lastIndex;\n      return result;\n    }\n\n    /**\n     * Creates a clone of the `symbol` object.\n     *\n     * @private\n     * @param {Object} symbol The symbol object to clone.\n     * @returns {Object} Returns the cloned symbol object.\n     */\n    function cloneSymbol(symbol) {\n      return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n    }\n\n    /**\n     * Creates a clone of `typedArray`.\n     *\n     * @private\n     * @param {Object} typedArray The typed array to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned typed array.\n     */\n    function cloneTypedArray(typedArray, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n    }\n\n    /**\n     * Compares values to sort them in ascending order.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {number} Returns the sort order indicator for `value`.\n     */\n    function compareAscending(value, other) {\n      if (value !== other) {\n        var valIsDefined = value !== undefined,\n            valIsNull = value === null,\n            valIsReflexive = value === value,\n            valIsSymbol = isSymbol(value);\n\n        var othIsDefined = other !== undefined,\n            othIsNull = other === null,\n            othIsReflexive = other === other,\n            othIsSymbol = isSymbol(other);\n\n        if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n            (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n            (valIsNull && othIsDefined && othIsReflexive) ||\n            (!valIsDefined && othIsReflexive) ||\n            !valIsReflexive) {\n          return 1;\n        }\n        if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n            (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n            (othIsNull && valIsDefined && valIsReflexive) ||\n            (!othIsDefined && valIsReflexive) ||\n            !othIsReflexive) {\n          return -1;\n        }\n      }\n      return 0;\n    }\n\n    /**\n     * Used by `_.orderBy` to compare multiple properties of a value to another\n     * and stable sort them.\n     *\n     * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n     * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n     * of corresponding values.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {boolean[]|string[]} orders The order to sort by for each property.\n     * @returns {number} Returns the sort order indicator for `object`.\n     */\n    function compareMultiple(object, other, orders) {\n      var index = -1,\n          objCriteria = object.criteria,\n          othCriteria = other.criteria,\n          length = objCriteria.length,\n          ordersLength = orders.length;\n\n      while (++index < length) {\n        var result = compareAscending(objCriteria[index], othCriteria[index]);\n        if (result) {\n          if (index >= ordersLength) {\n            return result;\n          }\n          var order = orders[index];\n          return result * (order == 'desc' ? -1 : 1);\n        }\n      }\n      // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n      // that causes it, under certain circumstances, to provide the same value for\n      // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n      // for more details.\n      //\n      // This also ensures a stable sort in V8 and other engines.\n      // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n      return object.index - other.index;\n    }\n\n    /**\n     * Creates an array that is the composition of partially applied arguments,\n     * placeholders, and provided arguments into a single array of arguments.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to prepend to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgs(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersLength = holders.length,\n          leftIndex = -1,\n          leftLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(leftLength + rangeLength),\n          isUncurried = !isCurried;\n\n      while (++leftIndex < leftLength) {\n        result[leftIndex] = partials[leftIndex];\n      }\n      while (++argsIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[holders[argsIndex]] = args[argsIndex];\n        }\n      }\n      while (rangeLength--) {\n        result[leftIndex++] = args[argsIndex++];\n      }\n      return result;\n    }\n\n    /**\n     * This function is like `composeArgs` except that the arguments composition\n     * is tailored for `_.partialRight`.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to append to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgsRight(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersIndex = -1,\n          holdersLength = holders.length,\n          rightIndex = -1,\n          rightLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(rangeLength + rightLength),\n          isUncurried = !isCurried;\n\n      while (++argsIndex < rangeLength) {\n        result[argsIndex] = args[argsIndex];\n      }\n      var offset = argsIndex;\n      while (++rightIndex < rightLength) {\n        result[offset + rightIndex] = partials[rightIndex];\n      }\n      while (++holdersIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[offset + holders[holdersIndex]] = args[argsIndex++];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Copies the values of `source` to `array`.\n     *\n     * @private\n     * @param {Array} source The array to copy values from.\n     * @param {Array} [array=[]] The array to copy values to.\n     * @returns {Array} Returns `array`.\n     */\n    function copyArray(source, array) {\n      var index = -1,\n          length = source.length;\n\n      array || (array = Array(length));\n      while (++index < length) {\n        array[index] = source[index];\n      }\n      return array;\n    }\n\n    /**\n     * Copies properties of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy properties from.\n     * @param {Array} props The property identifiers to copy.\n     * @param {Object} [object={}] The object to copy properties to.\n     * @param {Function} [customizer] The function to customize copied values.\n     * @returns {Object} Returns `object`.\n     */\n    function copyObject(source, props, object, customizer) {\n      var isNew = !object;\n      object || (object = {});\n\n      var index = -1,\n          length = props.length;\n\n      while (++index < length) {\n        var key = props[index];\n\n        var newValue = customizer\n          ? customizer(object[key], source[key], key, object, source)\n          : undefined;\n\n        if (newValue === undefined) {\n          newValue = source[key];\n        }\n        if (isNew) {\n          baseAssignValue(object, key, newValue);\n        } else {\n          assignValue(object, key, newValue);\n        }\n      }\n      return object;\n    }\n\n    /**\n     * Copies own symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbols(source, object) {\n      return copyObject(source, getSymbols(source), object);\n    }\n\n    /**\n     * Copies own and inherited symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbolsIn(source, object) {\n      return copyObject(source, getSymbolsIn(source), object);\n    }\n\n    /**\n     * Creates a function like `_.groupBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} [initializer] The accumulator object initializer.\n     * @returns {Function} Returns the new aggregator function.\n     */\n    function createAggregator(setter, initializer) {\n      return function(collection, iteratee) {\n        var func = isArray(collection) ? arrayAggregator : baseAggregator,\n            accumulator = initializer ? initializer() : {};\n\n        return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n      };\n    }\n\n    /**\n     * Creates a function like `_.assign`.\n     *\n     * @private\n     * @param {Function} assigner The function to assign values.\n     * @returns {Function} Returns the new assigner function.\n     */\n    function createAssigner(assigner) {\n      return baseRest(function(object, sources) {\n        var index = -1,\n            length = sources.length,\n            customizer = length > 1 ? sources[length - 1] : undefined,\n            guard = length > 2 ? sources[2] : undefined;\n\n        customizer = (assigner.length > 3 && typeof customizer == 'function')\n          ? (length--, customizer)\n          : undefined;\n\n        if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n          customizer = length < 3 ? undefined : customizer;\n          length = 1;\n        }\n        object = Object(object);\n        while (++index < length) {\n          var source = sources[index];\n          if (source) {\n            assigner(object, source, index, customizer);\n          }\n        }\n        return object;\n      });\n    }\n\n    /**\n     * Creates a `baseEach` or `baseEachRight` function.\n     *\n     * @private\n     * @param {Function} eachFunc The function to iterate over a collection.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseEach(eachFunc, fromRight) {\n      return function(collection, iteratee) {\n        if (collection == null) {\n          return collection;\n        }\n        if (!isArrayLike(collection)) {\n          return eachFunc(collection, iteratee);\n        }\n        var length = collection.length,\n            index = fromRight ? length : -1,\n            iterable = Object(collection);\n\n        while ((fromRight ? index-- : ++index < length)) {\n          if (iteratee(iterable[index], index, iterable) === false) {\n            break;\n          }\n        }\n        return collection;\n      };\n    }\n\n    /**\n     * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseFor(fromRight) {\n      return function(object, iteratee, keysFunc) {\n        var index = -1,\n            iterable = Object(object),\n            props = keysFunc(object),\n            length = props.length;\n\n        while (length--) {\n          var key = props[fromRight ? length : ++index];\n          if (iteratee(iterable[key], key, iterable) === false) {\n            break;\n          }\n        }\n        return object;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the optional `this`\n     * binding of `thisArg`.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createBind(func, bitmask, thisArg) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return fn.apply(isBind ? thisArg : this, arguments);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.lowerFirst`.\n     *\n     * @private\n     * @param {string} methodName The name of the `String` case method to use.\n     * @returns {Function} Returns the new case function.\n     */\n    function createCaseFirst(methodName) {\n      return function(string) {\n        string = toString(string);\n\n        var strSymbols = hasUnicode(string)\n          ? stringToArray(string)\n          : undefined;\n\n        var chr = strSymbols\n          ? strSymbols[0]\n          : string.charAt(0);\n\n        var trailing = strSymbols\n          ? castSlice(strSymbols, 1).join('')\n          : string.slice(1);\n\n        return chr[methodName]() + trailing;\n      };\n    }\n\n    /**\n     * Creates a function like `_.camelCase`.\n     *\n     * @private\n     * @param {Function} callback The function to combine each word.\n     * @returns {Function} Returns the new compounder function.\n     */\n    function createCompounder(callback) {\n      return function(string) {\n        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n      };\n    }\n\n    /**\n     * Creates a function that produces an instance of `Ctor` regardless of\n     * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n     *\n     * @private\n     * @param {Function} Ctor The constructor to wrap.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCtor(Ctor) {\n      return function() {\n        // Use a `switch` statement to work with class constructors. See\n        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n        // for more details.\n        var args = arguments;\n        switch (args.length) {\n          case 0: return new Ctor;\n          case 1: return new Ctor(args[0]);\n          case 2: return new Ctor(args[0], args[1]);\n          case 3: return new Ctor(args[0], args[1], args[2]);\n          case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n        }\n        var thisBinding = baseCreate(Ctor.prototype),\n            result = Ctor.apply(thisBinding, args);\n\n        // Mimic the constructor's `return` behavior.\n        // See https://es5.github.io/#x13.2.2 for more details.\n        return isObject(result) ? result : thisBinding;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to enable currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {number} arity The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCurry(func, bitmask, arity) {\n      var Ctor = createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length,\n            placeholder = getHolder(wrapper);\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n          ? []\n          : replaceHolders(args, placeholder);\n\n        length -= holders.length;\n        if (length < arity) {\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, undefined,\n            args, holders, undefined, undefined, arity - length);\n        }\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return apply(fn, this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.find` or `_.findLast` function.\n     *\n     * @private\n     * @param {Function} findIndexFunc The function to find the collection index.\n     * @returns {Function} Returns the new find function.\n     */\n    function createFind(findIndexFunc) {\n      return function(collection, predicate, fromIndex) {\n        var iterable = Object(collection);\n        if (!isArrayLike(collection)) {\n          var iteratee = getIteratee(predicate, 3);\n          collection = keys(collection);\n          predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n        }\n        var index = findIndexFunc(collection, predicate, fromIndex);\n        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n      };\n    }\n\n    /**\n     * Creates a `_.flow` or `_.flowRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new flow function.\n     */\n    function createFlow(fromRight) {\n      return flatRest(function(funcs) {\n        var length = funcs.length,\n            index = length,\n            prereq = LodashWrapper.prototype.thru;\n\n        if (fromRight) {\n          funcs.reverse();\n        }\n        while (index--) {\n          var func = funcs[index];\n          if (typeof func != 'function') {\n            throw new TypeError(FUNC_ERROR_TEXT);\n          }\n          if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n            var wrapper = new LodashWrapper([], true);\n          }\n        }\n        index = wrapper ? index : length;\n        while (++index < length) {\n          func = funcs[index];\n\n          var funcName = getFuncName(func),\n              data = funcName == 'wrapper' ? getData(func) : undefined;\n\n          if (data && isLaziable(data[0]) &&\n                data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n                !data[4].length && data[9] == 1\n              ) {\n            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n          } else {\n            wrapper = (func.length == 1 && isLaziable(func))\n              ? wrapper[funcName]()\n              : wrapper.thru(func);\n          }\n        }\n        return function() {\n          var args = arguments,\n              value = args[0];\n\n          if (wrapper && args.length == 1 && isArray(value)) {\n            return wrapper.plant(value).value();\n          }\n          var index = 0,\n              result = length ? funcs[index].apply(this, args) : value;\n\n          while (++index < length) {\n            result = funcs[index].call(this, result);\n          }\n          return result;\n        };\n      });\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with optional `this`\n     * binding of `thisArg`, partial application, and currying.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [partialsRight] The arguments to append to those provided\n     *  to the new function.\n     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n      var isAry = bitmask & WRAP_ARY_FLAG,\n          isBind = bitmask & WRAP_BIND_FLAG,\n          isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n          isFlip = bitmask & WRAP_FLIP_FLAG,\n          Ctor = isBindKey ? undefined : createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length;\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        if (isCurried) {\n          var placeholder = getHolder(wrapper),\n              holdersCount = countHolders(args, placeholder);\n        }\n        if (partials) {\n          args = composeArgs(args, partials, holders, isCurried);\n        }\n        if (partialsRight) {\n          args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n        }\n        length -= holdersCount;\n        if (isCurried && length < arity) {\n          var newHolders = replaceHolders(args, placeholder);\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n            args, newHolders, argPos, ary, arity - length\n          );\n        }\n        var thisBinding = isBind ? thisArg : this,\n            fn = isBindKey ? thisBinding[func] : func;\n\n        length = args.length;\n        if (argPos) {\n          args = reorder(args, argPos);\n        } else if (isFlip && length > 1) {\n          args.reverse();\n        }\n        if (isAry && ary < length) {\n          args.length = ary;\n        }\n        if (this && this !== root && this instanceof wrapper) {\n          fn = Ctor || createCtor(fn);\n        }\n        return fn.apply(thisBinding, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.invertBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} toIteratee The function to resolve iteratees.\n     * @returns {Function} Returns the new inverter function.\n     */\n    function createInverter(setter, toIteratee) {\n      return function(object, iteratee) {\n        return baseInverter(object, setter, toIteratee(iteratee), {});\n      };\n    }\n\n    /**\n     * Creates a function that performs a mathematical operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @param {number} [defaultValue] The value used for `undefined` arguments.\n     * @returns {Function} Returns the new mathematical operation function.\n     */\n    function createMathOperation(operator, defaultValue) {\n      return function(value, other) {\n        var result;\n        if (value === undefined && other === undefined) {\n          return defaultValue;\n        }\n        if (value !== undefined) {\n          result = value;\n        }\n        if (other !== undefined) {\n          if (result === undefined) {\n            return other;\n          }\n          if (typeof value == 'string' || typeof other == 'string') {\n            value = baseToString(value);\n            other = baseToString(other);\n          } else {\n            value = baseToNumber(value);\n            other = baseToNumber(other);\n          }\n          result = operator(value, other);\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function like `_.over`.\n     *\n     * @private\n     * @param {Function} arrayFunc The function to iterate over iteratees.\n     * @returns {Function} Returns the new over function.\n     */\n    function createOver(arrayFunc) {\n      return flatRest(function(iteratees) {\n        iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n        return baseRest(function(args) {\n          var thisArg = this;\n          return arrayFunc(iteratees, function(iteratee) {\n            return apply(iteratee, thisArg, args);\n          });\n        });\n      });\n    }\n\n    /**\n     * Creates the padding for `string` based on `length`. The `chars` string\n     * is truncated if the number of characters exceeds `length`.\n     *\n     * @private\n     * @param {number} length The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padding for `string`.\n     */\n    function createPadding(length, chars) {\n      chars = chars === undefined ? ' ' : baseToString(chars);\n\n      var charsLength = chars.length;\n      if (charsLength < 2) {\n        return charsLength ? baseRepeat(chars, length) : chars;\n      }\n      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n      return hasUnicode(chars)\n        ? castSlice(stringToArray(result), 0, length).join('')\n        : result.slice(0, length);\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the `this` binding\n     * of `thisArg` and `partials` prepended to the arguments it receives.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {Array} partials The arguments to prepend to those provided to\n     *  the new function.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createPartial(func, bitmask, thisArg, partials) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var argsIndex = -1,\n            argsLength = arguments.length,\n            leftIndex = -1,\n            leftLength = partials.length,\n            args = Array(leftLength + argsLength),\n            fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n        while (++leftIndex < leftLength) {\n          args[leftIndex] = partials[leftIndex];\n        }\n        while (argsLength--) {\n          args[leftIndex++] = arguments[++argsIndex];\n        }\n        return apply(fn, isBind ? thisArg : this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.range` or `_.rangeRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new range function.\n     */\n    function createRange(fromRight) {\n      return function(start, end, step) {\n        if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n          end = step = undefined;\n        }\n        // Ensure the sign of `-0` is preserved.\n        start = toFinite(start);\n        if (end === undefined) {\n          end = start;\n          start = 0;\n        } else {\n          end = toFinite(end);\n        }\n        step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n        return baseRange(start, end, step, fromRight);\n      };\n    }\n\n    /**\n     * Creates a function that performs a relational operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @returns {Function} Returns the new relational operation function.\n     */\n    function createRelationalOperation(operator) {\n      return function(value, other) {\n        if (!(typeof value == 'string' && typeof other == 'string')) {\n          value = toNumber(value);\n          other = toNumber(other);\n        }\n        return operator(value, other);\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to continue currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {Function} wrapFunc The function to create the `func` wrapper.\n     * @param {*} placeholder The placeholder value.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n      var isCurry = bitmask & WRAP_CURRY_FLAG,\n          newHolders = isCurry ? holders : undefined,\n          newHoldersRight = isCurry ? undefined : holders,\n          newPartials = isCurry ? partials : undefined,\n          newPartialsRight = isCurry ? undefined : partials;\n\n      bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n      }\n      var newData = [\n        func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n        newHoldersRight, argPos, ary, arity\n      ];\n\n      var result = wrapFunc.apply(undefined, newData);\n      if (isLaziable(func)) {\n        setData(result, newData);\n      }\n      result.placeholder = placeholder;\n      return setWrapToString(result, func, bitmask);\n    }\n\n    /**\n     * Creates a function like `_.round`.\n     *\n     * @private\n     * @param {string} methodName The name of the `Math` method to use when rounding.\n     * @returns {Function} Returns the new round function.\n     */\n    function createRound(methodName) {\n      var func = Math[methodName];\n      return function(number, precision) {\n        number = toNumber(number);\n        precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n        if (precision && nativeIsFinite(number)) {\n          // Shift with exponential notation to avoid floating-point issues.\n          // See [MDN](https://mdn.io/round#Examples) for more details.\n          var pair = (toString(number) + 'e').split('e'),\n              value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n          pair = (toString(value) + 'e').split('e');\n          return +(pair[0] + 'e' + (+pair[1] - precision));\n        }\n        return func(number);\n      };\n    }\n\n    /**\n     * Creates a set object of `values`.\n     *\n     * @private\n     * @param {Array} values The values to add to the set.\n     * @returns {Object} Returns the new set.\n     */\n    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n      return new Set(values);\n    };\n\n    /**\n     * Creates a `_.toPairs` or `_.toPairsIn` function.\n     *\n     * @private\n     * @param {Function} keysFunc The function to get the keys of a given object.\n     * @returns {Function} Returns the new pairs function.\n     */\n    function createToPairs(keysFunc) {\n      return function(object) {\n        var tag = getTag(object);\n        if (tag == mapTag) {\n          return mapToArray(object);\n        }\n        if (tag == setTag) {\n          return setToPairs(object);\n        }\n        return baseToPairs(object, keysFunc(object));\n      };\n    }\n\n    /**\n     * Creates a function that either curries or invokes `func` with optional\n     * `this` binding and partially applied arguments.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags.\n     *    1 - `_.bind`\n     *    2 - `_.bindKey`\n     *    4 - `_.curry` or `_.curryRight` of a bound function\n     *    8 - `_.curry`\n     *   16 - `_.curryRight`\n     *   32 - `_.partial`\n     *   64 - `_.partialRight`\n     *  128 - `_.rearg`\n     *  256 - `_.ary`\n     *  512 - `_.flip`\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to be partially applied.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n      var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n      if (!isBindKey && typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var length = partials ? partials.length : 0;\n      if (!length) {\n        bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n        partials = holders = undefined;\n      }\n      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n      arity = arity === undefined ? arity : toInteger(arity);\n      length -= holders ? holders.length : 0;\n\n      if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n        var partialsRight = partials,\n            holdersRight = holders;\n\n        partials = holders = undefined;\n      }\n      var data = isBindKey ? undefined : getData(func);\n\n      var newData = [\n        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n        argPos, ary, arity\n      ];\n\n      if (data) {\n        mergeData(newData, data);\n      }\n      func = newData[0];\n      bitmask = newData[1];\n      thisArg = newData[2];\n      partials = newData[3];\n      holders = newData[4];\n      arity = newData[9] = newData[9] === undefined\n        ? (isBindKey ? 0 : func.length)\n        : nativeMax(newData[9] - length, 0);\n\n      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n      }\n      if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n        var result = createBind(func, bitmask, thisArg);\n      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n        result = createCurry(func, bitmask, arity);\n      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n        result = createPartial(func, bitmask, thisArg, partials);\n      } else {\n        result = createHybrid.apply(undefined, newData);\n      }\n      var setter = data ? baseSetData : setData;\n      return setWrapToString(setter(result, newData), func, bitmask);\n    }\n\n    /**\n     * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n     * of source objects to the destination object for all destination properties\n     * that resolve to `undefined`.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to assign.\n     * @param {Object} object The parent object of `objValue`.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsAssignIn(objValue, srcValue, key, object) {\n      if (objValue === undefined ||\n          (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n        return srcValue;\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n     * objects into destination objects that are passed thru.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to merge.\n     * @param {Object} object The parent object of `objValue`.\n     * @param {Object} source The parent object of `srcValue`.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n      if (isObject(objValue) && isObject(srcValue)) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, objValue);\n        baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n        stack['delete'](srcValue);\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n     * objects.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {string} key The key of the property to inspect.\n     * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n     */\n    function customOmitClone(value) {\n      return isPlainObject(value) ? undefined : value;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for arrays with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Array} array The array to compare.\n     * @param {Array} other The other array to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `array` and `other` objects.\n     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n     */\n    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          arrLength = array.length,\n          othLength = other.length;\n\n      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n        return false;\n      }\n      // Check that cyclic values are equal.\n      var arrStacked = stack.get(array);\n      var othStacked = stack.get(other);\n      if (arrStacked && othStacked) {\n        return arrStacked == other && othStacked == array;\n      }\n      var index = -1,\n          result = true,\n          seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n      stack.set(array, other);\n      stack.set(other, array);\n\n      // Ignore non-index properties.\n      while (++index < arrLength) {\n        var arrValue = array[index],\n            othValue = other[index];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, arrValue, index, other, array, stack)\n            : customizer(arrValue, othValue, index, array, other, stack);\n        }\n        if (compared !== undefined) {\n          if (compared) {\n            continue;\n          }\n          result = false;\n          break;\n        }\n        // Recursively compare arrays (susceptible to call stack limits).\n        if (seen) {\n          if (!arraySome(other, function(othValue, othIndex) {\n                if (!cacheHas(seen, othIndex) &&\n                    (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n                  return seen.push(othIndex);\n                }\n              })) {\n            result = false;\n            break;\n          }\n        } else if (!(\n              arrValue === othValue ||\n                equalFunc(arrValue, othValue, bitmask, customizer, stack)\n            )) {\n          result = false;\n          break;\n        }\n      }\n      stack['delete'](array);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for comparing objects of\n     * the same `toStringTag`.\n     *\n     * **Note:** This function only supports comparing values with tags of\n     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {string} tag The `toStringTag` of the objects to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n      switch (tag) {\n        case dataViewTag:\n          if ((object.byteLength != other.byteLength) ||\n              (object.byteOffset != other.byteOffset)) {\n            return false;\n          }\n          object = object.buffer;\n          other = other.buffer;\n\n        case arrayBufferTag:\n          if ((object.byteLength != other.byteLength) ||\n              !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n            return false;\n          }\n          return true;\n\n        case boolTag:\n        case dateTag:\n        case numberTag:\n          // Coerce booleans to `1` or `0` and dates to milliseconds.\n          // Invalid dates are coerced to `NaN`.\n          return eq(+object, +other);\n\n        case errorTag:\n          return object.name == other.name && object.message == other.message;\n\n        case regexpTag:\n        case stringTag:\n          // Coerce regexes to strings and treat strings, primitives and objects,\n          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n          // for more details.\n          return object == (other + '');\n\n        case mapTag:\n          var convert = mapToArray;\n\n        case setTag:\n          var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n          convert || (convert = setToArray);\n\n          if (object.size != other.size && !isPartial) {\n            return false;\n          }\n          // Assume cyclic values are equal.\n          var stacked = stack.get(object);\n          if (stacked) {\n            return stacked == other;\n          }\n          bitmask |= COMPARE_UNORDERED_FLAG;\n\n          // Recursively compare objects (susceptible to call stack limits).\n          stack.set(object, other);\n          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n          stack['delete'](object);\n          return result;\n\n        case symbolTag:\n          if (symbolValueOf) {\n            return symbolValueOf.call(object) == symbolValueOf.call(other);\n          }\n      }\n      return false;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for objects with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          objProps = getAllKeys(object),\n          objLength = objProps.length,\n          othProps = getAllKeys(other),\n          othLength = othProps.length;\n\n      if (objLength != othLength && !isPartial) {\n        return false;\n      }\n      var index = objLength;\n      while (index--) {\n        var key = objProps[index];\n        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n          return false;\n        }\n      }\n      // Check that cyclic values are equal.\n      var objStacked = stack.get(object);\n      var othStacked = stack.get(other);\n      if (objStacked && othStacked) {\n        return objStacked == other && othStacked == object;\n      }\n      var result = true;\n      stack.set(object, other);\n      stack.set(other, object);\n\n      var skipCtor = isPartial;\n      while (++index < objLength) {\n        key = objProps[index];\n        var objValue = object[key],\n            othValue = other[key];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, objValue, key, other, object, stack)\n            : customizer(objValue, othValue, key, object, other, stack);\n        }\n        // Recursively compare objects (susceptible to call stack limits).\n        if (!(compared === undefined\n              ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n              : compared\n            )) {\n          result = false;\n          break;\n        }\n        skipCtor || (skipCtor = key == 'constructor');\n      }\n      if (result && !skipCtor) {\n        var objCtor = object.constructor,\n            othCtor = other.constructor;\n\n        // Non `Object` object instances with different constructors are not equal.\n        if (objCtor != othCtor &&\n            ('constructor' in object && 'constructor' in other) &&\n            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n              typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n          result = false;\n        }\n      }\n      stack['delete'](object);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseRest` which flattens the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    function flatRest(func) {\n      return setToString(overRest(func, undefined, flatten), func + '');\n    }\n\n    /**\n     * Creates an array of own enumerable property names and symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeys(object) {\n      return baseGetAllKeys(object, keys, getSymbols);\n    }\n\n    /**\n     * Creates an array of own and inherited enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeysIn(object) {\n      return baseGetAllKeys(object, keysIn, getSymbolsIn);\n    }\n\n    /**\n     * Gets metadata for `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {*} Returns the metadata for `func`.\n     */\n    var getData = !metaMap ? noop : function(func) {\n      return metaMap.get(func);\n    };\n\n    /**\n     * Gets the name of `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {string} Returns the function name.\n     */\n    function getFuncName(func) {\n      var result = (func.name + ''),\n          array = realNames[result],\n          length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n      while (length--) {\n        var data = array[length],\n            otherFunc = data.func;\n        if (otherFunc == null || otherFunc == func) {\n          return data.name;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Gets the argument placeholder value for `func`.\n     *\n     * @private\n     * @param {Function} func The function to inspect.\n     * @returns {*} Returns the placeholder value.\n     */\n    function getHolder(func) {\n      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n      return object.placeholder;\n    }\n\n    /**\n     * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n     * this function returns the custom method, otherwise it returns `baseIteratee`.\n     * If arguments are provided, the chosen function is invoked with them and\n     * its result is returned.\n     *\n     * @private\n     * @param {*} [value] The value to convert to an iteratee.\n     * @param {number} [arity] The arity of the created iteratee.\n     * @returns {Function} Returns the chosen function or its result.\n     */\n    function getIteratee() {\n      var result = lodash.iteratee || iteratee;\n      result = result === iteratee ? baseIteratee : result;\n      return arguments.length ? result(arguments[0], arguments[1]) : result;\n    }\n\n    /**\n     * Gets the data for `map`.\n     *\n     * @private\n     * @param {Object} map The map to query.\n     * @param {string} key The reference key.\n     * @returns {*} Returns the map data.\n     */\n    function getMapData(map, key) {\n      var data = map.__data__;\n      return isKeyable(key)\n        ? data[typeof key == 'string' ? 'string' : 'hash']\n        : data.map;\n    }\n\n    /**\n     * Gets the property names, values, and compare flags of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the match data of `object`.\n     */\n    function getMatchData(object) {\n      var result = keys(object),\n          length = result.length;\n\n      while (length--) {\n        var key = result[length],\n            value = object[key];\n\n        result[length] = [key, value, isStrictComparable(value)];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the native function at `key` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the method to get.\n     * @returns {*} Returns the function if it's native, else `undefined`.\n     */\n    function getNative(object, key) {\n      var value = getValue(object, key);\n      return baseIsNative(value) ? value : undefined;\n    }\n\n    /**\n     * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the raw `toStringTag`.\n     */\n    function getRawTag(value) {\n      var isOwn = hasOwnProperty.call(value, symToStringTag),\n          tag = value[symToStringTag];\n\n      try {\n        value[symToStringTag] = undefined;\n        var unmasked = true;\n      } catch (e) {}\n\n      var result = nativeObjectToString.call(value);\n      if (unmasked) {\n        if (isOwn) {\n          value[symToStringTag] = tag;\n        } else {\n          delete value[symToStringTag];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array of the own enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n      if (object == null) {\n        return [];\n      }\n      object = Object(object);\n      return arrayFilter(nativeGetSymbols(object), function(symbol) {\n        return propertyIsEnumerable.call(object, symbol);\n      });\n    };\n\n    /**\n     * Creates an array of the own and inherited enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n      var result = [];\n      while (object) {\n        arrayPush(result, getSymbols(object));\n        object = getPrototype(object);\n      }\n      return result;\n    };\n\n    /**\n     * Gets the `toStringTag` of `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    var getTag = baseGetTag;\n\n    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n    if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n        (Map && getTag(new Map) != mapTag) ||\n        (Promise && getTag(Promise.resolve()) != promiseTag) ||\n        (Set && getTag(new Set) != setTag) ||\n        (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n      getTag = function(value) {\n        var result = baseGetTag(value),\n            Ctor = result == objectTag ? value.constructor : undefined,\n            ctorString = Ctor ? toSource(Ctor) : '';\n\n        if (ctorString) {\n          switch (ctorString) {\n            case dataViewCtorString: return dataViewTag;\n            case mapCtorString: return mapTag;\n            case promiseCtorString: return promiseTag;\n            case setCtorString: return setTag;\n            case weakMapCtorString: return weakMapTag;\n          }\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Gets the view, applying any `transforms` to the `start` and `end` positions.\n     *\n     * @private\n     * @param {number} start The start of the view.\n     * @param {number} end The end of the view.\n     * @param {Array} transforms The transformations to apply to the view.\n     * @returns {Object} Returns an object containing the `start` and `end`\n     *  positions of the view.\n     */\n    function getView(start, end, transforms) {\n      var index = -1,\n          length = transforms.length;\n\n      while (++index < length) {\n        var data = transforms[index],\n            size = data.size;\n\n        switch (data.type) {\n          case 'drop':      start += size; break;\n          case 'dropRight': end -= size; break;\n          case 'take':      end = nativeMin(end, start + size); break;\n          case 'takeRight': start = nativeMax(start, end - size); break;\n        }\n      }\n      return { 'start': start, 'end': end };\n    }\n\n    /**\n     * Extracts wrapper details from the `source` body comment.\n     *\n     * @private\n     * @param {string} source The source to inspect.\n     * @returns {Array} Returns the wrapper details.\n     */\n    function getWrapDetails(source) {\n      var match = source.match(reWrapDetails);\n      return match ? match[1].split(reSplitDetails) : [];\n    }\n\n    /**\n     * Checks if `path` exists on `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @param {Function} hasFunc The function to check properties.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     */\n    function hasPath(object, path, hasFunc) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          result = false;\n\n      while (++index < length) {\n        var key = toKey(path[index]);\n        if (!(result = object != null && hasFunc(object, key))) {\n          break;\n        }\n        object = object[key];\n      }\n      if (result || ++index != length) {\n        return result;\n      }\n      length = object == null ? 0 : object.length;\n      return !!length && isLength(length) && isIndex(key, length) &&\n        (isArray(object) || isArguments(object));\n    }\n\n    /**\n     * Initializes an array clone.\n     *\n     * @private\n     * @param {Array} array The array to clone.\n     * @returns {Array} Returns the initialized clone.\n     */\n    function initCloneArray(array) {\n      var length = array.length,\n          result = new array.constructor(length);\n\n      // Add properties assigned by `RegExp#exec`.\n      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n        result.index = array.index;\n        result.input = array.input;\n      }\n      return result;\n    }\n\n    /**\n     * Initializes an object clone.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneObject(object) {\n      return (typeof object.constructor == 'function' && !isPrototype(object))\n        ? baseCreate(getPrototype(object))\n        : {};\n    }\n\n    /**\n     * Initializes an object clone based on its `toStringTag`.\n     *\n     * **Note:** This function only supports cloning values with tags of\n     * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @param {string} tag The `toStringTag` of the object to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneByTag(object, tag, isDeep) {\n      var Ctor = object.constructor;\n      switch (tag) {\n        case arrayBufferTag:\n          return cloneArrayBuffer(object);\n\n        case boolTag:\n        case dateTag:\n          return new Ctor(+object);\n\n        case dataViewTag:\n          return cloneDataView(object, isDeep);\n\n        case float32Tag: case float64Tag:\n        case int8Tag: case int16Tag: case int32Tag:\n        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n          return cloneTypedArray(object, isDeep);\n\n        case mapTag:\n          return new Ctor;\n\n        case numberTag:\n        case stringTag:\n          return new Ctor(object);\n\n        case regexpTag:\n          return cloneRegExp(object);\n\n        case setTag:\n          return new Ctor;\n\n        case symbolTag:\n          return cloneSymbol(object);\n      }\n    }\n\n    /**\n     * Inserts wrapper `details` in a comment at the top of the `source` body.\n     *\n     * @private\n     * @param {string} source The source to modify.\n     * @returns {Array} details The details to insert.\n     * @returns {string} Returns the modified source.\n     */\n    function insertWrapDetails(source, details) {\n      var length = details.length;\n      if (!length) {\n        return source;\n      }\n      var lastIndex = length - 1;\n      details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n      details = details.join(length > 2 ? ', ' : ' ');\n      return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n    }\n\n    /**\n     * Checks if `value` is a flattenable `arguments` object or array.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n     */\n    function isFlattenable(value) {\n      return isArray(value) || isArguments(value) ||\n        !!(spreadableSymbol && value && value[spreadableSymbol]);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like index.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n     */\n    function isIndex(value, length) {\n      var type = typeof value;\n      length = length == null ? MAX_SAFE_INTEGER : length;\n\n      return !!length &&\n        (type == 'number' ||\n          (type != 'symbol' && reIsUint.test(value))) &&\n            (value > -1 && value % 1 == 0 && value < length);\n    }\n\n    /**\n     * Checks if the given arguments are from an iteratee call.\n     *\n     * @private\n     * @param {*} value The potential iteratee value argument.\n     * @param {*} index The potential iteratee index or key argument.\n     * @param {*} object The potential iteratee object argument.\n     * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n     *  else `false`.\n     */\n    function isIterateeCall(value, index, object) {\n      if (!isObject(object)) {\n        return false;\n      }\n      var type = typeof index;\n      if (type == 'number'\n            ? (isArrayLike(object) && isIndex(index, object.length))\n            : (type == 'string' && index in object)\n          ) {\n        return eq(object[index], value);\n      }\n      return false;\n    }\n\n    /**\n     * Checks if `value` is a property name and not a property path.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n     */\n    function isKey(value, object) {\n      if (isArray(value)) {\n        return false;\n      }\n      var type = typeof value;\n      if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n          value == null || isSymbol(value)) {\n        return true;\n      }\n      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n        (object != null && value in Object(object));\n    }\n\n    /**\n     * Checks if `value` is suitable for use as unique object key.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n     */\n    function isKeyable(value) {\n      var type = typeof value;\n      return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n        ? (value !== '__proto__')\n        : (value === null);\n    }\n\n    /**\n     * Checks if `func` has a lazy counterpart.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n     *  else `false`.\n     */\n    function isLaziable(func) {\n      var funcName = getFuncName(func),\n          other = lodash[funcName];\n\n      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n        return false;\n      }\n      if (func === other) {\n        return true;\n      }\n      var data = getData(other);\n      return !!data && func === data[0];\n    }\n\n    /**\n     * Checks if `func` has its source masked.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n     */\n    function isMasked(func) {\n      return !!maskSrcKey && (maskSrcKey in func);\n    }\n\n    /**\n     * Checks if `func` is capable of being masked.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n     */\n    var isMaskable = coreJsData ? isFunction : stubFalse;\n\n    /**\n     * Checks if `value` is likely a prototype object.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n     */\n    function isPrototype(value) {\n      var Ctor = value && value.constructor,\n          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n      return value === proto;\n    }\n\n    /**\n     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` if suitable for strict\n     *  equality comparisons, else `false`.\n     */\n    function isStrictComparable(value) {\n      return value === value && !isObject(value);\n    }\n\n    /**\n     * A specialized version of `matchesProperty` for source values suitable\n     * for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {string} key The key of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function matchesStrictComparable(key, srcValue) {\n      return function(object) {\n        if (object == null) {\n          return false;\n        }\n        return object[key] === srcValue &&\n          (srcValue !== undefined || (key in Object(object)));\n      };\n    }\n\n    /**\n     * A specialized version of `_.memoize` which clears the memoized function's\n     * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n     *\n     * @private\n     * @param {Function} func The function to have its output memoized.\n     * @returns {Function} Returns the new memoized function.\n     */\n    function memoizeCapped(func) {\n      var result = memoize(func, function(key) {\n        if (cache.size === MAX_MEMOIZE_SIZE) {\n          cache.clear();\n        }\n        return key;\n      });\n\n      var cache = result.cache;\n      return result;\n    }\n\n    /**\n     * Merges the function metadata of `source` into `data`.\n     *\n     * Merging metadata reduces the number of wrappers used to invoke a function.\n     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n     * may be applied regardless of execution order. Methods like `_.ary` and\n     * `_.rearg` modify function arguments, making the order in which they are\n     * executed important, preventing the merging of metadata. However, we make\n     * an exception for a safe combined case where curried functions have `_.ary`\n     * and or `_.rearg` applied.\n     *\n     * @private\n     * @param {Array} data The destination metadata.\n     * @param {Array} source The source metadata.\n     * @returns {Array} Returns `data`.\n     */\n    function mergeData(data, source) {\n      var bitmask = data[1],\n          srcBitmask = source[1],\n          newBitmask = bitmask | srcBitmask,\n          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n      var isCombo =\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n        ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n      // Exit early if metadata can't be merged.\n      if (!(isCommon || isCombo)) {\n        return data;\n      }\n      // Use source `thisArg` if available.\n      if (srcBitmask & WRAP_BIND_FLAG) {\n        data[2] = source[2];\n        // Set when currying a bound function.\n        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n      }\n      // Compose partial arguments.\n      var value = source[3];\n      if (value) {\n        var partials = data[3];\n        data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n      }\n      // Compose partial right arguments.\n      value = source[5];\n      if (value) {\n        partials = data[5];\n        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n      }\n      // Use source `argPos` if available.\n      value = source[7];\n      if (value) {\n        data[7] = value;\n      }\n      // Use source `ary` if it's smaller.\n      if (srcBitmask & WRAP_ARY_FLAG) {\n        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n      }\n      // Use source `arity` if one is not provided.\n      if (data[9] == null) {\n        data[9] = source[9];\n      }\n      // Use source `func` and merge bitmasks.\n      data[0] = source[0];\n      data[1] = newBitmask;\n\n      return data;\n    }\n\n    /**\n     * This function is like\n     * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * except that it includes inherited enumerable properties.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function nativeKeysIn(object) {\n      var result = [];\n      if (object != null) {\n        for (var key in Object(object)) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a string using `Object.prototype.toString`.\n     *\n     * @private\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     */\n    function objectToString(value) {\n      return nativeObjectToString.call(value);\n    }\n\n    /**\n     * A specialized version of `baseRest` which transforms the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @param {Function} transform The rest array transform.\n     * @returns {Function} Returns the new function.\n     */\n    function overRest(func, start, transform) {\n      start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n      return function() {\n        var args = arguments,\n            index = -1,\n            length = nativeMax(args.length - start, 0),\n            array = Array(length);\n\n        while (++index < length) {\n          array[index] = args[start + index];\n        }\n        index = -1;\n        var otherArgs = Array(start + 1);\n        while (++index < start) {\n          otherArgs[index] = args[index];\n        }\n        otherArgs[start] = transform(array);\n        return apply(func, this, otherArgs);\n      };\n    }\n\n    /**\n     * Gets the parent value at `path` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array} path The path to get the parent value of.\n     * @returns {*} Returns the parent value.\n     */\n    function parent(object, path) {\n      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n    }\n\n    /**\n     * Reorder `array` according to the specified indexes where the element at\n     * the first index is assigned as the first element, the element at\n     * the second index is assigned as the second element, and so on.\n     *\n     * @private\n     * @param {Array} array The array to reorder.\n     * @param {Array} indexes The arranged array indexes.\n     * @returns {Array} Returns `array`.\n     */\n    function reorder(array, indexes) {\n      var arrLength = array.length,\n          length = nativeMin(indexes.length, arrLength),\n          oldArray = copyArray(array);\n\n      while (length--) {\n        var index = indexes[length];\n        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n      }\n      return array;\n    }\n\n    /**\n     * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the property to get.\n     * @returns {*} Returns the property value.\n     */\n    function safeGet(object, key) {\n      if (key === 'constructor' && typeof object[key] === 'function') {\n        return;\n      }\n\n      if (key == '__proto__') {\n        return;\n      }\n\n      return object[key];\n    }\n\n    /**\n     * Sets metadata for `func`.\n     *\n     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n     * period of time, it will trip its breaker and transition to an identity\n     * function to avoid garbage collection pauses in V8. See\n     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n     * for more details.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var setData = shortOut(baseSetData);\n\n    /**\n     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    var setTimeout = ctxSetTimeout || function(func, wait) {\n      return root.setTimeout(func, wait);\n    };\n\n    /**\n     * Sets the `toString` method of `func` to return `string`.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var setToString = shortOut(baseSetToString);\n\n    /**\n     * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n     * with wrapper details in a comment at the top of the source body.\n     *\n     * @private\n     * @param {Function} wrapper The function to modify.\n     * @param {Function} reference The reference function.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Function} Returns `wrapper`.\n     */\n    function setWrapToString(wrapper, reference, bitmask) {\n      var source = (reference + '');\n      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n    }\n\n    /**\n     * Creates a function that'll short out and invoke `identity` instead\n     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n     * milliseconds.\n     *\n     * @private\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new shortable function.\n     */\n    function shortOut(func) {\n      var count = 0,\n          lastCalled = 0;\n\n      return function() {\n        var stamp = nativeNow(),\n            remaining = HOT_SPAN - (stamp - lastCalled);\n\n        lastCalled = stamp;\n        if (remaining > 0) {\n          if (++count >= HOT_COUNT) {\n            return arguments[0];\n          }\n        } else {\n          count = 0;\n        }\n        return func.apply(undefined, arguments);\n      };\n    }\n\n    /**\n     * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @param {number} [size=array.length] The size of `array`.\n     * @returns {Array} Returns `array`.\n     */\n    function shuffleSelf(array, size) {\n      var index = -1,\n          length = array.length,\n          lastIndex = length - 1;\n\n      size = size === undefined ? length : size;\n      while (++index < size) {\n        var rand = baseRandom(index, lastIndex),\n            value = array[rand];\n\n        array[rand] = array[index];\n        array[index] = value;\n      }\n      array.length = size;\n      return array;\n    }\n\n    /**\n     * Converts `string` to a property path array.\n     *\n     * @private\n     * @param {string} string The string to convert.\n     * @returns {Array} Returns the property path array.\n     */\n    var stringToPath = memoizeCapped(function(string) {\n      var result = [];\n      if (string.charCodeAt(0) === 46 /* . */) {\n        result.push('');\n      }\n      string.replace(rePropName, function(match, number, quote, subString) {\n        result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n      });\n      return result;\n    });\n\n    /**\n     * Converts `value` to a string key if it's not a string or symbol.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {string|symbol} Returns the key.\n     */\n    function toKey(value) {\n      if (typeof value == 'string' || isSymbol(value)) {\n        return value;\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * Converts `func` to its source code.\n     *\n     * @private\n     * @param {Function} func The function to convert.\n     * @returns {string} Returns the source code.\n     */\n    function toSource(func) {\n      if (func != null) {\n        try {\n          return funcToString.call(func);\n        } catch (e) {}\n        try {\n          return (func + '');\n        } catch (e) {}\n      }\n      return '';\n    }\n\n    /**\n     * Updates wrapper `details` based on `bitmask` flags.\n     *\n     * @private\n     * @returns {Array} details The details to modify.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Array} Returns `details`.\n     */\n    function updateWrapDetails(details, bitmask) {\n      arrayEach(wrapFlags, function(pair) {\n        var value = '_.' + pair[0];\n        if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n          details.push(value);\n        }\n      });\n      return details.sort();\n    }\n\n    /**\n     * Creates a clone of `wrapper`.\n     *\n     * @private\n     * @param {Object} wrapper The wrapper to clone.\n     * @returns {Object} Returns the cloned wrapper.\n     */\n    function wrapperClone(wrapper) {\n      if (wrapper instanceof LazyWrapper) {\n        return wrapper.clone();\n      }\n      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n      result.__actions__ = copyArray(wrapper.__actions__);\n      result.__index__  = wrapper.__index__;\n      result.__values__ = wrapper.__values__;\n      return result;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of elements split into groups the length of `size`.\n     * If `array` can't be split evenly, the final chunk will be the remaining\n     * elements.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to process.\n     * @param {number} [size=1] The length of each chunk\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the new array of chunks.\n     * @example\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 2);\n     * // => [['a', 'b'], ['c', 'd']]\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 3);\n     * // => [['a', 'b', 'c'], ['d']]\n     */\n    function chunk(array, size, guard) {\n      if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n        size = 1;\n      } else {\n        size = nativeMax(toInteger(size), 0);\n      }\n      var length = array == null ? 0 : array.length;\n      if (!length || size < 1) {\n        return [];\n      }\n      var index = 0,\n          resIndex = 0,\n          result = Array(nativeCeil(length / size));\n\n      while (index < length) {\n        result[resIndex++] = baseSlice(array, index, (index += size));\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array with all falsey values removed. The values `false`, `null`,\n     * `0`, `-0`, `0n`, `\"\"`, `undefined`, and `NaN` are falsy.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to compact.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.compact([0, 1, false, 2, '', 3]);\n     * // => [1, 2, 3]\n     */\n    function compact(array) {\n      var index = -1,\n          length = array == null ? 0 : array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index];\n        if (value) {\n          result[resIndex++] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates a new array concatenating `array` with any additional arrays\n     * and/or values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to concatenate.\n     * @param {...*} [values] The values to concatenate.\n     * @returns {Array} Returns the new concatenated array.\n     * @example\n     *\n     * var array = [1];\n     * var other = _.concat(array, 2, [3], [[4]]);\n     *\n     * console.log(other);\n     * // => [1, 2, 3, [4]]\n     *\n     * console.log(array);\n     * // => [1]\n     */\n    function concat() {\n      var length = arguments.length;\n      if (!length) {\n        return [];\n      }\n      var args = Array(length - 1),\n          array = arguments[0],\n          index = length;\n\n      while (index--) {\n        args[index - 1] = arguments[index];\n      }\n      return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n    }\n\n    /**\n     * Creates an array of `array` values not included in the other given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * **Note:** Unlike `_.pullAll`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.without, _.xor\n     * @example\n     *\n     * _.difference([2, 1], [2, 3]);\n     * // => [1]\n     */\n    var difference = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `iteratee` which\n     * is invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var differenceBy = baseRest(function(array, values) {\n      var iteratee = last(values);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `comparator`\n     * which is invoked to compare elements of `array` to `values`. The order and\n     * references of result values are determined by the first array. The comparator\n     * is invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     *\n     * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }]\n     */\n    var differenceWith = baseRest(function(array, values) {\n      var comparator = last(values);\n      if (isArrayLikeObject(comparator)) {\n        comparator = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.drop([1, 2, 3]);\n     * // => [2, 3]\n     *\n     * _.drop([1, 2, 3], 2);\n     * // => [3]\n     *\n     * _.drop([1, 2, 3], 5);\n     * // => []\n     *\n     * _.drop([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function drop(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.dropRight([1, 2, 3]);\n     * // => [1, 2]\n     *\n     * _.dropRight([1, 2, 3], 2);\n     * // => [1]\n     *\n     * _.dropRight([1, 2, 3], 5);\n     * // => []\n     *\n     * _.dropRight([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function dropRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the end.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.dropRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropRightWhile(users, ['active', false]);\n     * // => objects for ['barney']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropRightWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the beginning.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.dropWhile(users, function(o) { return !o.active; });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropWhile(users, ['active', false]);\n     * // => objects for ['pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true)\n        : [];\n    }\n\n    /**\n     * Fills elements of `array` with `value` from `start` up to, but not\n     * including, `end`.\n     *\n     * **Note:** This method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Array\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.fill(array, 'a');\n     * console.log(array);\n     * // => ['a', 'a', 'a']\n     *\n     * _.fill(Array(3), 2);\n     * // => [2, 2, 2]\n     *\n     * _.fill([4, 6, 8, 10], '*', 1, 3);\n     * // => [4, '*', '*', 10]\n     */\n    function fill(array, value, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n        start = 0;\n        end = length;\n      }\n      return baseFill(array, value, start, end);\n    }\n\n    /**\n     * This method is like `_.find` except that it returns the index of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.findIndex(users, function(o) { return o.user == 'barney'; });\n     * // => 0\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findIndex(users, { 'user': 'fred', 'active': false });\n     * // => 1\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findIndex(users, ['active', false]);\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findIndex(users, 'active');\n     * // => 2\n     */\n    function findIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index);\n    }\n\n    /**\n     * This method is like `_.findIndex` except that it iterates over elements\n     * of `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n     * // => 2\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n     * // => 0\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastIndex(users, ['active', false]);\n     * // => 2\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastIndex(users, 'active');\n     * // => 0\n     */\n    function findLastIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length - 1;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = fromIndex < 0\n          ? nativeMax(length + index, 0)\n          : nativeMin(index, length - 1);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n    }\n\n    /**\n     * Flattens `array` a single level deep.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flatten([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, [3, [4]], 5]\n     */\n    function flatten(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, 1) : [];\n    }\n\n    /**\n     * Recursively flattens `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flattenDeep([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, 3, 4, 5]\n     */\n    function flattenDeep(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, INFINITY) : [];\n    }\n\n    /**\n     * Recursively flatten `array` up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * var array = [1, [2, [3, [4]], 5]];\n     *\n     * _.flattenDepth(array, 1);\n     * // => [1, 2, [3, [4]], 5]\n     *\n     * _.flattenDepth(array, 2);\n     * // => [1, 2, 3, [4], 5]\n     */\n    function flattenDepth(array, depth) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(array, depth);\n    }\n\n    /**\n     * The inverse of `_.toPairs`; this method returns an object composed\n     * from key-value `pairs`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} pairs The key-value pairs.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.fromPairs([['a', 1], ['b', 2]]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function fromPairs(pairs) {\n      var index = -1,\n          length = pairs == null ? 0 : pairs.length,\n          result = {};\n\n      while (++index < length) {\n        var pair = pairs[index];\n        baseAssignValue(result, pair[0], pair[1]);\n      }\n      return result;\n    }\n\n    /**\n     * Gets the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias first\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the first element of `array`.\n     * @example\n     *\n     * _.head([1, 2, 3]);\n     * // => 1\n     *\n     * _.head([]);\n     * // => undefined\n     */\n    function head(array) {\n      return (array && array.length) ? array[0] : undefined;\n    }\n\n    /**\n     * Gets the index at which the first occurrence of `value` is found in `array`\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. If `fromIndex` is negative, it's used as the\n     * offset from the end of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.indexOf([1, 2, 1, 2], 2);\n     * // => 1\n     *\n     * // Search from the `fromIndex`.\n     * _.indexOf([1, 2, 1, 2], 2, 2);\n     * // => 3\n     */\n    function indexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseIndexOf(array, value, index);\n    }\n\n    /**\n     * Gets all but the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.initial([1, 2, 3]);\n     * // => [1, 2]\n     */\n    function initial(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 0, -1) : [];\n    }\n\n    /**\n     * Creates an array of unique values that are included in all given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersection([2, 1], [2, 3]);\n     * // => [2]\n     */\n    var intersection = baseRest(function(arrays) {\n      var mapped = arrayMap(arrays, castArrayLikeObject);\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped)\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `iteratee`\n     * which is invoked for each element of each `arrays` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [2.1]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }]\n     */\n    var intersectionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      if (iteratee === last(mapped)) {\n        iteratee = undefined;\n      } else {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `comparator`\n     * which is invoked to compare elements of `arrays`. The order and references\n     * of result values are determined by the first array. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.intersectionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }]\n     */\n    var intersectionWith = baseRest(function(arrays) {\n      var comparator = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      if (comparator) {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Converts all elements in `array` into a string separated by `separator`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to convert.\n     * @param {string} [separator=','] The element separator.\n     * @returns {string} Returns the joined string.\n     * @example\n     *\n     * _.join(['a', 'b', 'c'], '~');\n     * // => 'a~b~c'\n     */\n    function join(array, separator) {\n      return array == null ? '' : nativeJoin.call(array, separator);\n    }\n\n    /**\n     * Gets the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the last element of `array`.\n     * @example\n     *\n     * _.last([1, 2, 3]);\n     * // => 3\n     */\n    function last(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? array[length - 1] : undefined;\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it iterates over elements of\n     * `array` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.lastIndexOf([1, 2, 1, 2], 2);\n     * // => 3\n     *\n     * // Search from the `fromIndex`.\n     * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n     * // => 1\n     */\n    function lastIndexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n      }\n      return value === value\n        ? strictLastIndexOf(array, value, index)\n        : baseFindIndex(array, baseIsNaN, index, true);\n    }\n\n    /**\n     * Gets the element at index `n` of `array`. If `n` is negative, the nth\n     * element from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.11.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=0] The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     *\n     * _.nth(array, 1);\n     * // => 'b'\n     *\n     * _.nth(array, -2);\n     * // => 'c';\n     */\n    function nth(array, n) {\n      return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n    }\n\n    /**\n     * Removes all given values from `array` using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n     * to remove elements from an array by predicate.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...*} [values] The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pull(array, 'a', 'c');\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    var pull = baseRest(pullAll);\n\n    /**\n     * This method is like `_.pull` except that it accepts an array of values to remove.\n     *\n     * **Note:** Unlike `_.difference`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pullAll(array, ['a', 'c']);\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    function pullAll(array, values) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values)\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `iteratee` which is\n     * invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The iteratee is invoked with one argument: (value).\n     *\n     * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n     *\n     * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n     * console.log(array);\n     * // => [{ 'x': 2 }]\n     */\n    function pullAllBy(array, values, iteratee) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, getIteratee(iteratee, 2))\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `comparator` which\n     * is invoked to compare elements of `array` to `values`. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n     *\n     * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n     * console.log(array);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n     */\n    function pullAllWith(array, values, comparator) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, undefined, comparator)\n        : array;\n    }\n\n    /**\n     * Removes elements from `array` corresponding to `indexes` and returns an\n     * array of removed elements.\n     *\n     * **Note:** Unlike `_.at`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     * var pulled = _.pullAt(array, [1, 3]);\n     *\n     * console.log(array);\n     * // => ['a', 'c']\n     *\n     * console.log(pulled);\n     * // => ['b', 'd']\n     */\n    var pullAt = flatRest(function(array, indexes) {\n      var length = array == null ? 0 : array.length,\n          result = baseAt(array, indexes);\n\n      basePullAt(array, arrayMap(indexes, function(index) {\n        return isIndex(index, length) ? +index : index;\n      }).sort(compareAscending));\n\n      return result;\n    });\n\n    /**\n     * Removes all elements from `array` that `predicate` returns truthy for\n     * and returns an array of the removed elements. The predicate is invoked\n     * with three arguments: (value, index, array).\n     *\n     * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n     * to pull elements from an array by value.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = [1, 2, 3, 4];\n     * var evens = _.remove(array, function(n) {\n     *   return n % 2 == 0;\n     * });\n     *\n     * console.log(array);\n     * // => [1, 3]\n     *\n     * console.log(evens);\n     * // => [2, 4]\n     */\n    function remove(array, predicate) {\n      var result = [];\n      if (!(array && array.length)) {\n        return result;\n      }\n      var index = -1,\n          indexes = [],\n          length = array.length;\n\n      predicate = getIteratee(predicate, 3);\n      while (++index < length) {\n        var value = array[index];\n        if (predicate(value, index, array)) {\n          result.push(value);\n          indexes.push(index);\n        }\n      }\n      basePullAt(array, indexes);\n      return result;\n    }\n\n    /**\n     * Reverses `array` so that the first element becomes the last, the second\n     * element becomes the second to last, and so on.\n     *\n     * **Note:** This method mutates `array` and is based on\n     * [`Array#reverse`](https://mdn.io/Array/reverse).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.reverse(array);\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function reverse(array) {\n      return array == null ? array : nativeReverse.call(array);\n    }\n\n    /**\n     * Creates a slice of `array` from `start` up to, but not including, `end`.\n     *\n     * **Note:** This method is used instead of\n     * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n     * returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function slice(array, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n        start = 0;\n        end = length;\n      }\n      else {\n        start = start == null ? 0 : toInteger(start);\n        end = end === undefined ? length : toInteger(end);\n      }\n      return baseSlice(array, start, end);\n    }\n\n    /**\n     * Uses a binary search to determine the lowest index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedIndex([30, 50], 40);\n     * // => 1\n     */\n    function sortedIndex(array, value) {\n      return baseSortedIndex(array, value);\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 0\n     */\n    function sortedIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 1\n     */\n    function sortedIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value);\n        if (index < length && eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it returns the highest\n     * index at which `value` should be inserted into `array` in order to\n     * maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n     * // => 4\n     */\n    function sortedLastIndex(array, value) {\n      return baseSortedIndex(array, value, true);\n    }\n\n    /**\n     * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 1\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 1\n     */\n    function sortedLastIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n    }\n\n    /**\n     * This method is like `_.lastIndexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 3\n     */\n    function sortedLastIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value, true) - 1;\n        if (eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.uniq` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniq([1, 1, 2]);\n     * // => [1, 2]\n     */\n    function sortedUniq(array) {\n      return (array && array.length)\n        ? baseSortedUniq(array)\n        : [];\n    }\n\n    /**\n     * This method is like `_.uniqBy` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n     * // => [1.1, 2.3]\n     */\n    function sortedUniqBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSortedUniq(array, getIteratee(iteratee, 2))\n        : [];\n    }\n\n    /**\n     * Gets all but the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.tail([1, 2, 3]);\n     * // => [2, 3]\n     */\n    function tail(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 1, length) : [];\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.take([1, 2, 3]);\n     * // => [1]\n     *\n     * _.take([1, 2, 3], 2);\n     * // => [1, 2]\n     *\n     * _.take([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.take([1, 2, 3], 0);\n     * // => []\n     */\n    function take(array, n, guard) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.takeRight([1, 2, 3]);\n     * // => [3]\n     *\n     * _.takeRight([1, 2, 3], 2);\n     * // => [2, 3]\n     *\n     * _.takeRight([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.takeRight([1, 2, 3], 0);\n     * // => []\n     */\n    function takeRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the end. Elements are\n     * taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.takeRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeRightWhile(users, ['active', false]);\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeRightWhile(users, 'active');\n     * // => []\n     */\n    function takeRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), false, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the beginning. Elements\n     * are taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.takeWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeWhile(users, ['active', false]);\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeWhile(users, 'active');\n     * // => []\n     */\n    function takeWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3))\n        : [];\n    }\n\n    /**\n     * Creates an array of unique values, in order, from all given arrays using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.union([2], [1, 2]);\n     * // => [2, 1]\n     */\n    var union = baseRest(function(arrays) {\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which uniqueness is computed. Result values are chosen from the first\n     * array in which the value occurs. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    var unionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `comparator` which\n     * is invoked to compare elements of `arrays`. Result values are chosen from\n     * the first array in which the value occurs. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.unionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var unionWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n    });\n\n    /**\n     * Creates a duplicate-free version of an array, using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons, in which only the first occurrence of each element\n     * is kept. The order of result values is determined by the order they occur\n     * in the array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniq([2, 1, 2]);\n     * // => [2, 1]\n     */\n    function uniq(array) {\n      return (array && array.length) ? baseUniq(array) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * uniqueness is computed. The order of result values is determined by the\n     * order they occur in the array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    function uniqBy(array, iteratee) {\n      return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `comparator` which\n     * is invoked to compare elements of `array`. The order of result values is\n     * determined by the order they occur in the array.The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.uniqWith(objects, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n     */\n    function uniqWith(array, comparator) {\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts an array of grouped\n     * elements and creates an array regrouping the elements to their pre-zip\n     * configuration.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.2.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     *\n     * _.unzip(zipped);\n     * // => [['a', 'b'], [1, 2], [true, false]]\n     */\n    function unzip(array) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var length = 0;\n      array = arrayFilter(array, function(group) {\n        if (isArrayLikeObject(group)) {\n          length = nativeMax(group.length, length);\n          return true;\n        }\n      });\n      return baseTimes(length, function(index) {\n        return arrayMap(array, baseProperty(index));\n      });\n    }\n\n    /**\n     * This method is like `_.unzip` except that it accepts `iteratee` to specify\n     * how regrouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  regrouped values.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n     * // => [[1, 10, 100], [2, 20, 200]]\n     *\n     * _.unzipWith(zipped, _.add);\n     * // => [3, 30, 300]\n     */\n    function unzipWith(array, iteratee) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var result = unzip(array);\n      if (iteratee == null) {\n        return result;\n      }\n      return arrayMap(result, function(group) {\n        return apply(iteratee, undefined, group);\n      });\n    }\n\n    /**\n     * Creates an array excluding all given values using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.pull`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...*} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.xor\n     * @example\n     *\n     * _.without([2, 1, 2, 3], 1, 2);\n     * // => [3]\n     */\n    var without = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, values)\n        : [];\n    });\n\n    /**\n     * Creates an array of unique values that is the\n     * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n     * of the given arrays. The order of result values is determined by the order\n     * they occur in the arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.without\n     * @example\n     *\n     * _.xor([2, 1], [2, 3]);\n     * // => [1, 3]\n     */\n    var xor = baseRest(function(arrays) {\n      return baseXor(arrayFilter(arrays, isArrayLikeObject));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which by which they're compared. The order of result values is determined\n     * by the order they occur in the arrays. The iteratee is invoked with one\n     * argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2, 3.4]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var xorBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `comparator` which is\n     * invoked to compare elements of `arrays`. The order of result values is\n     * determined by the order they occur in the arrays. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.xorWith(objects, others, _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var xorWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n    });\n\n    /**\n     * Creates an array of grouped elements, the first of which contains the\n     * first elements of the given arrays, the second of which contains the\n     * second elements of the given arrays, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     */\n    var zip = baseRest(unzip);\n\n    /**\n     * This method is like `_.fromPairs` except that it accepts two arrays,\n     * one of property identifiers and one of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.4.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObject(['a', 'b'], [1, 2]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function zipObject(props, values) {\n      return baseZipObject(props || [], values || [], assignValue);\n    }\n\n    /**\n     * This method is like `_.zipObject` except that it supports property paths.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n     * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n     */\n    function zipObjectDeep(props, values) {\n      return baseZipObject(props || [], values || [], baseSet);\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts `iteratee` to specify\n     * how grouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  grouped values.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n     *   return a + b + c;\n     * });\n     * // => [111, 222]\n     */\n    var zipWith = baseRest(function(arrays) {\n      var length = arrays.length,\n          iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n      return unzipWith(arrays, iteratee);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n     * chain sequences enabled. The result of such sequences must be unwrapped\n     * with `_#value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Seq\n     * @param {*} value The value to wrap.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36 },\n     *   { 'user': 'fred',    'age': 40 },\n     *   { 'user': 'pebbles', 'age': 1 }\n     * ];\n     *\n     * var youngest = _\n     *   .chain(users)\n     *   .sortBy('age')\n     *   .map(function(o) {\n     *     return o.user + ' is ' + o.age;\n     *   })\n     *   .head()\n     *   .value();\n     * // => 'pebbles is 1'\n     */\n    function chain(value) {\n      var result = lodash(value);\n      result.__chain__ = true;\n      return result;\n    }\n\n    /**\n     * This method invokes `interceptor` and returns `value`. The interceptor\n     * is invoked with one argument; (value). The purpose of this method is to\n     * \"tap into\" a method chain sequence in order to modify intermediate results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * _([1, 2, 3])\n     *  .tap(function(array) {\n     *    // Mutate input array.\n     *    array.pop();\n     *  })\n     *  .reverse()\n     *  .value();\n     * // => [2, 1]\n     */\n    function tap(value, interceptor) {\n      interceptor(value);\n      return value;\n    }\n\n    /**\n     * This method is like `_.tap` except that it returns the result of `interceptor`.\n     * The purpose of this method is to \"pass thru\" values replacing intermediate\n     * results in a method chain sequence.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns the result of `interceptor`.\n     * @example\n     *\n     * _('  abc  ')\n     *  .chain()\n     *  .trim()\n     *  .thru(function(value) {\n     *    return [value];\n     *  })\n     *  .value();\n     * // => ['abc']\n     */\n    function thru(value, interceptor) {\n      return interceptor(value);\n    }\n\n    /**\n     * This method is the wrapper version of `_.at`.\n     *\n     * @name at\n     * @memberOf _\n     * @since 1.0.0\n     * @category Seq\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _(object).at(['a[0].b.c', 'a[1]']).value();\n     * // => [3, 4]\n     */\n    var wrapperAt = flatRest(function(paths) {\n      var length = paths.length,\n          start = length ? paths[0] : 0,\n          value = this.__wrapped__,\n          interceptor = function(object) { return baseAt(object, paths); };\n\n      if (length > 1 || this.__actions__.length ||\n          !(value instanceof LazyWrapper) || !isIndex(start)) {\n        return this.thru(interceptor);\n      }\n      value = value.slice(start, +start + (length ? 1 : 0));\n      value.__actions__.push({\n        'func': thru,\n        'args': [interceptor],\n        'thisArg': undefined\n      });\n      return new LodashWrapper(value, this.__chain__).thru(function(array) {\n        if (length && !array.length) {\n          array.push(undefined);\n        }\n        return array;\n      });\n    });\n\n    /**\n     * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n     *\n     * @name chain\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 40 }\n     * ];\n     *\n     * // A sequence without explicit chaining.\n     * _(users).head();\n     * // => { 'user': 'barney', 'age': 36 }\n     *\n     * // A sequence with explicit chaining.\n     * _(users)\n     *   .chain()\n     *   .head()\n     *   .pick('user')\n     *   .value();\n     * // => { 'user': 'barney' }\n     */\n    function wrapperChain() {\n      return chain(this);\n    }\n\n    /**\n     * Executes the chain sequence and returns the wrapped result.\n     *\n     * @name commit\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2];\n     * var wrapped = _(array).push(3);\n     *\n     * console.log(array);\n     * // => [1, 2]\n     *\n     * wrapped = wrapped.commit();\n     * console.log(array);\n     * // => [1, 2, 3]\n     *\n     * wrapped.last();\n     * // => 3\n     *\n     * console.log(array);\n     * // => [1, 2, 3]\n     */\n    function wrapperCommit() {\n      return new LodashWrapper(this.value(), this.__chain__);\n    }\n\n    /**\n     * Gets the next value on a wrapped object following the\n     * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n     *\n     * @name next\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the next iterator value.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 1 }\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 2 }\n     *\n     * wrapped.next();\n     * // => { 'done': true, 'value': undefined }\n     */\n    function wrapperNext() {\n      if (this.__values__ === undefined) {\n        this.__values__ = toArray(this.value());\n      }\n      var done = this.__index__ >= this.__values__.length,\n          value = done ? undefined : this.__values__[this.__index__++];\n\n      return { 'done': done, 'value': value };\n    }\n\n    /**\n     * Enables the wrapper to be iterable.\n     *\n     * @name Symbol.iterator\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the wrapper object.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped[Symbol.iterator]() === wrapped;\n     * // => true\n     *\n     * Array.from(wrapped);\n     * // => [1, 2]\n     */\n    function wrapperToIterator() {\n      return this;\n    }\n\n    /**\n     * Creates a clone of the chain sequence planting `value` as the wrapped value.\n     *\n     * @name plant\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @param {*} value The value to plant.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2]).map(square);\n     * var other = wrapped.plant([3, 4]);\n     *\n     * other.value();\n     * // => [9, 16]\n     *\n     * wrapped.value();\n     * // => [1, 4]\n     */\n    function wrapperPlant(value) {\n      var result,\n          parent = this;\n\n      while (parent instanceof baseLodash) {\n        var clone = wrapperClone(parent);\n        clone.__index__ = 0;\n        clone.__values__ = undefined;\n        if (result) {\n          previous.__wrapped__ = clone;\n        } else {\n          result = clone;\n        }\n        var previous = clone;\n        parent = parent.__wrapped__;\n      }\n      previous.__wrapped__ = value;\n      return result;\n    }\n\n    /**\n     * This method is the wrapper version of `_.reverse`.\n     *\n     * **Note:** This method mutates the wrapped array.\n     *\n     * @name reverse\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _(array).reverse().value()\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function wrapperReverse() {\n      var value = this.__wrapped__;\n      if (value instanceof LazyWrapper) {\n        var wrapped = value;\n        if (this.__actions__.length) {\n          wrapped = new LazyWrapper(this);\n        }\n        wrapped = wrapped.reverse();\n        wrapped.__actions__.push({\n          'func': thru,\n          'args': [reverse],\n          'thisArg': undefined\n        });\n        return new LodashWrapper(wrapped, this.__chain__);\n      }\n      return this.thru(reverse);\n    }\n\n    /**\n     * Executes the chain sequence to resolve the unwrapped value.\n     *\n     * @name value\n     * @memberOf _\n     * @since 0.1.0\n     * @alias toJSON, valueOf\n     * @category Seq\n     * @returns {*} Returns the resolved unwrapped value.\n     * @example\n     *\n     * _([1, 2, 3]).value();\n     * // => [1, 2, 3]\n     */\n    function wrapperValue() {\n      return baseWrapperValue(this.__wrapped__, this.__actions__);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the number of times the key was returned by `iteratee`. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.countBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': 1, '6': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.countBy(['one', 'two', 'three'], 'length');\n     * // => { '3': 2, '5': 1 }\n     */\n    var countBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        ++result[key];\n      } else {\n        baseAssignValue(result, key, 1);\n      }\n    });\n\n    /**\n     * Checks if `predicate` returns truthy for **all** elements of `collection`.\n     * Iteration is stopped once `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * **Note:** This method returns `true` for\n     * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n     * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n     * elements of empty collections.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.every([true, 1, null, 'yes'], Boolean);\n     * // => false\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.every(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.every(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.every(users, 'active');\n     * // => false\n     */\n    function every(collection, predicate, guard) {\n      var func = isArray(collection) ? arrayEvery : baseEvery;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning an array of all elements\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * **Note:** Unlike `_.remove`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.reject\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * _.filter(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, { 'age': 36, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.filter(users, 'active');\n     * // => objects for ['barney']\n     *\n     * // Combining several predicates using `_.overEvery` or `_.overSome`.\n     * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n     * // => objects for ['fred', 'barney']\n     */\n    function filter(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning the first element\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': true },\n     *   { 'user': 'fred',    'age': 40, 'active': false },\n     *   { 'user': 'pebbles', 'age': 1,  'active': true }\n     * ];\n     *\n     * _.find(users, function(o) { return o.age < 40; });\n     * // => object for 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.find(users, { 'age': 1, 'active': true });\n     * // => object for 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.find(users, ['active', false]);\n     * // => object for 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.find(users, 'active');\n     * // => object for 'barney'\n     */\n    var find = createFind(findIndex);\n\n    /**\n     * This method is like `_.find` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=collection.length-1] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * _.findLast([1, 2, 3, 4], function(n) {\n     *   return n % 2 == 1;\n     * });\n     * // => 3\n     */\n    var findLast = createFind(findLastIndex);\n\n    /**\n     * Creates a flattened array of values by running each element in `collection`\n     * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n     * with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [n, n];\n     * }\n     *\n     * _.flatMap([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMap(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), 1);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDeep([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMapDeep(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), INFINITY);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDepth([1, 2], duplicate, 2);\n     * // => [[1, 1], [2, 2]]\n     */\n    function flatMapDepth(collection, iteratee, depth) {\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(map(collection, iteratee), depth);\n    }\n\n    /**\n     * Iterates over elements of `collection` and invokes `iteratee` for each element.\n     * The iteratee is invoked with three arguments: (value, index|key, collection).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n     * property are iterated like arrays. To avoid this behavior use `_.forIn`\n     * or `_.forOwn` for object iteration.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias each\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEachRight\n     * @example\n     *\n     * _.forEach([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `1` then `2`.\n     *\n     * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forEach(collection, iteratee) {\n      var func = isArray(collection) ? arrayEach : baseEach;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forEach` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @alias eachRight\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEach\n     * @example\n     *\n     * _.forEachRight([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `2` then `1`.\n     */\n    function forEachRight(collection, iteratee) {\n      var func = isArray(collection) ? arrayEachRight : baseEachRight;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The order of grouped values\n     * is determined by the order they occur in `collection`. The corresponding\n     * value of each key is an array of elements responsible for generating the\n     * key. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': [4.2], '6': [6.1, 6.3] }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.groupBy(['one', 'two', 'three'], 'length');\n     * // => { '3': ['one', 'two'], '5': ['three'] }\n     */\n    var groupBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        result[key].push(value);\n      } else {\n        baseAssignValue(result, key, [value]);\n      }\n    });\n\n    /**\n     * Checks if `value` is in `collection`. If `collection` is a string, it's\n     * checked for a substring of `value`, otherwise\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * is used for equality comparisons. If `fromIndex` is negative, it's used as\n     * the offset from the end of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {boolean} Returns `true` if `value` is found, else `false`.\n     * @example\n     *\n     * _.includes([1, 2, 3], 1);\n     * // => true\n     *\n     * _.includes([1, 2, 3], 1, 2);\n     * // => false\n     *\n     * _.includes({ 'a': 1, 'b': 2 }, 1);\n     * // => true\n     *\n     * _.includes('abcd', 'bc');\n     * // => true\n     */\n    function includes(collection, value, fromIndex, guard) {\n      collection = isArrayLike(collection) ? collection : values(collection);\n      fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n      var length = collection.length;\n      if (fromIndex < 0) {\n        fromIndex = nativeMax(length + fromIndex, 0);\n      }\n      return isString(collection)\n        ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n        : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n    }\n\n    /**\n     * Invokes the method at `path` of each element in `collection`, returning\n     * an array of the results of each invoked method. Any additional arguments\n     * are provided to each invoked method. If `path` is a function, it's invoked\n     * for, and `this` bound to, each element in `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array|Function|string} path The path of the method to invoke or\n     *  the function invoked per iteration.\n     * @param {...*} [args] The arguments to invoke each method with.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n     * // => [[1, 5, 7], [1, 2, 3]]\n     *\n     * _.invokeMap([123, 456], String.prototype.split, '');\n     * // => [['1', '2', '3'], ['4', '5', '6']]\n     */\n    var invokeMap = baseRest(function(collection, path, args) {\n      var index = -1,\n          isFunc = typeof path == 'function',\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value) {\n        result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n      });\n      return result;\n    });\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the last element responsible for generating the key. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * var array = [\n     *   { 'dir': 'left', 'code': 97 },\n     *   { 'dir': 'right', 'code': 100 }\n     * ];\n     *\n     * _.keyBy(array, function(o) {\n     *   return String.fromCharCode(o.code);\n     * });\n     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n     *\n     * _.keyBy(array, 'dir');\n     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n     */\n    var keyBy = createAggregator(function(result, value, key) {\n      baseAssignValue(result, key, value);\n    });\n\n    /**\n     * Creates an array of values by running each element in `collection` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n     *\n     * The guarded methods are:\n     * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n     * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n     * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n     * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * _.map([4, 8], square);\n     * // => [16, 64]\n     *\n     * _.map({ 'a': 4, 'b': 8 }, square);\n     * // => [16, 64] (iteration order is not guaranteed)\n     *\n     * var users = [\n     *   { 'user': 'barney' },\n     *   { 'user': 'fred' }\n     * ];\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, 'user');\n     * // => ['barney', 'fred']\n     */\n    function map(collection, iteratee) {\n      var func = isArray(collection) ? arrayMap : baseMap;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.sortBy` except that it allows specifying the sort\n     * orders of the iteratees to sort by. If `orders` is unspecified, all values\n     * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n     * descending or \"asc\" for ascending sort order of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @param {string[]} [orders] The sort orders of `iteratees`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 34 },\n     *   { 'user': 'fred',   'age': 40 },\n     *   { 'user': 'barney', 'age': 36 }\n     * ];\n     *\n     * // Sort by `user` in ascending order and by `age` in descending order.\n     * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n     */\n    function orderBy(collection, iteratees, orders, guard) {\n      if (collection == null) {\n        return [];\n      }\n      if (!isArray(iteratees)) {\n        iteratees = iteratees == null ? [] : [iteratees];\n      }\n      orders = guard ? undefined : orders;\n      if (!isArray(orders)) {\n        orders = orders == null ? [] : [orders];\n      }\n      return baseOrderBy(collection, iteratees, orders);\n    }\n\n    /**\n     * Creates an array of elements split into two groups, the first of which\n     * contains elements `predicate` returns truthy for, the second of which\n     * contains elements `predicate` returns falsey for. The predicate is\n     * invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of grouped elements.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': false },\n     *   { 'user': 'fred',    'age': 40, 'active': true },\n     *   { 'user': 'pebbles', 'age': 1,  'active': false }\n     * ];\n     *\n     * _.partition(users, function(o) { return o.active; });\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.partition(users, { 'age': 1, 'active': false });\n     * // => objects for [['pebbles'], ['barney', 'fred']]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.partition(users, ['active', false]);\n     * // => objects for [['barney', 'pebbles'], ['fred']]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.partition(users, 'active');\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     */\n    var partition = createAggregator(function(result, value, key) {\n      result[key ? 0 : 1].push(value);\n    }, function() { return [[], []]; });\n\n    /**\n     * Reduces `collection` to a value which is the accumulated result of running\n     * each element in `collection` thru `iteratee`, where each successive\n     * invocation is supplied the return value of the previous. If `accumulator`\n     * is not given, the first element of `collection` is used as the initial\n     * value. The iteratee is invoked with four arguments:\n     * (accumulator, value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.reduce`, `_.reduceRight`, and `_.transform`.\n     *\n     * The guarded methods are:\n     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n     * and `sortBy`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduceRight\n     * @example\n     *\n     * _.reduce([1, 2], function(sum, n) {\n     *   return sum + n;\n     * }, 0);\n     * // => 3\n     *\n     * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     *   return result;\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n     */\n    function reduce(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduce : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n    }\n\n    /**\n     * This method is like `_.reduce` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduce\n     * @example\n     *\n     * var array = [[0, 1], [2, 3], [4, 5]];\n     *\n     * _.reduceRight(array, function(flattened, other) {\n     *   return flattened.concat(other);\n     * }, []);\n     * // => [4, 5, 2, 3, 0, 1]\n     */\n    function reduceRight(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduceRight : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n    }\n\n    /**\n     * The opposite of `_.filter`; this method returns the elements of `collection`\n     * that `predicate` does **not** return truthy for.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.filter\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': true }\n     * ];\n     *\n     * _.reject(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.reject(users, { 'age': 40, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.reject(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.reject(users, 'active');\n     * // => objects for ['barney']\n     */\n    function reject(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, negate(getIteratee(predicate, 3)));\n    }\n\n    /**\n     * Gets a random element from `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     * @example\n     *\n     * _.sample([1, 2, 3, 4]);\n     * // => 2\n     */\n    function sample(collection) {\n      var func = isArray(collection) ? arraySample : baseSample;\n      return func(collection);\n    }\n\n    /**\n     * Gets `n` random elements at unique keys from `collection` up to the\n     * size of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} [n=1] The number of elements to sample.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the random elements.\n     * @example\n     *\n     * _.sampleSize([1, 2, 3], 2);\n     * // => [3, 1]\n     *\n     * _.sampleSize([1, 2, 3], 4);\n     * // => [2, 3, 1]\n     */\n    function sampleSize(collection, n, guard) {\n      if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n      return func(collection, n);\n    }\n\n    /**\n     * Creates an array of shuffled values, using a version of the\n     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     * @example\n     *\n     * _.shuffle([1, 2, 3, 4]);\n     * // => [4, 1, 3, 2]\n     */\n    function shuffle(collection) {\n      var func = isArray(collection) ? arrayShuffle : baseShuffle;\n      return func(collection);\n    }\n\n    /**\n     * Gets the size of `collection` by returning its length for array-like\n     * values or the number of own enumerable string keyed properties for objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @returns {number} Returns the collection size.\n     * @example\n     *\n     * _.size([1, 2, 3]);\n     * // => 3\n     *\n     * _.size({ 'a': 1, 'b': 2 });\n     * // => 2\n     *\n     * _.size('pebbles');\n     * // => 7\n     */\n    function size(collection) {\n      if (collection == null) {\n        return 0;\n      }\n      if (isArrayLike(collection)) {\n        return isString(collection) ? stringSize(collection) : collection.length;\n      }\n      var tag = getTag(collection);\n      if (tag == mapTag || tag == setTag) {\n        return collection.size;\n      }\n      return baseKeys(collection).length;\n    }\n\n    /**\n     * Checks if `predicate` returns truthy for **any** element of `collection`.\n     * Iteration is stopped once `predicate` returns truthy. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.some([null, 0, 'yes', false], Boolean);\n     * // => true\n     *\n     * var users = [\n     *   { 'user': 'barney', 'active': true },\n     *   { 'user': 'fred',   'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.some(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.some(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.some(users, 'active');\n     * // => true\n     */\n    function some(collection, predicate, guard) {\n      var func = isArray(collection) ? arraySome : baseSome;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Creates an array of elements, sorted in ascending order by the results of\n     * running each element in a collection thru each iteratee. This method\n     * performs a stable sort, that is, it preserves the original sort order of\n     * equal elements. The iteratees are invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 30 },\n     *   { 'user': 'barney', 'age': 34 }\n     * ];\n     *\n     * _.sortBy(users, [function(o) { return o.user; }]);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n     *\n     * _.sortBy(users, ['user', 'age']);\n     * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n     */\n    var sortBy = baseRest(function(collection, iteratees) {\n      if (collection == null) {\n        return [];\n      }\n      var length = iteratees.length;\n      if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n        iteratees = [];\n      } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n        iteratees = [iteratees[0]];\n      }\n      return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Gets the timestamp of the number of milliseconds that have elapsed since\n     * the Unix epoch (1 January 1970 00:00:00 UTC).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Date\n     * @returns {number} Returns the timestamp.\n     * @example\n     *\n     * _.defer(function(stamp) {\n     *   console.log(_.now() - stamp);\n     * }, _.now());\n     * // => Logs the number of milliseconds it took for the deferred invocation.\n     */\n    var now = ctxNow || function() {\n      return root.Date.now();\n    };\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The opposite of `_.before`; this method creates a function that invokes\n     * `func` once it's called `n` or more times.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {number} n The number of calls before `func` is invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var saves = ['profile', 'settings'];\n     *\n     * var done = _.after(saves.length, function() {\n     *   console.log('done saving!');\n     * });\n     *\n     * _.forEach(saves, function(type) {\n     *   asyncSave({ 'type': type, 'complete': done });\n     * });\n     * // => Logs 'done saving!' after the two async saves have completed.\n     */\n    function after(n, func) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n < 1) {\n          return func.apply(this, arguments);\n        }\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func`, with up to `n` arguments,\n     * ignoring any additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @param {number} [n=func.length] The arity cap.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n     * // => [6, 8, 10]\n     */\n    function ary(func, n, guard) {\n      n = guard ? undefined : n;\n      n = (func && n == null) ? func.length : n;\n      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n    }\n\n    /**\n     * Creates a function that invokes `func`, with the `this` binding and arguments\n     * of the created function, while it's called less than `n` times. Subsequent\n     * calls to the created function return the result of the last `func` invocation.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {number} n The number of calls at which `func` is no longer invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * jQuery(element).on('click', _.before(5, addContactToList));\n     * // => Allows adding up to 4 contacts to the list.\n     */\n    function before(n, func) {\n      var result;\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n > 0) {\n          result = func.apply(this, arguments);\n        }\n        if (n <= 1) {\n          func = undefined;\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of `thisArg`\n     * and `partials` prepended to the arguments it receives.\n     *\n     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n     * property of bound functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to bind.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * function greet(greeting, punctuation) {\n     *   return greeting + ' ' + this.user + punctuation;\n     * }\n     *\n     * var object = { 'user': 'fred' };\n     *\n     * var bound = _.bind(greet, object, 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bind(greet, object, _, '!');\n     * bound('hi');\n     * // => 'hi fred!'\n     */\n    var bind = baseRest(function(func, thisArg, partials) {\n      var bitmask = WRAP_BIND_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bind));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(func, bitmask, thisArg, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes the method at `object[key]` with `partials`\n     * prepended to the arguments it receives.\n     *\n     * This method differs from `_.bind` by allowing bound functions to reference\n     * methods that may be redefined or don't yet exist. See\n     * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n     * for more details.\n     *\n     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Function\n     * @param {Object} object The object to invoke the method on.\n     * @param {string} key The key of the method.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * var object = {\n     *   'user': 'fred',\n     *   'greet': function(greeting, punctuation) {\n     *     return greeting + ' ' + this.user + punctuation;\n     *   }\n     * };\n     *\n     * var bound = _.bindKey(object, 'greet', 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * object.greet = function(greeting, punctuation) {\n     *   return greeting + 'ya ' + this.user + punctuation;\n     * };\n     *\n     * bound('!');\n     * // => 'hiya fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bindKey(object, 'greet', _, '!');\n     * bound('hi');\n     * // => 'hiya fred!'\n     */\n    var bindKey = baseRest(function(object, key, partials) {\n      var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bindKey));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(key, bitmask, object, partials, holders);\n    });\n\n    /**\n     * Creates a function that accepts arguments of `func` and either invokes\n     * `func` returning its result, if at least `arity` number of arguments have\n     * been provided, or returns a function that accepts the remaining `func`\n     * arguments, and so on. The arity of `func` may be specified if `func.length`\n     * is not sufficient.\n     *\n     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curry(abc);\n     *\n     * curried(1)(2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(1)(_, 3)(2);\n     * // => [1, 2, 3]\n     */\n    function curry(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curry.placeholder;\n      return result;\n    }\n\n    /**\n     * This method is like `_.curry` except that arguments are applied to `func`\n     * in the manner of `_.partialRight` instead of `_.partial`.\n     *\n     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curryRight(abc);\n     *\n     * curried(3)(2)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(2, 3)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(3)(1, _)(2);\n     * // => [1, 2, 3]\n     */\n    function curryRight(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curryRight.placeholder;\n      return result;\n    }\n\n    /**\n     * Creates a debounced function that delays invoking `func` until after `wait`\n     * milliseconds have elapsed since the last time the debounced function was\n     * invoked. The debounced function comes with a `cancel` method to cancel\n     * delayed `func` invocations and a `flush` method to immediately invoke them.\n     * Provide `options` to indicate whether `func` should be invoked on the\n     * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n     * with the last arguments provided to the debounced function. Subsequent\n     * calls to the debounced function return the result of the last `func`\n     * invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the debounced function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.debounce` and `_.throttle`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to debounce.\n     * @param {number} [wait=0] The number of milliseconds to delay.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=false]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {number} [options.maxWait]\n     *  The maximum time `func` is allowed to be delayed before it's invoked.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new debounced function.\n     * @example\n     *\n     * // Avoid costly calculations while the window size is in flux.\n     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n     *\n     * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n     * jQuery(element).on('click', _.debounce(sendMail, 300, {\n     *   'leading': true,\n     *   'trailing': false\n     * }));\n     *\n     * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n     * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n     * var source = new EventSource('/stream');\n     * jQuery(source).on('message', debounced);\n     *\n     * // Cancel the trailing debounced invocation.\n     * jQuery(window).on('popstate', debounced.cancel);\n     */\n    function debounce(func, wait, options) {\n      var lastArgs,\n          lastThis,\n          maxWait,\n          result,\n          timerId,\n          lastCallTime,\n          lastInvokeTime = 0,\n          leading = false,\n          maxing = false,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      wait = toNumber(wait) || 0;\n      if (isObject(options)) {\n        leading = !!options.leading;\n        maxing = 'maxWait' in options;\n        maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n\n      function invokeFunc(time) {\n        var args = lastArgs,\n            thisArg = lastThis;\n\n        lastArgs = lastThis = undefined;\n        lastInvokeTime = time;\n        result = func.apply(thisArg, args);\n        return result;\n      }\n\n      function leadingEdge(time) {\n        // Reset any `maxWait` timer.\n        lastInvokeTime = time;\n        // Start the timer for the trailing edge.\n        timerId = setTimeout(timerExpired, wait);\n        // Invoke the leading edge.\n        return leading ? invokeFunc(time) : result;\n      }\n\n      function remainingWait(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime,\n            timeWaiting = wait - timeSinceLastCall;\n\n        return maxing\n          ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n          : timeWaiting;\n      }\n\n      function shouldInvoke(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime;\n\n        // Either this is the first call, activity has stopped and we're at the\n        // trailing edge, the system time has gone backwards and we're treating\n        // it as the trailing edge, or we've hit the `maxWait` limit.\n        return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n          (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n      }\n\n      function timerExpired() {\n        var time = now();\n        if (shouldInvoke(time)) {\n          return trailingEdge(time);\n        }\n        // Restart the timer.\n        timerId = setTimeout(timerExpired, remainingWait(time));\n      }\n\n      function trailingEdge(time) {\n        timerId = undefined;\n\n        // Only invoke if we have `lastArgs` which means `func` has been\n        // debounced at least once.\n        if (trailing && lastArgs) {\n          return invokeFunc(time);\n        }\n        lastArgs = lastThis = undefined;\n        return result;\n      }\n\n      function cancel() {\n        if (timerId !== undefined) {\n          clearTimeout(timerId);\n        }\n        lastInvokeTime = 0;\n        lastArgs = lastCallTime = lastThis = timerId = undefined;\n      }\n\n      function flush() {\n        return timerId === undefined ? result : trailingEdge(now());\n      }\n\n      function debounced() {\n        var time = now(),\n            isInvoking = shouldInvoke(time);\n\n        lastArgs = arguments;\n        lastThis = this;\n        lastCallTime = time;\n\n        if (isInvoking) {\n          if (timerId === undefined) {\n            return leadingEdge(lastCallTime);\n          }\n          if (maxing) {\n            // Handle invocations in a tight loop.\n            clearTimeout(timerId);\n            timerId = setTimeout(timerExpired, wait);\n            return invokeFunc(lastCallTime);\n          }\n        }\n        if (timerId === undefined) {\n          timerId = setTimeout(timerExpired, wait);\n        }\n        return result;\n      }\n      debounced.cancel = cancel;\n      debounced.flush = flush;\n      return debounced;\n    }\n\n    /**\n     * Defers invoking the `func` until the current call stack has cleared. Any\n     * additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to defer.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.defer(function(text) {\n     *   console.log(text);\n     * }, 'deferred');\n     * // => Logs 'deferred' after one millisecond.\n     */\n    var defer = baseRest(function(func, args) {\n      return baseDelay(func, 1, args);\n    });\n\n    /**\n     * Invokes `func` after `wait` milliseconds. Any additional arguments are\n     * provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.delay(function(text) {\n     *   console.log(text);\n     * }, 1000, 'later');\n     * // => Logs 'later' after one second.\n     */\n    var delay = baseRest(function(func, wait, args) {\n      return baseDelay(func, toNumber(wait) || 0, args);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments reversed.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to flip arguments for.\n     * @returns {Function} Returns the new flipped function.\n     * @example\n     *\n     * var flipped = _.flip(function() {\n     *   return _.toArray(arguments);\n     * });\n     *\n     * flipped('a', 'b', 'c', 'd');\n     * // => ['d', 'c', 'b', 'a']\n     */\n    function flip(func) {\n      return createWrap(func, WRAP_FLIP_FLAG);\n    }\n\n    /**\n     * Creates a function that memoizes the result of `func`. If `resolver` is\n     * provided, it determines the cache key for storing the result based on the\n     * arguments provided to the memoized function. By default, the first argument\n     * provided to the memoized function is used as the map cache key. The `func`\n     * is invoked with the `this` binding of the memoized function.\n     *\n     * **Note:** The cache is exposed as the `cache` property on the memoized\n     * function. Its creation may be customized by replacing the `_.memoize.Cache`\n     * constructor with one whose instances implement the\n     * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n     * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to have its output memoized.\n     * @param {Function} [resolver] The function to resolve the cache key.\n     * @returns {Function} Returns the new memoized function.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     * var other = { 'c': 3, 'd': 4 };\n     *\n     * var values = _.memoize(_.values);\n     * values(object);\n     * // => [1, 2]\n     *\n     * values(other);\n     * // => [3, 4]\n     *\n     * object.a = 2;\n     * values(object);\n     * // => [1, 2]\n     *\n     * // Modify the result cache.\n     * values.cache.set(object, ['a', 'b']);\n     * values(object);\n     * // => ['a', 'b']\n     *\n     * // Replace `_.memoize.Cache`.\n     * _.memoize.Cache = WeakMap;\n     */\n    function memoize(func, resolver) {\n      if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var memoized = function() {\n        var args = arguments,\n            key = resolver ? resolver.apply(this, args) : args[0],\n            cache = memoized.cache;\n\n        if (cache.has(key)) {\n          return cache.get(key);\n        }\n        var result = func.apply(this, args);\n        memoized.cache = cache.set(key, result) || cache;\n        return result;\n      };\n      memoized.cache = new (memoize.Cache || MapCache);\n      return memoized;\n    }\n\n    // Expose `MapCache`.\n    memoize.Cache = MapCache;\n\n    /**\n     * Creates a function that negates the result of the predicate `func`. The\n     * `func` predicate is invoked with the `this` binding and arguments of the\n     * created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} predicate The predicate to negate.\n     * @returns {Function} Returns the new negated function.\n     * @example\n     *\n     * function isEven(n) {\n     *   return n % 2 == 0;\n     * }\n     *\n     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n     * // => [1, 3, 5]\n     */\n    function negate(predicate) {\n      if (typeof predicate != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return function() {\n        var args = arguments;\n        switch (args.length) {\n          case 0: return !predicate.call(this);\n          case 1: return !predicate.call(this, args[0]);\n          case 2: return !predicate.call(this, args[0], args[1]);\n          case 3: return !predicate.call(this, args[0], args[1], args[2]);\n        }\n        return !predicate.apply(this, args);\n      };\n    }\n\n    /**\n     * Creates a function that is restricted to invoking `func` once. Repeat calls\n     * to the function return the value of the first invocation. The `func` is\n     * invoked with the `this` binding and arguments of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var initialize = _.once(createApplication);\n     * initialize();\n     * initialize();\n     * // => `createApplication` is invoked once\n     */\n    function once(func) {\n      return before(2, func);\n    }\n\n    /**\n     * Creates a function that invokes `func` with its arguments transformed.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to wrap.\n     * @param {...(Function|Function[])} [transforms=[_.identity]]\n     *  The argument transforms.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * function doubled(n) {\n     *   return n * 2;\n     * }\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var func = _.overArgs(function(x, y) {\n     *   return [x, y];\n     * }, [square, doubled]);\n     *\n     * func(9, 3);\n     * // => [81, 6]\n     *\n     * func(10, 5);\n     * // => [100, 10]\n     */\n    var overArgs = castRest(function(func, transforms) {\n      transforms = (transforms.length == 1 && isArray(transforms[0]))\n        ? arrayMap(transforms[0], baseUnary(getIteratee()))\n        : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n      var funcsLength = transforms.length;\n      return baseRest(function(args) {\n        var index = -1,\n            length = nativeMin(args.length, funcsLength);\n\n        while (++index < length) {\n          args[index] = transforms[index].call(this, args[index]);\n        }\n        return apply(func, this, args);\n      });\n    });\n\n    /**\n     * Creates a function that invokes `func` with `partials` prepended to the\n     * arguments it receives. This method is like `_.bind` except it does **not**\n     * alter the `this` binding.\n     *\n     * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.2.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var sayHelloTo = _.partial(greet, 'hello');\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     *\n     * // Partially applied with placeholders.\n     * var greetFred = _.partial(greet, _, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     */\n    var partial = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partial));\n      return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * This method is like `_.partial` except that partially applied arguments\n     * are appended to the arguments it receives.\n     *\n     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var greetFred = _.partialRight(greet, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     *\n     * // Partially applied with placeholders.\n     * var sayHelloTo = _.partialRight(greet, 'hello', _);\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     */\n    var partialRight = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partialRight));\n      return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments arranged according\n     * to the specified `indexes` where the argument value at the first index is\n     * provided as the first argument, the argument value at the second index is\n     * provided as the second argument, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to rearrange arguments for.\n     * @param {...(number|number[])} indexes The arranged argument indexes.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var rearged = _.rearg(function(a, b, c) {\n     *   return [a, b, c];\n     * }, [2, 0, 1]);\n     *\n     * rearged('b', 'c', 'a')\n     * // => ['a', 'b', 'c']\n     */\n    var rearg = flatRest(function(func, indexes) {\n      return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n    });\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * created function and arguments from `start` and beyond provided as\n     * an array.\n     *\n     * **Note:** This method is based on the\n     * [rest parameter](https://mdn.io/rest_parameters).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.rest(function(what, names) {\n     *   return what + ' ' + _.initial(names).join(', ') +\n     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n     * });\n     *\n     * say('hello', 'fred', 'barney', 'pebbles');\n     * // => 'hello fred, barney, & pebbles'\n     */\n    function rest(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start === undefined ? start : toInteger(start);\n      return baseRest(func, start);\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * create function and an array of arguments much like\n     * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n     *\n     * **Note:** This method is based on the\n     * [spread operator](https://mdn.io/spread_operator).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Function\n     * @param {Function} func The function to spread arguments over.\n     * @param {number} [start=0] The start position of the spread.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.spread(function(who, what) {\n     *   return who + ' says ' + what;\n     * });\n     *\n     * say(['fred', 'hello']);\n     * // => 'fred says hello'\n     *\n     * var numbers = Promise.all([\n     *   Promise.resolve(40),\n     *   Promise.resolve(36)\n     * ]);\n     *\n     * numbers.then(_.spread(function(x, y) {\n     *   return x + y;\n     * }));\n     * // => a Promise of 76\n     */\n    function spread(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start == null ? 0 : nativeMax(toInteger(start), 0);\n      return baseRest(function(args) {\n        var array = args[start],\n            otherArgs = castSlice(args, 0, start);\n\n        if (array) {\n          arrayPush(otherArgs, array);\n        }\n        return apply(func, this, otherArgs);\n      });\n    }\n\n    /**\n     * Creates a throttled function that only invokes `func` at most once per\n     * every `wait` milliseconds. The throttled function comes with a `cancel`\n     * method to cancel delayed `func` invocations and a `flush` method to\n     * immediately invoke them. Provide `options` to indicate whether `func`\n     * should be invoked on the leading and/or trailing edge of the `wait`\n     * timeout. The `func` is invoked with the last arguments provided to the\n     * throttled function. Subsequent calls to the throttled function return the\n     * result of the last `func` invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the throttled function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.throttle` and `_.debounce`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to throttle.\n     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=true]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new throttled function.\n     * @example\n     *\n     * // Avoid excessively updating the position while scrolling.\n     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n     *\n     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n     * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n     * jQuery(element).on('click', throttled);\n     *\n     * // Cancel the trailing throttled invocation.\n     * jQuery(window).on('popstate', throttled.cancel);\n     */\n    function throttle(func, wait, options) {\n      var leading = true,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      if (isObject(options)) {\n        leading = 'leading' in options ? !!options.leading : leading;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n      return debounce(func, wait, {\n        'leading': leading,\n        'maxWait': wait,\n        'trailing': trailing\n      });\n    }\n\n    /**\n     * Creates a function that accepts up to one argument, ignoring any\n     * additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.unary(parseInt));\n     * // => [6, 8, 10]\n     */\n    function unary(func) {\n      return ary(func, 1);\n    }\n\n    /**\n     * Creates a function that provides `value` to `wrapper` as its first\n     * argument. Any additional arguments provided to the function are appended\n     * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n     * binding of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {*} value The value to wrap.\n     * @param {Function} [wrapper=identity] The wrapper function.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var p = _.wrap(_.escape, function(func, text) {\n     *   return '<p>' + func(text) + '</p>';\n     * });\n     *\n     * p('fred, barney, & pebbles');\n     * // => '<p>fred, barney, &amp; pebbles</p>'\n     */\n    function wrap(value, wrapper) {\n      return partial(castFunction(wrapper), value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Casts `value` as an array if it's not one.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Lang\n     * @param {*} value The value to inspect.\n     * @returns {Array} Returns the cast array.\n     * @example\n     *\n     * _.castArray(1);\n     * // => [1]\n     *\n     * _.castArray({ 'a': 1 });\n     * // => [{ 'a': 1 }]\n     *\n     * _.castArray('abc');\n     * // => ['abc']\n     *\n     * _.castArray(null);\n     * // => [null]\n     *\n     * _.castArray(undefined);\n     * // => [undefined]\n     *\n     * _.castArray();\n     * // => []\n     *\n     * var array = [1, 2, 3];\n     * console.log(_.castArray(array) === array);\n     * // => true\n     */\n    function castArray() {\n      if (!arguments.length) {\n        return [];\n      }\n      var value = arguments[0];\n      return isArray(value) ? value : [value];\n    }\n\n    /**\n     * Creates a shallow clone of `value`.\n     *\n     * **Note:** This method is loosely based on the\n     * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n     * and supports cloning arrays, array buffers, booleans, date objects, maps,\n     * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n     * arrays. The own enumerable properties of `arguments` objects are cloned\n     * as plain objects. An empty object is returned for uncloneable values such\n     * as error objects, functions, DOM nodes, and WeakMaps.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeep\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var shallow = _.clone(objects);\n     * console.log(shallow[0] === objects[0]);\n     * // => true\n     */\n    function clone(value) {\n      return baseClone(value, CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.clone` except that it accepts `customizer` which\n     * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n     * cloning is handled by the method instead. The `customizer` is invoked with\n     * up to four arguments; (value [, index|key, object, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeepWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(false);\n     *   }\n     * }\n     *\n     * var el = _.cloneWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 0\n     */\n    function cloneWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * This method is like `_.clone` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.clone\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var deep = _.cloneDeep(objects);\n     * console.log(deep[0] === objects[0]);\n     * // => false\n     */\n    function cloneDeep(value) {\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.cloneWith` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.cloneWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(true);\n     *   }\n     * }\n     *\n     * var el = _.cloneDeepWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 20\n     */\n    function cloneDeepWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * Checks if `object` conforms to `source` by invoking the predicate\n     * properties of `source` with the corresponding property values of `object`.\n     *\n     * **Note:** This method is equivalent to `_.conforms` when `source` is\n     * partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n     * // => true\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n     * // => false\n     */\n    function conformsTo(object, source) {\n      return source == null || baseConformsTo(object, source, keys(source));\n    }\n\n    /**\n     * Performs a\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * comparison between two values to determine if they are equivalent.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.eq(object, object);\n     * // => true\n     *\n     * _.eq(object, other);\n     * // => false\n     *\n     * _.eq('a', 'a');\n     * // => true\n     *\n     * _.eq('a', Object('a'));\n     * // => false\n     *\n     * _.eq(NaN, NaN);\n     * // => true\n     */\n    function eq(value, other) {\n      return value === other || (value !== value && other !== other);\n    }\n\n    /**\n     * Checks if `value` is greater than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     * @see _.lt\n     * @example\n     *\n     * _.gt(3, 1);\n     * // => true\n     *\n     * _.gt(3, 3);\n     * // => false\n     *\n     * _.gt(1, 3);\n     * // => false\n     */\n    var gt = createRelationalOperation(baseGt);\n\n    /**\n     * Checks if `value` is greater than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than or equal to\n     *  `other`, else `false`.\n     * @see _.lte\n     * @example\n     *\n     * _.gte(3, 1);\n     * // => true\n     *\n     * _.gte(3, 3);\n     * // => true\n     *\n     * _.gte(1, 3);\n     * // => false\n     */\n    var gte = createRelationalOperation(function(value, other) {\n      return value >= other;\n    });\n\n    /**\n     * Checks if `value` is likely an `arguments` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArguments(function() { return arguments; }());\n     * // => true\n     *\n     * _.isArguments([1, 2, 3]);\n     * // => false\n     */\n    var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n      return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n        !propertyIsEnumerable.call(value, 'callee');\n    };\n\n    /**\n     * Checks if `value` is classified as an `Array` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n     * @example\n     *\n     * _.isArray([1, 2, 3]);\n     * // => true\n     *\n     * _.isArray(document.body.children);\n     * // => false\n     *\n     * _.isArray('abc');\n     * // => false\n     *\n     * _.isArray(_.noop);\n     * // => false\n     */\n    var isArray = Array.isArray;\n\n    /**\n     * Checks if `value` is classified as an `ArrayBuffer` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     * @example\n     *\n     * _.isArrayBuffer(new ArrayBuffer(2));\n     * // => true\n     *\n     * _.isArrayBuffer(new Array(2));\n     * // => false\n     */\n    var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n    /**\n     * Checks if `value` is array-like. A value is considered array-like if it's\n     * not a function and has a `value.length` that's an integer greater than or\n     * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n     * @example\n     *\n     * _.isArrayLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLike(document.body.children);\n     * // => true\n     *\n     * _.isArrayLike('abc');\n     * // => true\n     *\n     * _.isArrayLike(_.noop);\n     * // => false\n     */\n    function isArrayLike(value) {\n      return value != null && isLength(value.length) && !isFunction(value);\n    }\n\n    /**\n     * This method is like `_.isArrayLike` except that it also checks if `value`\n     * is an object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array-like object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArrayLikeObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLikeObject(document.body.children);\n     * // => true\n     *\n     * _.isArrayLikeObject('abc');\n     * // => false\n     *\n     * _.isArrayLikeObject(_.noop);\n     * // => false\n     */\n    function isArrayLikeObject(value) {\n      return isObjectLike(value) && isArrayLike(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a boolean primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n     * @example\n     *\n     * _.isBoolean(false);\n     * // => true\n     *\n     * _.isBoolean(null);\n     * // => false\n     */\n    function isBoolean(value) {\n      return value === true || value === false ||\n        (isObjectLike(value) && baseGetTag(value) == boolTag);\n    }\n\n    /**\n     * Checks if `value` is a buffer.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n     * @example\n     *\n     * _.isBuffer(new Buffer(2));\n     * // => true\n     *\n     * _.isBuffer(new Uint8Array(2));\n     * // => false\n     */\n    var isBuffer = nativeIsBuffer || stubFalse;\n\n    /**\n     * Checks if `value` is classified as a `Date` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     * @example\n     *\n     * _.isDate(new Date);\n     * // => true\n     *\n     * _.isDate('Mon April 23 2012');\n     * // => false\n     */\n    var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n    /**\n     * Checks if `value` is likely a DOM element.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n     * @example\n     *\n     * _.isElement(document.body);\n     * // => true\n     *\n     * _.isElement('<body>');\n     * // => false\n     */\n    function isElement(value) {\n      return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n    }\n\n    /**\n     * Checks if `value` is an empty object, collection, map, or set.\n     *\n     * Objects are considered empty if they have no own enumerable string keyed\n     * properties.\n     *\n     * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n     * jQuery-like collections are considered empty if they have a `length` of `0`.\n     * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n     * @example\n     *\n     * _.isEmpty(null);\n     * // => true\n     *\n     * _.isEmpty(true);\n     * // => true\n     *\n     * _.isEmpty(1);\n     * // => true\n     *\n     * _.isEmpty([1, 2, 3]);\n     * // => false\n     *\n     * _.isEmpty({ 'a': 1 });\n     * // => false\n     */\n    function isEmpty(value) {\n      if (value == null) {\n        return true;\n      }\n      if (isArrayLike(value) &&\n          (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n            isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n        return !value.length;\n      }\n      var tag = getTag(value);\n      if (tag == mapTag || tag == setTag) {\n        return !value.size;\n      }\n      if (isPrototype(value)) {\n        return !baseKeys(value).length;\n      }\n      for (var key in value) {\n        if (hasOwnProperty.call(value, key)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * Performs a deep comparison between two values to determine if they are\n     * equivalent.\n     *\n     * **Note:** This method supports comparing arrays, array buffers, booleans,\n     * date objects, error objects, maps, numbers, `Object` objects, regexes,\n     * sets, strings, symbols, and typed arrays. `Object` objects are compared\n     * by their own, not inherited, enumerable properties. Functions and DOM\n     * nodes are compared by strict equality, i.e. `===`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.isEqual(object, other);\n     * // => true\n     *\n     * object === other;\n     * // => false\n     */\n    function isEqual(value, other) {\n      return baseIsEqual(value, other);\n    }\n\n    /**\n     * This method is like `_.isEqual` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with up to\n     * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, othValue) {\n     *   if (isGreeting(objValue) && isGreeting(othValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var array = ['hello', 'goodbye'];\n     * var other = ['hi', 'goodbye'];\n     *\n     * _.isEqualWith(array, other, customizer);\n     * // => true\n     */\n    function isEqualWith(value, other, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      var result = customizer ? customizer(value, other) : undefined;\n      return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n    }\n\n    /**\n     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n     * `SyntaxError`, `TypeError`, or `URIError` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n     * @example\n     *\n     * _.isError(new Error);\n     * // => true\n     *\n     * _.isError(Error);\n     * // => false\n     */\n    function isError(value) {\n      if (!isObjectLike(value)) {\n        return false;\n      }\n      var tag = baseGetTag(value);\n      return tag == errorTag || tag == domExcTag ||\n        (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n    }\n\n    /**\n     * Checks if `value` is a finite primitive number.\n     *\n     * **Note:** This method is based on\n     * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n     * @example\n     *\n     * _.isFinite(3);\n     * // => true\n     *\n     * _.isFinite(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isFinite(Infinity);\n     * // => false\n     *\n     * _.isFinite('3');\n     * // => false\n     */\n    function isFinite(value) {\n      return typeof value == 'number' && nativeIsFinite(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Function` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n     * @example\n     *\n     * _.isFunction(_);\n     * // => true\n     *\n     * _.isFunction(/abc/);\n     * // => false\n     */\n    function isFunction(value) {\n      if (!isObject(value)) {\n        return false;\n      }\n      // The use of `Object#toString` avoids issues with the `typeof` operator\n      // in Safari 9 which returns 'object' for typed arrays and other constructors.\n      var tag = baseGetTag(value);\n      return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n    }\n\n    /**\n     * Checks if `value` is an integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n     * @example\n     *\n     * _.isInteger(3);\n     * // => true\n     *\n     * _.isInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isInteger(Infinity);\n     * // => false\n     *\n     * _.isInteger('3');\n     * // => false\n     */\n    function isInteger(value) {\n      return typeof value == 'number' && value == toInteger(value);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like length.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n     * @example\n     *\n     * _.isLength(3);\n     * // => true\n     *\n     * _.isLength(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isLength(Infinity);\n     * // => false\n     *\n     * _.isLength('3');\n     * // => false\n     */\n    function isLength(value) {\n      return typeof value == 'number' &&\n        value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is the\n     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n     * @example\n     *\n     * _.isObject({});\n     * // => true\n     *\n     * _.isObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isObject(_.noop);\n     * // => true\n     *\n     * _.isObject(null);\n     * // => false\n     */\n    function isObject(value) {\n      var type = typeof value;\n      return value != null && (type == 'object' || type == 'function');\n    }\n\n    /**\n     * Checks if `value` is object-like. A value is object-like if it's not `null`\n     * and has a `typeof` result of \"object\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n     * @example\n     *\n     * _.isObjectLike({});\n     * // => true\n     *\n     * _.isObjectLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isObjectLike(_.noop);\n     * // => false\n     *\n     * _.isObjectLike(null);\n     * // => false\n     */\n    function isObjectLike(value) {\n      return value != null && typeof value == 'object';\n    }\n\n    /**\n     * Checks if `value` is classified as a `Map` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     * @example\n     *\n     * _.isMap(new Map);\n     * // => true\n     *\n     * _.isMap(new WeakMap);\n     * // => false\n     */\n    var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n    /**\n     * Performs a partial deep comparison between `object` and `source` to\n     * determine if `object` contains equivalent property values.\n     *\n     * **Note:** This method is equivalent to `_.matches` when `source` is\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.isMatch(object, { 'b': 2 });\n     * // => true\n     *\n     * _.isMatch(object, { 'b': 1 });\n     * // => false\n     */\n    function isMatch(object, source) {\n      return object === source || baseIsMatch(object, source, getMatchData(source));\n    }\n\n    /**\n     * This method is like `_.isMatch` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with five\n     * arguments: (objValue, srcValue, index|key, object, source).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (isGreeting(objValue) && isGreeting(srcValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var object = { 'greeting': 'hello' };\n     * var source = { 'greeting': 'hi' };\n     *\n     * _.isMatchWith(object, source, customizer);\n     * // => true\n     */\n    function isMatchWith(object, source, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseIsMatch(object, source, getMatchData(source), customizer);\n    }\n\n    /**\n     * Checks if `value` is `NaN`.\n     *\n     * **Note:** This method is based on\n     * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n     * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n     * `undefined` and other non-number values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n     * @example\n     *\n     * _.isNaN(NaN);\n     * // => true\n     *\n     * _.isNaN(new Number(NaN));\n     * // => true\n     *\n     * isNaN(undefined);\n     * // => true\n     *\n     * _.isNaN(undefined);\n     * // => false\n     */\n    function isNaN(value) {\n      // An `NaN` primitive is the only value that is not equal to itself.\n      // Perform the `toStringTag` check first to avoid errors with some\n      // ActiveX objects in IE.\n      return isNumber(value) && value != +value;\n    }\n\n    /**\n     * Checks if `value` is a pristine native function.\n     *\n     * **Note:** This method can't reliably detect native functions in the presence\n     * of the core-js package because core-js circumvents this kind of detection.\n     * Despite multiple requests, the core-js maintainer has made it clear: any\n     * attempt to fix the detection will be obstructed. As a result, we're left\n     * with little choice but to throw an error. Unfortunately, this also affects\n     * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n     * which rely on core-js.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     * @example\n     *\n     * _.isNative(Array.prototype.push);\n     * // => true\n     *\n     * _.isNative(_);\n     * // => false\n     */\n    function isNative(value) {\n      if (isMaskable(value)) {\n        throw new Error(CORE_ERROR_TEXT);\n      }\n      return baseIsNative(value);\n    }\n\n    /**\n     * Checks if `value` is `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n     * @example\n     *\n     * _.isNull(null);\n     * // => true\n     *\n     * _.isNull(void 0);\n     * // => false\n     */\n    function isNull(value) {\n      return value === null;\n    }\n\n    /**\n     * Checks if `value` is `null` or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n     * @example\n     *\n     * _.isNil(null);\n     * // => true\n     *\n     * _.isNil(void 0);\n     * // => true\n     *\n     * _.isNil(NaN);\n     * // => false\n     */\n    function isNil(value) {\n      return value == null;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Number` primitive or object.\n     *\n     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n     * classified as numbers, use the `_.isFinite` method.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n     * @example\n     *\n     * _.isNumber(3);\n     * // => true\n     *\n     * _.isNumber(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isNumber(Infinity);\n     * // => true\n     *\n     * _.isNumber('3');\n     * // => false\n     */\n    function isNumber(value) {\n      return typeof value == 'number' ||\n        (isObjectLike(value) && baseGetTag(value) == numberTag);\n    }\n\n    /**\n     * Checks if `value` is a plain object, that is, an object created by the\n     * `Object` constructor or one with a `[[Prototype]]` of `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.8.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * _.isPlainObject(new Foo);\n     * // => false\n     *\n     * _.isPlainObject([1, 2, 3]);\n     * // => false\n     *\n     * _.isPlainObject({ 'x': 0, 'y': 0 });\n     * // => true\n     *\n     * _.isPlainObject(Object.create(null));\n     * // => true\n     */\n    function isPlainObject(value) {\n      if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n        return false;\n      }\n      var proto = getPrototype(value);\n      if (proto === null) {\n        return true;\n      }\n      var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n      return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n        funcToString.call(Ctor) == objectCtorString;\n    }\n\n    /**\n     * Checks if `value` is classified as a `RegExp` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     * @example\n     *\n     * _.isRegExp(/abc/);\n     * // => true\n     *\n     * _.isRegExp('/abc/');\n     * // => false\n     */\n    var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n    /**\n     * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n     * double precision number which isn't the result of a rounded unsafe integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n     * @example\n     *\n     * _.isSafeInteger(3);\n     * // => true\n     *\n     * _.isSafeInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isSafeInteger(Infinity);\n     * // => false\n     *\n     * _.isSafeInteger('3');\n     * // => false\n     */\n    function isSafeInteger(value) {\n      return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Set` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     * @example\n     *\n     * _.isSet(new Set);\n     * // => true\n     *\n     * _.isSet(new WeakSet);\n     * // => false\n     */\n    var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n    /**\n     * Checks if `value` is classified as a `String` primitive or object.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n     * @example\n     *\n     * _.isString('abc');\n     * // => true\n     *\n     * _.isString(1);\n     * // => false\n     */\n    function isString(value) {\n      return typeof value == 'string' ||\n        (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Symbol` primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n     * @example\n     *\n     * _.isSymbol(Symbol.iterator);\n     * // => true\n     *\n     * _.isSymbol('abc');\n     * // => false\n     */\n    function isSymbol(value) {\n      return typeof value == 'symbol' ||\n        (isObjectLike(value) && baseGetTag(value) == symbolTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a typed array.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     * @example\n     *\n     * _.isTypedArray(new Uint8Array);\n     * // => true\n     *\n     * _.isTypedArray([]);\n     * // => false\n     */\n    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n    /**\n     * Checks if `value` is `undefined`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n     * @example\n     *\n     * _.isUndefined(void 0);\n     * // => true\n     *\n     * _.isUndefined(null);\n     * // => false\n     */\n    function isUndefined(value) {\n      return value === undefined;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakMap` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n     * @example\n     *\n     * _.isWeakMap(new WeakMap);\n     * // => true\n     *\n     * _.isWeakMap(new Map);\n     * // => false\n     */\n    function isWeakMap(value) {\n      return isObjectLike(value) && getTag(value) == weakMapTag;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakSet` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n     * @example\n     *\n     * _.isWeakSet(new WeakSet);\n     * // => true\n     *\n     * _.isWeakSet(new Set);\n     * // => false\n     */\n    function isWeakSet(value) {\n      return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n    }\n\n    /**\n     * Checks if `value` is less than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     * @see _.gt\n     * @example\n     *\n     * _.lt(1, 3);\n     * // => true\n     *\n     * _.lt(3, 3);\n     * // => false\n     *\n     * _.lt(3, 1);\n     * // => false\n     */\n    var lt = createRelationalOperation(baseLt);\n\n    /**\n     * Checks if `value` is less than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than or equal to\n     *  `other`, else `false`.\n     * @see _.gte\n     * @example\n     *\n     * _.lte(1, 3);\n     * // => true\n     *\n     * _.lte(3, 3);\n     * // => true\n     *\n     * _.lte(3, 1);\n     * // => false\n     */\n    var lte = createRelationalOperation(function(value, other) {\n      return value <= other;\n    });\n\n    /**\n     * Converts `value` to an array.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the converted array.\n     * @example\n     *\n     * _.toArray({ 'a': 1, 'b': 2 });\n     * // => [1, 2]\n     *\n     * _.toArray('abc');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toArray(1);\n     * // => []\n     *\n     * _.toArray(null);\n     * // => []\n     */\n    function toArray(value) {\n      if (!value) {\n        return [];\n      }\n      if (isArrayLike(value)) {\n        return isString(value) ? stringToArray(value) : copyArray(value);\n      }\n      if (symIterator && value[symIterator]) {\n        return iteratorToArray(value[symIterator]());\n      }\n      var tag = getTag(value),\n          func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n      return func(value);\n    }\n\n    /**\n     * Converts `value` to a finite number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.12.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted number.\n     * @example\n     *\n     * _.toFinite(3.2);\n     * // => 3.2\n     *\n     * _.toFinite(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toFinite(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toFinite('3.2');\n     * // => 3.2\n     */\n    function toFinite(value) {\n      if (!value) {\n        return value === 0 ? value : 0;\n      }\n      value = toNumber(value);\n      if (value === INFINITY || value === -INFINITY) {\n        var sign = (value < 0 ? -1 : 1);\n        return sign * MAX_INTEGER;\n      }\n      return value === value ? value : 0;\n    }\n\n    /**\n     * Converts `value` to an integer.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toInteger(3.2);\n     * // => 3\n     *\n     * _.toInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toInteger(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toInteger('3.2');\n     * // => 3\n     */\n    function toInteger(value) {\n      var result = toFinite(value),\n          remainder = result % 1;\n\n      return result === result ? (remainder ? result - remainder : result) : 0;\n    }\n\n    /**\n     * Converts `value` to an integer suitable for use as the length of an\n     * array-like object.\n     *\n     * **Note:** This method is based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toLength(3.2);\n     * // => 3\n     *\n     * _.toLength(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toLength(Infinity);\n     * // => 4294967295\n     *\n     * _.toLength('3.2');\n     * // => 3\n     */\n    function toLength(value) {\n      return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n    }\n\n    /**\n     * Converts `value` to a number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     * @example\n     *\n     * _.toNumber(3.2);\n     * // => 3.2\n     *\n     * _.toNumber(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toNumber(Infinity);\n     * // => Infinity\n     *\n     * _.toNumber('3.2');\n     * // => 3.2\n     */\n    function toNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      if (isObject(value)) {\n        var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n        value = isObject(other) ? (other + '') : other;\n      }\n      if (typeof value != 'string') {\n        return value === 0 ? value : +value;\n      }\n      value = baseTrim(value);\n      var isBinary = reIsBinary.test(value);\n      return (isBinary || reIsOctal.test(value))\n        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n        : (reIsBadHex.test(value) ? NAN : +value);\n    }\n\n    /**\n     * Converts `value` to a plain object flattening inherited enumerable string\n     * keyed properties of `value` to own properties of the plain object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Object} Returns the converted plain object.\n     * @example\n     *\n     * function Foo() {\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.assign({ 'a': 1 }, new Foo);\n     * // => { 'a': 1, 'b': 2 }\n     *\n     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n     * // => { 'a': 1, 'b': 2, 'c': 3 }\n     */\n    function toPlainObject(value) {\n      return copyObject(value, keysIn(value));\n    }\n\n    /**\n     * Converts `value` to a safe integer. A safe integer can be compared and\n     * represented correctly.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toSafeInteger(3.2);\n     * // => 3\n     *\n     * _.toSafeInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toSafeInteger(Infinity);\n     * // => 9007199254740991\n     *\n     * _.toSafeInteger('3.2');\n     * // => 3\n     */\n    function toSafeInteger(value) {\n      return value\n        ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n        : (value === 0 ? value : 0);\n    }\n\n    /**\n     * Converts `value` to a string. An empty string is returned for `null`\n     * and `undefined` values. The sign of `-0` is preserved.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.toString(null);\n     * // => ''\n     *\n     * _.toString(-0);\n     * // => '-0'\n     *\n     * _.toString([1, 2, 3]);\n     * // => '1,2,3'\n     */\n    function toString(value) {\n      return value == null ? '' : baseToString(value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Assigns own enumerable string keyed properties of source objects to the\n     * destination object. Source objects are applied from left to right.\n     * Subsequent sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object` and is loosely based on\n     * [`Object.assign`](https://mdn.io/Object/assign).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assignIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assign({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var assign = createAssigner(function(object, source) {\n      if (isPrototype(source) || isArrayLike(source)) {\n        copyObject(source, keys(source), object);\n        return;\n      }\n      for (var key in source) {\n        if (hasOwnProperty.call(source, key)) {\n          assignValue(object, key, source[key]);\n        }\n      }\n    });\n\n    /**\n     * This method is like `_.assign` except that it iterates over own and\n     * inherited source properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extend\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assign\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n     */\n    var assignIn = createAssigner(function(object, source) {\n      copyObject(source, keysIn(source), object);\n    });\n\n    /**\n     * This method is like `_.assignIn` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extendWith\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignInWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keysIn(source), object, customizer);\n    });\n\n    /**\n     * This method is like `_.assign` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignInWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keys(source), object, customizer);\n    });\n\n    /**\n     * Creates an array of values corresponding to `paths` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Array} Returns the picked values.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _.at(object, ['a[0].b.c', 'a[1]']);\n     * // => [3, 4]\n     */\n    var at = flatRest(baseAt);\n\n    /**\n     * Creates an object that inherits from the `prototype` object. If a\n     * `properties` object is given, its own enumerable string keyed properties\n     * are assigned to the created object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Object\n     * @param {Object} prototype The object to inherit from.\n     * @param {Object} [properties] The properties to assign to the object.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * function Shape() {\n     *   this.x = 0;\n     *   this.y = 0;\n     * }\n     *\n     * function Circle() {\n     *   Shape.call(this);\n     * }\n     *\n     * Circle.prototype = _.create(Shape.prototype, {\n     *   'constructor': Circle\n     * });\n     *\n     * var circle = new Circle;\n     * circle instanceof Circle;\n     * // => true\n     *\n     * circle instanceof Shape;\n     * // => true\n     */\n    function create(prototype, properties) {\n      var result = baseCreate(prototype);\n      return properties == null ? result : baseAssign(result, properties);\n    }\n\n    /**\n     * Assigns own and inherited enumerable string keyed properties of source\n     * objects to the destination object for all destination properties that\n     * resolve to `undefined`. Source objects are applied from left to right.\n     * Once a property is set, additional values of the same property are ignored.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaultsDeep\n     * @example\n     *\n     * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var defaults = baseRest(function(object, sources) {\n      object = Object(object);\n\n      var index = -1;\n      var length = sources.length;\n      var guard = length > 2 ? sources[2] : undefined;\n\n      if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n        length = 1;\n      }\n\n      while (++index < length) {\n        var source = sources[index];\n        var props = keysIn(source);\n        var propsIndex = -1;\n        var propsLength = props.length;\n\n        while (++propsIndex < propsLength) {\n          var key = props[propsIndex];\n          var value = object[key];\n\n          if (value === undefined ||\n              (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n            object[key] = source[key];\n          }\n        }\n      }\n\n      return object;\n    });\n\n    /**\n     * This method is like `_.defaults` except that it recursively assigns\n     * default properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaults\n     * @example\n     *\n     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n     * // => { 'a': { 'b': 2, 'c': 3 } }\n     */\n    var defaultsDeep = baseRest(function(args) {\n      args.push(undefined, customDefaultsMerge);\n      return apply(mergeWith, undefined, args);\n    });\n\n    /**\n     * This method is like `_.find` except that it returns the key of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findKey(users, function(o) { return o.age < 40; });\n     * // => 'barney' (iteration order is not guaranteed)\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findKey(users, { 'age': 1, 'active': true });\n     * // => 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findKey(users, 'active');\n     * // => 'barney'\n     */\n    function findKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n    }\n\n    /**\n     * This method is like `_.findKey` except that it iterates over elements of\n     * a collection in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findLastKey(users, function(o) { return o.age < 40; });\n     * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastKey(users, { 'age': 36, 'active': true });\n     * // => 'barney'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastKey(users, 'active');\n     * // => 'pebbles'\n     */\n    function findLastKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n    }\n\n    /**\n     * Iterates over own and inherited enumerable string keyed properties of an\n     * object and invokes `iteratee` for each property. The iteratee is invoked\n     * with three arguments: (value, key, object). Iteratee functions may exit\n     * iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forInRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forIn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n     */\n    function forIn(object, iteratee) {\n      return object == null\n        ? object\n        : baseFor(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * This method is like `_.forIn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forInRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n     */\n    function forInRight(object, iteratee) {\n      return object == null\n        ? object\n        : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * Iterates over own enumerable string keyed properties of an object and\n     * invokes `iteratee` for each property. The iteratee is invoked with three\n     * arguments: (value, key, object). Iteratee functions may exit iteration\n     * early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwnRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forOwn(object, iteratee) {\n      return object && baseForOwn(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forOwn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwnRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n     */\n    function forOwnRight(object, iteratee) {\n      return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an array of function property names from own enumerable properties\n     * of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functionsIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functions(new Foo);\n     * // => ['a', 'b']\n     */\n    function functions(object) {\n      return object == null ? [] : baseFunctions(object, keys(object));\n    }\n\n    /**\n     * Creates an array of function property names from own and inherited\n     * enumerable properties of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functions\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functionsIn(new Foo);\n     * // => ['a', 'b', 'c']\n     */\n    function functionsIn(object) {\n      return object == null ? [] : baseFunctions(object, keysIn(object));\n    }\n\n    /**\n     * Gets the value at `path` of `object`. If the resolved value is\n     * `undefined`, the `defaultValue` is returned in its place.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.get(object, 'a[0].b.c');\n     * // => 3\n     *\n     * _.get(object, ['a', '0', 'b', 'c']);\n     * // => 3\n     *\n     * _.get(object, 'a.b.c', 'default');\n     * // => 'default'\n     */\n    function get(object, path, defaultValue) {\n      var result = object == null ? undefined : baseGet(object, path);\n      return result === undefined ? defaultValue : result;\n    }\n\n    /**\n     * Checks if `path` is a direct property of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = { 'a': { 'b': 2 } };\n     * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.has(object, 'a');\n     * // => true\n     *\n     * _.has(object, 'a.b');\n     * // => true\n     *\n     * _.has(object, ['a', 'b']);\n     * // => true\n     *\n     * _.has(other, 'a');\n     * // => false\n     */\n    function has(object, path) {\n      return object != null && hasPath(object, path, baseHas);\n    }\n\n    /**\n     * Checks if `path` is a direct or inherited property of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.hasIn(object, 'a');\n     * // => true\n     *\n     * _.hasIn(object, 'a.b');\n     * // => true\n     *\n     * _.hasIn(object, ['a', 'b']);\n     * // => true\n     *\n     * _.hasIn(object, 'b');\n     * // => false\n     */\n    function hasIn(object, path) {\n      return object != null && hasPath(object, path, baseHasIn);\n    }\n\n    /**\n     * Creates an object composed of the inverted keys and values of `object`.\n     * If `object` contains duplicate values, subsequent values overwrite\n     * property assignments of previous values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invert(object);\n     * // => { '1': 'c', '2': 'b' }\n     */\n    var invert = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      result[value] = key;\n    }, constant(identity));\n\n    /**\n     * This method is like `_.invert` except that the inverted object is generated\n     * from the results of running each element of `object` thru `iteratee`. The\n     * corresponding inverted value of each inverted key is an array of keys\n     * responsible for generating the inverted value. The iteratee is invoked\n     * with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invertBy(object);\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     *\n     * _.invertBy(object, function(value) {\n     *   return 'group' + value;\n     * });\n     * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n     */\n    var invertBy = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      if (hasOwnProperty.call(result, value)) {\n        result[value].push(key);\n      } else {\n        result[value] = [key];\n      }\n    }, getIteratee);\n\n    /**\n     * Invokes the method at `path` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n     *\n     * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n     * // => [2, 3]\n     */\n    var invoke = baseRest(baseInvoke);\n\n    /**\n     * Creates an array of the own enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects. See the\n     * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * for more details.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keys(new Foo);\n     * // => ['a', 'b'] (iteration order is not guaranteed)\n     *\n     * _.keys('hi');\n     * // => ['0', '1']\n     */\n    function keys(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keysIn(new Foo);\n     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n     */\n    function keysIn(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n    }\n\n    /**\n     * The opposite of `_.mapValues`; this method creates an object with the\n     * same values as `object` and keys generated by running each own enumerable\n     * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n     * with three arguments: (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapValues\n     * @example\n     *\n     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   return key + value;\n     * });\n     * // => { 'a1': 1, 'b2': 2 }\n     */\n    function mapKeys(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, iteratee(value, key, object), value);\n      });\n      return result;\n    }\n\n    /**\n     * Creates an object with the same keys as `object` and values generated\n     * by running each own enumerable string keyed property of `object` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapKeys\n     * @example\n     *\n     * var users = {\n     *   'fred':    { 'user': 'fred',    'age': 40 },\n     *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n     * };\n     *\n     * _.mapValues(users, function(o) { return o.age; });\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.mapValues(users, 'age');\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     */\n    function mapValues(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, key, iteratee(value, key, object));\n      });\n      return result;\n    }\n\n    /**\n     * This method is like `_.assign` except that it recursively merges own and\n     * inherited enumerable string keyed properties of source objects into the\n     * destination object. Source properties that resolve to `undefined` are\n     * skipped if a destination value exists. Array and plain object properties\n     * are merged recursively. Other objects and value types are overridden by\n     * assignment. Source objects are applied from left to right. Subsequent\n     * sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {\n     *   'a': [{ 'b': 2 }, { 'd': 4 }]\n     * };\n     *\n     * var other = {\n     *   'a': [{ 'c': 3 }, { 'e': 5 }]\n     * };\n     *\n     * _.merge(object, other);\n     * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n     */\n    var merge = createAssigner(function(object, source, srcIndex) {\n      baseMerge(object, source, srcIndex);\n    });\n\n    /**\n     * This method is like `_.merge` except that it accepts `customizer` which\n     * is invoked to produce the merged values of the destination and source\n     * properties. If `customizer` returns `undefined`, merging is handled by the\n     * method instead. The `customizer` is invoked with six arguments:\n     * (objValue, srcValue, key, object, source, stack).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} customizer The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (_.isArray(objValue)) {\n     *     return objValue.concat(srcValue);\n     *   }\n     * }\n     *\n     * var object = { 'a': [1], 'b': [2] };\n     * var other = { 'a': [3], 'b': [4] };\n     *\n     * _.mergeWith(object, other, customizer);\n     * // => { 'a': [1, 3], 'b': [2, 4] }\n     */\n    var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n      baseMerge(object, source, srcIndex, customizer);\n    });\n\n    /**\n     * The opposite of `_.pick`; this method creates an object composed of the\n     * own and inherited enumerable property paths of `object` that are not omitted.\n     *\n     * **Note:** This method is considerably slower than `_.pick`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to omit.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omit(object, ['a', 'c']);\n     * // => { 'b': '2' }\n     */\n    var omit = flatRest(function(object, paths) {\n      var result = {};\n      if (object == null) {\n        return result;\n      }\n      var isDeep = false;\n      paths = arrayMap(paths, function(path) {\n        path = castPath(path, object);\n        isDeep || (isDeep = path.length > 1);\n        return path;\n      });\n      copyObject(object, getAllKeysIn(object), result);\n      if (isDeep) {\n        result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n      }\n      var length = paths.length;\n      while (length--) {\n        baseUnset(result, paths[length]);\n      }\n      return result;\n    });\n\n    /**\n     * The opposite of `_.pickBy`; this method creates an object composed of\n     * the own and inherited enumerable string keyed properties of `object` that\n     * `predicate` doesn't return truthy for. The predicate is invoked with two\n     * arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omitBy(object, _.isNumber);\n     * // => { 'b': '2' }\n     */\n    function omitBy(object, predicate) {\n      return pickBy(object, negate(getIteratee(predicate)));\n    }\n\n    /**\n     * Creates an object composed of the picked `object` properties.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pick(object, ['a', 'c']);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var pick = flatRest(function(object, paths) {\n      return object == null ? {} : basePick(object, paths);\n    });\n\n    /**\n     * Creates an object composed of the `object` properties `predicate` returns\n     * truthy for. The predicate is invoked with two arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pickBy(object, _.isNumber);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    function pickBy(object, predicate) {\n      if (object == null) {\n        return {};\n      }\n      var props = arrayMap(getAllKeysIn(object), function(prop) {\n        return [prop];\n      });\n      predicate = getIteratee(predicate);\n      return basePickBy(object, props, function(value, path) {\n        return predicate(value, path[0]);\n      });\n    }\n\n    /**\n     * This method is like `_.get` except that if the resolved value is a\n     * function it's invoked with the `this` binding of its parent object and\n     * its result is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to resolve.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n     *\n     * _.result(object, 'a[0].b.c1');\n     * // => 3\n     *\n     * _.result(object, 'a[0].b.c2');\n     * // => 4\n     *\n     * _.result(object, 'a[0].b.c3', 'default');\n     * // => 'default'\n     *\n     * _.result(object, 'a[0].b.c3', _.constant('default'));\n     * // => 'default'\n     */\n    function result(object, path, defaultValue) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length;\n\n      // Ensure the loop is entered when path is empty.\n      if (!length) {\n        length = 1;\n        object = undefined;\n      }\n      while (++index < length) {\n        var value = object == null ? undefined : object[toKey(path[index])];\n        if (value === undefined) {\n          index = length;\n          value = defaultValue;\n        }\n        object = isFunction(value) ? value.call(object) : value;\n      }\n      return object;\n    }\n\n    /**\n     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n     * it's created. Arrays are created for missing index properties while objects\n     * are created for all other missing properties. Use `_.setWith` to customize\n     * `path` creation.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.set(object, 'a[0].b.c', 4);\n     * console.log(object.a[0].b.c);\n     * // => 4\n     *\n     * _.set(object, ['x', '0', 'y', 'z'], 5);\n     * console.log(object.x[0].y.z);\n     * // => 5\n     */\n    function set(object, path, value) {\n      return object == null ? object : baseSet(object, path, value);\n    }\n\n    /**\n     * This method is like `_.set` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.setWith(object, '[0][1]', 'a', Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function setWith(object, path, value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseSet(object, path, value, customizer);\n    }\n\n    /**\n     * Creates an array of own enumerable string keyed-value pairs for `object`\n     * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n     * entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entries\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairs(new Foo);\n     * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n     */\n    var toPairs = createToPairs(keys);\n\n    /**\n     * Creates an array of own and inherited enumerable string keyed-value pairs\n     * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n     * or set, its entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entriesIn\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairsIn(new Foo);\n     * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n     */\n    var toPairsIn = createToPairs(keysIn);\n\n    /**\n     * An alternative to `_.reduce`; this method transforms `object` to a new\n     * `accumulator` object which is the result of running each of its own\n     * enumerable string keyed properties thru `iteratee`, with each invocation\n     * potentially mutating the `accumulator` object. If `accumulator` is not\n     * provided, a new object with the same `[[Prototype]]` will be used. The\n     * iteratee is invoked with four arguments: (accumulator, value, key, object).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The custom accumulator value.\n     * @returns {*} Returns the accumulated value.\n     * @example\n     *\n     * _.transform([2, 3, 4], function(result, n) {\n     *   result.push(n *= n);\n     *   return n % 2 == 0;\n     * }, []);\n     * // => [4, 9]\n     *\n     * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     */\n    function transform(object, iteratee, accumulator) {\n      var isArr = isArray(object),\n          isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n      iteratee = getIteratee(iteratee, 4);\n      if (accumulator == null) {\n        var Ctor = object && object.constructor;\n        if (isArrLike) {\n          accumulator = isArr ? new Ctor : [];\n        }\n        else if (isObject(object)) {\n          accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n        }\n        else {\n          accumulator = {};\n        }\n      }\n      (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n        return iteratee(accumulator, value, index, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * Removes the property at `path` of `object`.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n     * _.unset(object, 'a[0].b.c');\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     *\n     * _.unset(object, ['a', '0', 'b', 'c']);\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     */\n    function unset(object, path) {\n      return object == null ? true : baseUnset(object, path);\n    }\n\n    /**\n     * This method is like `_.set` except that accepts `updater` to produce the\n     * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n     * is invoked with one argument: (value).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n     * console.log(object.a[0].b.c);\n     * // => 9\n     *\n     * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n     * console.log(object.x[0].y.z);\n     * // => 0\n     */\n    function update(object, path, updater) {\n      return object == null ? object : baseUpdate(object, path, castFunction(updater));\n    }\n\n    /**\n     * This method is like `_.update` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function updateWith(object, path, updater, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n    }\n\n    /**\n     * Creates an array of the own enumerable string keyed property values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.values(new Foo);\n     * // => [1, 2] (iteration order is not guaranteed)\n     *\n     * _.values('hi');\n     * // => ['h', 'i']\n     */\n    function values(object) {\n      return object == null ? [] : baseValues(object, keys(object));\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable string keyed property\n     * values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.valuesIn(new Foo);\n     * // => [1, 2, 3] (iteration order is not guaranteed)\n     */\n    function valuesIn(object) {\n      return object == null ? [] : baseValues(object, keysIn(object));\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Clamps `number` within the inclusive `lower` and `upper` bounds.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Number\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     * @example\n     *\n     * _.clamp(-10, -5, 5);\n     * // => -5\n     *\n     * _.clamp(10, -5, 5);\n     * // => 5\n     */\n    function clamp(number, lower, upper) {\n      if (upper === undefined) {\n        upper = lower;\n        lower = undefined;\n      }\n      if (upper !== undefined) {\n        upper = toNumber(upper);\n        upper = upper === upper ? upper : 0;\n      }\n      if (lower !== undefined) {\n        lower = toNumber(lower);\n        lower = lower === lower ? lower : 0;\n      }\n      return baseClamp(toNumber(number), lower, upper);\n    }\n\n    /**\n     * Checks if `n` is between `start` and up to, but not including, `end`. If\n     * `end` is not specified, it's set to `start` with `start` then set to `0`.\n     * If `start` is greater than `end` the params are swapped to support\n     * negative ranges.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.3.0\n     * @category Number\n     * @param {number} number The number to check.\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     * @see _.range, _.rangeRight\n     * @example\n     *\n     * _.inRange(3, 2, 4);\n     * // => true\n     *\n     * _.inRange(4, 8);\n     * // => true\n     *\n     * _.inRange(4, 2);\n     * // => false\n     *\n     * _.inRange(2, 2);\n     * // => false\n     *\n     * _.inRange(1.2, 2);\n     * // => true\n     *\n     * _.inRange(5.2, 4);\n     * // => false\n     *\n     * _.inRange(-3, -2, -6);\n     * // => true\n     */\n    function inRange(number, start, end) {\n      start = toFinite(start);\n      if (end === undefined) {\n        end = start;\n        start = 0;\n      } else {\n        end = toFinite(end);\n      }\n      number = toNumber(number);\n      return baseInRange(number, start, end);\n    }\n\n    /**\n     * Produces a random number between the inclusive `lower` and `upper` bounds.\n     * If only one argument is provided a number between `0` and the given number\n     * is returned. If `floating` is `true`, or either `lower` or `upper` are\n     * floats, a floating-point number is returned instead of an integer.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * **Note:** If `lower` is greater than `upper`, the values are swapped.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Number\n     * @param {number} [lower=0] The lower bound.\n     * @param {number} [upper=1] The upper bound.\n     * @param {boolean} [floating] Specify returning a floating-point number.\n     * @returns {number} Returns the random number.\n     * @example\n     *\n     * _.random(0, 5);\n     * // => an integer between 0 and 5\n     *\n     * // when lower is greater than upper the values are swapped\n     * _.random(5, 0);\n     * // => an integer between 0 and 5\n     *\n     * _.random(5);\n     * // => also an integer between 0 and 5\n     *\n     * _.random(-5);\n     * // => an integer between -5 and 0\n     *\n     * _.random(5, true);\n     * // => a floating-point number between 0 and 5\n     *\n     * _.random(1.2, 5.2);\n     * // => a floating-point number between 1.2 and 5.2\n     */\n    function random(lower, upper, floating) {\n      if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n        upper = floating = undefined;\n      }\n      if (floating === undefined) {\n        if (typeof upper == 'boolean') {\n          floating = upper;\n          upper = undefined;\n        }\n        else if (typeof lower == 'boolean') {\n          floating = lower;\n          lower = undefined;\n        }\n      }\n      if (lower === undefined && upper === undefined) {\n        lower = 0;\n        upper = 1;\n      }\n      else {\n        lower = toFinite(lower);\n        if (upper === undefined) {\n          upper = lower;\n          lower = 0;\n        } else {\n          upper = toFinite(upper);\n        }\n      }\n      if (lower > upper) {\n        var temp = lower;\n        lower = upper;\n        upper = temp;\n      }\n      if (floating || lower % 1 || upper % 1) {\n        var rand = nativeRandom();\n        return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n      }\n      return baseRandom(lower, upper);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the camel cased string.\n     * @example\n     *\n     * _.camelCase('Foo Bar');\n     * // => 'fooBar'\n     *\n     * _.camelCase('--foo-bar--');\n     * // => 'fooBar'\n     *\n     * _.camelCase('__FOO_BAR__');\n     * // => 'fooBar'\n     */\n    var camelCase = createCompounder(function(result, word, index) {\n      word = word.toLowerCase();\n      return result + (index ? capitalize(word) : word);\n    });\n\n    /**\n     * Converts the first character of `string` to upper case and the remaining\n     * to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to capitalize.\n     * @returns {string} Returns the capitalized string.\n     * @example\n     *\n     * _.capitalize('FRED');\n     * // => 'Fred'\n     */\n    function capitalize(string) {\n      return upperFirst(toString(string).toLowerCase());\n    }\n\n    /**\n     * Deburrs `string` by converting\n     * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n     * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n     * letters to basic Latin letters and removing\n     * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to deburr.\n     * @returns {string} Returns the deburred string.\n     * @example\n     *\n     * _.deburr('déjà vu');\n     * // => 'deja vu'\n     */\n    function deburr(string) {\n      string = toString(string);\n      return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n    }\n\n    /**\n     * Checks if `string` ends with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=string.length] The position to search up to.\n     * @returns {boolean} Returns `true` if `string` ends with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.endsWith('abc', 'c');\n     * // => true\n     *\n     * _.endsWith('abc', 'b');\n     * // => false\n     *\n     * _.endsWith('abc', 'b', 2);\n     * // => true\n     */\n    function endsWith(string, target, position) {\n      string = toString(string);\n      target = baseToString(target);\n\n      var length = string.length;\n      position = position === undefined\n        ? length\n        : baseClamp(toInteger(position), 0, length);\n\n      var end = position;\n      position -= target.length;\n      return position >= 0 && string.slice(position, end) == target;\n    }\n\n    /**\n     * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n     * corresponding HTML entities.\n     *\n     * **Note:** No other characters are escaped. To escape additional\n     * characters use a third-party library like [_he_](https://mths.be/he).\n     *\n     * Though the \">\" character is escaped for symmetry, characters like\n     * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n     * unless they're part of a tag or unquoted attribute value. See\n     * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n     * (under \"semi-related fun fact\") for more details.\n     *\n     * When working with HTML you should always\n     * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n     * XSS vectors.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escape('fred, barney, & pebbles');\n     * // => 'fred, barney, &amp; pebbles'\n     */\n    function escape(string) {\n      string = toString(string);\n      return (string && reHasUnescapedHtml.test(string))\n        ? string.replace(reUnescapedHtml, escapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n     * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escapeRegExp('[lodash](https://lodash.com/)');\n     * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n     */\n    function escapeRegExp(string) {\n      string = toString(string);\n      return (string && reHasRegExpChar.test(string))\n        ? string.replace(reRegExpChar, '\\\\$&')\n        : string;\n    }\n\n    /**\n     * Converts `string` to\n     * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the kebab cased string.\n     * @example\n     *\n     * _.kebabCase('Foo Bar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('fooBar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('__FOO_BAR__');\n     * // => 'foo-bar'\n     */\n    var kebabCase = createCompounder(function(result, word, index) {\n      return result + (index ? '-' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts `string`, as space separated words, to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.lowerCase('--Foo-Bar--');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('fooBar');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('__FOO_BAR__');\n     * // => 'foo bar'\n     */\n    var lowerCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts the first character of `string` to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.lowerFirst('Fred');\n     * // => 'fred'\n     *\n     * _.lowerFirst('FRED');\n     * // => 'fRED'\n     */\n    var lowerFirst = createCaseFirst('toLowerCase');\n\n    /**\n     * Pads `string` on the left and right sides if it's shorter than `length`.\n     * Padding characters are truncated if they can't be evenly divided by `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.pad('abc', 8);\n     * // => '  abc   '\n     *\n     * _.pad('abc', 8, '_-');\n     * // => '_-abc_-_'\n     *\n     * _.pad('abc', 3);\n     * // => 'abc'\n     */\n    function pad(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      if (!length || strLength >= length) {\n        return string;\n      }\n      var mid = (length - strLength) / 2;\n      return (\n        createPadding(nativeFloor(mid), chars) +\n        string +\n        createPadding(nativeCeil(mid), chars)\n      );\n    }\n\n    /**\n     * Pads `string` on the right side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padEnd('abc', 6);\n     * // => 'abc   '\n     *\n     * _.padEnd('abc', 6, '_-');\n     * // => 'abc_-_'\n     *\n     * _.padEnd('abc', 3);\n     * // => 'abc'\n     */\n    function padEnd(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (string + createPadding(length - strLength, chars))\n        : string;\n    }\n\n    /**\n     * Pads `string` on the left side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padStart('abc', 6);\n     * // => '   abc'\n     *\n     * _.padStart('abc', 6, '_-');\n     * // => '_-_abc'\n     *\n     * _.padStart('abc', 3);\n     * // => 'abc'\n     */\n    function padStart(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (createPadding(length - strLength, chars) + string)\n        : string;\n    }\n\n    /**\n     * Converts `string` to an integer of the specified radix. If `radix` is\n     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n     * hexadecimal, in which case a `radix` of `16` is used.\n     *\n     * **Note:** This method aligns with the\n     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category String\n     * @param {string} string The string to convert.\n     * @param {number} [radix=10] The radix to interpret `value` by.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.parseInt('08');\n     * // => 8\n     *\n     * _.map(['6', '08', '10'], _.parseInt);\n     * // => [6, 8, 10]\n     */\n    function parseInt(string, radix, guard) {\n      if (guard || radix == null) {\n        radix = 0;\n      } else if (radix) {\n        radix = +radix;\n      }\n      return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n    }\n\n    /**\n     * Repeats the given string `n` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to repeat.\n     * @param {number} [n=1] The number of times to repeat the string.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the repeated string.\n     * @example\n     *\n     * _.repeat('*', 3);\n     * // => '***'\n     *\n     * _.repeat('abc', 2);\n     * // => 'abcabc'\n     *\n     * _.repeat('abc', 0);\n     * // => ''\n     */\n    function repeat(string, n, guard) {\n      if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      return baseRepeat(toString(string), n);\n    }\n\n    /**\n     * Replaces matches for `pattern` in `string` with `replacement`.\n     *\n     * **Note:** This method is based on\n     * [`String#replace`](https://mdn.io/String/replace).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to modify.\n     * @param {RegExp|string} pattern The pattern to replace.\n     * @param {Function|string} replacement The match replacement.\n     * @returns {string} Returns the modified string.\n     * @example\n     *\n     * _.replace('Hi Fred', 'Fred', 'Barney');\n     * // => 'Hi Barney'\n     */\n    function replace() {\n      var args = arguments,\n          string = toString(args[0]);\n\n      return args.length < 3 ? string : string.replace(args[1], args[2]);\n    }\n\n    /**\n     * Converts `string` to\n     * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the snake cased string.\n     * @example\n     *\n     * _.snakeCase('Foo Bar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('fooBar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('--FOO-BAR--');\n     * // => 'foo_bar'\n     */\n    var snakeCase = createCompounder(function(result, word, index) {\n      return result + (index ? '_' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Splits `string` by `separator`.\n     *\n     * **Note:** This method is based on\n     * [`String#split`](https://mdn.io/String/split).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to split.\n     * @param {RegExp|string} separator The separator pattern to split by.\n     * @param {number} [limit] The length to truncate results to.\n     * @returns {Array} Returns the string segments.\n     * @example\n     *\n     * _.split('a-b-c', '-', 2);\n     * // => ['a', 'b']\n     */\n    function split(string, separator, limit) {\n      if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n        separator = limit = undefined;\n      }\n      limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n      if (!limit) {\n        return [];\n      }\n      string = toString(string);\n      if (string && (\n            typeof separator == 'string' ||\n            (separator != null && !isRegExp(separator))\n          )) {\n        separator = baseToString(separator);\n        if (!separator && hasUnicode(string)) {\n          return castSlice(stringToArray(string), 0, limit);\n        }\n      }\n      return string.split(separator, limit);\n    }\n\n    /**\n     * Converts `string` to\n     * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.1.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the start cased string.\n     * @example\n     *\n     * _.startCase('--foo-bar--');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('fooBar');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('__FOO_BAR__');\n     * // => 'FOO BAR'\n     */\n    var startCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + upperFirst(word);\n    });\n\n    /**\n     * Checks if `string` starts with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=0] The position to search from.\n     * @returns {boolean} Returns `true` if `string` starts with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.startsWith('abc', 'a');\n     * // => true\n     *\n     * _.startsWith('abc', 'b');\n     * // => false\n     *\n     * _.startsWith('abc', 'b', 1);\n     * // => true\n     */\n    function startsWith(string, target, position) {\n      string = toString(string);\n      position = position == null\n        ? 0\n        : baseClamp(toInteger(position), 0, string.length);\n\n      target = baseToString(target);\n      return string.slice(position, position + target.length) == target;\n    }\n\n    /**\n     * Creates a compiled template function that can interpolate data properties\n     * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n     * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n     * properties may be accessed as free variables in the template. If a setting\n     * object is given, it takes precedence over `_.templateSettings` values.\n     *\n     * **Security:** `_.template` is insecure and should not be used. It will be\n     * removed in Lodash v5. Avoid untrusted input. See\n     * [threat model](https://github.com/lodash/lodash/blob/main/threat-model.md).\n     *\n     * **Note:** In the development build `_.template` utilizes\n     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n     * for easier debugging.\n     *\n     * For more information on precompiling templates see\n     * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n     *\n     * For more information on Chrome extension sandboxes see\n     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The template string.\n     * @param {Object} [options={}] The options object.\n     * @param {RegExp} [options.escape=_.templateSettings.escape]\n     *  The HTML \"escape\" delimiter.\n     * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n     *  The \"evaluate\" delimiter.\n     * @param {Object} [options.imports=_.templateSettings.imports]\n     *  An object to import into the template as free variables.\n     * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n     *  The \"interpolate\" delimiter.\n     * @param {string} [options.sourceURL='lodash.templateSources[n]']\n     *  The sourceURL of the compiled template.\n     * @param {string} [options.variable='obj']\n     *  The data object variable name.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the compiled template function.\n     * @example\n     *\n     * // Use the \"interpolate\" delimiter to create a compiled template.\n     * var compiled = _.template('hello <%= user %>!');\n     * compiled({ 'user': 'fred' });\n     * // => 'hello fred!'\n     *\n     * // Use the HTML \"escape\" delimiter to escape data property values.\n     * var compiled = _.template('<b><%- value %></b>');\n     * compiled({ 'value': '<script>' });\n     * // => '<b>&lt;script&gt;</b>'\n     *\n     * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the internal `print` function in \"evaluate\" delimiters.\n     * var compiled = _.template('<% print(\"hello \" + user); %>!');\n     * compiled({ 'user': 'barney' });\n     * // => 'hello barney!'\n     *\n     * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n     * // Disable support by replacing the \"interpolate\" delimiter.\n     * var compiled = _.template('hello ${ user }!');\n     * compiled({ 'user': 'pebbles' });\n     * // => 'hello pebbles!'\n     *\n     * // Use backslashes to treat delimiters as plain text.\n     * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n     * compiled({ 'value': 'ignored' });\n     * // => '<%- value %>'\n     *\n     * // Use the `imports` option to import `jQuery` as `jq`.\n     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n     * compiled(data);\n     * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n     *\n     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n     * compiled.source;\n     * // => function(data) {\n     * //   var __t, __p = '';\n     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n     * //   return __p;\n     * // }\n     *\n     * // Use custom template delimiters.\n     * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n     * var compiled = _.template('hello {{ user }}!');\n     * compiled({ 'user': 'mustache' });\n     * // => 'hello mustache!'\n     *\n     * // Use the `source` property to inline compiled templates for meaningful\n     * // line numbers in error messages and stack traces.\n     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n     *   var JST = {\\\n     *     \"main\": ' + _.template(mainText).source + '\\\n     *   };\\\n     * ');\n     */\n    function template(string, options, guard) {\n      // Based on John Resig's `tmpl` implementation\n      // (http://ejohn.org/blog/javascript-micro-templating/)\n      // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n      var settings = lodash.templateSettings;\n\n      if (guard && isIterateeCall(string, options, guard)) {\n        options = undefined;\n      }\n      string = toString(string);\n      options = assignWith({}, options, settings, customDefaultsAssignIn);\n\n      var imports = assignWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n          importsKeys = keys(imports),\n          importsValues = baseValues(imports, importsKeys);\n\n      arrayEach(importsKeys, function(key) {\n        if (reForbiddenIdentifierChars.test(key)) {\n          throw new Error(INVALID_TEMPL_IMPORTS_ERROR_TEXT);\n        }\n      });\n\n      var isEscaping,\n          isEvaluating,\n          index = 0,\n          interpolate = options.interpolate || reNoMatch,\n          source = \"__p += '\";\n\n      // Compile the regexp to match each delimiter.\n      var reDelimiters = RegExp(\n        (options.escape || reNoMatch).source + '|' +\n        interpolate.source + '|' +\n        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n        (options.evaluate || reNoMatch).source + '|$'\n      , 'g');\n\n      // Use a sourceURL for easier debugging.\n      // The sourceURL gets injected into the source that's eval-ed, so be careful\n      // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in\n      // and escape the comment, thus injecting code that gets evaled.\n      var sourceURL = '//# sourceURL=' +\n        (hasOwnProperty.call(options, 'sourceURL')\n          ? (options.sourceURL + '').replace(/\\s/g, ' ')\n          : ('lodash.templateSources[' + (++templateCounter) + ']')\n        ) + '\\n';\n\n      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n        interpolateValue || (interpolateValue = esTemplateValue);\n\n        // Escape characters that can't be included in string literals.\n        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n        // Replace delimiters with snippets.\n        if (escapeValue) {\n          isEscaping = true;\n          source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n        }\n        if (evaluateValue) {\n          isEvaluating = true;\n          source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n        }\n        if (interpolateValue) {\n          source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n        }\n        index = offset + match.length;\n\n        // The JS engine embedded in Adobe products needs `match` returned in\n        // order to produce the correct `offset` value.\n        return match;\n      });\n\n      source += \"';\\n\";\n\n      // If `variable` is not specified wrap a with-statement around the generated\n      // code to add the data object to the top of the scope chain.\n      var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n      if (!variable) {\n        source = 'with (obj) {\\n' + source + '\\n}\\n';\n      }\n      // Throw an error if a forbidden character was found in `variable`, to prevent\n      // potential command injection attacks.\n      else if (reForbiddenIdentifierChars.test(variable)) {\n        throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);\n      }\n\n      // Cleanup code by stripping empty strings.\n      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n        .replace(reEmptyStringMiddle, '$1')\n        .replace(reEmptyStringTrailing, '$1;');\n\n      // Frame code as the function body.\n      source = 'function(' + (variable || 'obj') + ') {\\n' +\n        (variable\n          ? ''\n          : 'obj || (obj = {});\\n'\n        ) +\n        \"var __t, __p = ''\" +\n        (isEscaping\n           ? ', __e = _.escape'\n           : ''\n        ) +\n        (isEvaluating\n          ? ', __j = Array.prototype.join;\\n' +\n            \"function print() { __p += __j.call(arguments, '') }\\n\"\n          : ';\\n'\n        ) +\n        source +\n        'return __p\\n}';\n\n      var result = attempt(function() {\n        return Function(importsKeys, sourceURL + 'return ' + source)\n          .apply(undefined, importsValues);\n      });\n\n      // Provide the compiled function's source by its `toString` method or\n      // the `source` property as a convenience for inlining compiled templates.\n      result.source = source;\n      if (isError(result)) {\n        throw result;\n      }\n      return result;\n    }\n\n    /**\n     * Converts `string`, as a whole, to lower case just like\n     * [String#toLowerCase](https://mdn.io/toLowerCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.toLower('--Foo-Bar--');\n     * // => '--foo-bar--'\n     *\n     * _.toLower('fooBar');\n     * // => 'foobar'\n     *\n     * _.toLower('__FOO_BAR__');\n     * // => '__foo_bar__'\n     */\n    function toLower(value) {\n      return toString(value).toLowerCase();\n    }\n\n    /**\n     * Converts `string`, as a whole, to upper case just like\n     * [String#toUpperCase](https://mdn.io/toUpperCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.toUpper('--foo-bar--');\n     * // => '--FOO-BAR--'\n     *\n     * _.toUpper('fooBar');\n     * // => 'FOOBAR'\n     *\n     * _.toUpper('__foo_bar__');\n     * // => '__FOO_BAR__'\n     */\n    function toUpper(value) {\n      return toString(value).toUpperCase();\n    }\n\n    /**\n     * Removes leading and trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trim('  abc  ');\n     * // => 'abc'\n     *\n     * _.trim('-_-abc-_-', '_-');\n     * // => 'abc'\n     *\n     * _.map(['  foo  ', '  bar  '], _.trim);\n     * // => ['foo', 'bar']\n     */\n    function trim(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return baseTrim(string);\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          chrSymbols = stringToArray(chars),\n          start = charsStartIndex(strSymbols, chrSymbols),\n          end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n      return castSlice(strSymbols, start, end).join('');\n    }\n\n    /**\n     * Removes trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimEnd('  abc  ');\n     * // => '  abc'\n     *\n     * _.trimEnd('-_-abc-_-', '_-');\n     * // => '-_-abc'\n     */\n    function trimEnd(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.slice(0, trimmedEndIndex(string) + 1);\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n      return castSlice(strSymbols, 0, end).join('');\n    }\n\n    /**\n     * Removes leading whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimStart('  abc  ');\n     * // => 'abc  '\n     *\n     * _.trimStart('-_-abc-_-', '_-');\n     * // => 'abc-_-'\n     */\n    function trimStart(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.replace(reTrimStart, '');\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          start = charsStartIndex(strSymbols, stringToArray(chars));\n\n      return castSlice(strSymbols, start).join('');\n    }\n\n    /**\n     * Truncates `string` if it's longer than the given maximum string length.\n     * The last characters of the truncated string are replaced with the omission\n     * string which defaults to \"...\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to truncate.\n     * @param {Object} [options={}] The options object.\n     * @param {number} [options.length=30] The maximum string length.\n     * @param {string} [options.omission='...'] The string to indicate text is omitted.\n     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n     * @returns {string} Returns the truncated string.\n     * @example\n     *\n     * _.truncate('hi-diddly-ho there, neighborino');\n     * // => 'hi-diddly-ho there, neighbo...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': ' '\n     * });\n     * // => 'hi-diddly-ho there,...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': /,? +/\n     * });\n     * // => 'hi-diddly-ho there...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'omission': ' [...]'\n     * });\n     * // => 'hi-diddly-ho there, neig [...]'\n     */\n    function truncate(string, options) {\n      var length = DEFAULT_TRUNC_LENGTH,\n          omission = DEFAULT_TRUNC_OMISSION;\n\n      if (isObject(options)) {\n        var separator = 'separator' in options ? options.separator : separator;\n        length = 'length' in options ? toInteger(options.length) : length;\n        omission = 'omission' in options ? baseToString(options.omission) : omission;\n      }\n      string = toString(string);\n\n      var strLength = string.length;\n      if (hasUnicode(string)) {\n        var strSymbols = stringToArray(string);\n        strLength = strSymbols.length;\n      }\n      if (length >= strLength) {\n        return string;\n      }\n      var end = length - stringSize(omission);\n      if (end < 1) {\n        return omission;\n      }\n      var result = strSymbols\n        ? castSlice(strSymbols, 0, end).join('')\n        : string.slice(0, end);\n\n      if (separator === undefined) {\n        return result + omission;\n      }\n      if (strSymbols) {\n        end += (result.length - end);\n      }\n      if (isRegExp(separator)) {\n        if (string.slice(end).search(separator)) {\n          var match,\n              substring = result;\n\n          if (!separator.global) {\n            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n          }\n          separator.lastIndex = 0;\n          while ((match = separator.exec(substring))) {\n            var newEnd = match.index;\n          }\n          result = result.slice(0, newEnd === undefined ? end : newEnd);\n        }\n      } else if (string.indexOf(baseToString(separator), end) != end) {\n        var index = result.lastIndexOf(separator);\n        if (index > -1) {\n          result = result.slice(0, index);\n        }\n      }\n      return result + omission;\n    }\n\n    /**\n     * The inverse of `_.escape`; this method converts the HTML entities\n     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\n     * their corresponding characters.\n     *\n     * **Note:** No other HTML entities are unescaped. To unescape additional\n     * HTML entities use a third-party library like [_he_](https://mths.be/he).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.6.0\n     * @category String\n     * @param {string} [string=''] The string to unescape.\n     * @returns {string} Returns the unescaped string.\n     * @example\n     *\n     * _.unescape('fred, barney, &amp; pebbles');\n     * // => 'fred, barney, & pebbles'\n     */\n    function unescape(string) {\n      string = toString(string);\n      return (string && reHasEscapedHtml.test(string))\n        ? string.replace(reEscapedHtml, unescapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Converts `string`, as space separated words, to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.upperCase('--foo-bar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('fooBar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('__foo_bar__');\n     * // => 'FOO BAR'\n     */\n    var upperCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toUpperCase();\n    });\n\n    /**\n     * Converts the first character of `string` to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.upperFirst('fred');\n     * // => 'Fred'\n     *\n     * _.upperFirst('FRED');\n     * // => 'FRED'\n     */\n    var upperFirst = createCaseFirst('toUpperCase');\n\n    /**\n     * Splits `string` into an array of its words.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {RegExp|string} [pattern] The pattern to match words.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the words of `string`.\n     * @example\n     *\n     * _.words('fred, barney, & pebbles');\n     * // => ['fred', 'barney', 'pebbles']\n     *\n     * _.words('fred, barney, & pebbles', /[^, ]+/g);\n     * // => ['fred', 'barney', '&', 'pebbles']\n     */\n    function words(string, pattern, guard) {\n      string = toString(string);\n      pattern = guard ? undefined : pattern;\n\n      if (pattern === undefined) {\n        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n      }\n      return string.match(pattern) || [];\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Attempts to invoke `func`, returning either the result or the caught error\n     * object. Any additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Function} func The function to attempt.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {*} Returns the `func` result or error object.\n     * @example\n     *\n     * // Avoid throwing errors for invalid selectors.\n     * var elements = _.attempt(function(selector) {\n     *   return document.querySelectorAll(selector);\n     * }, '>_>');\n     *\n     * if (_.isError(elements)) {\n     *   elements = [];\n     * }\n     */\n    var attempt = baseRest(function(func, args) {\n      try {\n        return apply(func, undefined, args);\n      } catch (e) {\n        return isError(e) ? e : new Error(e);\n      }\n    });\n\n    /**\n     * Binds methods of an object to the object itself, overwriting the existing\n     * method.\n     *\n     * **Note:** This method doesn't set the \"length\" property of bound functions.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Object} object The object to bind and assign the bound methods to.\n     * @param {...(string|string[])} methodNames The object method names to bind.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var view = {\n     *   'label': 'docs',\n     *   'click': function() {\n     *     console.log('clicked ' + this.label);\n     *   }\n     * };\n     *\n     * _.bindAll(view, ['click']);\n     * jQuery(element).on('click', view.click);\n     * // => Logs 'clicked docs' when clicked.\n     */\n    var bindAll = flatRest(function(object, methodNames) {\n      arrayEach(methodNames, function(key) {\n        key = toKey(key);\n        baseAssignValue(object, key, bind(object[key], object));\n      });\n      return object;\n    });\n\n    /**\n     * Creates a function that iterates over `pairs` and invokes the corresponding\n     * function of the first predicate to return truthy. The predicate-function\n     * pairs are invoked with the `this` binding and arguments of the created\n     * function.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Array} pairs The predicate-function pairs.\n     * @returns {Function} Returns the new composite function.\n     * @example\n     *\n     * var func = _.cond([\n     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],\n     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n     *   [_.stubTrue,                      _.constant('no match')]\n     * ]);\n     *\n     * func({ 'a': 1, 'b': 2 });\n     * // => 'matches A'\n     *\n     * func({ 'a': 0, 'b': 1 });\n     * // => 'matches B'\n     *\n     * func({ 'a': '1', 'b': '2' });\n     * // => 'no match'\n     */\n    function cond(pairs) {\n      var length = pairs == null ? 0 : pairs.length,\n          toIteratee = getIteratee();\n\n      pairs = !length ? [] : arrayMap(pairs, function(pair) {\n        if (typeof pair[1] != 'function') {\n          throw new TypeError(FUNC_ERROR_TEXT);\n        }\n        return [toIteratee(pair[0]), pair[1]];\n      });\n\n      return baseRest(function(args) {\n        var index = -1;\n        while (++index < length) {\n          var pair = pairs[index];\n          if (apply(pair[0], this, args)) {\n            return apply(pair[1], this, args);\n          }\n        }\n      });\n    }\n\n    /**\n     * Creates a function that invokes the predicate properties of `source` with\n     * the corresponding property values of a given object, returning `true` if\n     * all predicates return truthy, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.conformsTo` with\n     * `source` partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 2, 'b': 1 },\n     *   { 'a': 1, 'b': 2 }\n     * ];\n     *\n     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n     * // => [{ 'a': 1, 'b': 2 }]\n     */\n    function conforms(source) {\n      return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that returns `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {*} value The value to return from the new function.\n     * @returns {Function} Returns the new constant function.\n     * @example\n     *\n     * var objects = _.times(2, _.constant({ 'a': 1 }));\n     *\n     * console.log(objects);\n     * // => [{ 'a': 1 }, { 'a': 1 }]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => true\n     */\n    function constant(value) {\n      return function() {\n        return value;\n      };\n    }\n\n    /**\n     * Checks `value` to determine whether a default value should be returned in\n     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n     * or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Util\n     * @param {*} value The value to check.\n     * @param {*} defaultValue The default value.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * _.defaultTo(1, 10);\n     * // => 1\n     *\n     * _.defaultTo(undefined, 10);\n     * // => 10\n     */\n    function defaultTo(value, defaultValue) {\n      return (value == null || value !== value) ? defaultValue : value;\n    }\n\n    /**\n     * Creates a function that returns the result of invoking the given functions\n     * with the `this` binding of the created function, where each successive\n     * invocation is supplied the return value of the previous.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flowRight\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flow([_.add, square]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flow = createFlow();\n\n    /**\n     * This method is like `_.flow` except that it creates a function that\n     * invokes the given functions from right to left.\n     *\n     * @static\n     * @since 3.0.0\n     * @memberOf _\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flow\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flowRight([square, _.add]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flowRight = createFlow(true);\n\n    /**\n     * This method returns the first argument it receives.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {*} value Any value.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     *\n     * console.log(_.identity(object) === object);\n     * // => true\n     */\n    function identity(value) {\n      return value;\n    }\n\n    /**\n     * Creates a function that invokes `func` with the arguments of the created\n     * function. If `func` is a property name, the created function returns the\n     * property value for a given element. If `func` is an array or object, the\n     * created function returns `true` for elements that contain the equivalent\n     * source properties, otherwise it returns `false`.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Util\n     * @param {*} [func=_.identity] The value to convert to a callback.\n     * @returns {Function} Returns the callback.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, _.iteratee(['user', 'fred']));\n     * // => [{ 'user': 'fred', 'age': 40 }]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, _.iteratee('user'));\n     * // => ['barney', 'fred']\n     *\n     * // Create custom iteratee shorthands.\n     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {\n     *     return func.test(string);\n     *   };\n     * });\n     *\n     * _.filter(['abc', 'def'], /ef/);\n     * // => ['def']\n     */\n    function iteratee(func) {\n      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between a given\n     * object and `source`, returning `true` if the given object has equivalent\n     * property values, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.isMatch` with `source`\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n     *\n     * // Checking for several possible values\n     * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matches(source) {\n      return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between the\n     * value at `path` of a given object to `srcValue`, returning `true` if the\n     * object value is equivalent, else `false`.\n     *\n     * **Note:** Partial comparisons will match empty array and empty object\n     * `srcValue` values against any array or object value, respectively. See\n     * `_.isEqual` for a list of supported value comparisons.\n     *\n     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.find(objects, _.matchesProperty('a', 4));\n     * // => { 'a': 4, 'b': 5, 'c': 6 }\n     *\n     * // Checking for several possible values\n     * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matchesProperty(path, srcValue) {\n      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that invokes the method at `path` of a given object.\n     * Any additional arguments are provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': _.constant(2) } },\n     *   { 'a': { 'b': _.constant(1) } }\n     * ];\n     *\n     * _.map(objects, _.method('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(objects, _.method(['a', 'b']));\n     * // => [2, 1]\n     */\n    var method = baseRest(function(path, args) {\n      return function(object) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * The opposite of `_.method`; this method creates a function that invokes\n     * the method at a given path of `object`. Any additional arguments are\n     * provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var array = _.times(3, _.constant),\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n     * // => [2, 0]\n     */\n    var methodOf = baseRest(function(object, args) {\n      return function(path) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * Adds all own enumerable string keyed function properties of a source\n     * object to the destination object. If `object` is a function, then methods\n     * are added to its prototype as well.\n     *\n     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n     * avoid conflicts caused by modifying the original.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Function|Object} [object=lodash] The destination object.\n     * @param {Object} source The object of functions to add.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n     * @returns {Function|Object} Returns `object`.\n     * @example\n     *\n     * function vowels(string) {\n     *   return _.filter(string, function(v) {\n     *     return /[aeiou]/i.test(v);\n     *   });\n     * }\n     *\n     * _.mixin({ 'vowels': vowels });\n     * _.vowels('fred');\n     * // => ['e']\n     *\n     * _('fred').vowels().value();\n     * // => ['e']\n     *\n     * _.mixin({ 'vowels': vowels }, { 'chain': false });\n     * _('fred').vowels();\n     * // => ['e']\n     */\n    function mixin(object, source, options) {\n      var props = keys(source),\n          methodNames = baseFunctions(source, props);\n\n      if (options == null &&\n          !(isObject(source) && (methodNames.length || !props.length))) {\n        options = source;\n        source = object;\n        object = this;\n        methodNames = baseFunctions(source, keys(source));\n      }\n      var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n          isFunc = isFunction(object);\n\n      arrayEach(methodNames, function(methodName) {\n        var func = source[methodName];\n        object[methodName] = func;\n        if (isFunc) {\n          object.prototype[methodName] = function() {\n            var chainAll = this.__chain__;\n            if (chain || chainAll) {\n              var result = object(this.__wrapped__),\n                  actions = result.__actions__ = copyArray(this.__actions__);\n\n              actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n              result.__chain__ = chainAll;\n              return result;\n            }\n            return func.apply(object, arrayPush([this.value()], arguments));\n          };\n        }\n      });\n\n      return object;\n    }\n\n    /**\n     * Reverts the `_` variable to its previous value and returns a reference to\n     * the `lodash` function.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @returns {Function} Returns the `lodash` function.\n     * @example\n     *\n     * var lodash = _.noConflict();\n     */\n    function noConflict() {\n      if (root._ === this) {\n        root._ = oldDash;\n      }\n      return this;\n    }\n\n    /**\n     * This method returns `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Util\n     * @example\n     *\n     * _.times(2, _.noop);\n     * // => [undefined, undefined]\n     */\n    function noop() {\n      // No operation performed.\n    }\n\n    /**\n     * Creates a function that gets the argument at index `n`. If `n` is negative,\n     * the nth argument from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [n=0] The index of the argument to return.\n     * @returns {Function} Returns the new pass-thru function.\n     * @example\n     *\n     * var func = _.nthArg(1);\n     * func('a', 'b', 'c', 'd');\n     * // => 'b'\n     *\n     * var func = _.nthArg(-2);\n     * func('a', 'b', 'c', 'd');\n     * // => 'c'\n     */\n    function nthArg(n) {\n      n = toInteger(n);\n      return baseRest(function(args) {\n        return baseNth(args, n);\n      });\n    }\n\n    /**\n     * Creates a function that invokes `iteratees` with the arguments it receives\n     * and returns their results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to invoke.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.over([Math.max, Math.min]);\n     *\n     * func(1, 2, 3, 4);\n     * // => [4, 1]\n     */\n    var over = createOver(arrayMap);\n\n    /**\n     * Creates a function that checks if **all** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overEvery([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => false\n     *\n     * func(NaN);\n     * // => false\n     */\n    var overEvery = createOver(arrayEvery);\n\n    /**\n     * Creates a function that checks if **any** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overSome([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => true\n     *\n     * func(NaN);\n     * // => false\n     *\n     * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])\n     * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])\n     */\n    var overSome = createOver(arraySome);\n\n    /**\n     * Creates a function that returns the value at `path` of a given object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': 2 } },\n     *   { 'a': { 'b': 1 } }\n     * ];\n     *\n     * _.map(objects, _.property('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n     * // => [1, 2]\n     */\n    function property(path) {\n      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n    }\n\n    /**\n     * The opposite of `_.property`; this method creates a function that returns\n     * the value at a given path of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var array = [0, 1, 2],\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n     * // => [2, 0]\n     */\n    function propertyOf(object) {\n      return function(path) {\n        return object == null ? undefined : baseGet(object, path);\n      };\n    }\n\n    /**\n     * Creates an array of numbers (positive and/or negative) progressing from\n     * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n     * `start` is specified without an `end` or `step`. If `end` is not specified,\n     * it's set to `start` with `start` then set to `0`.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.rangeRight\n     * @example\n     *\n     * _.range(4);\n     * // => [0, 1, 2, 3]\n     *\n     * _.range(-4);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 5);\n     * // => [1, 2, 3, 4]\n     *\n     * _.range(0, 20, 5);\n     * // => [0, 5, 10, 15]\n     *\n     * _.range(0, -4, -1);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.range(0);\n     * // => []\n     */\n    var range = createRange();\n\n    /**\n     * This method is like `_.range` except that it populates values in\n     * descending order.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.range\n     * @example\n     *\n     * _.rangeRight(4);\n     * // => [3, 2, 1, 0]\n     *\n     * _.rangeRight(-4);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 5);\n     * // => [4, 3, 2, 1]\n     *\n     * _.rangeRight(0, 20, 5);\n     * // => [15, 10, 5, 0]\n     *\n     * _.rangeRight(0, -4, -1);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.rangeRight(0);\n     * // => []\n     */\n    var rangeRight = createRange(true);\n\n    /**\n     * This method returns a new empty array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Array} Returns the new empty array.\n     * @example\n     *\n     * var arrays = _.times(2, _.stubArray);\n     *\n     * console.log(arrays);\n     * // => [[], []]\n     *\n     * console.log(arrays[0] === arrays[1]);\n     * // => false\n     */\n    function stubArray() {\n      return [];\n    }\n\n    /**\n     * This method returns `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `false`.\n     * @example\n     *\n     * _.times(2, _.stubFalse);\n     * // => [false, false]\n     */\n    function stubFalse() {\n      return false;\n    }\n\n    /**\n     * This method returns a new empty object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Object} Returns the new empty object.\n     * @example\n     *\n     * var objects = _.times(2, _.stubObject);\n     *\n     * console.log(objects);\n     * // => [{}, {}]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => false\n     */\n    function stubObject() {\n      return {};\n    }\n\n    /**\n     * This method returns an empty string.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {string} Returns the empty string.\n     * @example\n     *\n     * _.times(2, _.stubString);\n     * // => ['', '']\n     */\n    function stubString() {\n      return '';\n    }\n\n    /**\n     * This method returns `true`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `true`.\n     * @example\n     *\n     * _.times(2, _.stubTrue);\n     * // => [true, true]\n     */\n    function stubTrue() {\n      return true;\n    }\n\n    /**\n     * Invokes the iteratee `n` times, returning an array of the results of\n     * each invocation. The iteratee is invoked with one argument; (index).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} n The number of times to invoke `iteratee`.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.times(3, String);\n     * // => ['0', '1', '2']\n     *\n     *  _.times(4, _.constant(0));\n     * // => [0, 0, 0, 0]\n     */\n    function times(n, iteratee) {\n      n = toInteger(n);\n      if (n < 1 || n > MAX_SAFE_INTEGER) {\n        return [];\n      }\n      var index = MAX_ARRAY_LENGTH,\n          length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n      iteratee = getIteratee(iteratee);\n      n -= MAX_ARRAY_LENGTH;\n\n      var result = baseTimes(length, iteratee);\n      while (++index < n) {\n        iteratee(index);\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a property path array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the new property path array.\n     * @example\n     *\n     * _.toPath('a.b.c');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toPath('a[0].b.c');\n     * // => ['a', '0', 'b', 'c']\n     */\n    function toPath(value) {\n      if (isArray(value)) {\n        return arrayMap(value, toKey);\n      }\n      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n    }\n\n    /**\n     * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {string} [prefix=''] The value to prefix the ID with.\n     * @returns {string} Returns the unique ID.\n     * @example\n     *\n     * _.uniqueId('contact_');\n     * // => 'contact_104'\n     *\n     * _.uniqueId();\n     * // => '105'\n     */\n    function uniqueId(prefix) {\n      var id = ++idCounter;\n      return toString(prefix) + id;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Adds two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {number} augend The first number in an addition.\n     * @param {number} addend The second number in an addition.\n     * @returns {number} Returns the total.\n     * @example\n     *\n     * _.add(6, 4);\n     * // => 10\n     */\n    var add = createMathOperation(function(augend, addend) {\n      return augend + addend;\n    }, 0);\n\n    /**\n     * Computes `number` rounded up to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round up.\n     * @param {number} [precision=0] The precision to round up to.\n     * @returns {number} Returns the rounded up number.\n     * @example\n     *\n     * _.ceil(4.006);\n     * // => 5\n     *\n     * _.ceil(6.004, 2);\n     * // => 6.01\n     *\n     * _.ceil(6040, -2);\n     * // => 6100\n     */\n    var ceil = createRound('ceil');\n\n    /**\n     * Divide two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} dividend The first number in a division.\n     * @param {number} divisor The second number in a division.\n     * @returns {number} Returns the quotient.\n     * @example\n     *\n     * _.divide(6, 4);\n     * // => 1.5\n     */\n    var divide = createMathOperation(function(dividend, divisor) {\n      return dividend / divisor;\n    }, 1);\n\n    /**\n     * Computes `number` rounded down to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round down.\n     * @param {number} [precision=0] The precision to round down to.\n     * @returns {number} Returns the rounded down number.\n     * @example\n     *\n     * _.floor(4.006);\n     * // => 4\n     *\n     * _.floor(0.046, 2);\n     * // => 0.04\n     *\n     * _.floor(4060, -2);\n     * // => 4000\n     */\n    var floor = createRound('floor');\n\n    /**\n     * Computes the maximum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * _.max([4, 2, 8, 6]);\n     * // => 8\n     *\n     * _.max([]);\n     * // => undefined\n     */\n    function max(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseGt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.max` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.maxBy(objects, function(o) { return o.n; });\n     * // => { 'n': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.maxBy(objects, 'n');\n     * // => { 'n': 2 }\n     */\n    function maxBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n        : undefined;\n    }\n\n    /**\n     * Computes the mean of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * _.mean([4, 2, 8, 6]);\n     * // => 5\n     */\n    function mean(array) {\n      return baseMean(array, identity);\n    }\n\n    /**\n     * This method is like `_.mean` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be averaged.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.meanBy(objects, function(o) { return o.n; });\n     * // => 5\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.meanBy(objects, 'n');\n     * // => 5\n     */\n    function meanBy(array, iteratee) {\n      return baseMean(array, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * Computes the minimum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * _.min([4, 2, 8, 6]);\n     * // => 2\n     *\n     * _.min([]);\n     * // => undefined\n     */\n    function min(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseLt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.min` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.minBy(objects, function(o) { return o.n; });\n     * // => { 'n': 1 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.minBy(objects, 'n');\n     * // => { 'n': 1 }\n     */\n    function minBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n        : undefined;\n    }\n\n    /**\n     * Multiply two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} multiplier The first number in a multiplication.\n     * @param {number} multiplicand The second number in a multiplication.\n     * @returns {number} Returns the product.\n     * @example\n     *\n     * _.multiply(6, 4);\n     * // => 24\n     */\n    var multiply = createMathOperation(function(multiplier, multiplicand) {\n      return multiplier * multiplicand;\n    }, 1);\n\n    /**\n     * Computes `number` rounded to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round.\n     * @param {number} [precision=0] The precision to round to.\n     * @returns {number} Returns the rounded number.\n     * @example\n     *\n     * _.round(4.006);\n     * // => 4\n     *\n     * _.round(4.006, 2);\n     * // => 4.01\n     *\n     * _.round(4060, -2);\n     * // => 4100\n     */\n    var round = createRound('round');\n\n    /**\n     * Subtract two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {number} minuend The first number in a subtraction.\n     * @param {number} subtrahend The second number in a subtraction.\n     * @returns {number} Returns the difference.\n     * @example\n     *\n     * _.subtract(6, 4);\n     * // => 2\n     */\n    var subtract = createMathOperation(function(minuend, subtrahend) {\n      return minuend - subtrahend;\n    }, 0);\n\n    /**\n     * Computes the sum of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * _.sum([4, 2, 8, 6]);\n     * // => 20\n     */\n    function sum(array) {\n      return (array && array.length)\n        ? baseSum(array, identity)\n        : 0;\n    }\n\n    /**\n     * This method is like `_.sum` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be summed.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.sumBy(objects, function(o) { return o.n; });\n     * // => 20\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sumBy(objects, 'n');\n     * // => 20\n     */\n    function sumBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSum(array, getIteratee(iteratee, 2))\n        : 0;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return wrapped values in chain sequences.\n    lodash.after = after;\n    lodash.ary = ary;\n    lodash.assign = assign;\n    lodash.assignIn = assignIn;\n    lodash.assignInWith = assignInWith;\n    lodash.assignWith = assignWith;\n    lodash.at = at;\n    lodash.before = before;\n    lodash.bind = bind;\n    lodash.bindAll = bindAll;\n    lodash.bindKey = bindKey;\n    lodash.castArray = castArray;\n    lodash.chain = chain;\n    lodash.chunk = chunk;\n    lodash.compact = compact;\n    lodash.concat = concat;\n    lodash.cond = cond;\n    lodash.conforms = conforms;\n    lodash.constant = constant;\n    lodash.countBy = countBy;\n    lodash.create = create;\n    lodash.curry = curry;\n    lodash.curryRight = curryRight;\n    lodash.debounce = debounce;\n    lodash.defaults = defaults;\n    lodash.defaultsDeep = defaultsDeep;\n    lodash.defer = defer;\n    lodash.delay = delay;\n    lodash.difference = difference;\n    lodash.differenceBy = differenceBy;\n    lodash.differenceWith = differenceWith;\n    lodash.drop = drop;\n    lodash.dropRight = dropRight;\n    lodash.dropRightWhile = dropRightWhile;\n    lodash.dropWhile = dropWhile;\n    lodash.fill = fill;\n    lodash.filter = filter;\n    lodash.flatMap = flatMap;\n    lodash.flatMapDeep = flatMapDeep;\n    lodash.flatMapDepth = flatMapDepth;\n    lodash.flatten = flatten;\n    lodash.flattenDeep = flattenDeep;\n    lodash.flattenDepth = flattenDepth;\n    lodash.flip = flip;\n    lodash.flow = flow;\n    lodash.flowRight = flowRight;\n    lodash.fromPairs = fromPairs;\n    lodash.functions = functions;\n    lodash.functionsIn = functionsIn;\n    lodash.groupBy = groupBy;\n    lodash.initial = initial;\n    lodash.intersection = intersection;\n    lodash.intersectionBy = intersectionBy;\n    lodash.intersectionWith = intersectionWith;\n    lodash.invert = invert;\n    lodash.invertBy = invertBy;\n    lodash.invokeMap = invokeMap;\n    lodash.iteratee = iteratee;\n    lodash.keyBy = keyBy;\n    lodash.keys = keys;\n    lodash.keysIn = keysIn;\n    lodash.map = map;\n    lodash.mapKeys = mapKeys;\n    lodash.mapValues = mapValues;\n    lodash.matches = matches;\n    lodash.matchesProperty = matchesProperty;\n    lodash.memoize = memoize;\n    lodash.merge = merge;\n    lodash.mergeWith = mergeWith;\n    lodash.method = method;\n    lodash.methodOf = methodOf;\n    lodash.mixin = mixin;\n    lodash.negate = negate;\n    lodash.nthArg = nthArg;\n    lodash.omit = omit;\n    lodash.omitBy = omitBy;\n    lodash.once = once;\n    lodash.orderBy = orderBy;\n    lodash.over = over;\n    lodash.overArgs = overArgs;\n    lodash.overEvery = overEvery;\n    lodash.overSome = overSome;\n    lodash.partial = partial;\n    lodash.partialRight = partialRight;\n    lodash.partition = partition;\n    lodash.pick = pick;\n    lodash.pickBy = pickBy;\n    lodash.property = property;\n    lodash.propertyOf = propertyOf;\n    lodash.pull = pull;\n    lodash.pullAll = pullAll;\n    lodash.pullAllBy = pullAllBy;\n    lodash.pullAllWith = pullAllWith;\n    lodash.pullAt = pullAt;\n    lodash.range = range;\n    lodash.rangeRight = rangeRight;\n    lodash.rearg = rearg;\n    lodash.reject = reject;\n    lodash.remove = remove;\n    lodash.rest = rest;\n    lodash.reverse = reverse;\n    lodash.sampleSize = sampleSize;\n    lodash.set = set;\n    lodash.setWith = setWith;\n    lodash.shuffle = shuffle;\n    lodash.slice = slice;\n    lodash.sortBy = sortBy;\n    lodash.sortedUniq = sortedUniq;\n    lodash.sortedUniqBy = sortedUniqBy;\n    lodash.split = split;\n    lodash.spread = spread;\n    lodash.tail = tail;\n    lodash.take = take;\n    lodash.takeRight = takeRight;\n    lodash.takeRightWhile = takeRightWhile;\n    lodash.takeWhile = takeWhile;\n    lodash.tap = tap;\n    lodash.throttle = throttle;\n    lodash.thru = thru;\n    lodash.toArray = toArray;\n    lodash.toPairs = toPairs;\n    lodash.toPairsIn = toPairsIn;\n    lodash.toPath = toPath;\n    lodash.toPlainObject = toPlainObject;\n    lodash.transform = transform;\n    lodash.unary = unary;\n    lodash.union = union;\n    lodash.unionBy = unionBy;\n    lodash.unionWith = unionWith;\n    lodash.uniq = uniq;\n    lodash.uniqBy = uniqBy;\n    lodash.uniqWith = uniqWith;\n    lodash.unset = unset;\n    lodash.unzip = unzip;\n    lodash.unzipWith = unzipWith;\n    lodash.update = update;\n    lodash.updateWith = updateWith;\n    lodash.values = values;\n    lodash.valuesIn = valuesIn;\n    lodash.without = without;\n    lodash.words = words;\n    lodash.wrap = wrap;\n    lodash.xor = xor;\n    lodash.xorBy = xorBy;\n    lodash.xorWith = xorWith;\n    lodash.zip = zip;\n    lodash.zipObject = zipObject;\n    lodash.zipObjectDeep = zipObjectDeep;\n    lodash.zipWith = zipWith;\n\n    // Add aliases.\n    lodash.entries = toPairs;\n    lodash.entriesIn = toPairsIn;\n    lodash.extend = assignIn;\n    lodash.extendWith = assignInWith;\n\n    // Add methods to `lodash.prototype`.\n    mixin(lodash, lodash);\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return unwrapped values in chain sequences.\n    lodash.add = add;\n    lodash.attempt = attempt;\n    lodash.camelCase = camelCase;\n    lodash.capitalize = capitalize;\n    lodash.ceil = ceil;\n    lodash.clamp = clamp;\n    lodash.clone = clone;\n    lodash.cloneDeep = cloneDeep;\n    lodash.cloneDeepWith = cloneDeepWith;\n    lodash.cloneWith = cloneWith;\n    lodash.conformsTo = conformsTo;\n    lodash.deburr = deburr;\n    lodash.defaultTo = defaultTo;\n    lodash.divide = divide;\n    lodash.endsWith = endsWith;\n    lodash.eq = eq;\n    lodash.escape = escape;\n    lodash.escapeRegExp = escapeRegExp;\n    lodash.every = every;\n    lodash.find = find;\n    lodash.findIndex = findIndex;\n    lodash.findKey = findKey;\n    lodash.findLast = findLast;\n    lodash.findLastIndex = findLastIndex;\n    lodash.findLastKey = findLastKey;\n    lodash.floor = floor;\n    lodash.forEach = forEach;\n    lodash.forEachRight = forEachRight;\n    lodash.forIn = forIn;\n    lodash.forInRight = forInRight;\n    lodash.forOwn = forOwn;\n    lodash.forOwnRight = forOwnRight;\n    lodash.get = get;\n    lodash.gt = gt;\n    lodash.gte = gte;\n    lodash.has = has;\n    lodash.hasIn = hasIn;\n    lodash.head = head;\n    lodash.identity = identity;\n    lodash.includes = includes;\n    lodash.indexOf = indexOf;\n    lodash.inRange = inRange;\n    lodash.invoke = invoke;\n    lodash.isArguments = isArguments;\n    lodash.isArray = isArray;\n    lodash.isArrayBuffer = isArrayBuffer;\n    lodash.isArrayLike = isArrayLike;\n    lodash.isArrayLikeObject = isArrayLikeObject;\n    lodash.isBoolean = isBoolean;\n    lodash.isBuffer = isBuffer;\n    lodash.isDate = isDate;\n    lodash.isElement = isElement;\n    lodash.isEmpty = isEmpty;\n    lodash.isEqual = isEqual;\n    lodash.isEqualWith = isEqualWith;\n    lodash.isError = isError;\n    lodash.isFinite = isFinite;\n    lodash.isFunction = isFunction;\n    lodash.isInteger = isInteger;\n    lodash.isLength = isLength;\n    lodash.isMap = isMap;\n    lodash.isMatch = isMatch;\n    lodash.isMatchWith = isMatchWith;\n    lodash.isNaN = isNaN;\n    lodash.isNative = isNative;\n    lodash.isNil = isNil;\n    lodash.isNull = isNull;\n    lodash.isNumber = isNumber;\n    lodash.isObject = isObject;\n    lodash.isObjectLike = isObjectLike;\n    lodash.isPlainObject = isPlainObject;\n    lodash.isRegExp = isRegExp;\n    lodash.isSafeInteger = isSafeInteger;\n    lodash.isSet = isSet;\n    lodash.isString = isString;\n    lodash.isSymbol = isSymbol;\n    lodash.isTypedArray = isTypedArray;\n    lodash.isUndefined = isUndefined;\n    lodash.isWeakMap = isWeakMap;\n    lodash.isWeakSet = isWeakSet;\n    lodash.join = join;\n    lodash.kebabCase = kebabCase;\n    lodash.last = last;\n    lodash.lastIndexOf = lastIndexOf;\n    lodash.lowerCase = lowerCase;\n    lodash.lowerFirst = lowerFirst;\n    lodash.lt = lt;\n    lodash.lte = lte;\n    lodash.max = max;\n    lodash.maxBy = maxBy;\n    lodash.mean = mean;\n    lodash.meanBy = meanBy;\n    lodash.min = min;\n    lodash.minBy = minBy;\n    lodash.stubArray = stubArray;\n    lodash.stubFalse = stubFalse;\n    lodash.stubObject = stubObject;\n    lodash.stubString = stubString;\n    lodash.stubTrue = stubTrue;\n    lodash.multiply = multiply;\n    lodash.nth = nth;\n    lodash.noConflict = noConflict;\n    lodash.noop = noop;\n    lodash.now = now;\n    lodash.pad = pad;\n    lodash.padEnd = padEnd;\n    lodash.padStart = padStart;\n    lodash.parseInt = parseInt;\n    lodash.random = random;\n    lodash.reduce = reduce;\n    lodash.reduceRight = reduceRight;\n    lodash.repeat = repeat;\n    lodash.replace = replace;\n    lodash.result = result;\n    lodash.round = round;\n    lodash.runInContext = runInContext;\n    lodash.sample = sample;\n    lodash.size = size;\n    lodash.snakeCase = snakeCase;\n    lodash.some = some;\n    lodash.sortedIndex = sortedIndex;\n    lodash.sortedIndexBy = sortedIndexBy;\n    lodash.sortedIndexOf = sortedIndexOf;\n    lodash.sortedLastIndex = sortedLastIndex;\n    lodash.sortedLastIndexBy = sortedLastIndexBy;\n    lodash.sortedLastIndexOf = sortedLastIndexOf;\n    lodash.startCase = startCase;\n    lodash.startsWith = startsWith;\n    lodash.subtract = subtract;\n    lodash.sum = sum;\n    lodash.sumBy = sumBy;\n    lodash.template = template;\n    lodash.times = times;\n    lodash.toFinite = toFinite;\n    lodash.toInteger = toInteger;\n    lodash.toLength = toLength;\n    lodash.toLower = toLower;\n    lodash.toNumber = toNumber;\n    lodash.toSafeInteger = toSafeInteger;\n    lodash.toString = toString;\n    lodash.toUpper = toUpper;\n    lodash.trim = trim;\n    lodash.trimEnd = trimEnd;\n    lodash.trimStart = trimStart;\n    lodash.truncate = truncate;\n    lodash.unescape = unescape;\n    lodash.uniqueId = uniqueId;\n    lodash.upperCase = upperCase;\n    lodash.upperFirst = upperFirst;\n\n    // Add aliases.\n    lodash.each = forEach;\n    lodash.eachRight = forEachRight;\n    lodash.first = head;\n\n    mixin(lodash, (function() {\n      var source = {};\n      baseForOwn(lodash, function(func, methodName) {\n        if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n          source[methodName] = func;\n        }\n      });\n      return source;\n    }()), { 'chain': false });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The semantic version number.\n     *\n     * @static\n     * @memberOf _\n     * @type {string}\n     */\n    lodash.VERSION = VERSION;\n\n    // Assign default placeholders.\n    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n      lodash[methodName].placeholder = lodash;\n    });\n\n    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n    arrayEach(['drop', 'take'], function(methodName, index) {\n      LazyWrapper.prototype[methodName] = function(n) {\n        n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n        var result = (this.__filtered__ && !index)\n          ? new LazyWrapper(this)\n          : this.clone();\n\n        if (result.__filtered__) {\n          result.__takeCount__ = nativeMin(n, result.__takeCount__);\n        } else {\n          result.__views__.push({\n            'size': nativeMin(n, MAX_ARRAY_LENGTH),\n            'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n          });\n        }\n        return result;\n      };\n\n      LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n        return this.reverse()[methodName](n).reverse();\n      };\n    });\n\n    // Add `LazyWrapper` methods that accept an `iteratee` value.\n    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n      var type = index + 1,\n          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n      LazyWrapper.prototype[methodName] = function(iteratee) {\n        var result = this.clone();\n        result.__iteratees__.push({\n          'iteratee': getIteratee(iteratee, 3),\n          'type': type\n        });\n        result.__filtered__ = result.__filtered__ || isFilter;\n        return result;\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.head` and `_.last`.\n    arrayEach(['head', 'last'], function(methodName, index) {\n      var takeName = 'take' + (index ? 'Right' : '');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this[takeName](1).value()[0];\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n    arrayEach(['initial', 'tail'], function(methodName, index) {\n      var dropName = 'drop' + (index ? '' : 'Right');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n      };\n    });\n\n    LazyWrapper.prototype.compact = function() {\n      return this.filter(identity);\n    };\n\n    LazyWrapper.prototype.find = function(predicate) {\n      return this.filter(predicate).head();\n    };\n\n    LazyWrapper.prototype.findLast = function(predicate) {\n      return this.reverse().find(predicate);\n    };\n\n    LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n      if (typeof path == 'function') {\n        return new LazyWrapper(this);\n      }\n      return this.map(function(value) {\n        return baseInvoke(value, path, args);\n      });\n    });\n\n    LazyWrapper.prototype.reject = function(predicate) {\n      return this.filter(negate(getIteratee(predicate)));\n    };\n\n    LazyWrapper.prototype.slice = function(start, end) {\n      start = toInteger(start);\n\n      var result = this;\n      if (result.__filtered__ && (start > 0 || end < 0)) {\n        return new LazyWrapper(result);\n      }\n      if (start < 0) {\n        result = result.takeRight(-start);\n      } else if (start) {\n        result = result.drop(start);\n      }\n      if (end !== undefined) {\n        end = toInteger(end);\n        result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n      }\n      return result;\n    };\n\n    LazyWrapper.prototype.takeRightWhile = function(predicate) {\n      return this.reverse().takeWhile(predicate).reverse();\n    };\n\n    LazyWrapper.prototype.toArray = function() {\n      return this.take(MAX_ARRAY_LENGTH);\n    };\n\n    // Add `LazyWrapper` methods to `lodash.prototype`.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n          isTaker = /^(?:head|last)$/.test(methodName),\n          lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n          retUnwrapped = isTaker || /^find/.test(methodName);\n\n      if (!lodashFunc) {\n        return;\n      }\n      lodash.prototype[methodName] = function() {\n        var value = this.__wrapped__,\n            args = isTaker ? [1] : arguments,\n            isLazy = value instanceof LazyWrapper,\n            iteratee = args[0],\n            useLazy = isLazy || isArray(value);\n\n        var interceptor = function(value) {\n          var result = lodashFunc.apply(lodash, arrayPush([value], args));\n          return (isTaker && chainAll) ? result[0] : result;\n        };\n\n        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n          // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n          isLazy = useLazy = false;\n        }\n        var chainAll = this.__chain__,\n            isHybrid = !!this.__actions__.length,\n            isUnwrapped = retUnwrapped && !chainAll,\n            onlyLazy = isLazy && !isHybrid;\n\n        if (!retUnwrapped && useLazy) {\n          value = onlyLazy ? value : new LazyWrapper(this);\n          var result = func.apply(value, args);\n          result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n          return new LodashWrapper(result, chainAll);\n        }\n        if (isUnwrapped && onlyLazy) {\n          return func.apply(this, args);\n        }\n        result = this.thru(interceptor);\n        return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n      };\n    });\n\n    // Add `Array` methods to `lodash.prototype`.\n    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n      var func = arrayProto[methodName],\n          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n          retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n      lodash.prototype[methodName] = function() {\n        var args = arguments;\n        if (retUnwrapped && !this.__chain__) {\n          var value = this.value();\n          return func.apply(isArray(value) ? value : [], args);\n        }\n        return this[chainName](function(value) {\n          return func.apply(isArray(value) ? value : [], args);\n        });\n      };\n    });\n\n    // Map minified method names to their real names.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var lodashFunc = lodash[methodName];\n      if (lodashFunc) {\n        var key = lodashFunc.name + '';\n        if (!hasOwnProperty.call(realNames, key)) {\n          realNames[key] = [];\n        }\n        realNames[key].push({ 'name': methodName, 'func': lodashFunc });\n      }\n    });\n\n    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n      'name': 'wrapper',\n      'func': undefined\n    }];\n\n    // Add methods to `LazyWrapper`.\n    LazyWrapper.prototype.clone = lazyClone;\n    LazyWrapper.prototype.reverse = lazyReverse;\n    LazyWrapper.prototype.value = lazyValue;\n\n    // Add chain sequence methods to the `lodash` wrapper.\n    lodash.prototype.at = wrapperAt;\n    lodash.prototype.chain = wrapperChain;\n    lodash.prototype.commit = wrapperCommit;\n    lodash.prototype.next = wrapperNext;\n    lodash.prototype.plant = wrapperPlant;\n    lodash.prototype.reverse = wrapperReverse;\n    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n    // Add lazy aliases.\n    lodash.prototype.first = lodash.prototype.head;\n\n    if (symIterator) {\n      lodash.prototype[symIterator] = wrapperToIterator;\n    }\n    return lodash;\n  });\n\n  /*--------------------------------------------------------------------------*/\n\n  // Export lodash.\n  var _ = runInContext();\n\n  // Some AMD build optimizers, like r.js, check for condition patterns like:\n  if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n    // Expose Lodash on the global object to prevent errors when Lodash is\n    // loaded by a script tag in the presence of an AMD loader.\n    // See http://requirejs.org/docs/errors.html#mismatch for more details.\n    // Use `_.noConflict` to remove Lodash from the global object.\n    root._ = _;\n\n    // Define as an anonymous module so, through path mapping, it can be\n    // referenced as the \"underscore\" module.\n    define(function() {\n      return _;\n    });\n  }\n  // Check for `exports` after `define` in case a build optimizer adds it.\n  else if (freeModule) {\n    // Export for Node.js.\n    (freeModule.exports = _)._ = _;\n    // Export for CommonJS support.\n    freeExports._ = _;\n  }\n  else {\n    // Export to the global object.\n    root._ = _;\n  }\n}.call(this));\n","/**\n * @license lucide-react v0.468.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n  return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\n\nexport { mergeClasses, toKebabCase };\n//# sourceMappingURL=utils.js.map\n","/**\n * @license lucide-react v0.468.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n  xmlns: \"http://www.w3.org/2000/svg\",\n  width: 24,\n  height: 24,\n  viewBox: \"0 0 24 24\",\n  fill: \"none\",\n  stroke: \"currentColor\",\n  strokeWidth: 2,\n  strokeLinecap: \"round\",\n  strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.468.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { mergeClasses } from './shared/src/utils.js';\n\nconst Icon = forwardRef(\n  ({\n    color = \"currentColor\",\n    size = 24,\n    strokeWidth = 2,\n    absoluteStrokeWidth,\n    className = \"\",\n    children,\n    iconNode,\n    ...rest\n  }, ref) => {\n    return createElement(\n      \"svg\",\n      {\n        ref,\n        ...defaultAttributes,\n        width: size,\n        height: size,\n        stroke: color,\n        strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n        className: mergeClasses(\"lucide\", className),\n        ...rest\n      },\n      [\n        ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n        ...Array.isArray(children) ? children : [children]\n      ]\n    );\n  }\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.468.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses, toKebabCase } from './shared/src/utils.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n  const Component = forwardRef(\n    ({ className, ...props }, ref) => createElement(Icon, {\n      ref,\n      iconNode,\n      className: mergeClasses(`lucide-${toKebabCase(iconName)}`, className),\n      ...props\n    })\n  );\n  Component.displayName = `${iconName}`;\n  return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v0.468.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ArrowUpDown = createLucideIcon(\"ArrowUpDown\", [\n  [\"path\", { d: \"m21 16-4 4-4-4\", key: \"f6ql7i\" }],\n  [\"path\", { d: \"M17 20V4\", key: \"1ejh1v\" }],\n  [\"path\", { d: \"m3 8 4-4 4 4\", key: \"11wl7u\" }],\n  [\"path\", { d: \"M7 4v16\", key: \"1glfcx\" }]\n]);\n\nexport { ArrowUpDown as default };\n//# sourceMappingURL=arrow-up-down.js.map\n","/**\n * @license lucide-react v0.468.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Briefcase = createLucideIcon(\"Briefcase\", [\n  [\"path\", { d: \"M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16\", key: \"jecpp\" }],\n  [\"rect\", { width: \"20\", height: \"14\", x: \"2\", y: \"6\", rx: \"2\", key: \"i6l2r4\" }]\n]);\n\nexport { Briefcase as default };\n//# sourceMappingURL=briefcase.js.map\n","/**\n * @license lucide-react v0.468.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst CalendarDays = createLucideIcon(\"CalendarDays\", [\n  [\"path\", { d: \"M8 2v4\", key: \"1cmpym\" }],\n  [\"path\", { d: \"M16 2v4\", key: \"4m81vk\" }],\n  [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"4\", rx: \"2\", key: \"1hopcy\" }],\n  [\"path\", { d: \"M3 10h18\", key: \"8toen8\" }],\n  [\"path\", { d: \"M8 14h.01\", key: \"6423bh\" }],\n  [\"path\", { d: \"M12 14h.01\", key: \"1etili\" }],\n  [\"path\", { d: \"M16 14h.01\", key: \"1gbofw\" }],\n  [\"path\", { d: \"M8 18h.01\", key: \"lrp35t\" }],\n  [\"path\", { d: \"M12 18h.01\", key: \"mhygvu\" }],\n  [\"path\", { d: \"M16 18h.01\", key: \"kzsmim\" }]\n]);\n\nexport { CalendarDays as default };\n//# sourceMappingURL=calendar-days.js.map\n","/**\n * @license lucide-react v0.468.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Check = createLucideIcon(\"Check\", [[\"path\", { d: \"M20 6 9 17l-5-5\", key: \"1gmf2c\" }]]);\n\nexport { Check as default };\n//# sourceMappingURL=check.js.map\n","/**\n * @license lucide-react v0.468.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ChevronDown = createLucideIcon(\"ChevronDown\", [\n  [\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]\n]);\n\nexport { ChevronDown as default };\n//# sourceMappingURL=chevron-down.js.map\n","/**\n * @license lucide-react v0.468.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ChevronLeft = createLucideIcon(\"ChevronLeft\", [\n  [\"path\", { d: \"m15 18-6-6 6-6\", key: \"1wnfg3\" }]\n]);\n\nexport { ChevronLeft as default };\n//# sourceMappingURL=chevron-left.js.map\n","/**\n * @license lucide-react v0.468.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ChevronRight = createLucideIcon(\"ChevronRight\", [\n  [\"path\", { d: \"m9 18 6-6-6-6\", key: \"mthhwq\" }]\n]);\n\nexport { ChevronRight as default };\n//# sourceMappingURL=chevron-right.js.map\n","/**\n * @license lucide-react v0.468.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst CircleAlert = createLucideIcon(\"CircleAlert\", [\n  [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n  [\"line\", { x1: \"12\", x2: \"12\", y1: \"8\", y2: \"12\", key: \"1pkeuh\" }],\n  [\"line\", { x1: \"12\", x2: \"12.01\", y1: \"16\", y2: \"16\", key: \"4dfq90\" }]\n]);\n\nexport { CircleAlert as default };\n//# sourceMappingURL=circle-alert.js.map\n","/**\n * @license lucide-react v0.468.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst CircleCheckBig = createLucideIcon(\"CircleCheckBig\", [\n  [\"path\", { d: \"M21.801 10A10 10 0 1 1 17 3.335\", key: \"yps3ct\" }],\n  [\"path\", { d: \"m9 11 3 3L22 4\", key: \"1pflzl\" }]\n]);\n\nexport { CircleCheckBig as default };\n//# sourceMappingURL=circle-check-big.js.map\n","/**\n * @license lucide-react v0.468.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst CircleCheck = createLucideIcon(\"CircleCheck\", [\n  [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n  [\"path\", { d: \"m9 12 2 2 4-4\", key: \"dzmm74\" }]\n]);\n\nexport { CircleCheck as default };\n//# sourceMappingURL=circle-check.js.map\n","/**\n * @license lucide-react v0.468.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst CirclePlay = createLucideIcon(\"CirclePlay\", [\n  [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n  [\"polygon\", { points: \"10 8 16 12 10 16 10 8\", key: \"1cimsy\" }]\n]);\n\nexport { CirclePlay as default };\n//# sourceMappingURL=circle-play.js.map\n","/**\n * @license lucide-react v0.468.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst CircleX = createLucideIcon(\"CircleX\", [\n  [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n  [\"path\", { d: \"m15 9-6 6\", key: \"1uzhvr\" }],\n  [\"path\", { d: \"m9 9 6 6\", key: \"z0biqf\" }]\n]);\n\nexport { CircleX as default };\n//# sourceMappingURL=circle-x.js.map\n","/**\n * @license lucide-react v0.468.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Download = createLucideIcon(\"Download\", [\n  [\"path\", { d: \"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\", key: \"ih7n3h\" }],\n  [\"polyline\", { points: \"7 10 12 15 17 10\", key: \"2ggqvy\" }],\n  [\"line\", { x1: \"12\", x2: \"12\", y1: \"15\", y2: \"3\", key: \"1vk2je\" }]\n]);\n\nexport { Download as default };\n//# sourceMappingURL=download.js.map\n","/**\n * @license lucide-react v0.468.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Ellipsis = createLucideIcon(\"Ellipsis\", [\n  [\"circle\", { cx: \"12\", cy: \"12\", r: \"1\", key: \"41hilf\" }],\n  [\"circle\", { cx: \"19\", cy: \"12\", r: \"1\", key: \"1wjl8i\" }],\n  [\"circle\", { cx: \"5\", cy: \"12\", r: \"1\", key: \"1pcz8c\" }]\n]);\n\nexport { Ellipsis as default };\n//# sourceMappingURL=ellipsis.js.map\n","/**\n * @license lucide-react v0.468.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ExternalLink = createLucideIcon(\"ExternalLink\", [\n  [\"path\", { d: \"M15 3h6v6\", key: \"1q9fwt\" }],\n  [\"path\", { d: \"M10 14 21 3\", key: \"gplh6r\" }],\n  [\"path\", { d: \"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\", key: \"a6xqqp\" }]\n]);\n\nexport { ExternalLink as default };\n//# sourceMappingURL=external-link.js.map\n","/**\n * @license lucide-react v0.468.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Eye = createLucideIcon(\"Eye\", [\n  [\n    \"path\",\n    {\n      d: \"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\",\n      key: \"1nclc0\"\n    }\n  ],\n  [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }]\n]);\n\nexport { Eye as default };\n//# sourceMappingURL=eye.js.map\n","/**\n * @license lucide-react v0.468.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst FileText = createLucideIcon(\"FileText\", [\n  [\"path\", { d: \"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\", key: \"1rqfz7\" }],\n  [\"path\", { d: \"M14 2v4a2 2 0 0 0 2 2h4\", key: \"tnqrlb\" }],\n  [\"path\", { d: \"M10 9H8\", key: \"b1mrlr\" }],\n  [\"path\", { d: \"M16 13H8\", key: \"t4e002\" }],\n  [\"path\", { d: \"M16 17H8\", key: \"z1uh3a\" }]\n]);\n\nexport { FileText as default };\n//# sourceMappingURL=file-text.js.map\n","/**\n * @license lucide-react v0.468.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst FileX = createLucideIcon(\"FileX\", [\n  [\"path\", { d: \"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\", key: \"1rqfz7\" }],\n  [\"path\", { d: \"M14 2v4a2 2 0 0 0 2 2h4\", key: \"tnqrlb\" }],\n  [\"path\", { d: \"m14.5 12.5-5 5\", key: \"b62r18\" }],\n  [\"path\", { d: \"m9.5 12.5 5 5\", key: \"1rk7el\" }]\n]);\n\nexport { FileX as default };\n//# sourceMappingURL=file-x.js.map\n","/**\n * @license lucide-react v0.468.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst FolderOpen = createLucideIcon(\"FolderOpen\", [\n  [\n    \"path\",\n    {\n      d: \"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2\",\n      key: \"usdka0\"\n    }\n  ]\n]);\n\nexport { FolderOpen as default };\n//# sourceMappingURL=folder-open.js.map\n","/**\n * @license lucide-react v0.468.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Folder = createLucideIcon(\"Folder\", [\n  [\n    \"path\",\n    {\n      d: \"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z\",\n      key: \"1kt360\"\n    }\n  ]\n]);\n\nexport { Folder as default };\n//# sourceMappingURL=folder.js.map\n","/**\n * @license lucide-react v0.468.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Globe = createLucideIcon(\"Globe\", [\n  [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n  [\"path\", { d: \"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\", key: \"13o1zl\" }],\n  [\"path\", { d: \"M2 12h20\", key: \"9i4pu4\" }]\n]);\n\nexport { Globe as default };\n//# sourceMappingURL=globe.js.map\n","/**\n * @license lucide-react v0.468.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst LoaderCircle = createLucideIcon(\"LoaderCircle\", [\n  [\"path\", { d: \"M21 12a9 9 0 1 1-6.219-8.56\", key: \"13zald\" }]\n]);\n\nexport { LoaderCircle as default };\n//# sourceMappingURL=loader-circle.js.map\n","/**\n * @license lucide-react v0.468.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Lock = createLucideIcon(\"Lock\", [\n  [\"rect\", { width: \"18\", height: \"11\", x: \"3\", y: \"11\", rx: \"2\", ry: \"2\", key: \"1w4ew1\" }],\n  [\"path\", { d: \"M7 11V7a5 5 0 0 1 10 0v4\", key: \"fwvmzm\" }]\n]);\n\nexport { Lock as default };\n//# sourceMappingURL=lock.js.map\n","/**\n * @license lucide-react v0.468.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Minus = createLucideIcon(\"Minus\", [[\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }]]);\n\nexport { Minus as default };\n//# sourceMappingURL=minus.js.map\n","/**\n * @license lucide-react v0.468.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst MoveUpRight = createLucideIcon(\"MoveUpRight\", [\n  [\"path\", { d: \"M13 5H19V11\", key: \"1n1gyv\" }],\n  [\"path\", { d: \"M19 5L5 19\", key: \"72u4yj\" }]\n]);\n\nexport { MoveUpRight as default };\n//# sourceMappingURL=move-up-right.js.map\n","/**\n * @license lucide-react v0.468.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst PenOff = createLucideIcon(\"PenOff\", [\n  [\n    \"path\",\n    {\n      d: \"m10 10-6.157 6.162a2 2 0 0 0-.5.833l-1.322 4.36a.5.5 0 0 0 .622.624l4.358-1.323a2 2 0 0 0 .83-.5L14 13.982\",\n      key: \"bjo8r8\"\n    }\n  ],\n  [\"path\", { d: \"m12.829 7.172 4.359-4.346a1 1 0 1 1 3.986 3.986l-4.353 4.353\", key: \"16h5ne\" }],\n  [\"path\", { d: \"m2 2 20 20\", key: \"1ooewy\" }]\n]);\n\nexport { PenOff as default };\n//# sourceMappingURL=pen-off.js.map\n","/**\n * @license lucide-react v0.468.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst RefreshCw = createLucideIcon(\"RefreshCw\", [\n  [\"path\", { d: \"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\", key: \"v9h5vc\" }],\n  [\"path\", { d: \"M21 3v5h-5\", key: \"1q7to0\" }],\n  [\"path\", { d: \"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\", key: \"3uifl3\" }],\n  [\"path\", { d: \"M8 16H3v5\", key: \"1cv678\" }]\n]);\n\nexport { RefreshCw as default };\n//# sourceMappingURL=refresh-cw.js.map\n","/**\n * @license lucide-react v0.468.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst RotateCw = createLucideIcon(\"RotateCw\", [\n  [\"path\", { d: \"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\", key: \"1p45f6\" }],\n  [\"path\", { d: \"M21 3v5h-5\", key: \"1q7to0\" }]\n]);\n\nexport { RotateCw as default };\n//# sourceMappingURL=rotate-cw.js.map\n","/**\n * @license lucide-react v0.468.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst TriangleAlert = createLucideIcon(\"TriangleAlert\", [\n  [\n    \"path\",\n    {\n      d: \"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\",\n      key: \"wmoenq\"\n    }\n  ],\n  [\"path\", { d: \"M12 9v4\", key: \"juzpu7\" }],\n  [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n]);\n\nexport { TriangleAlert as default };\n//# sourceMappingURL=triangle-alert.js.map\n","/**\n * @license lucide-react v0.468.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst X = createLucideIcon(\"X\", [\n  [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n  [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n]);\n\nexport { X as default };\n//# sourceMappingURL=x.js.map\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","\"use client\";\nimport{isValidElement as Bt}from\"react\";var L=t=>typeof t==\"number\"&&!isNaN(t),N=t=>typeof t==\"string\",P=t=>typeof t==\"function\",ut=t=>N(t)||L(t),z=t=>N(t)||P(t)?t:null,yt=(t,o)=>t===!1||L(t)&&t>0?t:o,F=t=>Bt(t)||N(t)||P(t)||L(t);import Tt,{useEffect as zt,useLayoutEffect as Ft,useRef as Ut}from\"react\";function J(t,o,e=300){let{scrollHeight:r,style:a}=t;requestAnimationFrame(()=>{a.minHeight=\"initial\",a.height=r+\"px\",a.transition=`all ${e}ms`,requestAnimationFrame(()=>{a.height=\"0\",a.padding=\"0\",a.margin=\"0\",setTimeout(o,e)})})}function R({enter:t,exit:o,appendPosition:e=!1,collapse:r=!0,collapseDuration:a=300}){return function({children:s,position:f,preventExitTransition:c,done:T,nodeRef:g,isIn:v,playToast:x}){let C=e?`${t}--${f}`:t,S=e?`${o}--${f}`:o,E=Ut(0);return Ft(()=>{let d=g.current,p=C.split(\" \"),b=n=>{n.target===g.current&&(x(),d.removeEventListener(\"animationend\",b),d.removeEventListener(\"animationcancel\",b),E.current===0&&n.type!==\"animationcancel\"&&d.classList.remove(...p))};d.classList.add(...p),d.addEventListener(\"animationend\",b),d.addEventListener(\"animationcancel\",b)},[]),zt(()=>{let d=g.current,p=()=>{d.removeEventListener(\"animationend\",p),r?J(d,T,a):T()};v||(c?p():(E.current=1,d.className+=` ${S}`,d.addEventListener(\"animationend\",p)))},[v]),Tt.createElement(Tt.Fragment,null,s)}}import{cloneElement as Ht,isValidElement as Vt}from\"react\";function tt(t,o){return{content:ot(t.content,t.props),containerId:t.props.containerId,id:t.props.toastId,theme:t.props.theme,type:t.props.type,data:t.props.data||{},isLoading:t.props.isLoading,icon:t.props.icon,reason:t.removalReason,status:o}}function ot(t,o,e=!1){return Vt(t)&&!N(t.type)?Ht(t,{closeToast:o.closeToast,toastProps:o,data:o.data,isPaused:e}):P(t)?t({closeToast:o.closeToast,toastProps:o,data:o.data,isPaused:e}):t}import et from\"react\";function gt({closeToast:t,theme:o,ariaLabel:e=\"close\"}){return et.createElement(\"button\",{className:`Toastify__close-button Toastify__close-button--${o}`,type:\"button\",onClick:r=>{r.stopPropagation(),t(!0)},\"aria-label\":e},et.createElement(\"svg\",{\"aria-hidden\":\"true\",viewBox:\"0 0 14 16\"},et.createElement(\"path\",{fillRule:\"evenodd\",d:\"M7.71 8.23l3.75 3.75-1.48 1.48-3.75-3.75-3.75 3.75L1 11.98l3.75-3.75L1 4.48 2.48 3l3.75 3.75L9.98 3l1.48 1.48-3.75 3.75z\"})))}import at from\"react\";import _t from\"clsx\";function bt({delay:t,isRunning:o,closeToast:e,type:r=\"default\",hide:a,className:l,controlledProgress:s,progress:f,rtl:c,isIn:T,theme:g}){let v=a||s&&f===0,x={animationDuration:`${t}ms`,animationPlayState:o?\"running\":\"paused\"};s&&(x.transform=`scaleX(${f})`);let C=_t(\"Toastify__progress-bar\",s?\"Toastify__progress-bar--controlled\":\"Toastify__progress-bar--animated\",`Toastify__progress-bar-theme--${g}`,`Toastify__progress-bar--${r}`,{[\"Toastify__progress-bar--rtl\"]:c}),S=P(l)?l({rtl:c,type:r,defaultClassName:C}):_t(C,l),E={[s&&f>=1?\"onTransitionEnd\":\"onAnimationEnd\"]:s&&f<1?null:()=>{T&&e()}};return at.createElement(\"div\",{className:\"Toastify__progress-bar--wrp\",\"data-hidden\":v},at.createElement(\"div\",{className:`Toastify__progress-bar--bg Toastify__progress-bar-theme--${g} Toastify__progress-bar--${r}`}),at.createElement(\"div\",{role:\"progressbar\",\"aria-hidden\":v?\"true\":\"false\",\"aria-label\":\"notification timer\",\"aria-valuenow\":s?Math.round(f*100):void 0,\"aria-valuemin\":0,\"aria-valuemax\":100,className:S,style:x,...E}))}import Lt from\"clsx\";import ct,{useEffect as go,useRef as _o,useState as bo}from\"react\";var Qt=1,st=()=>`${Qt++}`;function vt(t,o,e){let r=1,a=0,l=[],s=[],f=o,c=new Map,T=new Set,g=i=>(T.add(i),()=>T.delete(i)),v=()=>{s=Array.from(c.values()),T.forEach(i=>i())},x=({containerId:i,toastId:n,updateId:u})=>{let h=i?i!==t:t!==1,m=c.has(n)&&u==null;return h||m},C=(i,n)=>{c.forEach(u=>{var h;(n==null||n===u.props.toastId)&&((h=u.toggle)==null||h.call(u,i))})},S=i=>{var n,u;i.isActive&&((u=(n=i.props)==null?void 0:n.onClose)==null||u.call(n,i.removalReason),i.isActive=!1,e(tt(i,\"removed\")))},E=i=>{if(i==null)c.forEach(S);else{let n=c.get(i);n&&S(n)}v()},d=()=>{a-=l.length,l=[]},p=i=>{var m,_;let{toastId:n,updateId:u}=i.props,h=u==null;i.staleId&&c.delete(i.staleId),i.isActive=!0,c.set(n,i),v(),e(tt(i,h?\"added\":\"updated\")),h&&((_=(m=i.props).onOpen)==null||_.call(m))};return{id:t,props:f,observe:g,toggle:C,removeToast:E,toasts:c,clearQueue:d,buildToast:(i,n)=>{if(x(n))return;let{toastId:u,updateId:h,data:m,staleId:_,delay:k}=n,D=h==null;D&&a++;let A={...f,style:f.toastStyle,key:r++,...Object.fromEntries(Object.entries(n).filter(([M,$])=>$!=null)),toastId:u,updateId:h,data:m,isIn:!1,className:z(n.className||f.toastClassName),progressClassName:z(n.progressClassName||f.progressClassName),autoClose:n.isLoading?!1:yt(n.autoClose,f.autoClose),closeToast(M){let $=c.get(u);$&&($.removalReason=M,E(u))},deleteToast(){if(c.get(u)!=null){if(c.delete(u),a--,a<0&&(a=0),l.length>0){p(l.shift());return}v()}}};A.closeButton=f.closeButton,n.closeButton===!1||F(n.closeButton)?A.closeButton=n.closeButton:n.closeButton===!0&&(A.closeButton=F(f.closeButton)?f.closeButton:!0);let B={content:i,props:A,staleId:_};f.limit&&f.limit>0&&a>f.limit&&D?l.push(B):L(k)?setTimeout(()=>{p(B)},k):p(B)},setProps(i){f=i},setToggle:(i,n)=>{let u=c.get(i);u&&(u.toggle=n)},isToastActive:i=>{var n;return(n=c.get(i))==null?void 0:n.isActive},getSnapshot:()=>s}}var I=new Map,U=[],rt=new Set,Wt=t=>rt.forEach(o=>o(t)),ht=()=>I.size>0;function Gt(){U.forEach(t=>nt(t.content,t.options)),U=[]}var Ct=(t,{containerId:o})=>{var e;return(e=I.get(o||1))==null?void 0:e.toasts.get(t)};function X(t,o){var r;if(o)return!!((r=I.get(o))!=null&&r.isToastActive(t));let e=!1;return I.forEach(a=>{a.isToastActive(t)&&(e=!0)}),e}function xt(t){if(!ht()){U=U.filter(o=>t!=null&&o.options.toastId!==t);return}if(t==null||ut(t))I.forEach(o=>{o.removeToast(t)});else if(t&&(\"containerId\"in t||\"id\"in t)){let o=I.get(t.containerId);o?o.removeToast(t.id):I.forEach(e=>{e.removeToast(t.id)})}}var Et=(t={})=>{I.forEach(o=>{o.props.limit&&(!t.containerId||o.id===t.containerId)&&o.clearQueue()})};function nt(t,o){F(t)&&(ht()||U.push({content:t,options:o}),I.forEach(e=>{e.buildToast(t,o)}))}function Pt(t){var o;(o=I.get(t.containerId||1))==null||o.setToggle(t.id,t.fn)}function it(t,o){I.forEach(e=>{(o==null||!(o!=null&&o.containerId)||(o==null?void 0:o.containerId)===e.id)&&e.toggle(t,o==null?void 0:o.id)})}function It(t){let o=t.containerId||1;return{subscribe(e){let r=vt(o,t,Wt);I.set(o,r);let a=r.observe(e);return Gt(),()=>{a(),I.delete(o)}},setProps(e){var r;(r=I.get(o))==null||r.setProps(e)},getSnapshot(){var e;return(e=I.get(o))==null?void 0:e.getSnapshot()}}}function St(t){return rt.add(t),()=>{rt.delete(t)}}function qt(t){return t&&(N(t.toastId)||L(t.toastId))?t.toastId:st()}function H(t,o){return nt(t,o),o.toastId}function Q(t,o){return{...o,type:o&&o.type||t,toastId:qt(o)}}function W(t){return(o,e)=>H(o,Q(t,e))}function y(t,o){return H(t,Q(\"default\",o))}y.loading=(t,o)=>H(t,Q(\"default\",{isLoading:!0,autoClose:!1,closeOnClick:!1,closeButton:!1,draggable:!1,...o}));function Kt(t,{pending:o,error:e,success:r},a){let l;o&&(l=N(o)?y.loading(o,a):y.loading(o.render,{...a,...o}));let s={isLoading:null,autoClose:null,closeOnClick:null,closeButton:null,draggable:null},f=(T,g,v)=>{if(g==null){y.dismiss(l);return}let x={type:T,...s,...a,data:v},C=N(g)?{render:g}:g;return l?y.update(l,{...x,...C}):y(C.render,{...x,...C}),v},c=P(t)?t():t;return c.then(T=>f(\"success\",r,T)).catch(T=>f(\"error\",e,T)),c}y.promise=Kt;y.success=W(\"success\");y.info=W(\"info\");y.error=W(\"error\");y.warning=W(\"warning\");y.warn=y.warning;y.dark=(t,o)=>H(t,Q(\"default\",{theme:\"dark\",...o}));function Yt(t){xt(t)}y.dismiss=Yt;y.clearWaitingQueue=Et;y.isActive=X;y.update=(t,o={})=>{let e=Ct(t,o);if(e){let{props:r,content:a}=e,l={delay:100,...r,...o,toastId:o.toastId||t,updateId:st()};l.toastId!==t&&(l.staleId=t);let s=l.render||a;delete l.render,H(s,l)}};y.done=t=>{y.update(t,{progress:1})};y.onChange=St;y.play=t=>it(!0,t);y.pause=t=>it(!1,t);import{useRef as jt,useSyncExternalStore as Zt}from\"react\";function kt(t){var s;let{subscribe:o,getSnapshot:e,setProps:r}=jt(It(t)).current;r(t);let a=(s=Zt(o,e,e))==null?void 0:s.slice();function l(f){if(!a)return[];let c=new Map;return t.newestOnTop&&a.reverse(),a.forEach(T=>{let{position:g}=T.props;c.has(g)||c.set(g,[]),c.get(g).push(T)}),Array.from(c,T=>f(T[0],T[1]))}return{getToastToRender:l,isToastActive:X,count:a==null?void 0:a.length}}import{useEffect as to,useRef as At,useState as Ot}from\"react\";function Nt(t){let[o,e]=Ot(!1),[r,a]=Ot(!1),l=At(null),s=At({start:0,delta:0,removalDistance:0,canCloseOnClick:!0,canDrag:!1,didMove:!1}).current,{autoClose:f,pauseOnHover:c,closeToast:T,onClick:g,closeOnClick:v}=t;Pt({id:t.toastId,containerId:t.containerId,fn:e}),to(()=>{if(t.pauseOnFocusLoss)return x(),()=>{C()}},[t.pauseOnFocusLoss]);function x(){document.hasFocus()||p(),window.addEventListener(\"focus\",d),window.addEventListener(\"blur\",p)}function C(){window.removeEventListener(\"focus\",d),window.removeEventListener(\"blur\",p)}function S(m){if(t.draggable===!0||t.draggable===m.pointerType){b();let _=l.current;s.canCloseOnClick=!0,s.canDrag=!0,_.style.transition=\"none\",t.draggableDirection===\"x\"?(s.start=m.clientX,s.removalDistance=_.offsetWidth*(t.draggablePercent/100)):(s.start=m.clientY,s.removalDistance=_.offsetHeight*(t.draggablePercent===80?t.draggablePercent*1.5:t.draggablePercent)/100)}}function E(m){let{top:_,bottom:k,left:D,right:A}=l.current.getBoundingClientRect();m.pointerType===\"mouse\"&&t.pauseOnHover&&m.clientX>=D&&m.clientX<=A&&m.clientY>=_&&m.clientY<=k?p():d()}function d(){e(!0)}function p(){e(!1)}function b(){s.didMove=!1,document.addEventListener(\"pointermove\",n),document.addEventListener(\"pointerup\",u)}function i(){document.removeEventListener(\"pointermove\",n),document.removeEventListener(\"pointerup\",u)}function n(m){let _=l.current;if(s.canDrag&&_){s.didMove=!0,o&&p(),t.draggableDirection===\"x\"?s.delta=m.clientX-s.start:s.delta=m.clientY-s.start,s.start!==m.clientX&&(s.canCloseOnClick=!1);let k=t.draggableDirection===\"x\"?`${s.delta}px, var(--y)`:`0, calc(${s.delta}px + var(--y))`;_.style.transform=`translate3d(${k},0)`,_.style.opacity=`${1-Math.abs(s.delta/s.removalDistance)}`}}function u(){i();let m=l.current;if(s.canDrag&&s.didMove&&m){if(s.canDrag=!1,Math.abs(s.delta)>s.removalDistance){a(!0),t.closeToast(!0),t.collapseAll();return}m.style.transition=\"transform 0.2s, opacity 0.2s\",m.style.removeProperty(\"transform\"),m.style.removeProperty(\"opacity\")}}let h={onPointerDown:S,onPointerUp:E};return f&&c&&(h.onMouseEnter=p,t.stacked||(h.onMouseLeave=d)),v&&(h.onClick=m=>{g&&g(m),s.canCloseOnClick&&T(!0)}),{playToast:d,pauseToast:p,isRunning:o,preventExitTransition:r,toastRef:l,eventHandlers:h}}import{useEffect as oo,useLayoutEffect as eo}from\"react\";var G=typeof window!=\"undefined\"?eo:oo;import lt from\"clsx\";import Y,{cloneElement as mo,isValidElement as po}from\"react\";import O,{cloneElement as ao,isValidElement as so}from\"react\";var K=({theme:t,type:o,isLoading:e,...r})=>O.createElement(\"svg\",{viewBox:\"0 0 24 24\",width:\"100%\",height:\"100%\",fill:t===\"colored\"?\"currentColor\":`var(--toastify-icon-color-${o})`,...r});function ro(t){return O.createElement(K,{...t},O.createElement(\"path\",{d:\"M23.32 17.191L15.438 2.184C14.728.833 13.416 0 11.996 0c-1.42 0-2.733.833-3.443 2.184L.533 17.448a4.744 4.744 0 000 4.368C1.243 23.167 2.555 24 3.975 24h16.05C22.22 24 24 22.044 24 19.632c0-.904-.251-1.746-.68-2.44zm-9.622 1.46c0 1.033-.724 1.823-1.698 1.823s-1.698-.79-1.698-1.822v-.043c0-1.028.724-1.822 1.698-1.822s1.698.79 1.698 1.822v.043zm.039-12.285l-.84 8.06c-.057.581-.408.943-.897.943-.49 0-.84-.367-.896-.942l-.84-8.065c-.057-.624.25-1.095.779-1.095h1.91c.528.005.84.476.784 1.1z\"}))}function no(t){return O.createElement(K,{...t},O.createElement(\"path\",{d:\"M12 0a12 12 0 1012 12A12.013 12.013 0 0012 0zm.25 5a1.5 1.5 0 11-1.5 1.5 1.5 1.5 0 011.5-1.5zm2.25 13.5h-4a1 1 0 010-2h.75a.25.25 0 00.25-.25v-4.5a.25.25 0 00-.25-.25h-.75a1 1 0 010-2h1a2 2 0 012 2v4.75a.25.25 0 00.25.25h.75a1 1 0 110 2z\"}))}function io(t){return O.createElement(K,{...t},O.createElement(\"path\",{d:\"M12 0a12 12 0 1012 12A12.014 12.014 0 0012 0zm6.927 8.2l-6.845 9.289a1.011 1.011 0 01-1.43.188l-4.888-3.908a1 1 0 111.25-1.562l4.076 3.261 6.227-8.451a1 1 0 111.61 1.183z\"}))}function lo(t){return O.createElement(K,{...t},O.createElement(\"path\",{d:\"M11.983 0a12.206 12.206 0 00-8.51 3.653A11.8 11.8 0 000 12.207 11.779 11.779 0 0011.8 24h.214A12.111 12.111 0 0024 11.791 11.766 11.766 0 0011.983 0zM10.5 16.542a1.476 1.476 0 011.449-1.53h.027a1.527 1.527 0 011.523 1.47 1.475 1.475 0 01-1.449 1.53h-.027a1.529 1.529 0 01-1.523-1.47zM11 12.5v-6a1 1 0 012 0v6a1 1 0 11-2 0z\"}))}function fo(){return O.createElement(\"div\",{className:\"Toastify__spinner\"})}var q={info:no,warning:ro,success:io,error:lo,spinner:fo},co=t=>t in q;function wt({theme:t,type:o,isLoading:e,icon:r}){let a=null,l={theme:t,type:o};return r===!1||(P(r)?a=r({...l,isLoading:e}):so(r)?a=ao(r,l):e?a=q.spinner():co(o)&&(a=q[o](l))),a}var Dt=t=>{let{isRunning:o,preventExitTransition:e,toastRef:r,eventHandlers:a,playToast:l}=Nt(t),{closeButton:s,children:f,autoClose:c,onClick:T,type:g,hideProgressBar:v,closeToast:x,transition:C,position:S,className:E,style:d,progressClassName:p,updateId:b,role:i,progress:n,rtl:u,toastId:h,deleteToast:m,isIn:_,isLoading:k,closeOnClick:D,theme:A,ariaLabel:B}=t,M=lt(\"Toastify__toast\",`Toastify__toast-theme--${A}`,`Toastify__toast--${g}`,{[\"Toastify__toast--rtl\"]:u},{[\"Toastify__toast--close-on-click\"]:D}),$=P(E)?E({rtl:u,position:S,type:g,defaultClassName:M}):lt(M,E),mt=wt(t),pt=!!n||!c,Z={closeToast:x,type:g,theme:A},V=null;return s===!1||(P(s)?V=s(Z):po(s)?V=mo(s,Z):V=gt(Z)),Y.createElement(C,{isIn:_,done:m,position:S,preventExitTransition:e,nodeRef:r,playToast:l},Y.createElement(\"div\",{id:h,tabIndex:0,onClick:T,\"data-in\":_,className:$,...a,style:d,ref:r,..._&&{role:i,\"aria-label\":B}},mt!=null&&Y.createElement(\"div\",{className:lt(\"Toastify__toast-icon\",{[\"Toastify--animate-icon Toastify__zoom-enter\"]:!k})},mt),ot(f,t,!o),V,!t.customProgressBar&&Y.createElement(bt,{...b&&!pt?{key:`p-${b}`}:{},rtl:u,theme:A,delay:c,isRunning:o,isIn:_,closeToast:x,hide:v,type:g,className:p,controlledProgress:pt,progress:n||0})))};var j=(t,o=!1)=>({enter:`Toastify--animate Toastify__${t}-enter`,exit:`Toastify--animate Toastify__${t}-exit`,appendPosition:o}),ft=R(j(\"bounce\",!0)),uo=R(j(\"slide\",!0)),yo=R(j(\"zoom\")),To=R(j(\"flip\"));var vo={position:\"top-right\",transition:ft,autoClose:5e3,closeButton:!0,pauseOnHover:!0,pauseOnFocusLoss:!0,draggable:\"touch\",draggablePercent:80,draggableDirection:\"x\",role:\"alert\",theme:\"light\",\"aria-label\":\"Notifications Alt+T\",hotKeys:t=>t.altKey&&t.code===\"KeyT\"};function dt(t){let o={...vo,...t},e=t.stacked,[r,a]=bo(!0),l=_o(null),{getToastToRender:s,isToastActive:f,count:c}=kt(o),{className:T,style:g,rtl:v,containerId:x,hotKeys:C}=o;function S(d){let p=Lt(\"Toastify__toast-container\",`Toastify__toast-container--${d}`,{[\"Toastify__toast-container--rtl\"]:v});return P(T)?T({position:d,rtl:v,defaultClassName:p}):Lt(p,z(T))}function E(){e&&(a(!0),y.play())}return G(()=>{var d;if(e){let p=l.current.querySelectorAll('[data-in=\"true\"]'),b=12,i=(d=o.position)==null?void 0:d.includes(\"top\"),n=0,u=0;Array.from(p).reverse().forEach((h,m)=>{let _=h;_.classList.add(\"Toastify__toast--stacked\"),m>0&&(_.dataset.collapsed=`${r}`),_.dataset.pos||(_.dataset.pos=i?\"top\":\"bot\");let k=n*(r?.2:1)+(r?0:b*m),D=Math.max(.5,1-(r?u:0));_.style.setProperty(\"--y\",`${i?k:k*-1}px`),_.style.setProperty(\"--g\",`${b}`),_.style.setProperty(\"--s\",`${D}`),n+=_.offsetHeight,u+=.025})}},[r,c,e]),go(()=>{function d(p){var i;let b=l.current;C(p)&&((i=b==null?void 0:b.querySelector('[tabIndex=\"0\"]'))==null||i.focus(),a(!1),y.pause()),p.key===\"Escape\"&&(document.activeElement===b||b!=null&&b.contains(document.activeElement))&&(a(!0),y.play())}return document.addEventListener(\"keydown\",d),()=>{document.removeEventListener(\"keydown\",d)}},[C]),ct.createElement(\"section\",{ref:l,className:\"Toastify\",id:x,onMouseEnter:()=>{e&&(a(!1),y.pause())},onMouseLeave:E,\"aria-live\":\"polite\",\"aria-atomic\":\"false\",\"aria-relevant\":\"additions text\",\"aria-label\":o[\"aria-label\"]},s((d,p)=>{let b=p.length?{...g}:{...g,pointerEvents:\"none\"};return ct.createElement(\"div\",{tabIndex:-1,className:S(d),\"data-stacked\":e,style:b,key:`c-${d}`},p.map(({content:i,props:n})=>ct.createElement(Dt,{...n,stacked:e,collapseAll:E,isIn:f(n.toastId,n.containerId),key:`t-${n.key}`},i)))}))}import Co from\"react\";var Mt=`:root {\n  --toastify-color-light: #fff;\n  --toastify-color-dark: #121212;\n  --toastify-color-info: #3498db;\n  --toastify-color-success: #07bc0c;\n  --toastify-color-warning: #f1c40f;\n  --toastify-color-error: hsl(6, 78%, 57%);\n  --toastify-color-transparent: rgba(255, 255, 255, 0.7);\n\n  --toastify-icon-color-info: var(--toastify-color-info);\n  --toastify-icon-color-success: var(--toastify-color-success);\n  --toastify-icon-color-warning: var(--toastify-color-warning);\n  --toastify-icon-color-error: var(--toastify-color-error);\n\n  --toastify-container-width: fit-content;\n  --toastify-toast-width: 320px;\n  --toastify-toast-offset: 16px;\n  --toastify-toast-top: max(var(--toastify-toast-offset), env(safe-area-inset-top));\n  --toastify-toast-right: max(var(--toastify-toast-offset), env(safe-area-inset-right));\n  --toastify-toast-left: max(var(--toastify-toast-offset), env(safe-area-inset-left));\n  --toastify-toast-bottom: max(var(--toastify-toast-offset), env(safe-area-inset-bottom));\n  --toastify-toast-background: #fff;\n  --toastify-toast-padding: 14px;\n  --toastify-toast-min-height: 64px;\n  --toastify-toast-max-height: 800px;\n  --toastify-toast-bd-radius: 6px;\n  --toastify-toast-shadow: 0px 4px 12px rgba(0, 0, 0, 0.1);\n  --toastify-font-family: sans-serif;\n  --toastify-z-index: 9999;\n  --toastify-text-color-light: #757575;\n  --toastify-text-color-dark: #fff;\n\n  /* Used only for colored theme */\n  --toastify-text-color-info: #fff;\n  --toastify-text-color-success: #fff;\n  --toastify-text-color-warning: #fff;\n  --toastify-text-color-error: #fff;\n\n  --toastify-spinner-color: #616161;\n  --toastify-spinner-color-empty-area: #e0e0e0;\n  --toastify-color-progress-light: linear-gradient(to right, #4cd964, #5ac8fa, #007aff, #34aadc, #5856d6, #ff2d55);\n  --toastify-color-progress-dark: #bb86fc;\n  --toastify-color-progress-info: var(--toastify-color-info);\n  --toastify-color-progress-success: var(--toastify-color-success);\n  --toastify-color-progress-warning: var(--toastify-color-warning);\n  --toastify-color-progress-error: var(--toastify-color-error);\n  /* used to control the opacity of the progress trail */\n  --toastify-color-progress-bgo: 0.2;\n}\n\n.Toastify__toast-container {\n  z-index: var(--toastify-z-index);\n  -webkit-transform: translate3d(0, 0, var(--toastify-z-index));\n  position: fixed;\n  width: var(--toastify-container-width);\n  box-sizing: border-box;\n  color: #fff;\n  display: flex;\n  flex-direction: column;\n}\n\n.Toastify__toast-container--top-left {\n  top: var(--toastify-toast-top);\n  left: var(--toastify-toast-left);\n}\n.Toastify__toast-container--top-center {\n  top: var(--toastify-toast-top);\n  left: 50%;\n  transform: translateX(-50%);\n  align-items: center;\n}\n.Toastify__toast-container--top-right {\n  top: var(--toastify-toast-top);\n  right: var(--toastify-toast-right);\n  align-items: end;\n}\n.Toastify__toast-container--bottom-left {\n  bottom: var(--toastify-toast-bottom);\n  left: var(--toastify-toast-left);\n}\n.Toastify__toast-container--bottom-center {\n  bottom: var(--toastify-toast-bottom);\n  left: 50%;\n  transform: translateX(-50%);\n  align-items: center;\n}\n.Toastify__toast-container--bottom-right {\n  bottom: var(--toastify-toast-bottom);\n  right: var(--toastify-toast-right);\n  align-items: end;\n}\n\n.Toastify__toast {\n  --y: 0px;\n  position: relative;\n  touch-action: none;\n  width: var(--toastify-toast-width);\n  min-height: var(--toastify-toast-min-height);\n  box-sizing: border-box;\n  margin-bottom: 1rem;\n  padding: var(--toastify-toast-padding);\n  border-radius: var(--toastify-toast-bd-radius);\n  box-shadow: var(--toastify-toast-shadow);\n  max-height: var(--toastify-toast-max-height);\n  font-family: var(--toastify-font-family);\n  /* webkit only issue #791 */\n  z-index: 0;\n  /* inner swag */\n  display: flex;\n  flex: 1 auto;\n  align-items: center;\n  word-break: break-word;\n}\n\n@media only screen and (max-width: 480px) {\n  .Toastify__toast-container {\n    width: 100vw;\n    left: env(safe-area-inset-left);\n    margin: 0;\n  }\n  .Toastify__toast-container--top-left,\n  .Toastify__toast-container--top-center,\n  .Toastify__toast-container--top-right {\n    top: env(safe-area-inset-top);\n    transform: translateX(0);\n  }\n  .Toastify__toast-container--bottom-left,\n  .Toastify__toast-container--bottom-center,\n  .Toastify__toast-container--bottom-right {\n    bottom: env(safe-area-inset-bottom);\n    transform: translateX(0);\n  }\n  .Toastify__toast-container--rtl {\n    right: env(safe-area-inset-right);\n    left: initial;\n  }\n  .Toastify__toast {\n    --toastify-toast-width: 100%;\n    margin-bottom: 0;\n    border-radius: 0;\n  }\n}\n\n.Toastify__toast-container[data-stacked='true'] {\n  width: var(--toastify-toast-width);\n}\n\n@media only screen and (max-width: 480px) {\n  .Toastify__toast-container[data-stacked='true'] {\n    width: 100vw;\n  }\n}\n\n.Toastify__toast--stacked {\n  position: absolute;\n  width: 100%;\n  transform: translate3d(0, var(--y), 0) scale(var(--s));\n  transition: transform 0.3s;\n}\n\n.Toastify__toast--stacked[data-collapsed] .Toastify__toast-body,\n.Toastify__toast--stacked[data-collapsed] .Toastify__close-button {\n  transition: opacity 0.1s;\n}\n\n.Toastify__toast--stacked[data-collapsed='false'] {\n  overflow: visible;\n}\n\n.Toastify__toast--stacked[data-collapsed='true']:not(:last-child) > * {\n  opacity: 0;\n}\n\n.Toastify__toast--stacked:after {\n  content: '';\n  position: absolute;\n  left: 0;\n  right: 0;\n  height: calc(var(--g) * 1px);\n  bottom: 100%;\n}\n\n.Toastify__toast--stacked[data-pos='top'] {\n  top: 0;\n}\n\n.Toastify__toast--stacked[data-pos='bot'] {\n  bottom: 0;\n}\n\n.Toastify__toast--stacked[data-pos='bot'].Toastify__toast--stacked:before {\n  transform-origin: top;\n}\n\n.Toastify__toast--stacked[data-pos='top'].Toastify__toast--stacked:before {\n  transform-origin: bottom;\n}\n\n.Toastify__toast--stacked:before {\n  content: '';\n  position: absolute;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  height: 100%;\n  transform: scaleY(3);\n  z-index: -1;\n}\n\n.Toastify__toast--rtl {\n  direction: rtl;\n}\n\n.Toastify__toast--close-on-click {\n  cursor: pointer;\n}\n\n.Toastify__toast-icon {\n  margin-inline-end: 10px;\n  width: 22px;\n  flex-shrink: 0;\n  display: flex;\n}\n\n.Toastify--animate {\n  animation-fill-mode: both;\n  animation-duration: 0.5s;\n}\n\n.Toastify--animate-icon {\n  animation-fill-mode: both;\n  animation-duration: 0.3s;\n}\n\n.Toastify__toast-theme--dark {\n  background: var(--toastify-color-dark);\n  color: var(--toastify-text-color-dark);\n}\n\n.Toastify__toast-theme--light {\n  background: var(--toastify-color-light);\n  color: var(--toastify-text-color-light);\n}\n\n.Toastify__toast-theme--colored.Toastify__toast--default {\n  background: var(--toastify-color-light);\n  color: var(--toastify-text-color-light);\n}\n\n.Toastify__toast-theme--colored.Toastify__toast--info {\n  color: var(--toastify-text-color-info);\n  background: var(--toastify-color-info);\n}\n\n.Toastify__toast-theme--colored.Toastify__toast--success {\n  color: var(--toastify-text-color-success);\n  background: var(--toastify-color-success);\n}\n\n.Toastify__toast-theme--colored.Toastify__toast--warning {\n  color: var(--toastify-text-color-warning);\n  background: var(--toastify-color-warning);\n}\n\n.Toastify__toast-theme--colored.Toastify__toast--error {\n  color: var(--toastify-text-color-error);\n  background: var(--toastify-color-error);\n}\n\n.Toastify__progress-bar-theme--light {\n  background: var(--toastify-color-progress-light);\n}\n\n.Toastify__progress-bar-theme--dark {\n  background: var(--toastify-color-progress-dark);\n}\n\n.Toastify__progress-bar--info {\n  background: var(--toastify-color-progress-info);\n}\n\n.Toastify__progress-bar--success {\n  background: var(--toastify-color-progress-success);\n}\n\n.Toastify__progress-bar--warning {\n  background: var(--toastify-color-progress-warning);\n}\n\n.Toastify__progress-bar--error {\n  background: var(--toastify-color-progress-error);\n}\n\n.Toastify__progress-bar-theme--colored.Toastify__progress-bar--info,\n.Toastify__progress-bar-theme--colored.Toastify__progress-bar--success,\n.Toastify__progress-bar-theme--colored.Toastify__progress-bar--warning,\n.Toastify__progress-bar-theme--colored.Toastify__progress-bar--error {\n  background: var(--toastify-color-transparent);\n}\n\n.Toastify__close-button {\n  color: #fff;\n  position: absolute;\n  top: 6px;\n  right: 6px;\n  background: transparent;\n  outline: none;\n  border: none;\n  padding: 0;\n  cursor: pointer;\n  opacity: 0.7;\n  transition: 0.3s ease;\n  z-index: 1;\n}\n\n.Toastify__toast--rtl .Toastify__close-button {\n  left: 6px;\n  right: unset;\n}\n\n.Toastify__close-button--light {\n  color: #000;\n  opacity: 0.3;\n}\n\n.Toastify__close-button > svg {\n  fill: currentColor;\n  height: 16px;\n  width: 14px;\n}\n\n.Toastify__close-button:hover,\n.Toastify__close-button:focus {\n  opacity: 1;\n}\n\n@keyframes Toastify__trackProgress {\n  0% {\n    transform: scaleX(1);\n  }\n  100% {\n    transform: scaleX(0);\n  }\n}\n\n.Toastify__progress-bar {\n  position: absolute;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  z-index: 1;\n  opacity: 0.7;\n  transform-origin: left;\n}\n\n.Toastify__progress-bar--animated {\n  animation: Toastify__trackProgress linear 1 forwards;\n}\n\n.Toastify__progress-bar--controlled {\n  transition: transform 0.2s;\n}\n\n.Toastify__progress-bar--rtl {\n  right: 0;\n  left: initial;\n  transform-origin: right;\n  border-bottom-left-radius: initial;\n}\n\n.Toastify__progress-bar--wrp {\n  position: absolute;\n  overflow: hidden;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 5px;\n  border-bottom-left-radius: var(--toastify-toast-bd-radius);\n  border-bottom-right-radius: var(--toastify-toast-bd-radius);\n}\n\n.Toastify__progress-bar--wrp[data-hidden='true'] {\n  opacity: 0;\n}\n\n.Toastify__progress-bar--bg {\n  opacity: var(--toastify-color-progress-bgo);\n  width: 100%;\n  height: 100%;\n}\n\n.Toastify__spinner {\n  width: 20px;\n  height: 20px;\n  box-sizing: border-box;\n  border: 2px solid;\n  border-radius: 100%;\n  border-color: var(--toastify-spinner-color-empty-area);\n  border-right-color: var(--toastify-spinner-color);\n  animation: Toastify__spin 0.65s linear infinite;\n}\n\n@keyframes Toastify__bounceInRight {\n  from,\n  60%,\n  75%,\n  90%,\n  to {\n    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n  }\n  from {\n    opacity: 0;\n    transform: translate3d(3000px, 0, 0);\n  }\n  60% {\n    opacity: 1;\n    transform: translate3d(-25px, 0, 0);\n  }\n  75% {\n    transform: translate3d(10px, 0, 0);\n  }\n  90% {\n    transform: translate3d(-5px, 0, 0);\n  }\n  to {\n    transform: none;\n  }\n}\n\n@keyframes Toastify__bounceOutRight {\n  20% {\n    opacity: 1;\n    transform: translate3d(-20px, var(--y), 0);\n  }\n  to {\n    opacity: 0;\n    transform: translate3d(2000px, var(--y), 0);\n  }\n}\n\n@keyframes Toastify__bounceInLeft {\n  from,\n  60%,\n  75%,\n  90%,\n  to {\n    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n  }\n  0% {\n    opacity: 0;\n    transform: translate3d(-3000px, 0, 0);\n  }\n  60% {\n    opacity: 1;\n    transform: translate3d(25px, 0, 0);\n  }\n  75% {\n    transform: translate3d(-10px, 0, 0);\n  }\n  90% {\n    transform: translate3d(5px, 0, 0);\n  }\n  to {\n    transform: none;\n  }\n}\n\n@keyframes Toastify__bounceOutLeft {\n  20% {\n    opacity: 1;\n    transform: translate3d(20px, var(--y), 0);\n  }\n  to {\n    opacity: 0;\n    transform: translate3d(-2000px, var(--y), 0);\n  }\n}\n\n@keyframes Toastify__bounceInUp {\n  from,\n  60%,\n  75%,\n  90%,\n  to {\n    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n  }\n  from {\n    opacity: 0;\n    transform: translate3d(0, 3000px, 0);\n  }\n  60% {\n    opacity: 1;\n    transform: translate3d(0, -20px, 0);\n  }\n  75% {\n    transform: translate3d(0, 10px, 0);\n  }\n  90% {\n    transform: translate3d(0, -5px, 0);\n  }\n  to {\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n@keyframes Toastify__bounceOutUp {\n  20% {\n    transform: translate3d(0, calc(var(--y) - 10px), 0);\n  }\n  40%,\n  45% {\n    opacity: 1;\n    transform: translate3d(0, calc(var(--y) + 20px), 0);\n  }\n  to {\n    opacity: 0;\n    transform: translate3d(0, -2000px, 0);\n  }\n}\n\n@keyframes Toastify__bounceInDown {\n  from,\n  60%,\n  75%,\n  90%,\n  to {\n    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n  }\n  0% {\n    opacity: 0;\n    transform: translate3d(0, -3000px, 0);\n  }\n  60% {\n    opacity: 1;\n    transform: translate3d(0, 25px, 0);\n  }\n  75% {\n    transform: translate3d(0, -10px, 0);\n  }\n  90% {\n    transform: translate3d(0, 5px, 0);\n  }\n  to {\n    transform: none;\n  }\n}\n\n@keyframes Toastify__bounceOutDown {\n  20% {\n    transform: translate3d(0, calc(var(--y) - 10px), 0);\n  }\n  40%,\n  45% {\n    opacity: 1;\n    transform: translate3d(0, calc(var(--y) + 20px), 0);\n  }\n  to {\n    opacity: 0;\n    transform: translate3d(0, 2000px, 0);\n  }\n}\n\n.Toastify__bounce-enter--top-left,\n.Toastify__bounce-enter--bottom-left {\n  animation-name: Toastify__bounceInLeft;\n}\n\n.Toastify__bounce-enter--top-right,\n.Toastify__bounce-enter--bottom-right {\n  animation-name: Toastify__bounceInRight;\n}\n\n.Toastify__bounce-enter--top-center {\n  animation-name: Toastify__bounceInDown;\n}\n\n.Toastify__bounce-enter--bottom-center {\n  animation-name: Toastify__bounceInUp;\n}\n\n.Toastify__bounce-exit--top-left,\n.Toastify__bounce-exit--bottom-left {\n  animation-name: Toastify__bounceOutLeft;\n}\n\n.Toastify__bounce-exit--top-right,\n.Toastify__bounce-exit--bottom-right {\n  animation-name: Toastify__bounceOutRight;\n}\n\n.Toastify__bounce-exit--top-center {\n  animation-name: Toastify__bounceOutUp;\n}\n\n.Toastify__bounce-exit--bottom-center {\n  animation-name: Toastify__bounceOutDown;\n}\n\n@keyframes Toastify__zoomIn {\n  from {\n    opacity: 0;\n    transform: scale3d(0.3, 0.3, 0.3);\n  }\n  50% {\n    opacity: 1;\n  }\n}\n\n@keyframes Toastify__zoomOut {\n  from {\n    opacity: 1;\n  }\n  50% {\n    opacity: 0;\n    transform: translate3d(0, var(--y), 0) scale3d(0.3, 0.3, 0.3);\n  }\n  to {\n    opacity: 0;\n  }\n}\n\n.Toastify__zoom-enter {\n  animation-name: Toastify__zoomIn;\n}\n\n.Toastify__zoom-exit {\n  animation-name: Toastify__zoomOut;\n}\n\n@keyframes Toastify__flipIn {\n  from {\n    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n    animation-timing-function: ease-in;\n    opacity: 0;\n  }\n  40% {\n    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n    animation-timing-function: ease-in;\n  }\n  60% {\n    transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n    opacity: 1;\n  }\n  80% {\n    transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n  }\n  to {\n    transform: perspective(400px);\n  }\n}\n\n@keyframes Toastify__flipOut {\n  from {\n    transform: translate3d(0, var(--y), 0) perspective(400px);\n  }\n  30% {\n    transform: translate3d(0, var(--y), 0) perspective(400px) rotate3d(1, 0, 0, -20deg);\n    opacity: 1;\n  }\n  to {\n    transform: translate3d(0, var(--y), 0) perspective(400px) rotate3d(1, 0, 0, 90deg);\n    opacity: 0;\n  }\n}\n\n.Toastify__flip-enter {\n  animation-name: Toastify__flipIn;\n}\n\n.Toastify__flip-exit {\n  animation-name: Toastify__flipOut;\n}\n\n@keyframes Toastify__slideInRight {\n  from {\n    transform: translate3d(110%, 0, 0);\n    visibility: visible;\n  }\n  to {\n    transform: translate3d(0, var(--y), 0);\n  }\n}\n\n@keyframes Toastify__slideInLeft {\n  from {\n    transform: translate3d(-110%, 0, 0);\n    visibility: visible;\n  }\n  to {\n    transform: translate3d(0, var(--y), 0);\n  }\n}\n\n@keyframes Toastify__slideInUp {\n  from {\n    transform: translate3d(0, 110%, 0);\n    visibility: visible;\n  }\n  to {\n    transform: translate3d(0, var(--y), 0);\n  }\n}\n\n@keyframes Toastify__slideInDown {\n  from {\n    transform: translate3d(0, -110%, 0);\n    visibility: visible;\n  }\n  to {\n    transform: translate3d(0, var(--y), 0);\n  }\n}\n\n@keyframes Toastify__slideOutRight {\n  from {\n    transform: translate3d(0, var(--y), 0);\n  }\n  to {\n    visibility: hidden;\n    transform: translate3d(110%, var(--y), 0);\n  }\n}\n\n@keyframes Toastify__slideOutLeft {\n  from {\n    transform: translate3d(0, var(--y), 0);\n  }\n  to {\n    visibility: hidden;\n    transform: translate3d(-110%, var(--y), 0);\n  }\n}\n\n@keyframes Toastify__slideOutDown {\n  from {\n    transform: translate3d(0, var(--y), 0);\n  }\n  to {\n    visibility: hidden;\n    transform: translate3d(0, 500px, 0);\n  }\n}\n\n@keyframes Toastify__slideOutUp {\n  from {\n    transform: translate3d(0, var(--y), 0);\n  }\n  to {\n    visibility: hidden;\n    transform: translate3d(0, -500px, 0);\n  }\n}\n\n.Toastify__slide-enter--top-left,\n.Toastify__slide-enter--bottom-left {\n  animation-name: Toastify__slideInLeft;\n}\n\n.Toastify__slide-enter--top-right,\n.Toastify__slide-enter--bottom-right {\n  animation-name: Toastify__slideInRight;\n}\n\n.Toastify__slide-enter--top-center {\n  animation-name: Toastify__slideInDown;\n}\n\n.Toastify__slide-enter--bottom-center {\n  animation-name: Toastify__slideInUp;\n}\n\n.Toastify__slide-exit--top-left,\n.Toastify__slide-exit--bottom-left {\n  animation-name: Toastify__slideOutLeft;\n  animation-timing-function: ease-in;\n  animation-duration: 0.3s;\n}\n\n.Toastify__slide-exit--top-right,\n.Toastify__slide-exit--bottom-right {\n  animation-name: Toastify__slideOutRight;\n  animation-timing-function: ease-in;\n  animation-duration: 0.3s;\n}\n\n.Toastify__slide-exit--top-center {\n  animation-name: Toastify__slideOutUp;\n  animation-timing-function: ease-in;\n  animation-duration: 0.3s;\n}\n\n.Toastify__slide-exit--bottom-center {\n  animation-name: Toastify__slideOutDown;\n  animation-timing-function: ease-in;\n  animation-duration: 0.3s;\n}\n\n@keyframes Toastify__spin {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n}\n`;var $t=new Map,Rt=(t,o)=>{G(()=>{if(!t||typeof document==\"undefined\")return;let e=document,r=$t.get(e);if(r){o&&r.setAttribute(\"nonce\",o);return}let a=e.createElement(\"style\");a.textContent=t,o&&a.setAttribute(\"nonce\",o),e.head.appendChild(a),$t.set(e,a)},[o])};function xo(t){return Rt(Mt,t.nonce),Co.createElement(dt,{...t})}export{ft as Bounce,To as Flip,q as Icons,uo as Slide,xo as ToastContainer,yo as Zoom,J as collapseToast,R as cssTransition,y as toast};\n//# sourceMappingURL=index.mjs.map","export const isProduction = import.meta.env.MODE === 'production';\r\n\r\nexport const keyMapMetadata: Record<string, string> = {\r\n  category: 'Thư mục gốc',\r\n  fileName: 'Tên tệp',\r\n  fullPath: 'Đường dẫn đầy đủ',\r\n  createAt: 'Ngày tạo',\r\n  creator: 'Người tạo',\r\n  creatorId: 'ID người tạo',\r\n  // Người sửa đổi hiển thị ngay sau Người tạo.\r\n  modifier: 'Người sửa đổi lần cuối',\r\n  modifierId: 'ID người sửa đổi',\r\n  modifiedDate: 'Ngày sửa đổi',\r\n  DataSource: 'Nguồn dữ liệu',\r\n  SuggestedAICategories: 'Danh mục AI gợi ý',\r\n  KeywordAISuggestion: 'Từ khóa AI gợi ý',\r\n  SummaryOfSuggestedAI: 'Tóm tắt AI gợi ý',\r\n  AccessLevel: 'Cấp độ truy cập',\r\n  path: 'Đường dẫn',\r\n  summary: 'Trích yếu',\r\n  effectiveDate: 'Ngày hiệu lực',\r\n  expirationDate: 'Ngày hết hiệu lực',\r\n  issueDate: 'Ngày ban hành',\r\n  processingStatus: 'Trạng thái xử lý',\r\n  status: 'Tình trạng',\r\n  version: 'Phiên bản',\r\n  documentType: 'Loại văn bản',\r\n  field: 'Lĩnh vực',\r\n  dataSource: 'Nguồn dữ liệu',\r\n};\r\n\r\n/**\r\n * Các trường do server quản lý. Client chỉ hiển thị, không gửi lên khi lưu:\r\n * server tự xác định người tạo / người sửa từ tài khoản đang thao tác.\r\n */\r\nexport const SERVER_OWNED_METADATA_KEYS = [\r\n  'creator',\r\n  'creatorId',\r\n  'modifier',\r\n  'modifierId',\r\n  'modifiedDate',\r\n] as const;\r\n\r\nconst isBlankValue = (value: unknown): boolean =>\r\n  value === null || value === undefined || `${value}`.trim() === '' || `${value}`.trim() === '---';\r\n\r\n/**\r\n * Chuẩn hoá metadata đọc từ S3 trước khi đưa vào form sửa.\r\n *\r\n * Tài liệu cũ chưa có `modifier` / `modifiedDate`: chèn các trường này ngay sau\r\n * `creatorId` và mặc định lấy theo người tạo, để UI luôn hiển thị đủ thông tin\r\n * theo đúng thứ tự mong muốn (Người tạo -> Người sửa đổi lần cuối).\r\n */\r\nexport const normalizeMetadataForDisplay = (\r\n  metadata: Record<string, any> | null | undefined,\r\n): Record<string, any> => {\r\n  if (!metadata || typeof metadata !== 'object') return {};\r\n\r\n  const creator = isBlankValue(metadata['creator']) ? '' : `${metadata['creator']}`.trim();\r\n  const creatorId = isBlankValue(metadata['creatorId']) ? '' : `${metadata['creatorId']}`.trim();\r\n\r\n  // Rỗng thì mặc định là Người tạo.\r\n  const modifier = isBlankValue(metadata['modifier']) ? creator : `${metadata['modifier']}`.trim();\r\n  const modifierId = isBlankValue(metadata['modifierId'])\r\n    ? creatorId\r\n    : `${metadata['modifierId']}`.trim();\r\n  const modifiedDate = isBlankValue(metadata['modifiedDate'])\r\n    ? isBlankValue(metadata['createAt'])\r\n      ? ''\r\n      : `${metadata['createAt']}`.trim()\r\n    : `${metadata['modifiedDate']}`.trim();\r\n\r\n  const result: Record<string, any> = {};\r\n  for (const [key, value] of Object.entries(metadata)) {\r\n    if (key === 'modifier' || key === 'modifierId' || key === 'modifiedDate') continue;\r\n\r\n    result[key] = value;\r\n\r\n    if (key === 'creatorId') {\r\n      result['modifier'] = modifier;\r\n      result['modifierId'] = modifierId;\r\n      result['modifiedDate'] = modifiedDate;\r\n    }\r\n  }\r\n\r\n  // Sidecar cũ không có `creatorId` -> bổ sung ở cuối để không mất thông tin.\r\n  if (!('modifier' in result)) {\r\n    result['modifier'] = modifier;\r\n    result['modifierId'] = modifierId;\r\n    result['modifiedDate'] = modifiedDate;\r\n  }\r\n\r\n  return result;\r\n};\r\n\r\n/**\r\n * Loại bỏ các trường do server quản lý khỏi payload lưu metadata.\r\n * Nhờ vậy người tạo không bị ghi đè và người sửa luôn do server đóng dấu.\r\n */\r\nexport const stripServerOwnedMetadata = (\r\n  metadata: Record<string, any> | null | undefined,\r\n): Record<string, any> => {\r\n  if (!metadata || typeof metadata !== 'object') return {};\r\n\r\n  const result: Record<string, any> = { ...metadata };\r\n  for (const key of SERVER_OWNED_METADATA_KEYS) {\r\n    delete result[key];\r\n  }\r\n  return result;\r\n};\r\n\r\nexport const isTextarea = (key: string) => {\r\n  if (\r\n    key === 'SummaryOfSuggestedAI' ||\r\n    key === 'KeywordAISuggestion' ||\r\n    key === 'SuggestedAICategories'\r\n  ) {\r\n    return true;\r\n  }\r\n\r\n  return false;\r\n};\r\n\r\nexport const isDisableField = (key: string) => {\r\n  if (\r\n    key === 'fullPath' ||\r\n    key === 'createAt' ||\r\n    key === 'creator' ||\r\n    key === 'creatorId' ||\r\n    // Người sửa đổi do server tự cập nhật theo tài khoản thao tác -> chỉ đọc.\r\n    key === 'modifier' ||\r\n    key === 'modifierId' ||\r\n    key === 'modifiedDate' ||\r\n    key === 'DataSource' ||\r\n    key === 'AccessLevel' ||\r\n    key === 'category' ||\r\n    key === 'fileName' ||\r\n    key === 'version'\r\n  ) {\r\n    return true;\r\n  }\r\n\r\n  return false;\r\n};\r\n\r\n// Giới hạn tổng dung lượng file trong mỗi lần upload là 100MB.\r\n// Không giới hạn số lượng file và không giới hạn riêng từng file; một file lớn hơn\r\n// 100MB vẫn bị từ chối vì làm tổng dung lượng lần upload vượt quá giới hạn.\r\nexport const MAX_UPLOAD_TOTAL_SIZE = 100 * 1024 * 1024;\r\n\r\nexport const checkConditionUploadFiles = (files: FileList, toast: any) => {\r\n  const totalSize = Array.from(files).reduce((acc, file) => acc + (file?.size ?? 0), 0);\r\n  if (totalSize > MAX_UPLOAD_TOTAL_SIZE) {\r\n    toast({\r\n      title: 'Lỗi tải lên',\r\n      description: 'Tổng dung lượng các tập tin vượt quá giới hạn 100MB.',\r\n      variant: 'destructive',\r\n    });\r\n    return true;\r\n  }\r\n\r\n  return false;\r\n};\r\n\r\n// Map sync status from English to Vietnamese\r\nexport const syncStatusMap: Record<string, string> = {\r\n  STARTING: 'Đang bắt đầu',\r\n  IN_PROGRESS: 'Đang đồng bộ',\r\n  COMPLETE: 'Đồng bộ thành công',\r\n  FAILED: 'Đồng bộ thất bại',\r\n  STOPPING: 'Đang dừng',\r\n  STOPPED: 'Đã dừng',\r\n};\r\n\r\nexport const getSyncStatusInVietnamese = (status: string): string => {\r\n  return syncStatusMap[status] || status;\r\n};\r\n","import { useState } from 'react';\r\n\r\ninterface ToggleButtonInterface {\r\n  enabled: boolean;\r\n  onChange: Function;\r\n}\r\n\r\nexport default function ToggleButton({ enabled, onChange }: ToggleButtonInterface) {\r\n  const [on, setOn] = useState(enabled);\r\n\r\n  const handleChange = async () => {\r\n    onChange();\r\n    setOn((prev) => !prev);\r\n  };\r\n\r\n  return (\r\n    <button\r\n      type=\"button\"\r\n      onClick={handleChange}\r\n      className={`relative inline-flex h-6 w-11 items-center rounded-full transition-colors duration-300 ${\r\n        on ? 'bg-green-500' : 'bg-gray-300 dark:bg-gray-600'\r\n      }`}\r\n    >\r\n      <span\r\n        className={`inline-block h-5 w-5 transform rounded-full bg-white shadow transition-transform duration-300 ${\r\n          on ? 'translate-x-5' : 'translate-x-1'\r\n        }`}\r\n      />\r\n    </button>\r\n  );\r\n}\r\n","'use strict';\n\n/**\n * Create a bound version of a function with a specified `this` context\n *\n * @param {Function} fn - The function to bind\n * @param {*} thisArg - The value to be passed as the `this` parameter\n * @returns {Function} A new function that will call the original function with the specified `this` context\n */\nexport default function bind(fn, thisArg) {\n  return function wrap() {\n    return fn.apply(thisArg, arguments);\n  };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst { toString } = Object.prototype;\nconst { getPrototypeOf } = Object;\nconst { iterator, toStringTag } = Symbol;\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (\n  ({ hasOwnProperty }) =>\n  (obj, prop) =>\n    hasOwnProperty.call(obj, prop)\n)(Object.prototype);\n\n/**\n * Walk the prototype chain (excluding the shared Object.prototype) looking for\n * an own `prop`. This distinguishes genuine own/inherited members — including\n * class accessors and template prototypes — from members injected via\n * Object.prototype pollution (e.g. `Object.prototype.username = '...'`), which\n * live on Object.prototype itself and are therefore never matched.\n *\n * @param {*} thing The value whose chain to inspect\n * @param {string|symbol} prop The property key to look for\n *\n * @returns {boolean} True when `prop` is owned below Object.prototype\n */\nconst hasOwnInPrototypeChain = (thing, prop) => {\n  let obj = thing;\n  const seen = [];\n\n  while (obj != null && obj !== Object.prototype) {\n    if (seen.indexOf(obj) !== -1) {\n      return false;\n    }\n    seen.push(obj);\n\n    if (hasOwnProperty(obj, prop)) {\n      return true;\n    }\n    obj = getPrototypeOf(obj);\n  }\n  return false;\n};\n\n/**\n * Read `obj[prop]` only when it is safe from Object.prototype pollution. Own\n * properties and members inherited from a non-Object.prototype source (a class\n * instance or template object) are honored; a value reachable only through a\n * polluted Object.prototype is ignored and `undefined` is returned.\n *\n * @param {*} obj The source object\n * @param {string|symbol} prop The property key to read\n *\n * @returns {*} The resolved value, or undefined when unsafe/absent\n */\nconst getSafeProp = (obj, prop) =>\n  obj != null && hasOwnInPrototypeChain(obj, prop) ? obj[prop] : undefined;\n\nconst kindOf = ((cache) => (thing) => {\n  const str = toString.call(thing);\n  return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n  type = type.toLowerCase();\n  return (thing) => kindOf(thing) === type;\n};\n\nconst typeOfTest = (type) => (thing) => typeof thing === type;\n\n/**\n * Determine if a value is a non-null object\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst { isArray } = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n  return (\n    val !== null &&\n    !isUndefined(val) &&\n    val.constructor !== null &&\n    !isUndefined(val.constructor) &&\n    isFunction(val.constructor.isBuffer) &&\n    val.constructor.isBuffer(val)\n  );\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n  let result;\n  if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n    result = ArrayBuffer.isView(val);\n  } else {\n    result = val && val.buffer && isArrayBuffer(val.buffer);\n  }\n  return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = (thing) => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n  if (!isObject(val)) {\n    return false;\n  }\n\n  const prototype = getPrototypeOf(val);\n  return (\n    (prototype === null ||\n      prototype === Object.prototype ||\n      getPrototypeOf(prototype) === null) &&\n    // Treat any genuine (non-Object.prototype-polluted) Symbol.toStringTag or\n    // Symbol.iterator as evidence the value is a tagged/iterable type rather\n    // than a plain object, while ignoring keys injected onto Object.prototype.\n    !hasOwnInPrototypeChain(val, toStringTag) &&\n    !hasOwnInPrototypeChain(val, iterator)\n  );\n};\n\n/**\n * Determine if a value is an empty object (safely handles Buffers)\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an empty object, otherwise false\n */\nconst isEmptyObject = (val) => {\n  // Early return for non-objects or Buffers to prevent RangeError\n  if (!isObject(val) || isBuffer(val)) {\n    return false;\n  }\n\n  try {\n    return Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype;\n  } catch (e) {\n    // Fallback for any other objects that might cause RangeError with Object.keys()\n    return false;\n  }\n};\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a React Native Blob\n * React Native \"blob\": an object with a `uri` attribute. Optionally, it can\n * also have a `name` and `type` attribute to specify filename and content type\n *\n * @see https://github.com/facebook/react-native/blob/26684cf3adf4094eb6c405d345a75bf8c7c0bf88/Libraries/Network/FormData.js#L68-L71\n *\n * @param {*} value The value to test\n *\n * @returns {boolean} True if value is a React Native Blob, otherwise false\n */\nconst isReactNativeBlob = (value) => {\n  return !!(value && typeof value.uri !== 'undefined');\n};\n\n/**\n * Determine if environment is React Native\n * ReactNative `FormData` has a non-standard `getParts()` method\n *\n * @param {*} formData The formData to test\n *\n * @returns {boolean} True if environment is React Native, otherwise false\n */\nconst isReactNative = (formData) => formData && typeof formData.getParts !== 'undefined';\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a FileList, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction getGlobal() {\n  if (typeof globalThis !== 'undefined') return globalThis;\n  if (typeof self !== 'undefined') return self;\n  if (typeof window !== 'undefined') return window;\n  if (typeof global !== 'undefined') return global;\n  return {};\n}\n\nconst G = getGlobal();\nconst FormDataCtor = typeof G.FormData !== 'undefined' ? G.FormData : undefined;\n\nconst isFormData = (thing) => {\n  if (!thing) return false;\n  if (FormDataCtor && thing instanceof FormDataCtor) return true;\n  // Reject plain objects inheriting directly from Object.prototype so prototype-pollution gadgets can't spoof FormData.\n  const proto = getPrototypeOf(thing);\n  if (!proto || proto === Object.prototype) return false;\n  if (!isFunction(thing.append)) return false;\n  const kind = kindOf(thing);\n  return (\n    kind === 'formdata' ||\n    // detect form-data instance\n    (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n  );\n};\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = [\n  'ReadableStream',\n  'Request',\n  'Response',\n  'Headers',\n].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => {\n  return str.trim ? str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n};\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array<unknown>} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Object} [options]\n * @param {Boolean} [options.allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, { allOwnKeys = false } = {}) {\n  // Don't bother if no value provided\n  if (obj === null || typeof obj === 'undefined') {\n    return;\n  }\n\n  let i;\n  let l;\n\n  // Force an array if not already something iterable\n  if (typeof obj !== 'object') {\n    /*eslint no-param-reassign:0*/\n    obj = [obj];\n  }\n\n  if (isArray(obj)) {\n    // Iterate over array values\n    for (i = 0, l = obj.length; i < l; i++) {\n      fn.call(null, obj[i], i, obj);\n    }\n  } else {\n    // Buffer check\n    if (isBuffer(obj)) {\n      return;\n    }\n\n    // Iterate over object keys\n    const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n    const len = keys.length;\n    let key;\n\n    for (i = 0; i < len; i++) {\n      key = keys[i];\n      fn.call(null, obj[key], key, obj);\n    }\n  }\n}\n\n/**\n * Finds a key in an object, case-insensitive, returning the actual key name.\n * Returns null if the object is a Buffer or if no match is found.\n *\n * @param {Object} obj - The object to search.\n * @param {string} key - The key to find (case-insensitive).\n * @returns {?string} The actual key name if found, otherwise null.\n */\nfunction findKey(obj, key) {\n  if (isBuffer(obj)) {\n    return null;\n  }\n\n  key = key.toLowerCase();\n  const keys = Object.keys(obj);\n  let i = keys.length;\n  let _key;\n  while (i-- > 0) {\n    _key = keys[i];\n    if (key === _key.toLowerCase()) {\n      return _key;\n    }\n  }\n  return null;\n}\n\nconst _global = (() => {\n  /*eslint no-undef:0*/\n  if (typeof globalThis !== 'undefined') return globalThis;\n  return typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : global;\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * const result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(...objs) {\n  const { caseless, skipUndefined } = (isContextDefined(this) && this) || {};\n  const result = {};\n  const assignValue = (val, key) => {\n    // Skip dangerous property names to prevent prototype pollution\n    if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n      return;\n    }\n\n    // findKey lowercases the key, so caseless lookup only applies to strings —\n    // symbol keys are identity-matched.\n    const targetKey = (caseless && typeof key === 'string' && findKey(result, key)) || key;\n    // Read via own-prop only — a bare `result[targetKey]` walks the prototype\n    // chain, so a polluted Object.prototype value could surface here and get\n    // copied into the merged result.\n    const existing = hasOwnProperty(result, targetKey) ? result[targetKey] : undefined;\n    if (isPlainObject(existing) && isPlainObject(val)) {\n      result[targetKey] = merge(existing, val);\n    } else if (isPlainObject(val)) {\n      result[targetKey] = merge({}, val);\n    } else if (isArray(val)) {\n      result[targetKey] = val.slice();\n    } else if (!skipUndefined || !isUndefined(val)) {\n      result[targetKey] = val;\n    }\n  };\n\n  for (let i = 0, l = objs.length; i < l; i++) {\n    const source = objs[i];\n    if (!source || isBuffer(source)) {\n      continue;\n    }\n\n    forEach(source, assignValue);\n\n    if (typeof source !== 'object' || isArray(source)) {\n      continue;\n    }\n\n    const symbols = Object.getOwnPropertySymbols(source);\n    for (let j = 0; j < symbols.length; j++) {\n      const symbol = symbols[j];\n      if (propertyIsEnumerable.call(source, symbol)) {\n        assignValue(source[symbol], symbol);\n      }\n    }\n  }\n  return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Object} [options]\n * @param {Boolean} [options.allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, { allOwnKeys } = {}) => {\n  forEach(\n    b,\n    (val, key) => {\n      if (thisArg && isFunction(val)) {\n        Object.defineProperty(a, key, {\n          // Null-proto descriptor so a polluted Object.prototype.get cannot\n          // hijack defineProperty's accessor-vs-data resolution.\n          __proto__: null,\n          value: bind(val, thisArg),\n          writable: true,\n          enumerable: true,\n          configurable: true,\n        });\n      } else {\n        Object.defineProperty(a, key, {\n          __proto__: null,\n          value: val,\n          writable: true,\n          enumerable: true,\n          configurable: true,\n        });\n      }\n    },\n    { allOwnKeys }\n  );\n  return a;\n};\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n  if (content.charCodeAt(0) === 0xfeff) {\n    content = content.slice(1);\n  }\n  return content;\n};\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n  constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n  Object.defineProperty(constructor.prototype, 'constructor', {\n    __proto__: null,\n    value: constructor,\n    writable: true,\n    enumerable: false,\n    configurable: true,\n  });\n  Object.defineProperty(constructor, 'super', {\n    __proto__: null,\n    value: superConstructor.prototype,\n  });\n  props && Object.assign(constructor.prototype, props);\n};\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n  let props;\n  let i;\n  let prop;\n  const merged = {};\n\n  destObj = destObj || {};\n  // eslint-disable-next-line no-eq-null,eqeqeq\n  if (sourceObj == null) return destObj;\n\n  do {\n    props = Object.getOwnPropertyNames(sourceObj);\n    i = props.length;\n    while (i-- > 0) {\n      prop = props[i];\n      if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n        destObj[prop] = sourceObj[prop];\n        merged[prop] = true;\n      }\n    }\n    sourceObj = filter !== false && getPrototypeOf(sourceObj);\n  } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n  return destObj;\n};\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n  str = String(str);\n  if (position === undefined || position > str.length) {\n    position = str.length;\n  }\n  position -= searchString.length;\n  const lastIndex = str.indexOf(searchString, position);\n  return lastIndex !== -1 && lastIndex === position;\n};\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n  if (!thing) return null;\n  if (isArray(thing)) return thing;\n  let i = thing.length;\n  if (!isNumber(i)) return null;\n  const arr = new Array(i);\n  while (i-- > 0) {\n    arr[i] = thing[i];\n  }\n  return arr;\n};\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = ((TypedArray) => {\n  // eslint-disable-next-line func-names\n  return (thing) => {\n    return TypedArray && thing instanceof TypedArray;\n  };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n  const generator = obj && obj[iterator];\n\n  const _iterator = generator.call(obj);\n\n  let result;\n\n  while ((result = _iterator.next()) && !result.done) {\n    const pair = result.value;\n    fn.call(obj, pair[0], pair[1]);\n  }\n};\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n  let matches;\n  const arr = [];\n\n  while ((matches = regExp.exec(str)) !== null) {\n    arr.push(matches);\n  }\n\n  return arr;\n};\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = (str) => {\n  return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g, function replacer(m, p1, p2) {\n    return p1.toUpperCase() + p2;\n  });\n};\n\nconst { propertyIsEnumerable } = Object.prototype;\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n  const descriptors = Object.getOwnPropertyDescriptors(obj);\n  const reducedDescriptors = {};\n\n  forEach(descriptors, (descriptor, name) => {\n    let ret;\n    if ((ret = reducer(descriptor, name, obj)) !== false) {\n      reducedDescriptors[name] = ret || descriptor;\n    }\n  });\n\n  Object.defineProperties(obj, reducedDescriptors);\n};\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n  reduceDescriptors(obj, (descriptor, name) => {\n    // skip restricted props in strict mode\n    if (isFunction(obj) && ['arguments', 'caller', 'callee'].includes(name)) {\n      return false;\n    }\n\n    const value = obj[name];\n\n    if (!isFunction(value)) return;\n\n    descriptor.enumerable = false;\n\n    if ('writable' in descriptor) {\n      descriptor.writable = false;\n      return;\n    }\n\n    if (!descriptor.set) {\n      descriptor.set = () => {\n        throw Error(\"Can not rewrite read-only method '\" + name + \"'\");\n      };\n    }\n  });\n};\n\n/**\n * Converts an array or a delimited string into an object set with values as keys and true as values.\n * Useful for fast membership checks.\n *\n * @param {Array|string} arrayOrString - The array or string to convert.\n * @param {string} delimiter - The delimiter to use if input is a string.\n * @returns {Object} An object with keys from the array or string, values set to true.\n */\nconst toObjectSet = (arrayOrString, delimiter) => {\n  const obj = {};\n\n  const define = (arr) => {\n    arr.forEach((value) => {\n      obj[value] = true;\n    });\n  };\n\n  isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n  return obj;\n};\n\nconst noop = () => {};\n\nconst toFiniteNumber = (value, defaultValue) => {\n  return value != null && Number.isFinite((value = +value)) ? value : defaultValue;\n};\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n  return !!(\n    thing &&\n    isFunction(thing.append) &&\n    thing[toStringTag] === 'FormData' &&\n    thing[iterator]\n  );\n}\n\n/**\n * Recursively converts an object to a JSON-compatible object, handling circular references and Buffers.\n *\n * @param {Object} obj - The object to convert.\n * @returns {Object} The JSON-compatible object.\n */\nconst toJSONObject = (obj) => {\n  const visited = new WeakSet();\n\n  const visit = (source) => {\n    if (isObject(source)) {\n      if (visited.has(source)) {\n        return;\n      }\n\n      //Buffer check\n      if (isBuffer(source)) {\n        return source;\n      }\n\n      if (!('toJSON' in source)) {\n        // add-on descent / delete-on-ascent: preserves path semantics, so DAG nodes serialise at every occurrence (see #7230).\n        visited.add(source);\n        const target = isArray(source) ? [] : {};\n\n        forEach(source, (value, key) => {\n          const reducedValue = visit(value);\n          !isUndefined(reducedValue) && (target[key] = reducedValue);\n        });\n\n        visited.delete(source);\n\n        return target;\n      }\n    }\n\n    return source;\n  };\n\n  return visit(obj);\n};\n\n/**\n * Determines if a value is an async function.\n *\n * @param {*} thing - The value to test.\n * @returns {boolean} True if value is an async function, otherwise false.\n */\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\n/**\n * Determines if a value is thenable (has then and catch methods).\n *\n * @param {*} thing - The value to test.\n * @returns {boolean} True if value is thenable, otherwise false.\n */\nconst isThenable = (thing) =>\n  thing &&\n  (isObject(thing) || isFunction(thing)) &&\n  isFunction(thing.then) &&\n  isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\n/**\n * Provides a cross-platform setImmediate implementation.\n * Uses native setImmediate if available, otherwise falls back to postMessage or setTimeout.\n *\n * @param {boolean} setImmediateSupported - Whether setImmediate is supported.\n * @param {boolean} postMessageSupported - Whether postMessage is supported.\n * @returns {Function} A function to schedule a callback asynchronously.\n */\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n  if (setImmediateSupported) {\n    return setImmediate;\n  }\n\n  return postMessageSupported\n    ? ((token, callbacks) => {\n        _global.addEventListener(\n          'message',\n          ({ source, data }) => {\n            if (source === _global && data === token) {\n              callbacks.length && callbacks.shift()();\n            }\n          },\n          false\n        );\n\n        return (cb) => {\n          callbacks.push(cb);\n          _global.postMessage(token, '*');\n        };\n      })(`axios@${Math.random()}`, [])\n    : (cb) => setTimeout(cb);\n})(typeof setImmediate === 'function', isFunction(_global.postMessage));\n\n/**\n * Schedules a microtask or asynchronous callback as soon as possible.\n * Uses queueMicrotask if available, otherwise falls back to process.nextTick or _setImmediate.\n *\n * @type {Function}\n */\nconst asap =\n  typeof queueMicrotask !== 'undefined'\n    ? queueMicrotask.bind(_global)\n    : (typeof process !== 'undefined' && process.nextTick) || _setImmediate;\n\n// *********************\n\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n\n/**\n * Determine if a value is iterable via an iterator that is NOT sourced solely\n * from a polluted Object.prototype. Use this instead of `isIterable` whenever\n * the iterable comes from untrusted input (e.g. user-supplied header sources),\n * so `Object.prototype[Symbol.iterator] = ...` cannot turn an ordinary object\n * into an attacker-controlled entries iterator.\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value has a non-polluted iterator\n */\nconst isSafeIterable = (thing) =>\n  thing != null && hasOwnInPrototypeChain(thing, iterator) && isIterable(thing);\n\nexport default {\n  isArray,\n  isArrayBuffer,\n  isBuffer,\n  isFormData,\n  isArrayBufferView,\n  isString,\n  isNumber,\n  isBoolean,\n  isObject,\n  isPlainObject,\n  isEmptyObject,\n  isReadableStream,\n  isRequest,\n  isResponse,\n  isHeaders,\n  isUndefined,\n  isDate,\n  isFile,\n  isReactNativeBlob,\n  isReactNative,\n  isBlob,\n  isRegExp,\n  isFunction,\n  isStream,\n  isURLSearchParams,\n  isTypedArray,\n  isFileList,\n  forEach,\n  merge,\n  extend,\n  trim,\n  stripBOM,\n  inherits,\n  toFlatObject,\n  kindOf,\n  kindOfTest,\n  endsWith,\n  toArray,\n  forEachEntry,\n  matchAll,\n  isHTMLForm,\n  hasOwnProperty,\n  hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n  hasOwnInPrototypeChain,\n  getSafeProp,\n  reduceDescriptors,\n  freezeMethods,\n  toObjectSet,\n  toCamelCase,\n  noop,\n  toFiniteNumber,\n  findKey,\n  global: _global,\n  isContextDefined,\n  isSpecCompliantForm,\n  toJSONObject,\n  isAsyncFn,\n  isThenable,\n  setImmediate: _setImmediate,\n  asap,\n  isIterable,\n  isSafeIterable,\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n  'age',\n  'authorization',\n  'content-length',\n  'content-type',\n  'etag',\n  'expires',\n  'from',\n  'host',\n  'if-modified-since',\n  'if-unmodified-since',\n  'last-modified',\n  'location',\n  'max-forwards',\n  'proxy-authorization',\n  'referer',\n  'retry-after',\n  'user-agent',\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default (rawHeaders) => {\n  const parsed = {};\n  let key;\n  let val;\n  let i;\n\n  rawHeaders &&\n    rawHeaders.split('\\n').forEach(function parser(line) {\n      i = line.indexOf(':');\n      key = line.substring(0, i).trim().toLowerCase();\n      val = line.substring(i + 1).trim();\n\n      if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n        return;\n      }\n\n      if (key === 'set-cookie') {\n        if (parsed[key]) {\n          parsed[key].push(val);\n        } else {\n          parsed[key] = [val];\n        }\n      } else {\n        parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n      }\n    });\n\n  return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\nfunction trimSPorHTAB(str) {\n  let start = 0;\n  let end = str.length;\n\n  while (start < end) {\n    const code = str.charCodeAt(start);\n\n    if (code !== 0x09 && code !== 0x20) {\n      break;\n    }\n\n    start += 1;\n  }\n\n  while (end > start) {\n    const code = str.charCodeAt(end - 1);\n\n    if (code !== 0x09 && code !== 0x20) {\n      break;\n    }\n\n    end -= 1;\n  }\n\n  return start === 0 && end === str.length ? str : str.slice(start, end);\n}\n\n// The control-code ranges are intentional: header sanitization strips C0/DEL bytes.\n// eslint-disable-next-line no-control-regex\nconst INVALID_UNICODE_HEADER_VALUE_CHARS = new RegExp('[\\\\u0000-\\\\u0008\\\\u000a-\\\\u001f\\\\u007f]+', 'g');\n// eslint-disable-next-line no-control-regex\nconst INVALID_BYTE_STRING_HEADER_VALUE_CHARS = new RegExp('[^\\\\u0009\\\\u0020-\\\\u007e\\\\u0080-\\\\u00ff]+', 'g');\n\nfunction sanitizeValue(value, invalidChars) {\n  if (utils.isArray(value)) {\n    return value.map((item) => sanitizeValue(item, invalidChars));\n  }\n\n  return trimSPorHTAB(String(value).replace(invalidChars, ''));\n}\n\nexport const sanitizeHeaderValue = (value) =>\n  sanitizeValue(value, INVALID_UNICODE_HEADER_VALUE_CHARS);\n\nexport const sanitizeByteStringHeaderValue = (value) =>\n  sanitizeValue(value, INVALID_BYTE_STRING_HEADER_VALUE_CHARS);\n\nexport function toByteStringHeaderObject(headers) {\n  const byteStringHeaders = Object.create(null);\n\n  utils.forEach(headers.toJSON(), (value, header) => {\n    byteStringHeaders[header] = sanitizeByteStringHeaderValue(value);\n  });\n\n  return byteStringHeaders;\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\nimport { sanitizeHeaderValue } from '../helpers/sanitizeHeaderValue.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n  return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n  if (value === false || value == null) {\n    return value;\n  }\n\n  return utils.isArray(value) ? value.map(normalizeValue) : sanitizeHeaderValue(String(value));\n}\n\nfunction parseTokens(str) {\n  const tokens = Object.create(null);\n  const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n  let match;\n\n  while ((match = tokensRE.exec(str))) {\n    tokens[match[1]] = match[2];\n  }\n\n  return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n  if (utils.isFunction(filter)) {\n    return filter.call(this, value, header);\n  }\n\n  if (isHeaderNameFilter) {\n    value = header;\n  }\n\n  if (!utils.isString(value)) return;\n\n  if (utils.isString(filter)) {\n    return value.indexOf(filter) !== -1;\n  }\n\n  if (utils.isRegExp(filter)) {\n    return filter.test(value);\n  }\n}\n\nfunction formatHeader(header) {\n  return header\n    .trim()\n    .toLowerCase()\n    .replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n      return char.toUpperCase() + str;\n    });\n}\n\nfunction buildAccessors(obj, header) {\n  const accessorName = utils.toCamelCase(' ' + header);\n\n  ['get', 'set', 'has'].forEach((methodName) => {\n    Object.defineProperty(obj, methodName + accessorName, {\n      // Null-proto descriptor so a polluted Object.prototype.get cannot turn\n      // this data descriptor into an accessor descriptor on the way in.\n      __proto__: null,\n      value: function (arg1, arg2, arg3) {\n        return this[methodName].call(this, header, arg1, arg2, arg3);\n      },\n      configurable: true,\n    });\n  });\n}\n\nclass AxiosHeaders {\n  constructor(headers) {\n    headers && this.set(headers);\n  }\n\n  set(header, valueOrRewrite, rewrite) {\n    const self = this;\n\n    function setHeader(_value, _header, _rewrite) {\n      const lHeader = normalizeHeader(_header);\n\n      if (!lHeader) {\n        return;\n      }\n\n      const key = utils.findKey(self, lHeader);\n\n      if (\n        !key ||\n        self[key] === undefined ||\n        _rewrite === true ||\n        (_rewrite === undefined && self[key] !== false)\n      ) {\n        self[key || _header] = normalizeValue(_value);\n      }\n    }\n\n    const setHeaders = (headers, _rewrite) =>\n      utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n    if (utils.isPlainObject(header) || header instanceof this.constructor) {\n      setHeaders(header, valueOrRewrite);\n    } else if (utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n      setHeaders(parseHeaders(header), valueOrRewrite);\n    } else if (utils.isObject(header) && utils.isSafeIterable(header)) {\n      let obj = Object.create(null),\n        dest,\n        key;\n      for (const entry of header) {\n        if (!utils.isArray(entry)) {\n          throw new TypeError('Object iterator must return a key-value pair');\n        }\n\n        key = entry[0];\n\n        if (utils.hasOwnProp(obj, key)) {\n          dest = obj[key];\n          obj[key] = utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]];\n        } else {\n          obj[key] = entry[1];\n        }\n      }\n\n      setHeaders(obj, valueOrRewrite);\n    } else {\n      header != null && setHeader(valueOrRewrite, header, rewrite);\n    }\n\n    return this;\n  }\n\n  get(header, parser) {\n    header = normalizeHeader(header);\n\n    if (header) {\n      const key = utils.findKey(this, header);\n\n      if (key) {\n        const value = this[key];\n\n        if (!parser) {\n          return value;\n        }\n\n        if (parser === true) {\n          return parseTokens(value);\n        }\n\n        if (utils.isFunction(parser)) {\n          return parser.call(this, value, key);\n        }\n\n        if (utils.isRegExp(parser)) {\n          return parser.exec(value);\n        }\n\n        throw new TypeError('parser must be boolean|regexp|function');\n      }\n    }\n  }\n\n  has(header, matcher) {\n    header = normalizeHeader(header);\n\n    if (header) {\n      const key = utils.findKey(this, header);\n\n      return !!(\n        key &&\n        this[key] !== undefined &&\n        (!matcher || matchHeaderValue(this, this[key], key, matcher))\n      );\n    }\n\n    return false;\n  }\n\n  delete(header, matcher) {\n    const self = this;\n    let deleted = false;\n\n    function deleteHeader(_header) {\n      _header = normalizeHeader(_header);\n\n      if (_header) {\n        const key = utils.findKey(self, _header);\n\n        if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n          delete self[key];\n\n          deleted = true;\n        }\n      }\n    }\n\n    if (utils.isArray(header)) {\n      header.forEach(deleteHeader);\n    } else {\n      deleteHeader(header);\n    }\n\n    return deleted;\n  }\n\n  clear(matcher) {\n    const keys = Object.keys(this);\n    let i = keys.length;\n    let deleted = false;\n\n    while (i--) {\n      const key = keys[i];\n      if (!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n        delete this[key];\n        deleted = true;\n      }\n    }\n\n    return deleted;\n  }\n\n  normalize(format) {\n    const self = this;\n    const headers = {};\n\n    utils.forEach(this, (value, header) => {\n      const key = utils.findKey(headers, header);\n\n      if (key) {\n        self[key] = normalizeValue(value);\n        delete self[header];\n        return;\n      }\n\n      const normalized = format ? formatHeader(header) : String(header).trim();\n\n      if (normalized !== header) {\n        delete self[header];\n      }\n\n      self[normalized] = normalizeValue(value);\n\n      headers[normalized] = true;\n    });\n\n    return this;\n  }\n\n  concat(...targets) {\n    return this.constructor.concat(this, ...targets);\n  }\n\n  toJSON(asStrings) {\n    const obj = Object.create(null);\n\n    utils.forEach(this, (value, header) => {\n      value != null &&\n        value !== false &&\n        (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n    });\n\n    return obj;\n  }\n\n  [Symbol.iterator]() {\n    return Object.entries(this.toJSON())[Symbol.iterator]();\n  }\n\n  toString() {\n    return Object.entries(this.toJSON())\n      .map(([header, value]) => header + ': ' + value)\n      .join('\\n');\n  }\n\n  getSetCookie() {\n    return this.get('set-cookie') || [];\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'AxiosHeaders';\n  }\n\n  static from(thing) {\n    return thing instanceof this ? thing : new this(thing);\n  }\n\n  static concat(first, ...targets) {\n    const computed = new this(first);\n\n    targets.forEach((target) => computed.set(target));\n\n    return computed;\n  }\n\n  static accessor(header) {\n    const internals =\n      (this[$internals] =\n      this[$internals] =\n        {\n          accessors: {},\n        });\n\n    const accessors = internals.accessors;\n    const prototype = this.prototype;\n\n    function defineAccessor(_header) {\n      const lHeader = normalizeHeader(_header);\n\n      if (!accessors[lHeader]) {\n        buildAccessors(prototype, _header);\n        accessors[lHeader] = true;\n      }\n    }\n\n    utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n    return this;\n  }\n}\n\nAxiosHeaders.accessor([\n  'Content-Type',\n  'Content-Length',\n  'Accept',\n  'Accept-Encoding',\n  'User-Agent',\n  'Authorization',\n]);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({ value }, key) => {\n  let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n  return {\n    get: () => value,\n    set(headerValue) {\n      this[mapped] = headerValue;\n    },\n  };\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst REDACTED = '[REDACTED ****]';\n\nfunction hasOwnOrPrototypeToJSON(source) {\n  if (utils.hasOwnProp(source, 'toJSON')) {\n    return true;\n  }\n\n  let prototype = Object.getPrototypeOf(source);\n\n  while (prototype && prototype !== Object.prototype) {\n    if (utils.hasOwnProp(prototype, 'toJSON')) {\n      return true;\n    }\n\n    prototype = Object.getPrototypeOf(prototype);\n  }\n\n  return false;\n}\n\n// Build a plain-object snapshot of `config` and replace the value of any key\n// (case-insensitive) listed in `redactKeys` with REDACTED. Walks through arrays\n// and AxiosHeaders, and short-circuits on circular references.\nfunction redactConfig(config, redactKeys) {\n  const lowerKeys = new Set(redactKeys.map((k) => String(k).toLowerCase()));\n  const seen = [];\n\n  const visit = (source) => {\n    if (source === null || typeof source !== 'object') return source;\n    if (utils.isBuffer(source)) return source;\n    if (seen.indexOf(source) !== -1) return undefined;\n\n    if (source instanceof AxiosHeaders) {\n      source = source.toJSON();\n    }\n\n    seen.push(source);\n\n    let result;\n    if (utils.isArray(source)) {\n      result = [];\n      source.forEach((v, i) => {\n        const reducedValue = visit(v);\n        if (!utils.isUndefined(reducedValue)) {\n          result[i] = reducedValue;\n        }\n      });\n    } else {\n      if (!utils.isPlainObject(source) && hasOwnOrPrototypeToJSON(source)) {\n        seen.pop();\n        return source;\n      }\n\n      result = Object.create(null);\n      for (const [key, value] of Object.entries(source)) {\n        const reducedValue = lowerKeys.has(key.toLowerCase()) ? REDACTED : visit(value);\n        if (!utils.isUndefined(reducedValue)) {\n          result[key] = reducedValue;\n        }\n      }\n    }\n\n    seen.pop();\n    return result;\n  };\n\n  return visit(config);\n}\n\nclass AxiosError extends Error {\n  static from(error, code, config, request, response, customProps) {\n    const axiosError = new AxiosError(error.message, code || error.code, config, request, response);\n    // Match native `Error` `cause` semantics: non-enumerable. The wrapped\n    // error often carries circular internals (sockets, requests, agents), so\n    // an enumerable `cause` makes structured loggers (pino/winston) and any\n    // own-property walk throw \"Converting circular structure to JSON\".\n    // Regression from #6982; see #7205. `__proto__: null` mirrors the\n    // `message` descriptor below (prototype-pollution-safe descriptor).\n    Object.defineProperty(axiosError, 'cause', {\n      __proto__: null,\n      value: error,\n      writable: true,\n      enumerable: false,\n      configurable: true,\n    });\n    axiosError.name = error.name;\n\n    // Preserve status from the original error if not already set from response\n    if (error.status != null && axiosError.status == null) {\n      axiosError.status = error.status;\n    }\n\n    customProps && Object.assign(axiosError, customProps);\n    return axiosError;\n  }\n\n  /**\n   * Create an Error with the specified message, config, error code, request and response.\n   *\n   * @param {string} message The error message.\n   * @param {string} [code] The error code (for example, 'ECONNABORTED').\n   * @param {Object} [config] The config.\n   * @param {Object} [request] The request.\n   * @param {Object} [response] The response.\n   *\n   * @returns {Error} The created error.\n   */\n  constructor(message, code, config, request, response) {\n    super(message);\n\n    // Make message enumerable to maintain backward compatibility\n    // The native Error constructor sets message as non-enumerable,\n    // but axios < v1.13.3 had it as enumerable\n    Object.defineProperty(this, 'message', {\n      // Null-proto descriptor so a polluted Object.prototype.get cannot turn\n      // this data descriptor into an accessor descriptor on the way in.\n      __proto__: null,\n      value: message,\n      enumerable: true,\n      writable: true,\n      configurable: true,\n    });\n\n    this.name = 'AxiosError';\n    this.isAxiosError = true;\n    code && (this.code = code);\n    config && (this.config = config);\n    request && (this.request = request);\n    if (response) {\n      this.response = response;\n      this.status = response.status;\n    }\n  }\n\n  toJSON() {\n    // Opt-in redaction: when the request config carries a `redact` array, the\n    // value of any matching key (case-insensitive, at any depth) is replaced\n    // with REDACTED in the serialized snapshot. Undefined or empty leaves the\n    // existing serialization behavior unchanged.\n    const config = this.config;\n    const redactKeys = config && utils.hasOwnProp(config, 'redact') ? config.redact : undefined;\n    const serializedConfig =\n      utils.isArray(redactKeys) && redactKeys.length > 0\n        ? redactConfig(config, redactKeys)\n        : utils.toJSONObject(config);\n\n    return {\n      // Standard\n      message: this.message,\n      name: this.name,\n      // Microsoft\n      description: this.description,\n      number: this.number,\n      // Mozilla\n      fileName: this.fileName,\n      lineNumber: this.lineNumber,\n      columnNumber: this.columnNumber,\n      stack: this.stack,\n      // Axios\n      config: serializedConfig,\n      code: this.code,\n      status: this.status,\n    };\n  }\n}\n\n// This can be changed to static properties as soon as the parser options in .eslint.cjs are updated.\nAxiosError.ERR_BAD_OPTION_VALUE = 'ERR_BAD_OPTION_VALUE';\nAxiosError.ERR_BAD_OPTION = 'ERR_BAD_OPTION';\nAxiosError.ECONNABORTED = 'ECONNABORTED';\nAxiosError.ETIMEDOUT = 'ETIMEDOUT';\nAxiosError.ECONNREFUSED = 'ECONNREFUSED';\nAxiosError.ERR_NETWORK = 'ERR_NETWORK';\nAxiosError.ERR_FR_TOO_MANY_REDIRECTS = 'ERR_FR_TOO_MANY_REDIRECTS';\nAxiosError.ERR_DEPRECATED = 'ERR_DEPRECATED';\nAxiosError.ERR_BAD_RESPONSE = 'ERR_BAD_RESPONSE';\nAxiosError.ERR_BAD_REQUEST = 'ERR_BAD_REQUEST';\nAxiosError.ERR_CANCELED = 'ERR_CANCELED';\nAxiosError.ERR_NOT_SUPPORT = 'ERR_NOT_SUPPORT';\nAxiosError.ERR_INVALID_URL = 'ERR_INVALID_URL';\nAxiosError.ERR_FORM_DATA_DEPTH_EXCEEDED = 'ERR_FORM_DATA_DEPTH_EXCEEDED';\n\nexport default AxiosError;\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n// Default nesting limit shared with the inverse transform (formDataToJSON) so\n// the FormData <-> JSON round-trip stays symmetric.\nexport const DEFAULT_FORM_DATA_MAX_DEPTH = 100;\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n  return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n  return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n  if (!path) return key;\n  return path\n    .concat(key)\n    .map(function each(token, i) {\n      // eslint-disable-next-line no-param-reassign\n      token = removeBrackets(token);\n      return !dots && i ? '[' + token + ']' : token;\n    })\n    .join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n  return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n  return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n  if (!utils.isObject(obj)) {\n    throw new TypeError('target must be an object');\n  }\n\n  // eslint-disable-next-line no-param-reassign\n  formData = formData || new (PlatformFormData || FormData)();\n\n  // eslint-disable-next-line no-param-reassign\n  options = utils.toFlatObject(\n    options,\n    {\n      metaTokens: true,\n      dots: false,\n      indexes: false,\n    },\n    false,\n    function defined(option, source) {\n      // eslint-disable-next-line no-eq-null,eqeqeq\n      return !utils.isUndefined(source[option]);\n    }\n  );\n\n  const metaTokens = options.metaTokens;\n  // eslint-disable-next-line no-use-before-define\n  const visitor = options.visitor || defaultVisitor;\n  const dots = options.dots;\n  const indexes = options.indexes;\n  const _Blob = options.Blob || (typeof Blob !== 'undefined' && Blob);\n  const maxDepth = options.maxDepth === undefined ? DEFAULT_FORM_DATA_MAX_DEPTH : options.maxDepth;\n  const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n  const stack = [];\n\n  if (!utils.isFunction(visitor)) {\n    throw new TypeError('visitor must be a function');\n  }\n\n  function convertValue(value) {\n    if (value === null) return '';\n\n    if (utils.isDate(value)) {\n      return value.toISOString();\n    }\n\n    if (utils.isBoolean(value)) {\n      return value.toString();\n    }\n\n    if (!useBlob && utils.isBlob(value)) {\n      throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n    }\n\n    if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n      if (useBlob && typeof _Blob === 'function') {\n        return new _Blob([value]);\n      }\n      if (typeof Buffer !== 'undefined') {\n        return Buffer.from(value);\n      }\n      throw new AxiosError('Blob is not supported. Use a Buffer instead.', AxiosError.ERR_NOT_SUPPORT);\n    }\n\n    return value;\n  }\n\n  function throwIfMaxDepthExceeded(depth) {\n    if (depth > maxDepth) {\n      throw new AxiosError(\n        'Object is too deeply nested (' + depth + ' levels). Max depth: ' + maxDepth,\n        AxiosError.ERR_FORM_DATA_DEPTH_EXCEEDED\n      );\n    }\n  }\n\n  function stringifyWithDepthLimit(value, depth) {\n    if (maxDepth === Infinity) {\n      return JSON.stringify(value);\n    }\n\n    const ancestors = [];\n\n    return JSON.stringify(value, function limitDepth(_key, currentValue) {\n      if (!utils.isObject(currentValue)) {\n        return currentValue;\n      }\n\n      while (ancestors.length && ancestors[ancestors.length - 1] !== this) {\n        ancestors.pop();\n      }\n\n      ancestors.push(currentValue);\n      throwIfMaxDepthExceeded(depth + ancestors.length - 1);\n\n      return currentValue;\n    });\n  }\n\n  /**\n   * Default visitor.\n   *\n   * @param {*} value\n   * @param {String|Number} key\n   * @param {Array<String|Number>} path\n   * @this {FormData}\n   *\n   * @returns {boolean} return true to visit the each prop of the value recursively\n   */\n  function defaultVisitor(value, key, path) {\n    let arr = value;\n\n    if (utils.isReactNative(formData) && utils.isReactNativeBlob(value)) {\n      formData.append(renderKey(path, key, dots), convertValue(value));\n      return false;\n    }\n\n    if (value && !path && typeof value === 'object') {\n      if (utils.endsWith(key, '{}')) {\n        // eslint-disable-next-line no-param-reassign\n        key = metaTokens ? key : key.slice(0, -2);\n        // eslint-disable-next-line no-param-reassign\n        value = stringifyWithDepthLimit(value, 1);\n      } else if (\n        (utils.isArray(value) && isFlatArray(value)) ||\n        ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value)))\n      ) {\n        // eslint-disable-next-line no-param-reassign\n        key = removeBrackets(key);\n\n        arr.forEach(function each(el, index) {\n          !(utils.isUndefined(el) || el === null) &&\n            formData.append(\n              // eslint-disable-next-line no-nested-ternary\n              indexes === true\n                ? renderKey([key], index, dots)\n                : indexes === null\n                  ? key\n                  : key + '[]',\n              convertValue(el)\n            );\n        });\n        return false;\n      }\n    }\n\n    if (isVisitable(value)) {\n      return true;\n    }\n\n    formData.append(renderKey(path, key, dots), convertValue(value));\n\n    return false;\n  }\n\n  const exposedHelpers = Object.assign(predicates, {\n    defaultVisitor,\n    convertValue,\n    isVisitable,\n  });\n\n  function build(value, path, depth = 0) {\n    if (utils.isUndefined(value)) return;\n\n    throwIfMaxDepthExceeded(depth);\n\n    if (stack.indexOf(value) !== -1) {\n      throw new Error('Circular reference detected in ' + path.join('.'));\n    }\n\n    stack.push(value);\n\n    utils.forEach(value, function each(el, key) {\n      const result =\n        !(utils.isUndefined(el) || el === null) &&\n        visitor.call(formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers);\n\n      if (result === true) {\n        build(el, path ? path.concat(key) : [key], depth + 1);\n      }\n    });\n\n    stack.pop();\n  }\n\n  if (!utils.isObject(obj)) {\n    throw new TypeError('data must be an object');\n  }\n\n  build(obj);\n\n  return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n  const charMap = {\n    '!': '%21',\n    \"'\": '%27',\n    '(': '%28',\n    ')': '%29',\n    '~': '%7E',\n    '%20': '+',\n  };\n  return encodeURIComponent(str).replace(/[!'()~]|%20/g, function replacer(match) {\n    return charMap[match];\n  });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n  this._pairs = [];\n\n  params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n  this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n  const _encode = encoder\n    ? (value) => encoder.call(this, value, encode)\n    : encode;\n\n  return this._pairs\n    .map(function each(pair) {\n      return _encode(pair[0]) + '=' + _encode(pair[1]);\n    }, '')\n    .join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from './AxiosURLSearchParams.js';\n\n/**\n * It replaces URL-encoded forms of `:`, `$`, `,`, and spaces with\n * their plain counterparts (`:`, `$`, `,`, `+`).\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nexport function encode(val) {\n  return encodeURIComponent(val)\n    .replace(/%3A/gi, ':')\n    .replace(/%24/g, '$')\n    .replace(/%2C/gi, ',')\n    .replace(/%20/g, '+');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n  if (!params) {\n    return url;\n  }\n  url = url || '';\n\n  const _options = utils.isFunction(options)\n    ? {\n        serialize: options,\n      }\n    : options;\n\n  // Read serializer options pollution-safely: own properties and methods on a\n  // class/template prototype are honored, but values injected onto a polluted\n  // Object.prototype are ignored.\n  const _encode = utils.getSafeProp(_options, 'encode') || encode;\n  const serializeFn = utils.getSafeProp(_options, 'serialize');\n\n  let serializedParams;\n\n  if (serializeFn) {\n    serializedParams = serializeFn(params, _options);\n  } else {\n    serializedParams = utils.isURLSearchParams(params)\n      ? params.toString()\n      : new AxiosURLSearchParams(params, _options).toString(_encode);\n  }\n\n  if (serializedParams) {\n    const hashmarkIndex = url.indexOf('#');\n\n    if (hashmarkIndex !== -1) {\n      url = url.slice(0, hashmarkIndex);\n    }\n    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n  }\n\n  return url;\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\nclass InterceptorManager {\n  constructor() {\n    this.handlers = [];\n  }\n\n  /**\n   * Add a new interceptor to the stack\n   *\n   * @param {Function} fulfilled The function to handle `then` for a `Promise`\n   * @param {Function} rejected The function to handle `reject` for a `Promise`\n   * @param {Object} options The options for the interceptor, synchronous and runWhen\n   *\n   * @return {Number} An ID used to remove interceptor later\n   */\n  use(fulfilled, rejected, options) {\n    this.handlers.push({\n      fulfilled,\n      rejected,\n      synchronous: options ? options.synchronous : false,\n      runWhen: options ? options.runWhen : null,\n    });\n    return this.handlers.length - 1;\n  }\n\n  /**\n   * Remove an interceptor from the stack\n   *\n   * @param {Number} id The ID that was returned by `use`\n   *\n   * @returns {void}\n   */\n  eject(id) {\n    if (this.handlers[id]) {\n      this.handlers[id] = null;\n    }\n  }\n\n  /**\n   * Clear all interceptors from the stack\n   *\n   * @returns {void}\n   */\n  clear() {\n    if (this.handlers) {\n      this.handlers = [];\n    }\n  }\n\n  /**\n   * Iterate over all the registered interceptors\n   *\n   * This method is particularly useful for skipping over any\n   * interceptors that may have become `null` calling `eject`.\n   *\n   * @param {Function} fn The function to call for each interceptor\n   *\n   * @returns {void}\n   */\n  forEach(fn) {\n    utils.forEach(this.handlers, function forEachHandler(h) {\n      if (h !== null) {\n        fn(h);\n      }\n    });\n  }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n  silentJSONParsing: true,\n  forcedJSONParsing: true,\n  clarifyTimeoutError: false,\n  legacyInterceptorReqResOrdering: true,\n  advertiseZstdAcceptEncoding: false,\n  validateStatusUndefinedResolves: true,\n};\n","import URLSearchParams from './classes/URLSearchParams.js';\nimport FormData from './classes/FormData.js';\nimport Blob from './classes/Blob.js';\n\nexport default {\n  isBrowser: true,\n  classes: {\n    URLSearchParams,\n    FormData,\n    Blob,\n  },\n  protocols: ['http', 'https', 'file', 'blob', 'url', 'data'],\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict';\n\nexport default typeof Blob !== 'undefined' ? Blob : null;\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = (typeof navigator === 'object' && navigator) || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n *  typeof window -> undefined\n *  typeof document -> undefined\n *\n * react-native:\n *  navigator.product -> 'ReactNative'\n * nativescript\n *  navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv =\n  hasBrowserEnv &&\n  (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n  return (\n    typeof WorkerGlobalScope !== 'undefined' &&\n    // eslint-disable-next-line no-undef\n    self instanceof WorkerGlobalScope &&\n    typeof self.importScripts === 'function'\n  );\n})();\n\nconst origin = (hasBrowserEnv && window.location.href) || 'http://localhost';\n\nexport {\n  hasBrowserEnv,\n  hasStandardBrowserWebWorkerEnv,\n  hasStandardBrowserEnv,\n  _navigator as navigator,\n  origin,\n};\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n  ...utils,\n  ...platform,\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n  return toFormData(data, new platform.classes.URLSearchParams(), {\n    visitor: function (value, key, path, helpers) {\n      if (platform.isNode && utils.isBuffer(value)) {\n        this.append(key, value.toString('base64'));\n        return false;\n      }\n\n      return helpers.defaultVisitor.apply(this, arguments);\n    },\n    ...options,\n  });\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport { DEFAULT_FORM_DATA_MAX_DEPTH } from './toFormData.js';\n\nconst MAX_DEPTH = DEFAULT_FORM_DATA_MAX_DEPTH;\n\nfunction throwIfDepthExceeded(index) {\n  if (index > MAX_DEPTH) {\n    throw new AxiosError(\n      'FormData field is too deeply nested (' + index + ' levels). Max depth: ' + MAX_DEPTH,\n      AxiosError.ERR_FORM_DATA_DEPTH_EXCEEDED\n    );\n  }\n}\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n  // foo[x][y][z]\n  // foo.x.y.z\n  // foo-x-y-z\n  // foo x y z\n  const path = [];\n  const pattern = /\\w+|\\[(\\w*)]/g;\n  let match;\n\n  while ((match = pattern.exec(name)) !== null) {\n    throwIfDepthExceeded(path.length);\n    path.push(match[0] === '[]' ? '' : match[1] || match[0]);\n  }\n\n  return path;\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n  const obj = {};\n  const keys = Object.keys(arr);\n  let i;\n  const len = keys.length;\n  let key;\n  for (i = 0; i < len; i++) {\n    key = keys[i];\n    obj[key] = arr[key];\n  }\n  return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n  function buildPath(path, value, target, index) {\n    throwIfDepthExceeded(index);\n\n    let name = path[index++];\n\n    if (name === '__proto__') return true;\n\n    const isNumericKey = Number.isFinite(+name);\n    const isLast = index >= path.length;\n    name = !name && utils.isArray(target) ? target.length : name;\n\n    if (isLast) {\n      if (utils.hasOwnProp(target, name)) {\n        target[name] = utils.isArray(target[name])\n          ? target[name].concat(value)\n          : [target[name], value];\n      } else {\n        target[name] = value;\n      }\n\n      return !isNumericKey;\n    }\n\n    if (!utils.hasOwnProp(target, name) || !utils.isObject(target[name])) {\n      target[name] = [];\n    }\n\n    const result = buildPath(path, value, target[name], index);\n\n    if (result && utils.isArray(target[name])) {\n      target[name] = arrayToObject(target[name]);\n    }\n\n    return !isNumericKey;\n  }\n\n  if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n    const obj = {};\n\n    utils.forEachEntry(formData, (name, value) => {\n      buildPath(parsePropPath(name), value, obj, 0);\n    });\n\n    return obj;\n  }\n\n  return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\nconst own = (obj, key) => (obj != null && utils.hasOwnProp(obj, key) ? obj[key] : undefined);\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n  if (utils.isString(rawValue)) {\n    try {\n      (parser || JSON.parse)(rawValue);\n      return utils.trim(rawValue);\n    } catch (e) {\n      if (e.name !== 'SyntaxError') {\n        throw e;\n      }\n    }\n  }\n\n  return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n  transitional: transitionalDefaults,\n\n  adapter: ['xhr', 'http', 'fetch'],\n\n  transformRequest: [\n    function transformRequest(data, headers) {\n      const contentType = headers.getContentType() || '';\n      const hasJSONContentType = contentType.indexOf('application/json') > -1;\n      const isObjectPayload = utils.isObject(data);\n\n      if (isObjectPayload && utils.isHTMLForm(data)) {\n        data = new FormData(data);\n      }\n\n      const isFormData = utils.isFormData(data);\n\n      if (isFormData) {\n        return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n      }\n\n      if (\n        utils.isArrayBuffer(data) ||\n        utils.isBuffer(data) ||\n        utils.isStream(data) ||\n        utils.isFile(data) ||\n        utils.isBlob(data) ||\n        utils.isReadableStream(data)\n      ) {\n        return data;\n      }\n      if (utils.isArrayBufferView(data)) {\n        return data.buffer;\n      }\n      if (utils.isURLSearchParams(data)) {\n        headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n        return data.toString();\n      }\n\n      let isFileList;\n\n      if (isObjectPayload) {\n        const formSerializer = own(this, 'formSerializer');\n        if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n          return toURLEncodedForm(data, formSerializer).toString();\n        }\n\n        if (\n          (isFileList = utils.isFileList(data)) ||\n          contentType.indexOf('multipart/form-data') > -1\n        ) {\n          const env = own(this, 'env');\n          const _FormData = env && env.FormData;\n\n          return toFormData(\n            isFileList ? { 'files[]': data } : data,\n            _FormData && new _FormData(),\n            formSerializer\n          );\n        }\n      }\n\n      if (isObjectPayload || hasJSONContentType) {\n        headers.setContentType('application/json', false);\n        return stringifySafely(data);\n      }\n\n      return data;\n    },\n  ],\n\n  transformResponse: [\n    function transformResponse(data) {\n      const transitional = own(this, 'transitional') || defaults.transitional;\n      const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n      const responseType = own(this, 'responseType');\n      const JSONRequested = responseType === 'json';\n\n      if (utils.isResponse(data) || utils.isReadableStream(data)) {\n        return data;\n      }\n\n      if (\n        data &&\n        utils.isString(data) &&\n        ((forcedJSONParsing && !responseType) || JSONRequested)\n      ) {\n        const silentJSONParsing = transitional && transitional.silentJSONParsing;\n        const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n        try {\n          return JSON.parse(data, own(this, 'parseReviver'));\n        } catch (e) {\n          if (strictJSONParsing) {\n            if (e.name === 'SyntaxError') {\n              throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, own(this, 'response'));\n            }\n            throw e;\n          }\n        }\n      }\n\n      return data;\n    },\n  ],\n\n  /**\n   * A timeout in milliseconds to abort a request. If set to 0 (default) a\n   * timeout is not created.\n   */\n  timeout: 0,\n\n  xsrfCookieName: 'XSRF-TOKEN',\n  xsrfHeaderName: 'X-XSRF-TOKEN',\n\n  maxContentLength: -1,\n  maxBodyLength: -1,\n\n  env: {\n    FormData: platform.classes.FormData,\n    Blob: platform.classes.Blob,\n  },\n\n  validateStatus: function validateStatus(status) {\n    return status >= 200 && status < 300;\n  },\n\n  headers: {\n    common: {\n      Accept: 'application/json, text/plain, */*',\n      'Content-Type': undefined,\n    },\n  },\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch', 'query'], (method) => {\n  defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from '../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n  const config = this || defaults;\n  const context = response || config;\n  const headers = AxiosHeaders.from(context.headers);\n  let data = context.data;\n\n  utils.forEach(fns, function transform(fn) {\n    data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n  });\n\n  headers.normalize();\n\n  return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n  return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\n\nclass CanceledError extends AxiosError {\n  /**\n   * A `CanceledError` is an object that is thrown when an operation is canceled.\n   *\n   * @param {string=} message The message.\n   * @param {Object=} config The config.\n   * @param {Object=} request The request.\n   *\n   * @returns {CanceledError} The created error.\n   */\n  constructor(message, config, request) {\n    super(message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n    this.name = 'CanceledError';\n    this.__CANCEL__ = true;\n  }\n}\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n  const validateStatus = response.config.validateStatus;\n  if (!response.status || !validateStatus || validateStatus(response.status)) {\n    resolve(response);\n  } else {\n    reject(new AxiosError(\n      'Request failed with status code ' + response.status,\n      response.status >= 400 && response.status < 500 ? AxiosError.ERR_BAD_REQUEST : AxiosError.ERR_BAD_RESPONSE,\n      response.config,\n      response.request,\n      response\n    ));\n  }\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n  const match = /^([-+\\w]{1,25}):(?:\\/\\/)?/.exec(url);\n  return (match && match[1]) || '';\n}\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n  samplesCount = samplesCount || 10;\n  const bytes = new Array(samplesCount);\n  const timestamps = new Array(samplesCount);\n  let head = 0;\n  let tail = 0;\n  let firstSampleTS;\n\n  min = min !== undefined ? min : 1000;\n\n  return function push(chunkLength) {\n    const now = Date.now();\n\n    const startedAt = timestamps[tail];\n\n    if (!firstSampleTS) {\n      firstSampleTS = now;\n    }\n\n    bytes[head] = chunkLength;\n    timestamps[head] = now;\n\n    let i = tail;\n    let bytesCount = 0;\n\n    while (i !== head) {\n      bytesCount += bytes[i++];\n      i = i % samplesCount;\n    }\n\n    head = (head + 1) % samplesCount;\n\n    if (head === tail) {\n      tail = (tail + 1) % samplesCount;\n    }\n\n    if (now - firstSampleTS < min) {\n      return;\n    }\n\n    const passed = startedAt && now - startedAt;\n\n    return passed ? Math.round((bytesCount * 1000) / passed) : undefined;\n  };\n}\n\nexport default speedometer;\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n  let timestamp = 0;\n  let threshold = 1000 / freq;\n  let lastArgs;\n  let timer;\n\n  const invoke = (args, now = Date.now()) => {\n    timestamp = now;\n    lastArgs = null;\n    if (timer) {\n      clearTimeout(timer);\n      timer = null;\n    }\n    fn(...args);\n  };\n\n  const throttled = (...args) => {\n    const now = Date.now();\n    const passed = now - timestamp;\n    if (passed >= threshold) {\n      invoke(args, now);\n    } else {\n      lastArgs = args;\n      if (!timer) {\n        timer = setTimeout(() => {\n          timer = null;\n          invoke(lastArgs);\n        }, threshold - passed);\n      }\n    }\n  };\n\n  const flush = () => lastArgs && invoke(lastArgs);\n\n  return [throttled, flush];\n}\n\nexport default throttle;\n","import speedometer from './speedometer.js';\nimport throttle from './throttle.js';\nimport utils from '../utils.js';\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n  let bytesNotified = 0;\n  const _speedometer = speedometer(50, 250);\n\n  return throttle((e) => {\n    if (!e || typeof e.loaded !== 'number') {\n      return;\n    }\n    const rawLoaded = e.loaded;\n    const total = e.lengthComputable ? e.total : undefined;\n    const loaded = total != null ? Math.min(rawLoaded, total) : rawLoaded;\n    const progressBytes = Math.max(0, loaded - bytesNotified);\n    const rate = _speedometer(progressBytes);\n\n    bytesNotified = Math.max(bytesNotified, loaded);\n\n    const data = {\n      loaded,\n      total,\n      progress: total ? loaded / total : undefined,\n      bytes: progressBytes,\n      rate: rate ? rate : undefined,\n      estimated: rate && total ? (total - loaded) / rate : undefined,\n      event: e,\n      lengthComputable: total != null,\n      [isDownloadStream ? 'download' : 'upload']: true,\n    };\n\n    listener(data);\n  }, freq);\n};\n\nexport const progressEventDecorator = (total, throttled) => {\n  const lengthComputable = total != null;\n\n  return [\n    (loaded) =>\n      throttled[0]({\n        lengthComputable,\n        total,\n        loaded,\n      }),\n    throttled[1],\n  ];\n};\n\nexport const asyncDecorator =\n  (fn) =>\n  (...args) =>\n    utils.asap(() => fn(...args));\n","import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv\n  ? ((origin, isMSIE) => (url) => {\n      url = new URL(url, platform.origin);\n\n      return (\n        origin.protocol === url.protocol &&\n        origin.host === url.host &&\n        (isMSIE || origin.port === url.port)\n      );\n    })(\n      new URL(platform.origin),\n      platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n    )\n  : () => true;\n","import utils from '../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv\n  ? // Standard browser envs support document.cookie\n    {\n      write(name, value, expires, path, domain, secure, sameSite) {\n        if (typeof document === 'undefined') return;\n\n        const cookie = [`${name}=${encodeURIComponent(value)}`];\n\n        if (utils.isNumber(expires)) {\n          cookie.push(`expires=${new Date(expires).toUTCString()}`);\n        }\n        if (utils.isString(path)) {\n          cookie.push(`path=${path}`);\n        }\n        if (utils.isString(domain)) {\n          cookie.push(`domain=${domain}`);\n        }\n        if (secure === true) {\n          cookie.push('secure');\n        }\n        if (utils.isString(sameSite)) {\n          cookie.push(`SameSite=${sameSite}`);\n        }\n\n        document.cookie = cookie.join('; ');\n      },\n\n      read(name) {\n        if (typeof document === 'undefined') return null;\n        // Match name=value by splitting on the semicolon separator instead of building a\n        // RegExp from `name` — interpolating an unescaped string into a RegExp would let\n        // metacharacters (e.g. `.+?` in an attacker-influenced cookie name) cause ReDoS or\n        // match the wrong cookie. Browsers may serialize cookie pairs as either \";\" or\n        // \"; \", so ignore optional whitespace before each cookie name.\n        const cookies = document.cookie.split(';');\n        for (let i = 0; i < cookies.length; i++) {\n          const cookie = cookies[i].replace(/^\\s+/, '');\n          const eq = cookie.indexOf('=');\n          if (eq !== -1 && cookie.slice(0, eq) === name) {\n            try {\n              return decodeURIComponent(cookie.slice(eq + 1));\n            } catch (e) {\n              return cookie.slice(eq + 1);\n            }\n          }\n        }\n        return null;\n      },\n\n      remove(name) {\n        this.write(name, '', Date.now() - 86400000, '/');\n      },\n    }\n  : // Non-standard browser env (web workers, react-native) lack needed support.\n    {\n      write() {},\n      read() {\n        return null;\n      },\n      remove() {},\n    };\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n  // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n  // by any combination of letters, digits, plus, period, or hyphen.\n  if (typeof url !== 'string') {\n    return false;\n  }\n\n  return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n  return relativeURL\n    ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n    : baseURL;\n}\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\nconst malformedHttpProtocol = /^https?:(?!\\/\\/)/i;\nconst httpProtocolControlCharacters = /[\\t\\n\\r]/g;\n\nfunction stripLeadingC0ControlOrSpace(url) {\n  let i = 0;\n  while (i < url.length && url.charCodeAt(i) <= 0x20) {\n    i++;\n  }\n  return url.slice(i);\n}\n\nfunction normalizeURLForProtocolCheck(url) {\n  return stripLeadingC0ControlOrSpace(url).replace(httpProtocolControlCharacters, '');\n}\n\nfunction assertValidHttpProtocolURL(url, config) {\n  if (typeof url === 'string' && malformedHttpProtocol.test(normalizeURLForProtocolCheck(url))) {\n    throw new AxiosError(\n      'Invalid URL: missing \"//\" after protocol',\n      AxiosError.ERR_INVALID_URL,\n      config\n    );\n  }\n}\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls, config) {\n  assertValidHttpProtocolURL(requestedURL, config);\n  let isRelativeUrl = !isAbsoluteURL(requestedURL);\n  if (baseURL && (isRelativeUrl || allowAbsoluteUrls === false)) {\n    assertValidHttpProtocolURL(baseURL, config);\n    return combineURLs(baseURL, requestedURL);\n  }\n  return requestedURL;\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst headersToObject = (thing) => (thing instanceof AxiosHeaders ? { ...thing } : thing);\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n  // eslint-disable-next-line no-param-reassign\n  config1 = config1 || {};\n  config2 = config2 || {};\n\n  // Use a null-prototype object so that downstream reads such as `config.auth`\n  // or `config.baseURL` cannot inherit polluted values from Object.prototype.\n  // `hasOwnProperty` is restored as a non-enumerable own slot to preserve\n  // ergonomics for user code that relies on it.\n  const config = Object.create(null);\n  Object.defineProperty(config, 'hasOwnProperty', {\n    // Null-proto descriptor so a polluted Object.prototype.get cannot turn\n    // this data descriptor into an accessor descriptor on the way in.\n    __proto__: null,\n    value: Object.prototype.hasOwnProperty,\n    enumerable: false,\n    writable: true,\n    configurable: true,\n  });\n\n  function getMergedValue(target, source, prop, caseless) {\n    if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n      return utils.merge.call({ caseless }, target, source);\n    } else if (utils.isPlainObject(source)) {\n      return utils.merge({}, source);\n    } else if (utils.isArray(source)) {\n      return source.slice();\n    }\n    return source;\n  }\n\n  function mergeDeepProperties(a, b, prop, caseless) {\n    if (!utils.isUndefined(b)) {\n      return getMergedValue(a, b, prop, caseless);\n    } else if (!utils.isUndefined(a)) {\n      return getMergedValue(undefined, a, prop, caseless);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function valueFromConfig2(a, b) {\n    if (!utils.isUndefined(b)) {\n      return getMergedValue(undefined, b);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function defaultToConfig2(a, b) {\n    if (!utils.isUndefined(b)) {\n      return getMergedValue(undefined, b);\n    } else if (!utils.isUndefined(a)) {\n      return getMergedValue(undefined, a);\n    }\n  }\n\n  function getMergedTransitionalOption(prop) {\n    const transitional2 = utils.hasOwnProp(config2, 'transitional') ? config2.transitional : undefined;\n\n    if (!utils.isUndefined(transitional2)) {\n      if (utils.isPlainObject(transitional2)) {\n        if (utils.hasOwnProp(transitional2, prop)) {\n          return transitional2[prop];\n        }\n      } else {\n        return undefined;\n      }\n    }\n\n    const transitional1 = utils.hasOwnProp(config1, 'transitional') ? config1.transitional : undefined;\n\n    if (utils.isPlainObject(transitional1) && utils.hasOwnProp(transitional1, prop)) {\n      return transitional1[prop];\n    }\n\n    return undefined;\n  }\n\n  // eslint-disable-next-line consistent-return\n  function mergeDirectKeys(a, b, prop) {\n    if (utils.hasOwnProp(config2, prop)) {\n      return getMergedValue(a, b);\n    } else if (utils.hasOwnProp(config1, prop)) {\n      return getMergedValue(undefined, a);\n    }\n  }\n\n  const mergeMap = {\n    url: valueFromConfig2,\n    method: valueFromConfig2,\n    data: valueFromConfig2,\n    baseURL: defaultToConfig2,\n    transformRequest: defaultToConfig2,\n    transformResponse: defaultToConfig2,\n    paramsSerializer: defaultToConfig2,\n    timeout: defaultToConfig2,\n    timeoutMessage: defaultToConfig2,\n    withCredentials: defaultToConfig2,\n    withXSRFToken: defaultToConfig2,\n    adapter: defaultToConfig2,\n    responseType: defaultToConfig2,\n    xsrfCookieName: defaultToConfig2,\n    xsrfHeaderName: defaultToConfig2,\n    onUploadProgress: defaultToConfig2,\n    onDownloadProgress: defaultToConfig2,\n    decompress: defaultToConfig2,\n    maxContentLength: defaultToConfig2,\n    maxBodyLength: defaultToConfig2,\n    beforeRedirect: defaultToConfig2,\n    transport: defaultToConfig2,\n    httpAgent: defaultToConfig2,\n    httpsAgent: defaultToConfig2,\n    cancelToken: defaultToConfig2,\n    socketPath: defaultToConfig2,\n    allowedSocketPaths: defaultToConfig2,\n    responseEncoding: defaultToConfig2,\n    validateStatus: mergeDirectKeys,\n    headers: (a, b, prop) =>\n      mergeDeepProperties(headersToObject(a), headersToObject(b), prop, true),\n  };\n\n  utils.forEach(Object.keys({ ...config1, ...config2 }), function computeConfigValue(prop) {\n    if (prop === '__proto__' || prop === 'constructor' || prop === 'prototype') return;\n    const merge = utils.hasOwnProp(mergeMap, prop) ? mergeMap[prop] : mergeDeepProperties;\n    const a = utils.hasOwnProp(config1, prop) ? config1[prop] : undefined;\n    const b = utils.hasOwnProp(config2, prop) ? config2[prop] : undefined;\n    const configValue = merge(a, b, prop);\n    (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n  });\n\n  if (\n    utils.hasOwnProp(config2, 'validateStatus') &&\n    utils.isUndefined(config2.validateStatus) &&\n    getMergedTransitionalOption('validateStatusUndefinedResolves') === false\n  ) {\n    if (utils.hasOwnProp(config1, 'validateStatus')) {\n      config.validateStatus = getMergedValue(undefined, config1.validateStatus);\n    } else {\n      delete config.validateStatus;\n    }\n  }\n\n  return config;\n}\n","import platform from '../platform/index.js';\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport isURLSameOrigin from './isURLSameOrigin.js';\nimport cookies from './cookies.js';\nimport buildFullPath from '../core/buildFullPath.js';\nimport mergeConfig from '../core/mergeConfig.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport buildURL from './buildURL.js';\n\nconst FORM_DATA_CONTENT_HEADERS = ['content-type', 'content-length'];\n\nfunction setFormDataHeaders(headers, formHeaders, policy) {\n  if (policy !== 'content-only') {\n    headers.set(formHeaders);\n    return;\n  }\n\n  Object.entries(formHeaders || {}).forEach(([key, val]) => {\n    if (FORM_DATA_CONTENT_HEADERS.includes(key.toLowerCase())) {\n      headers.set(key, val);\n    }\n  });\n}\n\n/**\n * Encode a UTF-8 string to a Latin-1 byte string for use with btoa().\n * This is a modern replacement for the deprecated unescape(encodeURIComponent(str)) pattern.\n *\n * @param {string} str The string to encode\n *\n * @returns {string} UTF-8 bytes as a Latin-1 string\n */\nconst encodeUTF8 = (str) =>\n  encodeURIComponent(str).replace(/%([0-9A-F]{2})/gi, (_, hex) =>\n    String.fromCharCode(parseInt(hex, 16))\n  );\n\nfunction resolveConfig(config) {\n  const newConfig = mergeConfig({}, config);\n\n  // Read only own properties to prevent prototype pollution gadgets\n  // (e.g. Object.prototype.baseURL = 'https://evil.com').\n  const own = (key) => (utils.hasOwnProp(newConfig, key) ? newConfig[key] : undefined);\n\n  const data = own('data');\n  let withXSRFToken = own('withXSRFToken');\n  const xsrfHeaderName = own('xsrfHeaderName');\n  const xsrfCookieName = own('xsrfCookieName');\n  let headers = own('headers');\n  const auth = own('auth');\n  const baseURL = own('baseURL');\n  const allowAbsoluteUrls = own('allowAbsoluteUrls');\n  const url = own('url');\n\n  newConfig.headers = headers = AxiosHeaders.from(headers);\n\n  newConfig.url = buildURL(\n    buildFullPath(baseURL, url, allowAbsoluteUrls, newConfig),\n    own('params'),\n    own('paramsSerializer')\n  );\n\n  // HTTP basic authentication\n  if (auth) {\n    const username = utils.getSafeProp(auth, 'username') || '';\n    const password = utils.getSafeProp(auth, 'password') || '';\n\n    try {\n      headers.set(\n        'Authorization',\n        'Basic ' + btoa(username + ':' + (password ? encodeUTF8(password) : ''))\n      );\n    } catch (e) {\n      throw AxiosError.from(e, AxiosError.ERR_BAD_OPTION_VALUE, config);\n    }\n  }\n\n  if (utils.isFormData(data)) {\n    if (\n      platform.hasStandardBrowserEnv ||\n      platform.hasStandardBrowserWebWorkerEnv ||\n      utils.isReactNative(data)\n    ) {\n      headers.setContentType(undefined); // browser/web worker/RN handles it\n    } else if (utils.isFunction(data.getHeaders)) {\n      // Node.js FormData (like form-data package)\n      setFormDataHeaders(headers, data.getHeaders(), own('formDataHeaderPolicy'));\n    }\n  }\n\n  // Add xsrf header\n  // This is only done if running in a standard browser environment.\n  // Specifically not if we're in a web worker, or react-native.\n\n  if (platform.hasStandardBrowserEnv) {\n    if (utils.isFunction(withXSRFToken)) {\n      withXSRFToken = withXSRFToken(newConfig);\n    }\n\n    // Strict boolean check — prevents proto-pollution gadgets (e.g. Object.prototype.withXSRFToken = 1)\n    // and misconfigurations (e.g. \"false\") from short-circuiting the same-origin check and leaking\n    // the XSRF token cross-origin.\n    const shouldSendXSRF =\n      withXSRFToken === true || (withXSRFToken == null && isURLSameOrigin(newConfig.url));\n\n    if (shouldSendXSRF) {\n      const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n      if (xsrfValue) {\n        headers.set(xsrfHeaderName, xsrfValue);\n      }\n    }\n  }\n\n  return newConfig;\n}\n\nexport default resolveConfig;\n","import utils from '../utils.js';\nimport settle from '../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport { progressEventReducer } from '../helpers/progressEventReducer.js';\nimport resolveConfig from '../helpers/resolveConfig.js';\nimport { toByteStringHeaderObject } from '../helpers/sanitizeHeaderValue.js';\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported &&\n  function (config) {\n    return new Promise(function dispatchXhrRequest(resolve, reject) {\n      const _config = resolveConfig(config);\n      let requestData = _config.data;\n      const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n      let { responseType, onUploadProgress, onDownloadProgress } = _config;\n      let onCanceled;\n      let uploadThrottled, downloadThrottled;\n      let flushUpload, flushDownload;\n\n      function done() {\n        flushUpload && flushUpload(); // flush events\n        flushDownload && flushDownload(); // flush events\n\n        _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n        _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n      }\n\n      let request = new XMLHttpRequest();\n\n      request.open(_config.method.toUpperCase(), _config.url, true);\n\n      // Set the request timeout in MS\n      request.timeout = _config.timeout;\n\n      function onloadend() {\n        if (!request) {\n          return;\n        }\n        // Prepare the response\n        const responseHeaders = AxiosHeaders.from(\n          'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n        );\n        const responseData =\n          !responseType || responseType === 'text' || responseType === 'json'\n            ? request.responseText\n            : request.response;\n        const response = {\n          data: responseData,\n          status: request.status,\n          statusText: request.statusText,\n          headers: responseHeaders,\n          config,\n          request,\n        };\n\n        settle(\n          function _resolve(value) {\n            resolve(value);\n            done();\n          },\n          function _reject(err) {\n            reject(err);\n            done();\n          },\n          response\n        );\n\n        // Clean up request\n        request = null;\n      }\n\n      if ('onloadend' in request) {\n        // Use onloadend if available\n        request.onloadend = onloadend;\n      } else {\n        // Listen for ready state to emulate onloadend\n        request.onreadystatechange = function handleLoad() {\n          if (!request || request.readyState !== 4) {\n            return;\n          }\n\n          // The request errored out and we didn't get a response, this will be\n          // handled by onerror instead\n          // With one exception: request that using file: protocol, most browsers\n          // will return status as 0 even though it's a successful request\n          if (\n            request.status === 0 &&\n            !(request.responseURL && request.responseURL.startsWith('file:'))\n          ) {\n            return;\n          }\n          // readystate handler is calling before onerror or ontimeout handlers,\n          // so we should call onloadend on the next 'tick'\n          setTimeout(onloadend);\n        };\n      }\n\n      // Handle browser request cancellation (as opposed to a manual cancellation)\n      request.onabort = function handleAbort() {\n        if (!request) {\n          return;\n        }\n\n        reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n        done();\n\n        // Clean up request\n        request = null;\n      };\n\n      // Handle low level network errors\n      request.onerror = function handleError(event) {\n        // Browsers deliver a ProgressEvent in XHR onerror\n        // (message may be empty; when present, surface it)\n        // See https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/error_event\n        const msg = event && event.message ? event.message : 'Network Error';\n        const err = new AxiosError(msg, AxiosError.ERR_NETWORK, config, request);\n        // attach the underlying event for consumers who want details\n        err.event = event || null;\n        reject(err);\n        done();\n        request = null;\n      };\n\n      // Handle timeout\n      request.ontimeout = function handleTimeout() {\n        let timeoutErrorMessage = _config.timeout\n          ? 'timeout of ' + _config.timeout + 'ms exceeded'\n          : 'timeout exceeded';\n        const transitional = _config.transitional || transitionalDefaults;\n        if (_config.timeoutErrorMessage) {\n          timeoutErrorMessage = _config.timeoutErrorMessage;\n        }\n        reject(\n          new AxiosError(\n            timeoutErrorMessage,\n            transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n            config,\n            request\n          )\n        );\n        done();\n\n        // Clean up request\n        request = null;\n      };\n\n      // Remove Content-Type if data is undefined\n      requestData === undefined && requestHeaders.setContentType(null);\n\n      // Add headers to the request\n      if ('setRequestHeader' in request) {\n        utils.forEach(toByteStringHeaderObject(requestHeaders), function setRequestHeader(val, key) {\n          request.setRequestHeader(key, val);\n        });\n      }\n\n      // Add withCredentials to request if needed\n      if (!utils.isUndefined(_config.withCredentials)) {\n        request.withCredentials = !!_config.withCredentials;\n      }\n\n      // Add responseType to request if needed\n      if (responseType && responseType !== 'json') {\n        request.responseType = _config.responseType;\n      }\n\n      // Handle progress if needed\n      if (onDownloadProgress) {\n        [downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true);\n        request.addEventListener('progress', downloadThrottled);\n      }\n\n      // Not all browsers support upload events\n      if (onUploadProgress && request.upload) {\n        [uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress);\n\n        request.upload.addEventListener('progress', uploadThrottled);\n\n        request.upload.addEventListener('loadend', flushUpload);\n      }\n\n      if (_config.cancelToken || _config.signal) {\n        // Handle cancellation\n        // eslint-disable-next-line func-names\n        onCanceled = (cancel) => {\n          if (!request) {\n            return;\n          }\n          reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n          request.abort();\n          done();\n          request = null;\n        };\n\n        _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n        if (_config.signal) {\n          _config.signal.aborted\n            ? onCanceled()\n            : _config.signal.addEventListener('abort', onCanceled);\n        }\n      }\n\n      const protocol = parseProtocol(_config.url);\n\n      if (protocol && !platform.protocols.includes(protocol)) {\n        reject(\n          new AxiosError(\n            'Unsupported protocol ' + protocol + ':',\n            AxiosError.ERR_BAD_REQUEST,\n            config\n          )\n        );\n        done();\n        return;\n      }\n\n      // Send the request\n      request.send(requestData || null);\n    });\n  };\n","import CanceledError from '../cancel/CanceledError.js';\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n  signals = signals ? signals.filter(Boolean) : [];\n\n  if (!timeout && !signals.length) {\n    return;\n  }\n\n  const controller = new AbortController();\n\n  let aborted = false;\n\n  const onabort = function (reason) {\n    if (!aborted) {\n      aborted = true;\n      unsubscribe();\n      const err = reason instanceof Error ? reason : this.reason;\n      controller.abort(\n        err instanceof AxiosError\n          ? err\n          : new CanceledError(err instanceof Error ? err.message : err)\n      );\n    }\n  };\n\n  let timer =\n    timeout &&\n    setTimeout(() => {\n      timer = null;\n      onabort(new AxiosError(`timeout of ${timeout}ms exceeded`, AxiosError.ETIMEDOUT));\n    }, timeout);\n\n  const unsubscribe = () => {\n    if (!signals) { return; }\n    timer && clearTimeout(timer);\n    timer = null;\n    signals.forEach((signal) => {\n      signal.unsubscribe\n        ? signal.unsubscribe(onabort)\n        : signal.removeEventListener('abort', onabort);\n    });\n    signals = null;\n  };\n\n  signals.forEach((signal) => signal.addEventListener('abort', onabort, { once: true }));\n\n  const { signal } = controller;\n\n  signal.unsubscribe = () => utils.asap(unsubscribe);\n\n  return signal;\n};\n\nexport default composeSignals;\n","export const streamChunk = function* (chunk, chunkSize) {\n  let len = chunk.byteLength;\n\n  if (!chunkSize || len < chunkSize) {\n    yield chunk;\n    return;\n  }\n\n  let pos = 0;\n  let end;\n\n  while (pos < len) {\n    end = pos + chunkSize;\n    yield chunk.slice(pos, end);\n    pos = end;\n  }\n};\n\nexport const readBytes = async function* (iterable, chunkSize) {\n  for await (const chunk of readStream(iterable)) {\n    yield* streamChunk(chunk, chunkSize);\n  }\n};\n\nconst readStream = async function* (stream) {\n  if (stream[Symbol.asyncIterator]) {\n    yield* stream;\n    return;\n  }\n\n  const reader = stream.getReader();\n  try {\n    for (;;) {\n      const { done, value } = await reader.read();\n      if (done) {\n        break;\n      }\n      yield value;\n    }\n  } finally {\n    await reader.cancel();\n  }\n};\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n  const iterator = readBytes(stream, chunkSize);\n\n  let bytes = 0;\n  let done;\n  let _onFinish = (e) => {\n    if (!done) {\n      done = true;\n      onFinish && onFinish(e);\n    }\n  };\n\n  return new ReadableStream(\n    {\n      async pull(controller) {\n        try {\n          const { done, value } = await iterator.next();\n\n          if (done) {\n            _onFinish();\n            controller.close();\n            return;\n          }\n\n          let len = value.byteLength;\n          if (onProgress) {\n            let loadedBytes = (bytes += len);\n            onProgress(loadedBytes);\n          }\n          controller.enqueue(new Uint8Array(value));\n        } catch (err) {\n          _onFinish(err);\n          throw err;\n        }\n      },\n      cancel(reason) {\n        _onFinish(reason);\n        return iterator.return();\n      },\n    },\n    {\n      highWaterMark: 2,\n    }\n  );\n};\n","/**\n * Estimate decoded byte length of a data:// URL *without* allocating large buffers.\n * - For base64: compute exact decoded size using length and padding;\n *               handle %XX at the character-count level (no string allocation).\n * - For non-base64: compute the exact percent-decoded UTF-8 byte length.\n *\n * @param {string} url\n * @returns {number}\n */\nconst isHexDigit = (charCode) =>\n  (charCode >= 48 && charCode <= 57) ||\n  (charCode >= 65 && charCode <= 70) ||\n  (charCode >= 97 && charCode <= 102);\n\nconst isPercentEncodedByte = (str, i, len) =>\n  i + 2 < len && isHexDigit(str.charCodeAt(i + 1)) && isHexDigit(str.charCodeAt(i + 2));\n\nexport default function estimateDataURLDecodedBytes(url) {\n  if (!url || typeof url !== 'string') return 0;\n  if (!url.startsWith('data:')) return 0;\n\n  const comma = url.indexOf(',');\n  if (comma < 0) return 0;\n\n  const meta = url.slice(5, comma);\n  const body = url.slice(comma + 1);\n  const isBase64 = /;base64/i.test(meta);\n\n  if (isBase64) {\n    let effectiveLen = body.length;\n    const len = body.length; // cache length\n\n    for (let i = 0; i < len; i++) {\n      if (body.charCodeAt(i) === 37 /* '%' */ && i + 2 < len) {\n        const a = body.charCodeAt(i + 1);\n        const b = body.charCodeAt(i + 2);\n        const isHex = isHexDigit(a) && isHexDigit(b);\n\n        if (isHex) {\n          effectiveLen -= 2;\n          i += 2;\n        }\n      }\n    }\n\n    let pad = 0;\n    let idx = len - 1;\n\n    const tailIsPct3D = (j) =>\n      j >= 2 &&\n      body.charCodeAt(j - 2) === 37 && // '%'\n      body.charCodeAt(j - 1) === 51 && // '3'\n      (body.charCodeAt(j) === 68 || body.charCodeAt(j) === 100); // 'D' or 'd'\n\n    if (idx >= 0) {\n      if (body.charCodeAt(idx) === 61 /* '=' */) {\n        pad++;\n        idx--;\n      } else if (tailIsPct3D(idx)) {\n        pad++;\n        idx -= 3;\n      }\n    }\n\n    if (pad === 1 && idx >= 0) {\n      if (body.charCodeAt(idx) === 61 /* '=' */) {\n        pad++;\n      } else if (tailIsPct3D(idx)) {\n        pad++;\n      }\n    }\n\n    const groups = Math.floor(effectiveLen / 4);\n    const bytes = groups * 3 - (pad || 0);\n    return bytes > 0 ? bytes : 0;\n  }\n\n  // Compute UTF-8 byte length directly from UTF-16 code units without allocating\n  // a byte buffer (TextEncoder.encode would defeat the DoS guard on large bodies).\n  // Valid %XX triplets count as one decoded byte; this matches the bytes that\n  // decodeURIComponent(body) would produce before Buffer re-encodes the string.\n  let bytes = 0;\n  for (let i = 0, len = body.length; i < len; i++) {\n    const c = body.charCodeAt(i);\n    if (c === 37 /* '%' */ && isPercentEncodedByte(body, i, len)) {\n      bytes += 1;\n      i += 2;\n    } else if (c < 0x80) {\n      bytes += 1;\n    } else if (c < 0x800) {\n      bytes += 2;\n    } else if (c >= 0xd800 && c <= 0xdbff && i + 1 < len) {\n      const next = body.charCodeAt(i + 1);\n      if (next >= 0xdc00 && next <= 0xdfff) {\n        bytes += 4;\n        i++;\n      } else {\n        bytes += 3;\n      }\n    } else {\n      bytes += 3;\n    }\n  }\n  return bytes;\n}\n","export const VERSION = \"1.18.1\";","import platform from '../platform/index.js';\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport composeSignals from '../helpers/composeSignals.js';\nimport { trackStream } from '../helpers/trackStream.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {\n  progressEventReducer,\n  progressEventDecorator,\n  asyncDecorator,\n} from '../helpers/progressEventReducer.js';\nimport resolveConfig from '../helpers/resolveConfig.js';\nimport settle from '../core/settle.js';\nimport estimateDataURLDecodedBytes from '../helpers/estimateDataURLDecodedBytes.js';\nimport { VERSION } from '../env/data.js';\nimport { toByteStringHeaderObject } from '../helpers/sanitizeHeaderValue.js';\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst { isFunction } = utils;\n\n/**\n * Encode a UTF-8 string to a Latin-1 byte string for use with btoa().\n * This is a modern replacement for the deprecated unescape(encodeURIComponent(str)) pattern.\n *\n * @param {string} str The string to encode\n *\n * @returns {string} UTF-8 bytes as a Latin-1 string\n */\nconst encodeUTF8 = (str) =>\n  encodeURIComponent(str).replace(/%([0-9A-F]{2})/gi, (_, hex) =>\n    String.fromCharCode(parseInt(hex, 16))\n  );\n\n// Node's WHATWG URL parser returns `username` and `password` percent-encoded.\n// Decode before composing the `auth` option so credentials such as\n// `my%40email.com:pass` are sent as `my@email.com:pass`. Falls back to the\n// original value for malformed input so a bad encoding never throws.\nconst decodeURIComponentSafe = (value) => {\n  if (!utils.isString(value)) {\n    return value;\n  }\n\n  try {\n    return decodeURIComponent(value);\n  } catch (error) {\n    return value;\n  }\n};\n\nconst test = (fn, ...args) => {\n  try {\n    return !!fn(...args);\n  } catch (e) {\n    return false;\n  }\n};\n\nconst maybeWithAuthCredentials = (url) => {\n  const protocolIndex = url.indexOf('://');\n  let urlToCheck = url;\n  if (protocolIndex !== -1) {\n    urlToCheck = urlToCheck.slice(protocolIndex + 3);\n  }\n  return urlToCheck.includes('@') || urlToCheck.includes(':');\n};\n\nconst factory = (env) => {\n  const globalObject =\n    utils.global !== undefined && utils.global !== null\n      ? utils.global\n      : globalThis;\n  const { ReadableStream, TextEncoder } = globalObject;\n\n  env = utils.merge.call(\n    {\n      skipUndefined: true,\n    },\n    {\n      Request: globalObject.Request,\n      Response: globalObject.Response,\n    },\n    env\n  );\n\n  const { fetch: envFetch, Request, Response } = env;\n  const isFetchSupported = envFetch ? isFunction(envFetch) : typeof fetch === 'function';\n  const isRequestSupported = isFunction(Request);\n  const isResponseSupported = isFunction(Response);\n\n  if (!isFetchSupported) {\n    return false;\n  }\n\n  const isReadableStreamSupported = isFetchSupported && isFunction(ReadableStream);\n\n  const encodeText =\n    isFetchSupported &&\n    (typeof TextEncoder === 'function'\n      ? (\n          (encoder) => (str) =>\n            encoder.encode(str)\n        )(new TextEncoder())\n      : async (str) => new Uint8Array(await new Request(str).arrayBuffer()));\n\n  const supportsRequestStream =\n    isRequestSupported &&\n    isReadableStreamSupported &&\n    test(() => {\n      let duplexAccessed = false;\n\n      const request = new Request(platform.origin, {\n        body: new ReadableStream(),\n        method: 'POST',\n        get duplex() {\n          duplexAccessed = true;\n          return 'half';\n        },\n      });\n\n      const hasContentType = request.headers.has('Content-Type');\n\n      if (request.body != null) {\n        request.body.cancel();\n      }\n\n      return duplexAccessed && !hasContentType;\n    });\n\n  const supportsResponseStream =\n    isResponseSupported &&\n    isReadableStreamSupported &&\n    test(() => utils.isReadableStream(new Response('').body));\n\n  const resolvers = {\n    stream: supportsResponseStream && ((res) => res.body),\n  };\n\n  isFetchSupported &&\n    (() => {\n      ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach((type) => {\n        !resolvers[type] &&\n          (resolvers[type] = (res, config) => {\n            let method = res && res[type];\n\n            if (method) {\n              return method.call(res);\n            }\n\n            throw new AxiosError(\n              `Response type '${type}' is not supported`,\n              AxiosError.ERR_NOT_SUPPORT,\n              config\n            );\n          });\n      });\n    })();\n\n  const getBodyLength = async (body) => {\n    if (body == null) {\n      return 0;\n    }\n\n    if (utils.isBlob(body)) {\n      return body.size;\n    }\n\n    if (utils.isSpecCompliantForm(body)) {\n      const _request = new Request(platform.origin, {\n        method: 'POST',\n        body,\n      });\n      return (await _request.arrayBuffer()).byteLength;\n    }\n\n    if (utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n      return body.byteLength;\n    }\n\n    if (utils.isURLSearchParams(body)) {\n      body = body + '';\n    }\n\n    if (utils.isString(body)) {\n      return (await encodeText(body)).byteLength;\n    }\n  };\n\n  const resolveBodyLength = async (headers, body) => {\n    const length = utils.toFiniteNumber(headers.getContentLength());\n\n    return length == null ? getBodyLength(body) : length;\n  };\n\n  return async (config) => {\n    let {\n      url,\n      method,\n      data,\n      signal,\n      cancelToken,\n      timeout,\n      onDownloadProgress,\n      onUploadProgress,\n      responseType,\n      headers,\n      withCredentials = 'same-origin',\n      fetchOptions,\n      maxContentLength,\n      maxBodyLength,\n    } = resolveConfig(config);\n\n    const hasMaxContentLength = utils.isNumber(maxContentLength) && maxContentLength > -1;\n    const hasMaxBodyLength = utils.isNumber(maxBodyLength) && maxBodyLength > -1;\n    const own = (key) => (utils.hasOwnProp(config, key) ? config[key] : undefined);\n\n    let _fetch = envFetch || fetch;\n\n    responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n    let composedSignal = composeSignals(\n      [signal, cancelToken && cancelToken.toAbortSignal()],\n      timeout\n    );\n\n    let request = null;\n\n    const unsubscribe =\n      composedSignal &&\n      composedSignal.unsubscribe &&\n      (() => {\n        composedSignal.unsubscribe();\n      });\n\n    let requestContentLength;\n\n    // AxiosError we raise while the request body is being streamed. Captured\n    // by identity so the catch block can surface it directly, regardless of\n    // how the runtime wraps the resulting fetch rejection (undici exposes it\n    // as `err.cause`; some browsers drop the original error entirely).\n    let pendingBodyError = null;\n\n    const maxBodyLengthError = () =>\n      new AxiosError(\n        'Request body larger than maxBodyLength limit',\n        AxiosError.ERR_BAD_REQUEST,\n        config,\n        request\n      );\n\n    try {\n      // HTTP basic authentication\n      let auth = undefined;\n      const configAuth = own('auth');\n\n      if (configAuth) {\n        const username = utils.getSafeProp(configAuth, 'username') || '';\n        const password = utils.getSafeProp(configAuth, 'password') || '';\n        auth = {\n          username,\n          password\n        };\n      }\n\n      if (maybeWithAuthCredentials(url)) {\n        const parsedURL = new URL(url, platform.origin);\n\n        if (!auth && (parsedURL.username || parsedURL.password)) {\n          const urlUsername = decodeURIComponentSafe(parsedURL.username);\n          const urlPassword = decodeURIComponentSafe(parsedURL.password);\n          auth = {\n            username: urlUsername,\n            password: urlPassword\n          };\n        }\n\n        if (parsedURL.username || parsedURL.password) {\n          parsedURL.username = '';\n          parsedURL.password = '';\n          url = parsedURL.href;\n        }\n      }\n\n      if (auth) {\n        headers.delete('authorization');\n        headers.set(\n          'Authorization',\n          'Basic ' + btoa(encodeUTF8((auth.username || '') + ':' + (auth.password || '')))\n        );\n      }\n\n      // Enforce maxContentLength for data: URLs up-front so we never materialize\n      // an oversized payload. The HTTP adapter applies the same check (see http.js\n      // \"if (protocol === 'data:')\" branch).\n      if (hasMaxContentLength && typeof url === 'string' && url.startsWith('data:')) {\n        const estimated = estimateDataURLDecodedBytes(url);\n        if (estimated > maxContentLength) {\n          throw new AxiosError(\n            'maxContentLength size of ' + maxContentLength + ' exceeded',\n            AxiosError.ERR_BAD_RESPONSE,\n            config,\n            request\n          );\n        }\n      }\n\n      // Enforce maxBodyLength against known-size bodies before dispatch using\n      // the body's *actual* size — never a caller-declared Content-Length,\n      // which could under-report to slip an oversized body past the check.\n      // Unknown-size streams return undefined here and are counted per-chunk\n      // below as fetch consumes them.\n      if (hasMaxBodyLength && method !== 'get' && method !== 'head') {\n        const outboundLength = await getBodyLength(data);\n        if (typeof outboundLength === 'number' && isFinite(outboundLength)) {\n          requestContentLength = outboundLength;\n          if (outboundLength > maxBodyLength) {\n            throw maxBodyLengthError();\n          }\n        }\n      }\n\n      // A streamed body under maxBodyLength must be counted as fetch consumes\n      // it; its size is never trusted from a caller-declared Content-Length.\n      const mustEnforceStreamBody =\n        hasMaxBodyLength && (utils.isReadableStream(data) || utils.isStream(data));\n\n      const trackRequestStream = (stream, onProgress, flush) =>\n        trackStream(\n          stream,\n          DEFAULT_CHUNK_SIZE,\n          (loadedBytes) => {\n            if (hasMaxBodyLength && loadedBytes > maxBodyLength) {\n              throw (pendingBodyError = maxBodyLengthError());\n            }\n            onProgress && onProgress(loadedBytes);\n          },\n          flush\n        );\n\n      if (\n        supportsRequestStream &&\n        method !== 'get' &&\n        method !== 'head' &&\n        (onUploadProgress || mustEnforceStreamBody)\n      ) {\n        requestContentLength =\n          requestContentLength == null ? await resolveBodyLength(headers, data) : requestContentLength;\n\n        // A declared length of 0 is only trusted to skip the wrap when we are\n        // not enforcing a stream limit (which must not rely on that header).\n        if (requestContentLength !== 0 || mustEnforceStreamBody) {\n          let _request = new Request(url, {\n            method: 'POST',\n            body: data,\n            duplex: 'half',\n          });\n\n          let contentTypeHeader;\n\n          if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n            headers.setContentType(contentTypeHeader);\n          }\n\n          if (_request.body) {\n            const [onProgress, flush] =\n              (onUploadProgress &&\n                progressEventDecorator(\n                  requestContentLength,\n                  progressEventReducer(asyncDecorator(onUploadProgress))\n                )) ||\n              [];\n\n            data = trackRequestStream(_request.body, onProgress, flush);\n          }\n        }\n      } else if (\n        mustEnforceStreamBody &&\n        !isRequestSupported &&\n        isReadableStreamSupported &&\n        method !== 'get' &&\n        method !== 'head'\n      ) {\n        data = trackRequestStream(data);\n      } else if (\n        mustEnforceStreamBody &&\n        isRequestSupported &&\n        !supportsRequestStream &&\n        method !== 'get' &&\n        method !== 'head'\n      ) {\n        throw new AxiosError(\n          'Stream request bodies are not supported by the current fetch implementation',\n          AxiosError.ERR_NOT_SUPPORT,\n          config,\n          request\n        );\n      }\n\n      if (!utils.isString(withCredentials)) {\n        withCredentials = withCredentials ? 'include' : 'omit';\n      }\n\n      // Cloudflare Workers throws when credentials are defined\n      // see https://github.com/cloudflare/workerd/issues/902\n      const isCredentialsSupported = isRequestSupported && 'credentials' in Request.prototype;\n\n      // If data is FormData and Content-Type is multipart/form-data without boundary,\n      // delete it so fetch can set it correctly with the boundary\n      if (utils.isFormData(data)) {\n        const contentType = headers.getContentType();\n        if (\n          contentType &&\n          /^multipart\\/form-data/i.test(contentType) &&\n          !/boundary=/i.test(contentType)\n        ) {\n          headers.delete('content-type');\n        }\n      }\n\n      // Set User-Agent header if not already set (fetch defaults to 'node' in Node.js)\n      headers.set('User-Agent', 'axios/' + VERSION, false);\n\n      const resolvedOptions = {\n        ...fetchOptions,\n        signal: composedSignal,\n        method: method.toUpperCase(),\n        headers: toByteStringHeaderObject(headers.normalize()),\n        body: data,\n        duplex: 'half',\n        credentials: isCredentialsSupported ? withCredentials : undefined,\n      };\n\n      request = isRequestSupported && new Request(url, resolvedOptions);\n\n      let response = await (isRequestSupported\n        ? _fetch(request, fetchOptions)\n        : _fetch(url, resolvedOptions));\n\n      const responseHeaders = AxiosHeaders.from(response.headers);\n\n      // Cheap pre-check: if the server honestly declares a content-length that\n      // already exceeds the cap, reject before we start streaming.\n      if (hasMaxContentLength) {\n        const declaredLength = utils.toFiniteNumber(responseHeaders.getContentLength());\n        if (declaredLength != null && declaredLength > maxContentLength) {\n          throw new AxiosError(\n            'maxContentLength size of ' + maxContentLength + ' exceeded',\n            AxiosError.ERR_BAD_RESPONSE,\n            config,\n            request\n          );\n        }\n      }\n\n      const isStreamResponse =\n        supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n      if (\n        supportsResponseStream &&\n        response.body &&\n        (onDownloadProgress || hasMaxContentLength || (isStreamResponse && unsubscribe))\n      ) {\n        const options = {};\n\n        ['status', 'statusText', 'headers'].forEach((prop) => {\n          options[prop] = response[prop];\n        });\n\n        const responseContentLength = utils.toFiniteNumber(responseHeaders.getContentLength());\n\n        const [onProgress, flush] =\n          (onDownloadProgress &&\n            progressEventDecorator(\n              responseContentLength,\n              progressEventReducer(asyncDecorator(onDownloadProgress), true)\n            )) ||\n          [];\n\n        let bytesRead = 0;\n        const onChunkProgress = (loadedBytes) => {\n          if (hasMaxContentLength) {\n            bytesRead = loadedBytes;\n            if (bytesRead > maxContentLength) {\n              throw new AxiosError(\n                'maxContentLength size of ' + maxContentLength + ' exceeded',\n                AxiosError.ERR_BAD_RESPONSE,\n                config,\n                request\n              );\n            }\n          }\n          onProgress && onProgress(loadedBytes);\n        };\n\n        response = new Response(\n          trackStream(response.body, DEFAULT_CHUNK_SIZE, onChunkProgress, () => {\n            flush && flush();\n            unsubscribe && unsubscribe();\n          }),\n          options\n        );\n      }\n\n      responseType = responseType || 'text';\n\n      let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](\n        response,\n        config\n      );\n\n      // Fallback enforcement for environments without ReadableStream support\n      // (legacy runtimes). Detect materialized size from typed output; skip\n      // streams/Response passthrough since the user will read those themselves.\n      if (hasMaxContentLength && !supportsResponseStream && !isStreamResponse) {\n        let materializedSize;\n        if (responseData != null) {\n          if (typeof responseData.byteLength === 'number') {\n            materializedSize = responseData.byteLength;\n          } else if (typeof responseData.size === 'number') {\n            materializedSize = responseData.size;\n          } else if (typeof responseData === 'string') {\n            materializedSize =\n              typeof TextEncoder === 'function'\n                ? new TextEncoder().encode(responseData).byteLength\n                : responseData.length;\n          }\n        }\n        if (typeof materializedSize === 'number' && materializedSize > maxContentLength) {\n          throw new AxiosError(\n            'maxContentLength size of ' + maxContentLength + ' exceeded',\n            AxiosError.ERR_BAD_RESPONSE,\n            config,\n            request\n          );\n        }\n      }\n\n      !isStreamResponse && unsubscribe && unsubscribe();\n\n      return await new Promise((resolve, reject) => {\n        settle(resolve, reject, {\n          data: responseData,\n          headers: AxiosHeaders.from(response.headers),\n          status: response.status,\n          statusText: response.statusText,\n          config,\n          request,\n        });\n      });\n    } catch (err) {\n      unsubscribe && unsubscribe();\n\n      // Safari can surface fetch aborts as a DOMException-like object whose\n      // branded getters throw. Prefer our composed signal reason before reading\n      // the caught error, preserving timeout vs cancellation semantics.\n      if (composedSignal && composedSignal.aborted && composedSignal.reason instanceof AxiosError) {\n        const canceledError = composedSignal.reason;\n        canceledError.config = config;\n        request && (canceledError.request = request);\n        if (err !== canceledError) {\n          // Non-enumerable to match native Error `cause` semantics so loggers\n          // don't recurse into circular fetch internals (see #7205).\n          Object.defineProperty(canceledError, 'cause', {\n            __proto__: null,\n            value: err,\n            writable: true,\n            enumerable: false,\n            configurable: true,\n          });\n        }\n        throw canceledError;\n      }\n\n      // Surface a maxBodyLength violation we raised while the request body was\n      // being streamed. Matching by identity (rather than reading\n      // `err.cause.isAxiosError`) keeps the error deterministic across runtimes\n      // and avoids both prototype-pollution reads and mis-attributing a foreign\n      // AxiosError that merely happened to land in `err.cause`.\n      if (pendingBodyError) {\n        request && !pendingBodyError.request && (pendingBodyError.request = request);\n        throw pendingBodyError;\n      }\n\n      // Re-throw AxiosErrors we raised synchronously (data: URL / content-length\n      // pre-checks, response size enforcement) without re-wrapping them.\n      if (err instanceof AxiosError) {\n        request && !err.request && (err.request = request);\n        throw err;\n      }\n\n      if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\n        const networkError = new AxiosError(\n          'Network Error',\n          AxiosError.ERR_NETWORK,\n          config,\n          request,\n          err && err.response\n        );\n        // Non-enumerable to match native Error `cause` semantics so loggers\n        // don't recurse into circular fetch internals (see #7205).\n        Object.defineProperty(networkError, 'cause', {\n          __proto__: null,\n          value: err.cause || err,\n          writable: true,\n          enumerable: false,\n          configurable: true,\n        });\n        throw networkError;\n      }\n\n      throw AxiosError.from(err, err && err.code, config, request, err && err.response);\n    }\n  };\n};\n\nconst seedCache = new Map();\n\nexport const getFetch = (config) => {\n  let env = (config && config.env) || {};\n  const { fetch, Request, Response } = env;\n  const seeds = [Request, Response, fetch];\n\n  let len = seeds.length,\n    i = len,\n    seed,\n    target,\n    map = seedCache;\n\n  while (i--) {\n    seed = seeds[i];\n    target = map.get(seed);\n\n    target === undefined && map.set(seed, (target = i ? new Map() : factory(env)));\n\n    map = target;\n  }\n\n  return target;\n};\n\nconst adapter = getFetch();\n\nexport default adapter;\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport * as fetchAdapter from './fetch.js';\nimport AxiosError from '../core/AxiosError.js';\n\n/**\n * Known adapters mapping.\n * Provides environment-specific adapters for Axios:\n * - `http` for Node.js\n * - `xhr` for browsers\n * - `fetch` for fetch API-based requests\n *\n * @type {Object<string, Function|Object>}\n */\nconst knownAdapters = {\n  http: httpAdapter,\n  xhr: xhrAdapter,\n  fetch: {\n    get: fetchAdapter.getFetch,\n  },\n};\n\n// Assign adapter names for easier debugging and identification\nutils.forEach(knownAdapters, (fn, value) => {\n  if (fn) {\n    try {\n      // Null-proto descriptors so a polluted Object.prototype.get cannot turn\n      // these data descriptors into accessor descriptors on the way in.\n      Object.defineProperty(fn, 'name', { __proto__: null, value });\n    } catch (e) {\n      // eslint-disable-next-line no-empty\n    }\n    Object.defineProperty(fn, 'adapterName', { __proto__: null, value });\n  }\n});\n\n/**\n * Render a rejection reason string for unknown or unsupported adapters\n *\n * @param {string} reason\n * @returns {string}\n */\nconst renderReason = (reason) => `- ${reason}`;\n\n/**\n * Check if the adapter is resolved (function, null, or false)\n *\n * @param {Function|null|false} adapter\n * @returns {boolean}\n */\nconst isResolvedHandle = (adapter) =>\n  utils.isFunction(adapter) || adapter === null || adapter === false;\n\n/**\n * Get the first suitable adapter from the provided list.\n * Tries each adapter in order until a supported one is found.\n * Throws an AxiosError if no adapter is suitable.\n *\n * @param {Array<string|Function>|string|Function} adapters - Adapter(s) by name or function.\n * @param {Object} config - Axios request configuration\n * @throws {AxiosError} If no suitable adapter is available\n * @returns {Function} The resolved adapter function\n */\nfunction getAdapter(adapters, config) {\n  adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n  const { length } = adapters;\n  let nameOrAdapter;\n  let adapter;\n\n  const rejectedReasons = {};\n\n  for (let i = 0; i < length; i++) {\n    nameOrAdapter = adapters[i];\n    let id;\n\n    adapter = nameOrAdapter;\n\n    if (!isResolvedHandle(nameOrAdapter)) {\n      adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n      if (adapter === undefined) {\n        throw new AxiosError(`Unknown adapter '${id}'`);\n      }\n    }\n\n    if (adapter && (utils.isFunction(adapter) || (adapter = adapter.get(config)))) {\n      break;\n    }\n\n    rejectedReasons[id || '#' + i] = adapter;\n  }\n\n  if (!adapter) {\n    const reasons = Object.entries(rejectedReasons).map(\n      ([id, state]) =>\n        `adapter ${id} ` +\n        (state === false ? 'is not supported by the environment' : 'is not available in the build')\n    );\n\n    let s = length\n      ? reasons.length > 1\n        ? 'since :\\n' + reasons.map(renderReason).join('\\n')\n        : ' ' + renderReason(reasons[0])\n      : 'as no adapter specified';\n\n    throw new AxiosError(\n      `There is no suitable adapter to dispatch the request ` + s,\n      AxiosError.ERR_NOT_SUPPORT\n    );\n  }\n\n  return adapter;\n}\n\n/**\n * Exports Axios adapters and utility to resolve an adapter\n */\nexport default {\n  /**\n   * Resolve an adapter from a list of adapter names or functions.\n   * @type {Function}\n   */\n  getAdapter,\n\n  /**\n   * Exposes all known adapters\n   * @type {Object<string, Function|Object>}\n   */\n  adapters: knownAdapters,\n};\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from '../adapters/adapters.js';\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n  if (config.cancelToken) {\n    config.cancelToken.throwIfRequested();\n  }\n\n  if (config.signal && config.signal.aborted) {\n    throw new CanceledError(null, config);\n  }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n  throwIfCancellationRequested(config);\n\n  config.headers = AxiosHeaders.from(config.headers);\n\n  // Transform request data\n  config.data = transformData.call(config, config.transformRequest);\n\n  if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n    config.headers.setContentType('application/x-www-form-urlencoded', false);\n  }\n\n  const adapter = adapters.getAdapter(config.adapter || defaults.adapter, config);\n\n  return adapter(config).then(\n    function onAdapterResolution(response) {\n      throwIfCancellationRequested(config);\n\n      // Expose the current response on config so that transformResponse can\n      // attach it to any AxiosError it throws (e.g. on JSON parse failure).\n      // We clean it up afterwards to avoid polluting the config object.\n      config.response = response;\n      try {\n        response.data = transformData.call(config, config.transformResponse, response);\n      } finally {\n        delete config.response;\n      }\n\n      response.headers = AxiosHeaders.from(response.headers);\n\n      return response;\n    },\n    function onAdapterRejection(reason) {\n      if (!isCancel(reason)) {\n        throwIfCancellationRequested(config);\n\n        // Transform response data\n        if (reason && reason.response) {\n          config.response = reason.response;\n          try {\n            reason.response.data = transformData.call(\n              config,\n              config.transformResponse,\n              reason.response\n            );\n          } finally {\n            delete config.response;\n          }\n          reason.response.headers = AxiosHeaders.from(reason.response.headers);\n        }\n      }\n\n      return Promise.reject(reason);\n    }\n  );\n}\n","'use strict';\n\nimport { VERSION } from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n  validators[type] = function validator(thing) {\n    return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n  };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n  function formatMessage(opt, desc) {\n    return (\n      '[Axios v' +\n      VERSION +\n      \"] Transitional option '\" +\n      opt +\n      \"'\" +\n      desc +\n      (message ? '. ' + message : '')\n    );\n  }\n\n  // eslint-disable-next-line func-names\n  return (value, opt, opts) => {\n    if (validator === false) {\n      throw new AxiosError(\n        formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n        AxiosError.ERR_DEPRECATED\n      );\n    }\n\n    if (version && !deprecatedWarnings[opt]) {\n      deprecatedWarnings[opt] = true;\n      // eslint-disable-next-line no-console\n      console.warn(\n        formatMessage(\n          opt,\n          ' has been deprecated since v' + version + ' and will be removed in the near future'\n        )\n      );\n    }\n\n    return validator ? validator(value, opt, opts) : true;\n  };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n  return (value, opt) => {\n    // eslint-disable-next-line no-console\n    console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n    return true;\n  };\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n  if (typeof options !== 'object' || options === null) {\n    throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n  }\n  const keys = Object.keys(options);\n  let i = keys.length;\n  while (i-- > 0) {\n    const opt = keys[i];\n    // Use hasOwnProperty so a polluted Object.prototype.<opt> cannot supply\n    // a non-function validator and cause a TypeError.\n    const validator = Object.prototype.hasOwnProperty.call(schema, opt) ? schema[opt] : undefined;\n    if (validator) {\n      const value = options[opt];\n      const result = value === undefined || validator(value, opt, options);\n      if (result !== true) {\n        throw new AxiosError(\n          'option ' + opt + ' must be ' + result,\n          AxiosError.ERR_BAD_OPTION_VALUE\n        );\n      }\n      continue;\n    }\n    if (allowUnknown !== true) {\n      throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n    }\n  }\n}\n\nexport default {\n  assertOptions,\n  validators,\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\nimport transitionalDefaults from '../defaults/transitional.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n  constructor(instanceConfig) {\n    this.defaults = instanceConfig || {};\n    this.interceptors = {\n      request: new InterceptorManager(),\n      response: new InterceptorManager(),\n    };\n  }\n\n  /**\n   * Dispatch a request\n   *\n   * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n   * @param {?Object} config\n   *\n   * @returns {Promise} The Promise to be fulfilled\n   */\n  async request(configOrUrl, config) {\n    try {\n      return await this._request(configOrUrl, config);\n    } catch (err) {\n      if (err instanceof Error) {\n        let dummy = {};\n\n        Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n        // slice off the Error: ... line\n        const stack = (() => {\n          if (!dummy.stack) {\n            return '';\n          }\n\n          const firstNewlineIndex = dummy.stack.indexOf('\\n');\n\n          return firstNewlineIndex === -1 ? '' : dummy.stack.slice(firstNewlineIndex + 1);\n        })();\n        try {\n          if (!err.stack) {\n            err.stack = stack;\n            // match without the 2 top stack lines\n          } else if (stack) {\n            const firstNewlineIndex = stack.indexOf('\\n');\n            const secondNewlineIndex =\n              firstNewlineIndex === -1 ? -1 : stack.indexOf('\\n', firstNewlineIndex + 1);\n            const stackWithoutTwoTopLines =\n              secondNewlineIndex === -1 ? '' : stack.slice(secondNewlineIndex + 1);\n\n            if (!String(err.stack).endsWith(stackWithoutTwoTopLines)) {\n              err.stack += '\\n' + stack;\n            }\n          }\n        } catch (e) {\n          // ignore the case where \"stack\" is an un-writable property\n        }\n      }\n\n      throw err;\n    }\n  }\n\n  _request(configOrUrl, config) {\n    /*eslint no-param-reassign:0*/\n    // Allow for axios('example/url'[, config]) a la fetch API\n    if (typeof configOrUrl === 'string') {\n      config = config || {};\n      config.url = configOrUrl;\n    } else {\n      config = configOrUrl || {};\n    }\n\n    config = mergeConfig(this.defaults, config);\n\n    const { transitional, paramsSerializer, headers } = config;\n\n    if (transitional !== undefined) {\n      validator.assertOptions(\n        transitional,\n        {\n          silentJSONParsing: validators.transitional(validators.boolean),\n          forcedJSONParsing: validators.transitional(validators.boolean),\n          clarifyTimeoutError: validators.transitional(validators.boolean),\n          legacyInterceptorReqResOrdering: validators.transitional(validators.boolean),\n          advertiseZstdAcceptEncoding: validators.transitional(validators.boolean),\n          validateStatusUndefinedResolves: validators.transitional(validators.boolean),\n        },\n        false\n      );\n    }\n\n    if (paramsSerializer != null) {\n      if (utils.isFunction(paramsSerializer)) {\n        config.paramsSerializer = {\n          serialize: paramsSerializer,\n        };\n      } else {\n        validator.assertOptions(\n          paramsSerializer,\n          {\n            encode: validators.function,\n            serialize: validators.function,\n          },\n          true\n        );\n      }\n    }\n\n    // Set config.allowAbsoluteUrls\n    if (config.allowAbsoluteUrls !== undefined) {\n      // do nothing\n    } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n      config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n    } else {\n      config.allowAbsoluteUrls = true;\n    }\n\n    validator.assertOptions(\n      config,\n      {\n        baseUrl: validators.spelling('baseURL'),\n        withXsrfToken: validators.spelling('withXSRFToken'),\n      },\n      true\n    );\n\n    // Set config.method\n    config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n    // Flatten headers\n    let contextHeaders = headers && utils.merge(headers.common, headers[config.method]);\n\n    headers &&\n      utils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch', 'query', 'common'], (method) => {\n        delete headers[method];\n      });\n\n    config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n    // filter out skipped interceptors\n    const requestInterceptorChain = [];\n    let synchronousRequestInterceptors = true;\n    this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n      if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n        return;\n      }\n\n      synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n      const transitional = config.transitional || transitionalDefaults;\n      const legacyInterceptorReqResOrdering =\n        transitional && transitional.legacyInterceptorReqResOrdering;\n\n      if (legacyInterceptorReqResOrdering) {\n        requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n      } else {\n        requestInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n      }\n    });\n\n    const responseInterceptorChain = [];\n    this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n      responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n    });\n\n    let promise;\n    let i = 0;\n    let len;\n\n    if (!synchronousRequestInterceptors) {\n      const chain = [dispatchRequest.bind(this), undefined];\n      chain.unshift(...requestInterceptorChain);\n      chain.push(...responseInterceptorChain);\n      len = chain.length;\n\n      promise = Promise.resolve(config);\n\n      while (i < len) {\n        promise = promise.then(chain[i++], chain[i++]);\n      }\n\n      return promise;\n    }\n\n    len = requestInterceptorChain.length;\n\n    let newConfig = config;\n\n    while (i < len) {\n      const onFulfilled = requestInterceptorChain[i++];\n      const onRejected = requestInterceptorChain[i++];\n      try {\n        newConfig = onFulfilled(newConfig);\n      } catch (error) {\n        onRejected.call(this, error);\n        break;\n      }\n    }\n\n    try {\n      promise = dispatchRequest.call(this, newConfig);\n    } catch (error) {\n      return Promise.reject(error);\n    }\n\n    i = 0;\n    len = responseInterceptorChain.length;\n\n    while (i < len) {\n      promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n    }\n\n    return promise;\n  }\n\n  getUri(config) {\n    config = mergeConfig(this.defaults, config);\n    const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls, config);\n    return buildURL(fullPath, config.params, config.paramsSerializer);\n  }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function (url, config) {\n    return this.request(\n      mergeConfig(config || {}, {\n        method,\n        url,\n        data: config && utils.hasOwnProp(config, 'data') ? config.data : undefined,\n      })\n    );\n  };\n});\n\nutils.forEach(['post', 'put', 'patch', 'query'], function forEachMethodWithData(method) {\n  function generateHTTPMethod(isForm) {\n    return function httpMethod(url, data, config) {\n      return this.request(\n        mergeConfig(config || {}, {\n          method,\n          headers: isForm\n            ? {\n                'Content-Type': 'multipart/form-data',\n              }\n            : {},\n          url,\n          data,\n        })\n      );\n    };\n  }\n\n  Axios.prototype[method] = generateHTTPMethod();\n\n  // QUERY is a safe/idempotent read method; multipart form bodies don't fit\n  // its semantics, so no queryForm shorthand is generated.\n  if (method !== 'query') {\n    Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n  }\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n  constructor(executor) {\n    if (typeof executor !== 'function') {\n      throw new TypeError('executor must be a function.');\n    }\n\n    let resolvePromise;\n\n    this.promise = new Promise(function promiseExecutor(resolve) {\n      resolvePromise = resolve;\n    });\n\n    const token = this;\n\n    // eslint-disable-next-line func-names\n    this.promise.then((cancel) => {\n      if (!token._listeners) return;\n\n      let i = token._listeners.length;\n\n      while (i-- > 0) {\n        token._listeners[i](cancel);\n      }\n      token._listeners = null;\n    });\n\n    // eslint-disable-next-line func-names\n    this.promise.then = (onfulfilled) => {\n      let _resolve;\n      // eslint-disable-next-line func-names\n      const promise = new Promise((resolve) => {\n        token.subscribe(resolve);\n        _resolve = resolve;\n      }).then(onfulfilled);\n\n      promise.cancel = function reject() {\n        token.unsubscribe(_resolve);\n      };\n\n      return promise;\n    };\n\n    executor(function cancel(message, config, request) {\n      if (token.reason) {\n        // Cancellation has already been requested\n        return;\n      }\n\n      token.reason = new CanceledError(message, config, request);\n      resolvePromise(token.reason);\n    });\n  }\n\n  /**\n   * Throws a `CanceledError` if cancellation has been requested.\n   */\n  throwIfRequested() {\n    if (this.reason) {\n      throw this.reason;\n    }\n  }\n\n  /**\n   * Subscribe to the cancel signal\n   */\n\n  subscribe(listener) {\n    if (this.reason) {\n      listener(this.reason);\n      return;\n    }\n\n    if (this._listeners) {\n      this._listeners.push(listener);\n    } else {\n      this._listeners = [listener];\n    }\n  }\n\n  /**\n   * Unsubscribe from the cancel signal\n   */\n\n  unsubscribe(listener) {\n    if (!this._listeners) {\n      return;\n    }\n    const index = this._listeners.indexOf(listener);\n    if (index !== -1) {\n      this._listeners.splice(index, 1);\n    }\n  }\n\n  toAbortSignal() {\n    const controller = new AbortController();\n\n    const abort = (err) => {\n      controller.abort(err);\n    };\n\n    this.subscribe(abort);\n\n    controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n    return controller.signal;\n  }\n\n  /**\n   * Returns an object that contains a new `CancelToken` and a function that, when called,\n   * cancels the `CancelToken`.\n   */\n  static source() {\n    let cancel;\n    const token = new CancelToken(function executor(c) {\n      cancel = c;\n    });\n    return {\n      token,\n      cancel,\n    };\n  }\n}\n\nexport default CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n *  ```js\n *  function f(x, y, z) {}\n *  const args = [1, 2, 3];\n *  f.apply(null, args);\n *  ```\n *\n * With `spread` this example can be re-written.\n *\n *  ```js\n *  spread(function(x, y, z) {})([1, 2, 3]);\n *  ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n  return function wrap(arr) {\n    return callback.apply(null, arr);\n  };\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n  return utils.isObject(payload) && payload.isAxiosError === true;\n}\n","const HttpStatusCode = {\n  Continue: 100,\n  SwitchingProtocols: 101,\n  Processing: 102,\n  EarlyHints: 103,\n  Ok: 200,\n  Created: 201,\n  Accepted: 202,\n  NonAuthoritativeInformation: 203,\n  NoContent: 204,\n  ResetContent: 205,\n  PartialContent: 206,\n  MultiStatus: 207,\n  AlreadyReported: 208,\n  ImUsed: 226,\n  MultipleChoices: 300,\n  MovedPermanently: 301,\n  Found: 302,\n  SeeOther: 303,\n  NotModified: 304,\n  UseProxy: 305,\n  Unused: 306,\n  TemporaryRedirect: 307,\n  PermanentRedirect: 308,\n  BadRequest: 400,\n  Unauthorized: 401,\n  PaymentRequired: 402,\n  Forbidden: 403,\n  NotFound: 404,\n  MethodNotAllowed: 405,\n  NotAcceptable: 406,\n  ProxyAuthenticationRequired: 407,\n  RequestTimeout: 408,\n  Conflict: 409,\n  Gone: 410,\n  LengthRequired: 411,\n  PreconditionFailed: 412,\n  PayloadTooLarge: 413,\n  UriTooLong: 414,\n  UnsupportedMediaType: 415,\n  RangeNotSatisfiable: 416,\n  ExpectationFailed: 417,\n  ImATeapot: 418,\n  MisdirectedRequest: 421,\n  UnprocessableEntity: 422,\n  Locked: 423,\n  FailedDependency: 424,\n  TooEarly: 425,\n  UpgradeRequired: 426,\n  PreconditionRequired: 428,\n  TooManyRequests: 429,\n  RequestHeaderFieldsTooLarge: 431,\n  UnavailableForLegalReasons: 451,\n  InternalServerError: 500,\n  NotImplemented: 501,\n  BadGateway: 502,\n  ServiceUnavailable: 503,\n  GatewayTimeout: 504,\n  HttpVersionNotSupported: 505,\n  VariantAlsoNegotiates: 506,\n  InsufficientStorage: 507,\n  LoopDetected: 508,\n  NotExtended: 510,\n  NetworkAuthenticationRequired: 511,\n  WebServerIsDown: 521,\n  ConnectionTimedOut: 522,\n  OriginIsUnreachable: 523,\n  TimeoutOccurred: 524,\n  SslHandshakeFailed: 525,\n  InvalidSslCertificate: 526,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n  HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport { VERSION } from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from './core/AxiosHeaders.js';\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n  const context = new Axios(defaultConfig);\n  const instance = bind(Axios.prototype.request, context);\n\n  // Copy axios.prototype to instance\n  utils.extend(instance, Axios.prototype, context, { allOwnKeys: true });\n\n  // Copy context to instance\n  utils.extend(instance, context, null, { allOwnKeys: true });\n\n  // Factory for creating new instances\n  instance.create = function create(instanceConfig) {\n    return createInstance(mergeConfig(defaultConfig, instanceConfig));\n  };\n\n  return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n  return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = (thing) => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios;\n","import axios from './lib/axios.js';\n\n// This module is intended to unwrap Axios default export as named.\n// Keep top-level export same with static properties\n// so that it can keep same with es module or cjs\nconst {\n  Axios,\n  AxiosError,\n  CanceledError,\n  isCancel,\n  CancelToken,\n  VERSION,\n  all,\n  Cancel,\n  isAxiosError,\n  spread,\n  toFormData,\n  AxiosHeaders,\n  HttpStatusCode,\n  formToJSON,\n  getAdapter,\n  mergeConfig,\n  create,\n} = axios;\n\nexport {\n  axios as default,\n  create,\n  Axios,\n  AxiosError,\n  CanceledError,\n  isCancel,\n  CancelToken,\n  VERSION,\n  all,\n  Cancel,\n  isAxiosError,\n  spread,\n  toFormData,\n  AxiosHeaders,\n  HttpStatusCode,\n  formToJSON,\n  getAdapter,\n  mergeConfig,\n};\n","/**\n * Copyright 2022 Joe Bell. All rights reserved.\n *\n * This file is licensed to you under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with the\n * License. You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */ import { clsx } from \"clsx\";\nconst falsyToString = (value)=>typeof value === \"boolean\" ? `${value}` : value === 0 ? \"0\" : value;\nexport const cx = clsx;\nexport const cva = (base, config)=>(props)=>{\n        var _config_compoundVariants;\n        if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n        const { variants, defaultVariants } = config;\n        const getVariantClassNames = Object.keys(variants).map((variant)=>{\n            const variantProp = props === null || props === void 0 ? void 0 : props[variant];\n            const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];\n            if (variantProp === null) return null;\n            const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);\n            return variants[variant][variantKey];\n        });\n        const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{\n            let [key, value] = param;\n            if (value === undefined) {\n                return acc;\n            }\n            acc[key] = value;\n            return acc;\n        }, {});\n        const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (_config_compoundVariants = config.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param)=>{\n            let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;\n            return Object.entries(compoundVariantOptions).every((param)=>{\n                let [key, value] = param;\n                return Array.isArray(value) ? value.includes({\n                    ...defaultVariants,\n                    ...propsWithoutUndefined\n                }[key]) : ({\n                    ...defaultVariants,\n                    ...propsWithoutUndefined\n                })[key] === value;\n            }) ? [\n                ...acc,\n                cvClass,\n                cvClassName\n            ] : acc;\n        }, []);\n        return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n    };\n\n","const CLASS_PART_SEPARATOR = '-';\nconst createClassGroupUtils = config => {\n  const classMap = createClassMap(config);\n  const {\n    conflictingClassGroups,\n    conflictingClassGroupModifiers\n  } = config;\n  const getClassGroupId = className => {\n    const classParts = className.split(CLASS_PART_SEPARATOR);\n    // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and remove it from classParts.\n    if (classParts[0] === '' && classParts.length !== 1) {\n      classParts.shift();\n    }\n    return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className);\n  };\n  const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {\n    const conflicts = conflictingClassGroups[classGroupId] || [];\n    if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) {\n      return [...conflicts, ...conflictingClassGroupModifiers[classGroupId]];\n    }\n    return conflicts;\n  };\n  return {\n    getClassGroupId,\n    getConflictingClassGroupIds\n  };\n};\nconst getGroupRecursive = (classParts, classPartObject) => {\n  if (classParts.length === 0) {\n    return classPartObject.classGroupId;\n  }\n  const currentClassPart = classParts[0];\n  const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\n  const classGroupFromNextClassPart = nextClassPartObject ? getGroupRecursive(classParts.slice(1), nextClassPartObject) : undefined;\n  if (classGroupFromNextClassPart) {\n    return classGroupFromNextClassPart;\n  }\n  if (classPartObject.validators.length === 0) {\n    return undefined;\n  }\n  const classRest = classParts.join(CLASS_PART_SEPARATOR);\n  return classPartObject.validators.find(({\n    validator\n  }) => validator(classRest))?.classGroupId;\n};\nconst arbitraryPropertyRegex = /^\\[(.+)\\]$/;\nconst getGroupIdForArbitraryProperty = className => {\n  if (arbitraryPropertyRegex.test(className)) {\n    const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)[1];\n    const property = arbitraryPropertyClassName?.substring(0, arbitraryPropertyClassName.indexOf(':'));\n    if (property) {\n      // I use two dots here because one dot is used as prefix for class groups in plugins\n      return 'arbitrary..' + property;\n    }\n  }\n};\n/**\n * Exported for testing only\n */\nconst createClassMap = config => {\n  const {\n    theme,\n    prefix\n  } = config;\n  const classMap = {\n    nextPart: new Map(),\n    validators: []\n  };\n  const prefixedClassGroupEntries = getPrefixedClassGroupEntries(Object.entries(config.classGroups), prefix);\n  prefixedClassGroupEntries.forEach(([classGroupId, classGroup]) => {\n    processClassesRecursively(classGroup, classMap, classGroupId, theme);\n  });\n  return classMap;\n};\nconst processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {\n  classGroup.forEach(classDefinition => {\n    if (typeof classDefinition === 'string') {\n      const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\n      classPartObjectToEdit.classGroupId = classGroupId;\n      return;\n    }\n    if (typeof classDefinition === 'function') {\n      if (isThemeGetter(classDefinition)) {\n        processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\n        return;\n      }\n      classPartObject.validators.push({\n        validator: classDefinition,\n        classGroupId\n      });\n      return;\n    }\n    Object.entries(classDefinition).forEach(([key, classGroup]) => {\n      processClassesRecursively(classGroup, getPart(classPartObject, key), classGroupId, theme);\n    });\n  });\n};\nconst getPart = (classPartObject, path) => {\n  let currentClassPartObject = classPartObject;\n  path.split(CLASS_PART_SEPARATOR).forEach(pathPart => {\n    if (!currentClassPartObject.nextPart.has(pathPart)) {\n      currentClassPartObject.nextPart.set(pathPart, {\n        nextPart: new Map(),\n        validators: []\n      });\n    }\n    currentClassPartObject = currentClassPartObject.nextPart.get(pathPart);\n  });\n  return currentClassPartObject;\n};\nconst isThemeGetter = func => func.isThemeGetter;\nconst getPrefixedClassGroupEntries = (classGroupEntries, prefix) => {\n  if (!prefix) {\n    return classGroupEntries;\n  }\n  return classGroupEntries.map(([classGroupId, classGroup]) => {\n    const prefixedClassGroup = classGroup.map(classDefinition => {\n      if (typeof classDefinition === 'string') {\n        return prefix + classDefinition;\n      }\n      if (typeof classDefinition === 'object') {\n        return Object.fromEntries(Object.entries(classDefinition).map(([key, value]) => [prefix + key, value]));\n      }\n      return classDefinition;\n    });\n    return [classGroupId, prefixedClassGroup];\n  });\n};\n\n// LRU cache inspired from hashlru (https://github.com/dominictarr/hashlru/blob/v1.0.4/index.js) but object replaced with Map to improve performance\nconst createLruCache = maxCacheSize => {\n  if (maxCacheSize < 1) {\n    return {\n      get: () => undefined,\n      set: () => {}\n    };\n  }\n  let cacheSize = 0;\n  let cache = new Map();\n  let previousCache = new Map();\n  const update = (key, value) => {\n    cache.set(key, value);\n    cacheSize++;\n    if (cacheSize > maxCacheSize) {\n      cacheSize = 0;\n      previousCache = cache;\n      cache = new Map();\n    }\n  };\n  return {\n    get(key) {\n      let value = cache.get(key);\n      if (value !== undefined) {\n        return value;\n      }\n      if ((value = previousCache.get(key)) !== undefined) {\n        update(key, value);\n        return value;\n      }\n    },\n    set(key, value) {\n      if (cache.has(key)) {\n        cache.set(key, value);\n      } else {\n        update(key, value);\n      }\n    }\n  };\n};\nconst IMPORTANT_MODIFIER = '!';\nconst createParseClassName = config => {\n  const {\n    separator,\n    experimentalParseClassName\n  } = config;\n  const isSeparatorSingleCharacter = separator.length === 1;\n  const firstSeparatorCharacter = separator[0];\n  const separatorLength = separator.length;\n  // parseClassName inspired by https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n  const parseClassName = className => {\n    const modifiers = [];\n    let bracketDepth = 0;\n    let modifierStart = 0;\n    let postfixModifierPosition;\n    for (let index = 0; index < className.length; index++) {\n      let currentCharacter = className[index];\n      if (bracketDepth === 0) {\n        if (currentCharacter === firstSeparatorCharacter && (isSeparatorSingleCharacter || className.slice(index, index + separatorLength) === separator)) {\n          modifiers.push(className.slice(modifierStart, index));\n          modifierStart = index + separatorLength;\n          continue;\n        }\n        if (currentCharacter === '/') {\n          postfixModifierPosition = index;\n          continue;\n        }\n      }\n      if (currentCharacter === '[') {\n        bracketDepth++;\n      } else if (currentCharacter === ']') {\n        bracketDepth--;\n      }\n    }\n    const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.substring(modifierStart);\n    const hasImportantModifier = baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER);\n    const baseClassName = hasImportantModifier ? baseClassNameWithImportantModifier.substring(1) : baseClassNameWithImportantModifier;\n    const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n    return {\n      modifiers,\n      hasImportantModifier,\n      baseClassName,\n      maybePostfixModifierPosition\n    };\n  };\n  if (experimentalParseClassName) {\n    return className => experimentalParseClassName({\n      className,\n      parseClassName\n    });\n  }\n  return parseClassName;\n};\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nconst sortModifiers = modifiers => {\n  if (modifiers.length <= 1) {\n    return modifiers;\n  }\n  const sortedModifiers = [];\n  let unsortedModifiers = [];\n  modifiers.forEach(modifier => {\n    const isArbitraryVariant = modifier[0] === '[';\n    if (isArbitraryVariant) {\n      sortedModifiers.push(...unsortedModifiers.sort(), modifier);\n      unsortedModifiers = [];\n    } else {\n      unsortedModifiers.push(modifier);\n    }\n  });\n  sortedModifiers.push(...unsortedModifiers.sort());\n  return sortedModifiers;\n};\nconst createConfigUtils = config => ({\n  cache: createLruCache(config.cacheSize),\n  parseClassName: createParseClassName(config),\n  ...createClassGroupUtils(config)\n});\nconst SPLIT_CLASSES_REGEX = /\\s+/;\nconst mergeClassList = (classList, configUtils) => {\n  const {\n    parseClassName,\n    getClassGroupId,\n    getConflictingClassGroupIds\n  } = configUtils;\n  /**\n   * Set of classGroupIds in following format:\n   * `{importantModifier}{variantModifiers}{classGroupId}`\n   * @example 'float'\n   * @example 'hover:focus:bg-color'\n   * @example 'md:!pr'\n   */\n  const classGroupsInConflict = [];\n  const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\n  let result = '';\n  for (let index = classNames.length - 1; index >= 0; index -= 1) {\n    const originalClassName = classNames[index];\n    const {\n      modifiers,\n      hasImportantModifier,\n      baseClassName,\n      maybePostfixModifierPosition\n    } = parseClassName(originalClassName);\n    let hasPostfixModifier = Boolean(maybePostfixModifierPosition);\n    let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);\n    if (!classGroupId) {\n      if (!hasPostfixModifier) {\n        // Not a Tailwind class\n        result = originalClassName + (result.length > 0 ? ' ' + result : result);\n        continue;\n      }\n      classGroupId = getClassGroupId(baseClassName);\n      if (!classGroupId) {\n        // Not a Tailwind class\n        result = originalClassName + (result.length > 0 ? ' ' + result : result);\n        continue;\n      }\n      hasPostfixModifier = false;\n    }\n    const variantModifier = sortModifiers(modifiers).join(':');\n    const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\n    const classId = modifierId + classGroupId;\n    if (classGroupsInConflict.includes(classId)) {\n      // Tailwind class omitted due to conflict\n      continue;\n    }\n    classGroupsInConflict.push(classId);\n    const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);\n    for (let i = 0; i < conflictGroups.length; ++i) {\n      const group = conflictGroups[i];\n      classGroupsInConflict.push(modifierId + group);\n    }\n    // Tailwind class not in conflict\n    result = originalClassName + (result.length > 0 ? ' ' + result : result);\n  }\n  return result;\n};\n\n/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\nfunction twJoin() {\n  let index = 0;\n  let argument;\n  let resolvedValue;\n  let string = '';\n  while (index < arguments.length) {\n    if (argument = arguments[index++]) {\n      if (resolvedValue = toValue(argument)) {\n        string && (string += ' ');\n        string += resolvedValue;\n      }\n    }\n  }\n  return string;\n}\nconst toValue = mix => {\n  if (typeof mix === 'string') {\n    return mix;\n  }\n  let resolvedValue;\n  let string = '';\n  for (let k = 0; k < mix.length; k++) {\n    if (mix[k]) {\n      if (resolvedValue = toValue(mix[k])) {\n        string && (string += ' ');\n        string += resolvedValue;\n      }\n    }\n  }\n  return string;\n};\nfunction createTailwindMerge(createConfigFirst, ...createConfigRest) {\n  let configUtils;\n  let cacheGet;\n  let cacheSet;\n  let functionToCall = initTailwindMerge;\n  function initTailwindMerge(classList) {\n    const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());\n    configUtils = createConfigUtils(config);\n    cacheGet = configUtils.cache.get;\n    cacheSet = configUtils.cache.set;\n    functionToCall = tailwindMerge;\n    return tailwindMerge(classList);\n  }\n  function tailwindMerge(classList) {\n    const cachedResult = cacheGet(classList);\n    if (cachedResult) {\n      return cachedResult;\n    }\n    const result = mergeClassList(classList, configUtils);\n    cacheSet(classList, result);\n    return result;\n  }\n  return function callTailwindMerge() {\n    return functionToCall(twJoin.apply(null, arguments));\n  };\n}\nconst fromTheme = key => {\n  const themeGetter = theme => theme[key] || [];\n  themeGetter.isThemeGetter = true;\n  return themeGetter;\n};\nconst arbitraryValueRegex = /^\\[(?:([a-z-]+):)?(.+)\\]$/i;\nconst fractionRegex = /^\\d+\\/\\d+$/;\nconst stringLengths = /*#__PURE__*/new Set(['px', 'full', 'screen']);\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\nconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\\(.+\\)$/;\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\nconst isLength = value => isNumber(value) || stringLengths.has(value) || fractionRegex.test(value);\nconst isArbitraryLength = value => getIsArbitraryValue(value, 'length', isLengthOnly);\nconst isNumber = value => Boolean(value) && !Number.isNaN(Number(value));\nconst isArbitraryNumber = value => getIsArbitraryValue(value, 'number', isNumber);\nconst isInteger = value => Boolean(value) && Number.isInteger(Number(value));\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\nconst sizeLabels = /*#__PURE__*/new Set(['length', 'size', 'percentage']);\nconst isArbitrarySize = value => getIsArbitraryValue(value, sizeLabels, isNever);\nconst isArbitraryPosition = value => getIsArbitraryValue(value, 'position', isNever);\nconst imageLabels = /*#__PURE__*/new Set(['image', 'url']);\nconst isArbitraryImage = value => getIsArbitraryValue(value, imageLabels, isImage);\nconst isArbitraryShadow = value => getIsArbitraryValue(value, '', isShadow);\nconst isAny = () => true;\nconst getIsArbitraryValue = (value, label, testValue) => {\n  const result = arbitraryValueRegex.exec(value);\n  if (result) {\n    if (result[1]) {\n      return typeof label === 'string' ? result[1] === label : label.has(result[1]);\n    }\n    return testValue(result[2]);\n  }\n  return false;\n};\nconst isLengthOnly = value =>\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\nconst isNever = () => false;\nconst isShadow = value => shadowRegex.test(value);\nconst isImage = value => imageRegex.test(value);\nconst validators = /*#__PURE__*/Object.defineProperty({\n  __proto__: null,\n  isAny,\n  isArbitraryImage,\n  isArbitraryLength,\n  isArbitraryNumber,\n  isArbitraryPosition,\n  isArbitraryShadow,\n  isArbitrarySize,\n  isArbitraryValue,\n  isInteger,\n  isLength,\n  isNumber,\n  isPercent,\n  isTshirtSize\n}, Symbol.toStringTag, {\n  value: 'Module'\n});\nconst getDefaultConfig = () => {\n  const colors = fromTheme('colors');\n  const spacing = fromTheme('spacing');\n  const blur = fromTheme('blur');\n  const brightness = fromTheme('brightness');\n  const borderColor = fromTheme('borderColor');\n  const borderRadius = fromTheme('borderRadius');\n  const borderSpacing = fromTheme('borderSpacing');\n  const borderWidth = fromTheme('borderWidth');\n  const contrast = fromTheme('contrast');\n  const grayscale = fromTheme('grayscale');\n  const hueRotate = fromTheme('hueRotate');\n  const invert = fromTheme('invert');\n  const gap = fromTheme('gap');\n  const gradientColorStops = fromTheme('gradientColorStops');\n  const gradientColorStopPositions = fromTheme('gradientColorStopPositions');\n  const inset = fromTheme('inset');\n  const margin = fromTheme('margin');\n  const opacity = fromTheme('opacity');\n  const padding = fromTheme('padding');\n  const saturate = fromTheme('saturate');\n  const scale = fromTheme('scale');\n  const sepia = fromTheme('sepia');\n  const skew = fromTheme('skew');\n  const space = fromTheme('space');\n  const translate = fromTheme('translate');\n  const getOverscroll = () => ['auto', 'contain', 'none'];\n  const getOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n  const getSpacingWithAutoAndArbitrary = () => ['auto', isArbitraryValue, spacing];\n  const getSpacingWithArbitrary = () => [isArbitraryValue, spacing];\n  const getLengthWithEmptyAndArbitrary = () => ['', isLength, isArbitraryLength];\n  const getNumberWithAutoAndArbitrary = () => ['auto', isNumber, isArbitraryValue];\n  const getPositions = () => ['bottom', 'center', 'left', 'left-bottom', 'left-top', 'right', 'right-bottom', 'right-top', 'top'];\n  const getLineStyles = () => ['solid', 'dashed', 'dotted', 'double', 'none'];\n  const getBlendModes = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\n  const getAlign = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch'];\n  const getZeroAndEmpty = () => ['', '0', isArbitraryValue];\n  const getBreaks = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n  const getNumberAndArbitrary = () => [isNumber, isArbitraryValue];\n  return {\n    cacheSize: 500,\n    separator: ':',\n    theme: {\n      colors: [isAny],\n      spacing: [isLength, isArbitraryLength],\n      blur: ['none', '', isTshirtSize, isArbitraryValue],\n      brightness: getNumberAndArbitrary(),\n      borderColor: [colors],\n      borderRadius: ['none', '', 'full', isTshirtSize, isArbitraryValue],\n      borderSpacing: getSpacingWithArbitrary(),\n      borderWidth: getLengthWithEmptyAndArbitrary(),\n      contrast: getNumberAndArbitrary(),\n      grayscale: getZeroAndEmpty(),\n      hueRotate: getNumberAndArbitrary(),\n      invert: getZeroAndEmpty(),\n      gap: getSpacingWithArbitrary(),\n      gradientColorStops: [colors],\n      gradientColorStopPositions: [isPercent, isArbitraryLength],\n      inset: getSpacingWithAutoAndArbitrary(),\n      margin: getSpacingWithAutoAndArbitrary(),\n      opacity: getNumberAndArbitrary(),\n      padding: getSpacingWithArbitrary(),\n      saturate: getNumberAndArbitrary(),\n      scale: getNumberAndArbitrary(),\n      sepia: getZeroAndEmpty(),\n      skew: getNumberAndArbitrary(),\n      space: getSpacingWithArbitrary(),\n      translate: getSpacingWithArbitrary()\n    },\n    classGroups: {\n      // Layout\n      /**\n       * Aspect Ratio\n       * @see https://tailwindcss.com/docs/aspect-ratio\n       */\n      aspect: [{\n        aspect: ['auto', 'square', 'video', isArbitraryValue]\n      }],\n      /**\n       * Container\n       * @see https://tailwindcss.com/docs/container\n       */\n      container: ['container'],\n      /**\n       * Columns\n       * @see https://tailwindcss.com/docs/columns\n       */\n      columns: [{\n        columns: [isTshirtSize]\n      }],\n      /**\n       * Break After\n       * @see https://tailwindcss.com/docs/break-after\n       */\n      'break-after': [{\n        'break-after': getBreaks()\n      }],\n      /**\n       * Break Before\n       * @see https://tailwindcss.com/docs/break-before\n       */\n      'break-before': [{\n        'break-before': getBreaks()\n      }],\n      /**\n       * Break Inside\n       * @see https://tailwindcss.com/docs/break-inside\n       */\n      'break-inside': [{\n        'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n      }],\n      /**\n       * Box Decoration Break\n       * @see https://tailwindcss.com/docs/box-decoration-break\n       */\n      'box-decoration': [{\n        'box-decoration': ['slice', 'clone']\n      }],\n      /**\n       * Box Sizing\n       * @see https://tailwindcss.com/docs/box-sizing\n       */\n      box: [{\n        box: ['border', 'content']\n      }],\n      /**\n       * Display\n       * @see https://tailwindcss.com/docs/display\n       */\n      display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\n      /**\n       * Floats\n       * @see https://tailwindcss.com/docs/float\n       */\n      float: [{\n        float: ['right', 'left', 'none', 'start', 'end']\n      }],\n      /**\n       * Clear\n       * @see https://tailwindcss.com/docs/clear\n       */\n      clear: [{\n        clear: ['left', 'right', 'both', 'none', 'start', 'end']\n      }],\n      /**\n       * Isolation\n       * @see https://tailwindcss.com/docs/isolation\n       */\n      isolation: ['isolate', 'isolation-auto'],\n      /**\n       * Object Fit\n       * @see https://tailwindcss.com/docs/object-fit\n       */\n      'object-fit': [{\n        object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n      }],\n      /**\n       * Object Position\n       * @see https://tailwindcss.com/docs/object-position\n       */\n      'object-position': [{\n        object: [...getPositions(), isArbitraryValue]\n      }],\n      /**\n       * Overflow\n       * @see https://tailwindcss.com/docs/overflow\n       */\n      overflow: [{\n        overflow: getOverflow()\n      }],\n      /**\n       * Overflow X\n       * @see https://tailwindcss.com/docs/overflow\n       */\n      'overflow-x': [{\n        'overflow-x': getOverflow()\n      }],\n      /**\n       * Overflow Y\n       * @see https://tailwindcss.com/docs/overflow\n       */\n      'overflow-y': [{\n        'overflow-y': getOverflow()\n      }],\n      /**\n       * Overscroll Behavior\n       * @see https://tailwindcss.com/docs/overscroll-behavior\n       */\n      overscroll: [{\n        overscroll: getOverscroll()\n      }],\n      /**\n       * Overscroll Behavior X\n       * @see https://tailwindcss.com/docs/overscroll-behavior\n       */\n      'overscroll-x': [{\n        'overscroll-x': getOverscroll()\n      }],\n      /**\n       * Overscroll Behavior Y\n       * @see https://tailwindcss.com/docs/overscroll-behavior\n       */\n      'overscroll-y': [{\n        'overscroll-y': getOverscroll()\n      }],\n      /**\n       * Position\n       * @see https://tailwindcss.com/docs/position\n       */\n      position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n      /**\n       * Top / Right / Bottom / Left\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      inset: [{\n        inset: [inset]\n      }],\n      /**\n       * Right / Left\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      'inset-x': [{\n        'inset-x': [inset]\n      }],\n      /**\n       * Top / Bottom\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      'inset-y': [{\n        'inset-y': [inset]\n      }],\n      /**\n       * Start\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      start: [{\n        start: [inset]\n      }],\n      /**\n       * End\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      end: [{\n        end: [inset]\n      }],\n      /**\n       * Top\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      top: [{\n        top: [inset]\n      }],\n      /**\n       * Right\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      right: [{\n        right: [inset]\n      }],\n      /**\n       * Bottom\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      bottom: [{\n        bottom: [inset]\n      }],\n      /**\n       * Left\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      left: [{\n        left: [inset]\n      }],\n      /**\n       * Visibility\n       * @see https://tailwindcss.com/docs/visibility\n       */\n      visibility: ['visible', 'invisible', 'collapse'],\n      /**\n       * Z-Index\n       * @see https://tailwindcss.com/docs/z-index\n       */\n      z: [{\n        z: ['auto', isInteger, isArbitraryValue]\n      }],\n      // Flexbox and Grid\n      /**\n       * Flex Basis\n       * @see https://tailwindcss.com/docs/flex-basis\n       */\n      basis: [{\n        basis: getSpacingWithAutoAndArbitrary()\n      }],\n      /**\n       * Flex Direction\n       * @see https://tailwindcss.com/docs/flex-direction\n       */\n      'flex-direction': [{\n        flex: ['row', 'row-reverse', 'col', 'col-reverse']\n      }],\n      /**\n       * Flex Wrap\n       * @see https://tailwindcss.com/docs/flex-wrap\n       */\n      'flex-wrap': [{\n        flex: ['wrap', 'wrap-reverse', 'nowrap']\n      }],\n      /**\n       * Flex\n       * @see https://tailwindcss.com/docs/flex\n       */\n      flex: [{\n        flex: ['1', 'auto', 'initial', 'none', isArbitraryValue]\n      }],\n      /**\n       * Flex Grow\n       * @see https://tailwindcss.com/docs/flex-grow\n       */\n      grow: [{\n        grow: getZeroAndEmpty()\n      }],\n      /**\n       * Flex Shrink\n       * @see https://tailwindcss.com/docs/flex-shrink\n       */\n      shrink: [{\n        shrink: getZeroAndEmpty()\n      }],\n      /**\n       * Order\n       * @see https://tailwindcss.com/docs/order\n       */\n      order: [{\n        order: ['first', 'last', 'none', isInteger, isArbitraryValue]\n      }],\n      /**\n       * Grid Template Columns\n       * @see https://tailwindcss.com/docs/grid-template-columns\n       */\n      'grid-cols': [{\n        'grid-cols': [isAny]\n      }],\n      /**\n       * Grid Column Start / End\n       * @see https://tailwindcss.com/docs/grid-column\n       */\n      'col-start-end': [{\n        col: ['auto', {\n          span: ['full', isInteger, isArbitraryValue]\n        }, isArbitraryValue]\n      }],\n      /**\n       * Grid Column Start\n       * @see https://tailwindcss.com/docs/grid-column\n       */\n      'col-start': [{\n        'col-start': getNumberWithAutoAndArbitrary()\n      }],\n      /**\n       * Grid Column End\n       * @see https://tailwindcss.com/docs/grid-column\n       */\n      'col-end': [{\n        'col-end': getNumberWithAutoAndArbitrary()\n      }],\n      /**\n       * Grid Template Rows\n       * @see https://tailwindcss.com/docs/grid-template-rows\n       */\n      'grid-rows': [{\n        'grid-rows': [isAny]\n      }],\n      /**\n       * Grid Row Start / End\n       * @see https://tailwindcss.com/docs/grid-row\n       */\n      'row-start-end': [{\n        row: ['auto', {\n          span: [isInteger, isArbitraryValue]\n        }, isArbitraryValue]\n      }],\n      /**\n       * Grid Row Start\n       * @see https://tailwindcss.com/docs/grid-row\n       */\n      'row-start': [{\n        'row-start': getNumberWithAutoAndArbitrary()\n      }],\n      /**\n       * Grid Row End\n       * @see https://tailwindcss.com/docs/grid-row\n       */\n      'row-end': [{\n        'row-end': getNumberWithAutoAndArbitrary()\n      }],\n      /**\n       * Grid Auto Flow\n       * @see https://tailwindcss.com/docs/grid-auto-flow\n       */\n      'grid-flow': [{\n        'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n      }],\n      /**\n       * Grid Auto Columns\n       * @see https://tailwindcss.com/docs/grid-auto-columns\n       */\n      'auto-cols': [{\n        'auto-cols': ['auto', 'min', 'max', 'fr', isArbitraryValue]\n      }],\n      /**\n       * Grid Auto Rows\n       * @see https://tailwindcss.com/docs/grid-auto-rows\n       */\n      'auto-rows': [{\n        'auto-rows': ['auto', 'min', 'max', 'fr', isArbitraryValue]\n      }],\n      /**\n       * Gap\n       * @see https://tailwindcss.com/docs/gap\n       */\n      gap: [{\n        gap: [gap]\n      }],\n      /**\n       * Gap X\n       * @see https://tailwindcss.com/docs/gap\n       */\n      'gap-x': [{\n        'gap-x': [gap]\n      }],\n      /**\n       * Gap Y\n       * @see https://tailwindcss.com/docs/gap\n       */\n      'gap-y': [{\n        'gap-y': [gap]\n      }],\n      /**\n       * Justify Content\n       * @see https://tailwindcss.com/docs/justify-content\n       */\n      'justify-content': [{\n        justify: ['normal', ...getAlign()]\n      }],\n      /**\n       * Justify Items\n       * @see https://tailwindcss.com/docs/justify-items\n       */\n      'justify-items': [{\n        'justify-items': ['start', 'end', 'center', 'stretch']\n      }],\n      /**\n       * Justify Self\n       * @see https://tailwindcss.com/docs/justify-self\n       */\n      'justify-self': [{\n        'justify-self': ['auto', 'start', 'end', 'center', 'stretch']\n      }],\n      /**\n       * Align Content\n       * @see https://tailwindcss.com/docs/align-content\n       */\n      'align-content': [{\n        content: ['normal', ...getAlign(), 'baseline']\n      }],\n      /**\n       * Align Items\n       * @see https://tailwindcss.com/docs/align-items\n       */\n      'align-items': [{\n        items: ['start', 'end', 'center', 'baseline', 'stretch']\n      }],\n      /**\n       * Align Self\n       * @see https://tailwindcss.com/docs/align-self\n       */\n      'align-self': [{\n        self: ['auto', 'start', 'end', 'center', 'stretch', 'baseline']\n      }],\n      /**\n       * Place Content\n       * @see https://tailwindcss.com/docs/place-content\n       */\n      'place-content': [{\n        'place-content': [...getAlign(), 'baseline']\n      }],\n      /**\n       * Place Items\n       * @see https://tailwindcss.com/docs/place-items\n       */\n      'place-items': [{\n        'place-items': ['start', 'end', 'center', 'baseline', 'stretch']\n      }],\n      /**\n       * Place Self\n       * @see https://tailwindcss.com/docs/place-self\n       */\n      'place-self': [{\n        'place-self': ['auto', 'start', 'end', 'center', 'stretch']\n      }],\n      // Spacing\n      /**\n       * Padding\n       * @see https://tailwindcss.com/docs/padding\n       */\n      p: [{\n        p: [padding]\n      }],\n      /**\n       * Padding X\n       * @see https://tailwindcss.com/docs/padding\n       */\n      px: [{\n        px: [padding]\n      }],\n      /**\n       * Padding Y\n       * @see https://tailwindcss.com/docs/padding\n       */\n      py: [{\n        py: [padding]\n      }],\n      /**\n       * Padding Start\n       * @see https://tailwindcss.com/docs/padding\n       */\n      ps: [{\n        ps: [padding]\n      }],\n      /**\n       * Padding End\n       * @see https://tailwindcss.com/docs/padding\n       */\n      pe: [{\n        pe: [padding]\n      }],\n      /**\n       * Padding Top\n       * @see https://tailwindcss.com/docs/padding\n       */\n      pt: [{\n        pt: [padding]\n      }],\n      /**\n       * Padding Right\n       * @see https://tailwindcss.com/docs/padding\n       */\n      pr: [{\n        pr: [padding]\n      }],\n      /**\n       * Padding Bottom\n       * @see https://tailwindcss.com/docs/padding\n       */\n      pb: [{\n        pb: [padding]\n      }],\n      /**\n       * Padding Left\n       * @see https://tailwindcss.com/docs/padding\n       */\n      pl: [{\n        pl: [padding]\n      }],\n      /**\n       * Margin\n       * @see https://tailwindcss.com/docs/margin\n       */\n      m: [{\n        m: [margin]\n      }],\n      /**\n       * Margin X\n       * @see https://tailwindcss.com/docs/margin\n       */\n      mx: [{\n        mx: [margin]\n      }],\n      /**\n       * Margin Y\n       * @see https://tailwindcss.com/docs/margin\n       */\n      my: [{\n        my: [margin]\n      }],\n      /**\n       * Margin Start\n       * @see https://tailwindcss.com/docs/margin\n       */\n      ms: [{\n        ms: [margin]\n      }],\n      /**\n       * Margin End\n       * @see https://tailwindcss.com/docs/margin\n       */\n      me: [{\n        me: [margin]\n      }],\n      /**\n       * Margin Top\n       * @see https://tailwindcss.com/docs/margin\n       */\n      mt: [{\n        mt: [margin]\n      }],\n      /**\n       * Margin Right\n       * @see https://tailwindcss.com/docs/margin\n       */\n      mr: [{\n        mr: [margin]\n      }],\n      /**\n       * Margin Bottom\n       * @see https://tailwindcss.com/docs/margin\n       */\n      mb: [{\n        mb: [margin]\n      }],\n      /**\n       * Margin Left\n       * @see https://tailwindcss.com/docs/margin\n       */\n      ml: [{\n        ml: [margin]\n      }],\n      /**\n       * Space Between X\n       * @see https://tailwindcss.com/docs/space\n       */\n      'space-x': [{\n        'space-x': [space]\n      }],\n      /**\n       * Space Between X Reverse\n       * @see https://tailwindcss.com/docs/space\n       */\n      'space-x-reverse': ['space-x-reverse'],\n      /**\n       * Space Between Y\n       * @see https://tailwindcss.com/docs/space\n       */\n      'space-y': [{\n        'space-y': [space]\n      }],\n      /**\n       * Space Between Y Reverse\n       * @see https://tailwindcss.com/docs/space\n       */\n      'space-y-reverse': ['space-y-reverse'],\n      // Sizing\n      /**\n       * Width\n       * @see https://tailwindcss.com/docs/width\n       */\n      w: [{\n        w: ['auto', 'min', 'max', 'fit', 'svw', 'lvw', 'dvw', isArbitraryValue, spacing]\n      }],\n      /**\n       * Min-Width\n       * @see https://tailwindcss.com/docs/min-width\n       */\n      'min-w': [{\n        'min-w': [isArbitraryValue, spacing, 'min', 'max', 'fit']\n      }],\n      /**\n       * Max-Width\n       * @see https://tailwindcss.com/docs/max-width\n       */\n      'max-w': [{\n        'max-w': [isArbitraryValue, spacing, 'none', 'full', 'min', 'max', 'fit', 'prose', {\n          screen: [isTshirtSize]\n        }, isTshirtSize]\n      }],\n      /**\n       * Height\n       * @see https://tailwindcss.com/docs/height\n       */\n      h: [{\n        h: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n      }],\n      /**\n       * Min-Height\n       * @see https://tailwindcss.com/docs/min-height\n       */\n      'min-h': [{\n        'min-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n      }],\n      /**\n       * Max-Height\n       * @see https://tailwindcss.com/docs/max-height\n       */\n      'max-h': [{\n        'max-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n      }],\n      /**\n       * Size\n       * @see https://tailwindcss.com/docs/size\n       */\n      size: [{\n        size: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit']\n      }],\n      // Typography\n      /**\n       * Font Size\n       * @see https://tailwindcss.com/docs/font-size\n       */\n      'font-size': [{\n        text: ['base', isTshirtSize, isArbitraryLength]\n      }],\n      /**\n       * Font Smoothing\n       * @see https://tailwindcss.com/docs/font-smoothing\n       */\n      'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n      /**\n       * Font Style\n       * @see https://tailwindcss.com/docs/font-style\n       */\n      'font-style': ['italic', 'not-italic'],\n      /**\n       * Font Weight\n       * @see https://tailwindcss.com/docs/font-weight\n       */\n      'font-weight': [{\n        font: ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black', isArbitraryNumber]\n      }],\n      /**\n       * Font Family\n       * @see https://tailwindcss.com/docs/font-family\n       */\n      'font-family': [{\n        font: [isAny]\n      }],\n      /**\n       * Font Variant Numeric\n       * @see https://tailwindcss.com/docs/font-variant-numeric\n       */\n      'fvn-normal': ['normal-nums'],\n      /**\n       * Font Variant Numeric\n       * @see https://tailwindcss.com/docs/font-variant-numeric\n       */\n      'fvn-ordinal': ['ordinal'],\n      /**\n       * Font Variant Numeric\n       * @see https://tailwindcss.com/docs/font-variant-numeric\n       */\n      'fvn-slashed-zero': ['slashed-zero'],\n      /**\n       * Font Variant Numeric\n       * @see https://tailwindcss.com/docs/font-variant-numeric\n       */\n      'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n      /**\n       * Font Variant Numeric\n       * @see https://tailwindcss.com/docs/font-variant-numeric\n       */\n      'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n      /**\n       * Font Variant Numeric\n       * @see https://tailwindcss.com/docs/font-variant-numeric\n       */\n      'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n      /**\n       * Letter Spacing\n       * @see https://tailwindcss.com/docs/letter-spacing\n       */\n      tracking: [{\n        tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest', isArbitraryValue]\n      }],\n      /**\n       * Line Clamp\n       * @see https://tailwindcss.com/docs/line-clamp\n       */\n      'line-clamp': [{\n        'line-clamp': ['none', isNumber, isArbitraryNumber]\n      }],\n      /**\n       * Line Height\n       * @see https://tailwindcss.com/docs/line-height\n       */\n      leading: [{\n        leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose', isLength, isArbitraryValue]\n      }],\n      /**\n       * List Style Image\n       * @see https://tailwindcss.com/docs/list-style-image\n       */\n      'list-image': [{\n        'list-image': ['none', isArbitraryValue]\n      }],\n      /**\n       * List Style Type\n       * @see https://tailwindcss.com/docs/list-style-type\n       */\n      'list-style-type': [{\n        list: ['none', 'disc', 'decimal', isArbitraryValue]\n      }],\n      /**\n       * List Style Position\n       * @see https://tailwindcss.com/docs/list-style-position\n       */\n      'list-style-position': [{\n        list: ['inside', 'outside']\n      }],\n      /**\n       * Placeholder Color\n       * @deprecated since Tailwind CSS v3.0.0\n       * @see https://tailwindcss.com/docs/placeholder-color\n       */\n      'placeholder-color': [{\n        placeholder: [colors]\n      }],\n      /**\n       * Placeholder Opacity\n       * @see https://tailwindcss.com/docs/placeholder-opacity\n       */\n      'placeholder-opacity': [{\n        'placeholder-opacity': [opacity]\n      }],\n      /**\n       * Text Alignment\n       * @see https://tailwindcss.com/docs/text-align\n       */\n      'text-alignment': [{\n        text: ['left', 'center', 'right', 'justify', 'start', 'end']\n      }],\n      /**\n       * Text Color\n       * @see https://tailwindcss.com/docs/text-color\n       */\n      'text-color': [{\n        text: [colors]\n      }],\n      /**\n       * Text Opacity\n       * @see https://tailwindcss.com/docs/text-opacity\n       */\n      'text-opacity': [{\n        'text-opacity': [opacity]\n      }],\n      /**\n       * Text Decoration\n       * @see https://tailwindcss.com/docs/text-decoration\n       */\n      'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n      /**\n       * Text Decoration Style\n       * @see https://tailwindcss.com/docs/text-decoration-style\n       */\n      'text-decoration-style': [{\n        decoration: [...getLineStyles(), 'wavy']\n      }],\n      /**\n       * Text Decoration Thickness\n       * @see https://tailwindcss.com/docs/text-decoration-thickness\n       */\n      'text-decoration-thickness': [{\n        decoration: ['auto', 'from-font', isLength, isArbitraryLength]\n      }],\n      /**\n       * Text Underline Offset\n       * @see https://tailwindcss.com/docs/text-underline-offset\n       */\n      'underline-offset': [{\n        'underline-offset': ['auto', isLength, isArbitraryValue]\n      }],\n      /**\n       * Text Decoration Color\n       * @see https://tailwindcss.com/docs/text-decoration-color\n       */\n      'text-decoration-color': [{\n        decoration: [colors]\n      }],\n      /**\n       * Text Transform\n       * @see https://tailwindcss.com/docs/text-transform\n       */\n      'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n      /**\n       * Text Overflow\n       * @see https://tailwindcss.com/docs/text-overflow\n       */\n      'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n      /**\n       * Text Wrap\n       * @see https://tailwindcss.com/docs/text-wrap\n       */\n      'text-wrap': [{\n        text: ['wrap', 'nowrap', 'balance', 'pretty']\n      }],\n      /**\n       * Text Indent\n       * @see https://tailwindcss.com/docs/text-indent\n       */\n      indent: [{\n        indent: getSpacingWithArbitrary()\n      }],\n      /**\n       * Vertical Alignment\n       * @see https://tailwindcss.com/docs/vertical-align\n       */\n      'vertical-align': [{\n        align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryValue]\n      }],\n      /**\n       * Whitespace\n       * @see https://tailwindcss.com/docs/whitespace\n       */\n      whitespace: [{\n        whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\n      }],\n      /**\n       * Word Break\n       * @see https://tailwindcss.com/docs/word-break\n       */\n      break: [{\n        break: ['normal', 'words', 'all', 'keep']\n      }],\n      /**\n       * Hyphens\n       * @see https://tailwindcss.com/docs/hyphens\n       */\n      hyphens: [{\n        hyphens: ['none', 'manual', 'auto']\n      }],\n      /**\n       * Content\n       * @see https://tailwindcss.com/docs/content\n       */\n      content: [{\n        content: ['none', isArbitraryValue]\n      }],\n      // Backgrounds\n      /**\n       * Background Attachment\n       * @see https://tailwindcss.com/docs/background-attachment\n       */\n      'bg-attachment': [{\n        bg: ['fixed', 'local', 'scroll']\n      }],\n      /**\n       * Background Clip\n       * @see https://tailwindcss.com/docs/background-clip\n       */\n      'bg-clip': [{\n        'bg-clip': ['border', 'padding', 'content', 'text']\n      }],\n      /**\n       * Background Opacity\n       * @deprecated since Tailwind CSS v3.0.0\n       * @see https://tailwindcss.com/docs/background-opacity\n       */\n      'bg-opacity': [{\n        'bg-opacity': [opacity]\n      }],\n      /**\n       * Background Origin\n       * @see https://tailwindcss.com/docs/background-origin\n       */\n      'bg-origin': [{\n        'bg-origin': ['border', 'padding', 'content']\n      }],\n      /**\n       * Background Position\n       * @see https://tailwindcss.com/docs/background-position\n       */\n      'bg-position': [{\n        bg: [...getPositions(), isArbitraryPosition]\n      }],\n      /**\n       * Background Repeat\n       * @see https://tailwindcss.com/docs/background-repeat\n       */\n      'bg-repeat': [{\n        bg: ['no-repeat', {\n          repeat: ['', 'x', 'y', 'round', 'space']\n        }]\n      }],\n      /**\n       * Background Size\n       * @see https://tailwindcss.com/docs/background-size\n       */\n      'bg-size': [{\n        bg: ['auto', 'cover', 'contain', isArbitrarySize]\n      }],\n      /**\n       * Background Image\n       * @see https://tailwindcss.com/docs/background-image\n       */\n      'bg-image': [{\n        bg: ['none', {\n          'gradient-to': ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n        }, isArbitraryImage]\n      }],\n      /**\n       * Background Color\n       * @see https://tailwindcss.com/docs/background-color\n       */\n      'bg-color': [{\n        bg: [colors]\n      }],\n      /**\n       * Gradient Color Stops From Position\n       * @see https://tailwindcss.com/docs/gradient-color-stops\n       */\n      'gradient-from-pos': [{\n        from: [gradientColorStopPositions]\n      }],\n      /**\n       * Gradient Color Stops Via Position\n       * @see https://tailwindcss.com/docs/gradient-color-stops\n       */\n      'gradient-via-pos': [{\n        via: [gradientColorStopPositions]\n      }],\n      /**\n       * Gradient Color Stops To Position\n       * @see https://tailwindcss.com/docs/gradient-color-stops\n       */\n      'gradient-to-pos': [{\n        to: [gradientColorStopPositions]\n      }],\n      /**\n       * Gradient Color Stops From\n       * @see https://tailwindcss.com/docs/gradient-color-stops\n       */\n      'gradient-from': [{\n        from: [gradientColorStops]\n      }],\n      /**\n       * Gradient Color Stops Via\n       * @see https://tailwindcss.com/docs/gradient-color-stops\n       */\n      'gradient-via': [{\n        via: [gradientColorStops]\n      }],\n      /**\n       * Gradient Color Stops To\n       * @see https://tailwindcss.com/docs/gradient-color-stops\n       */\n      'gradient-to': [{\n        to: [gradientColorStops]\n      }],\n      // Borders\n      /**\n       * Border Radius\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      rounded: [{\n        rounded: [borderRadius]\n      }],\n      /**\n       * Border Radius Start\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-s': [{\n        'rounded-s': [borderRadius]\n      }],\n      /**\n       * Border Radius End\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-e': [{\n        'rounded-e': [borderRadius]\n      }],\n      /**\n       * Border Radius Top\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-t': [{\n        'rounded-t': [borderRadius]\n      }],\n      /**\n       * Border Radius Right\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-r': [{\n        'rounded-r': [borderRadius]\n      }],\n      /**\n       * Border Radius Bottom\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-b': [{\n        'rounded-b': [borderRadius]\n      }],\n      /**\n       * Border Radius Left\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-l': [{\n        'rounded-l': [borderRadius]\n      }],\n      /**\n       * Border Radius Start Start\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-ss': [{\n        'rounded-ss': [borderRadius]\n      }],\n      /**\n       * Border Radius Start End\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-se': [{\n        'rounded-se': [borderRadius]\n      }],\n      /**\n       * Border Radius End End\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-ee': [{\n        'rounded-ee': [borderRadius]\n      }],\n      /**\n       * Border Radius End Start\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-es': [{\n        'rounded-es': [borderRadius]\n      }],\n      /**\n       * Border Radius Top Left\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-tl': [{\n        'rounded-tl': [borderRadius]\n      }],\n      /**\n       * Border Radius Top Right\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-tr': [{\n        'rounded-tr': [borderRadius]\n      }],\n      /**\n       * Border Radius Bottom Right\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-br': [{\n        'rounded-br': [borderRadius]\n      }],\n      /**\n       * Border Radius Bottom Left\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-bl': [{\n        'rounded-bl': [borderRadius]\n      }],\n      /**\n       * Border Width\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w': [{\n        border: [borderWidth]\n      }],\n      /**\n       * Border Width X\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w-x': [{\n        'border-x': [borderWidth]\n      }],\n      /**\n       * Border Width Y\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w-y': [{\n        'border-y': [borderWidth]\n      }],\n      /**\n       * Border Width Start\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w-s': [{\n        'border-s': [borderWidth]\n      }],\n      /**\n       * Border Width End\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w-e': [{\n        'border-e': [borderWidth]\n      }],\n      /**\n       * Border Width Top\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w-t': [{\n        'border-t': [borderWidth]\n      }],\n      /**\n       * Border Width Right\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w-r': [{\n        'border-r': [borderWidth]\n      }],\n      /**\n       * Border Width Bottom\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w-b': [{\n        'border-b': [borderWidth]\n      }],\n      /**\n       * Border Width Left\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w-l': [{\n        'border-l': [borderWidth]\n      }],\n      /**\n       * Border Opacity\n       * @see https://tailwindcss.com/docs/border-opacity\n       */\n      'border-opacity': [{\n        'border-opacity': [opacity]\n      }],\n      /**\n       * Border Style\n       * @see https://tailwindcss.com/docs/border-style\n       */\n      'border-style': [{\n        border: [...getLineStyles(), 'hidden']\n      }],\n      /**\n       * Divide Width X\n       * @see https://tailwindcss.com/docs/divide-width\n       */\n      'divide-x': [{\n        'divide-x': [borderWidth]\n      }],\n      /**\n       * Divide Width X Reverse\n       * @see https://tailwindcss.com/docs/divide-width\n       */\n      'divide-x-reverse': ['divide-x-reverse'],\n      /**\n       * Divide Width Y\n       * @see https://tailwindcss.com/docs/divide-width\n       */\n      'divide-y': [{\n        'divide-y': [borderWidth]\n      }],\n      /**\n       * Divide Width Y Reverse\n       * @see https://tailwindcss.com/docs/divide-width\n       */\n      'divide-y-reverse': ['divide-y-reverse'],\n      /**\n       * Divide Opacity\n       * @see https://tailwindcss.com/docs/divide-opacity\n       */\n      'divide-opacity': [{\n        'divide-opacity': [opacity]\n      }],\n      /**\n       * Divide Style\n       * @see https://tailwindcss.com/docs/divide-style\n       */\n      'divide-style': [{\n        divide: getLineStyles()\n      }],\n      /**\n       * Border Color\n       * @see https://tailwindcss.com/docs/border-color\n       */\n      'border-color': [{\n        border: [borderColor]\n      }],\n      /**\n       * Border Color X\n       * @see https://tailwindcss.com/docs/border-color\n       */\n      'border-color-x': [{\n        'border-x': [borderColor]\n      }],\n      /**\n       * Border Color Y\n       * @see https://tailwindcss.com/docs/border-color\n       */\n      'border-color-y': [{\n        'border-y': [borderColor]\n      }],\n      /**\n       * Border Color S\n       * @see https://tailwindcss.com/docs/border-color\n       */\n      'border-color-s': [{\n        'border-s': [borderColor]\n      }],\n      /**\n       * Border Color E\n       * @see https://tailwindcss.com/docs/border-color\n       */\n      'border-color-e': [{\n        'border-e': [borderColor]\n      }],\n      /**\n       * Border Color Top\n       * @see https://tailwindcss.com/docs/border-color\n       */\n      'border-color-t': [{\n        'border-t': [borderColor]\n      }],\n      /**\n       * Border Color Right\n       * @see https://tailwindcss.com/docs/border-color\n       */\n      'border-color-r': [{\n        'border-r': [borderColor]\n      }],\n      /**\n       * Border Color Bottom\n       * @see https://tailwindcss.com/docs/border-color\n       */\n      'border-color-b': [{\n        'border-b': [borderColor]\n      }],\n      /**\n       * Border Color Left\n       * @see https://tailwindcss.com/docs/border-color\n       */\n      'border-color-l': [{\n        'border-l': [borderColor]\n      }],\n      /**\n       * Divide Color\n       * @see https://tailwindcss.com/docs/divide-color\n       */\n      'divide-color': [{\n        divide: [borderColor]\n      }],\n      /**\n       * Outline Style\n       * @see https://tailwindcss.com/docs/outline-style\n       */\n      'outline-style': [{\n        outline: ['', ...getLineStyles()]\n      }],\n      /**\n       * Outline Offset\n       * @see https://tailwindcss.com/docs/outline-offset\n       */\n      'outline-offset': [{\n        'outline-offset': [isLength, isArbitraryValue]\n      }],\n      /**\n       * Outline Width\n       * @see https://tailwindcss.com/docs/outline-width\n       */\n      'outline-w': [{\n        outline: [isLength, isArbitraryLength]\n      }],\n      /**\n       * Outline Color\n       * @see https://tailwindcss.com/docs/outline-color\n       */\n      'outline-color': [{\n        outline: [colors]\n      }],\n      /**\n       * Ring Width\n       * @see https://tailwindcss.com/docs/ring-width\n       */\n      'ring-w': [{\n        ring: getLengthWithEmptyAndArbitrary()\n      }],\n      /**\n       * Ring Width Inset\n       * @see https://tailwindcss.com/docs/ring-width\n       */\n      'ring-w-inset': ['ring-inset'],\n      /**\n       * Ring Color\n       * @see https://tailwindcss.com/docs/ring-color\n       */\n      'ring-color': [{\n        ring: [colors]\n      }],\n      /**\n       * Ring Opacity\n       * @see https://tailwindcss.com/docs/ring-opacity\n       */\n      'ring-opacity': [{\n        'ring-opacity': [opacity]\n      }],\n      /**\n       * Ring Offset Width\n       * @see https://tailwindcss.com/docs/ring-offset-width\n       */\n      'ring-offset-w': [{\n        'ring-offset': [isLength, isArbitraryLength]\n      }],\n      /**\n       * Ring Offset Color\n       * @see https://tailwindcss.com/docs/ring-offset-color\n       */\n      'ring-offset-color': [{\n        'ring-offset': [colors]\n      }],\n      // Effects\n      /**\n       * Box Shadow\n       * @see https://tailwindcss.com/docs/box-shadow\n       */\n      shadow: [{\n        shadow: ['', 'inner', 'none', isTshirtSize, isArbitraryShadow]\n      }],\n      /**\n       * Box Shadow Color\n       * @see https://tailwindcss.com/docs/box-shadow-color\n       */\n      'shadow-color': [{\n        shadow: [isAny]\n      }],\n      /**\n       * Opacity\n       * @see https://tailwindcss.com/docs/opacity\n       */\n      opacity: [{\n        opacity: [opacity]\n      }],\n      /**\n       * Mix Blend Mode\n       * @see https://tailwindcss.com/docs/mix-blend-mode\n       */\n      'mix-blend': [{\n        'mix-blend': [...getBlendModes(), 'plus-lighter', 'plus-darker']\n      }],\n      /**\n       * Background Blend Mode\n       * @see https://tailwindcss.com/docs/background-blend-mode\n       */\n      'bg-blend': [{\n        'bg-blend': getBlendModes()\n      }],\n      // Filters\n      /**\n       * Filter\n       * @deprecated since Tailwind CSS v3.0.0\n       * @see https://tailwindcss.com/docs/filter\n       */\n      filter: [{\n        filter: ['', 'none']\n      }],\n      /**\n       * Blur\n       * @see https://tailwindcss.com/docs/blur\n       */\n      blur: [{\n        blur: [blur]\n      }],\n      /**\n       * Brightness\n       * @see https://tailwindcss.com/docs/brightness\n       */\n      brightness: [{\n        brightness: [brightness]\n      }],\n      /**\n       * Contrast\n       * @see https://tailwindcss.com/docs/contrast\n       */\n      contrast: [{\n        contrast: [contrast]\n      }],\n      /**\n       * Drop Shadow\n       * @see https://tailwindcss.com/docs/drop-shadow\n       */\n      'drop-shadow': [{\n        'drop-shadow': ['', 'none', isTshirtSize, isArbitraryValue]\n      }],\n      /**\n       * Grayscale\n       * @see https://tailwindcss.com/docs/grayscale\n       */\n      grayscale: [{\n        grayscale: [grayscale]\n      }],\n      /**\n       * Hue Rotate\n       * @see https://tailwindcss.com/docs/hue-rotate\n       */\n      'hue-rotate': [{\n        'hue-rotate': [hueRotate]\n      }],\n      /**\n       * Invert\n       * @see https://tailwindcss.com/docs/invert\n       */\n      invert: [{\n        invert: [invert]\n      }],\n      /**\n       * Saturate\n       * @see https://tailwindcss.com/docs/saturate\n       */\n      saturate: [{\n        saturate: [saturate]\n      }],\n      /**\n       * Sepia\n       * @see https://tailwindcss.com/docs/sepia\n       */\n      sepia: [{\n        sepia: [sepia]\n      }],\n      /**\n       * Backdrop Filter\n       * @deprecated since Tailwind CSS v3.0.0\n       * @see https://tailwindcss.com/docs/backdrop-filter\n       */\n      'backdrop-filter': [{\n        'backdrop-filter': ['', 'none']\n      }],\n      /**\n       * Backdrop Blur\n       * @see https://tailwindcss.com/docs/backdrop-blur\n       */\n      'backdrop-blur': [{\n        'backdrop-blur': [blur]\n      }],\n      /**\n       * Backdrop Brightness\n       * @see https://tailwindcss.com/docs/backdrop-brightness\n       */\n      'backdrop-brightness': [{\n        'backdrop-brightness': [brightness]\n      }],\n      /**\n       * Backdrop Contrast\n       * @see https://tailwindcss.com/docs/backdrop-contrast\n       */\n      'backdrop-contrast': [{\n        'backdrop-contrast': [contrast]\n      }],\n      /**\n       * Backdrop Grayscale\n       * @see https://tailwindcss.com/docs/backdrop-grayscale\n       */\n      'backdrop-grayscale': [{\n        'backdrop-grayscale': [grayscale]\n      }],\n      /**\n       * Backdrop Hue Rotate\n       * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n       */\n      'backdrop-hue-rotate': [{\n        'backdrop-hue-rotate': [hueRotate]\n      }],\n      /**\n       * Backdrop Invert\n       * @see https://tailwindcss.com/docs/backdrop-invert\n       */\n      'backdrop-invert': [{\n        'backdrop-invert': [invert]\n      }],\n      /**\n       * Backdrop Opacity\n       * @see https://tailwindcss.com/docs/backdrop-opacity\n       */\n      'backdrop-opacity': [{\n        'backdrop-opacity': [opacity]\n      }],\n      /**\n       * Backdrop Saturate\n       * @see https://tailwindcss.com/docs/backdrop-saturate\n       */\n      'backdrop-saturate': [{\n        'backdrop-saturate': [saturate]\n      }],\n      /**\n       * Backdrop Sepia\n       * @see https://tailwindcss.com/docs/backdrop-sepia\n       */\n      'backdrop-sepia': [{\n        'backdrop-sepia': [sepia]\n      }],\n      // Tables\n      /**\n       * Border Collapse\n       * @see https://tailwindcss.com/docs/border-collapse\n       */\n      'border-collapse': [{\n        border: ['collapse', 'separate']\n      }],\n      /**\n       * Border Spacing\n       * @see https://tailwindcss.com/docs/border-spacing\n       */\n      'border-spacing': [{\n        'border-spacing': [borderSpacing]\n      }],\n      /**\n       * Border Spacing X\n       * @see https://tailwindcss.com/docs/border-spacing\n       */\n      'border-spacing-x': [{\n        'border-spacing-x': [borderSpacing]\n      }],\n      /**\n       * Border Spacing Y\n       * @see https://tailwindcss.com/docs/border-spacing\n       */\n      'border-spacing-y': [{\n        'border-spacing-y': [borderSpacing]\n      }],\n      /**\n       * Table Layout\n       * @see https://tailwindcss.com/docs/table-layout\n       */\n      'table-layout': [{\n        table: ['auto', 'fixed']\n      }],\n      /**\n       * Caption Side\n       * @see https://tailwindcss.com/docs/caption-side\n       */\n      caption: [{\n        caption: ['top', 'bottom']\n      }],\n      // Transitions and Animation\n      /**\n       * Tranisition Property\n       * @see https://tailwindcss.com/docs/transition-property\n       */\n      transition: [{\n        transition: ['none', 'all', '', 'colors', 'opacity', 'shadow', 'transform', isArbitraryValue]\n      }],\n      /**\n       * Transition Duration\n       * @see https://tailwindcss.com/docs/transition-duration\n       */\n      duration: [{\n        duration: getNumberAndArbitrary()\n      }],\n      /**\n       * Transition Timing Function\n       * @see https://tailwindcss.com/docs/transition-timing-function\n       */\n      ease: [{\n        ease: ['linear', 'in', 'out', 'in-out', isArbitraryValue]\n      }],\n      /**\n       * Transition Delay\n       * @see https://tailwindcss.com/docs/transition-delay\n       */\n      delay: [{\n        delay: getNumberAndArbitrary()\n      }],\n      /**\n       * Animation\n       * @see https://tailwindcss.com/docs/animation\n       */\n      animate: [{\n        animate: ['none', 'spin', 'ping', 'pulse', 'bounce', isArbitraryValue]\n      }],\n      // Transforms\n      /**\n       * Transform\n       * @see https://tailwindcss.com/docs/transform\n       */\n      transform: [{\n        transform: ['', 'gpu', 'none']\n      }],\n      /**\n       * Scale\n       * @see https://tailwindcss.com/docs/scale\n       */\n      scale: [{\n        scale: [scale]\n      }],\n      /**\n       * Scale X\n       * @see https://tailwindcss.com/docs/scale\n       */\n      'scale-x': [{\n        'scale-x': [scale]\n      }],\n      /**\n       * Scale Y\n       * @see https://tailwindcss.com/docs/scale\n       */\n      'scale-y': [{\n        'scale-y': [scale]\n      }],\n      /**\n       * Rotate\n       * @see https://tailwindcss.com/docs/rotate\n       */\n      rotate: [{\n        rotate: [isInteger, isArbitraryValue]\n      }],\n      /**\n       * Translate X\n       * @see https://tailwindcss.com/docs/translate\n       */\n      'translate-x': [{\n        'translate-x': [translate]\n      }],\n      /**\n       * Translate Y\n       * @see https://tailwindcss.com/docs/translate\n       */\n      'translate-y': [{\n        'translate-y': [translate]\n      }],\n      /**\n       * Skew X\n       * @see https://tailwindcss.com/docs/skew\n       */\n      'skew-x': [{\n        'skew-x': [skew]\n      }],\n      /**\n       * Skew Y\n       * @see https://tailwindcss.com/docs/skew\n       */\n      'skew-y': [{\n        'skew-y': [skew]\n      }],\n      /**\n       * Transform Origin\n       * @see https://tailwindcss.com/docs/transform-origin\n       */\n      'transform-origin': [{\n        origin: ['center', 'top', 'top-right', 'right', 'bottom-right', 'bottom', 'bottom-left', 'left', 'top-left', isArbitraryValue]\n      }],\n      // Interactivity\n      /**\n       * Accent Color\n       * @see https://tailwindcss.com/docs/accent-color\n       */\n      accent: [{\n        accent: ['auto', colors]\n      }],\n      /**\n       * Appearance\n       * @see https://tailwindcss.com/docs/appearance\n       */\n      appearance: [{\n        appearance: ['none', 'auto']\n      }],\n      /**\n       * Cursor\n       * @see https://tailwindcss.com/docs/cursor\n       */\n      cursor: [{\n        cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryValue]\n      }],\n      /**\n       * Caret Color\n       * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n       */\n      'caret-color': [{\n        caret: [colors]\n      }],\n      /**\n       * Pointer Events\n       * @see https://tailwindcss.com/docs/pointer-events\n       */\n      'pointer-events': [{\n        'pointer-events': ['none', 'auto']\n      }],\n      /**\n       * Resize\n       * @see https://tailwindcss.com/docs/resize\n       */\n      resize: [{\n        resize: ['none', 'y', 'x', '']\n      }],\n      /**\n       * Scroll Behavior\n       * @see https://tailwindcss.com/docs/scroll-behavior\n       */\n      'scroll-behavior': [{\n        scroll: ['auto', 'smooth']\n      }],\n      /**\n       * Scroll Margin\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-m': [{\n        'scroll-m': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Margin X\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-mx': [{\n        'scroll-mx': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Margin Y\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-my': [{\n        'scroll-my': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Margin Start\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-ms': [{\n        'scroll-ms': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Margin End\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-me': [{\n        'scroll-me': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Margin Top\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-mt': [{\n        'scroll-mt': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Margin Right\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-mr': [{\n        'scroll-mr': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Margin Bottom\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-mb': [{\n        'scroll-mb': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Margin Left\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-ml': [{\n        'scroll-ml': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Padding\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-p': [{\n        'scroll-p': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Padding X\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-px': [{\n        'scroll-px': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Padding Y\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-py': [{\n        'scroll-py': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Padding Start\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-ps': [{\n        'scroll-ps': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Padding End\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-pe': [{\n        'scroll-pe': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Padding Top\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-pt': [{\n        'scroll-pt': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Padding Right\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-pr': [{\n        'scroll-pr': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Padding Bottom\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-pb': [{\n        'scroll-pb': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Padding Left\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-pl': [{\n        'scroll-pl': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Snap Align\n       * @see https://tailwindcss.com/docs/scroll-snap-align\n       */\n      'snap-align': [{\n        snap: ['start', 'end', 'center', 'align-none']\n      }],\n      /**\n       * Scroll Snap Stop\n       * @see https://tailwindcss.com/docs/scroll-snap-stop\n       */\n      'snap-stop': [{\n        snap: ['normal', 'always']\n      }],\n      /**\n       * Scroll Snap Type\n       * @see https://tailwindcss.com/docs/scroll-snap-type\n       */\n      'snap-type': [{\n        snap: ['none', 'x', 'y', 'both']\n      }],\n      /**\n       * Scroll Snap Type Strictness\n       * @see https://tailwindcss.com/docs/scroll-snap-type\n       */\n      'snap-strictness': [{\n        snap: ['mandatory', 'proximity']\n      }],\n      /**\n       * Touch Action\n       * @see https://tailwindcss.com/docs/touch-action\n       */\n      touch: [{\n        touch: ['auto', 'none', 'manipulation']\n      }],\n      /**\n       * Touch Action X\n       * @see https://tailwindcss.com/docs/touch-action\n       */\n      'touch-x': [{\n        'touch-pan': ['x', 'left', 'right']\n      }],\n      /**\n       * Touch Action Y\n       * @see https://tailwindcss.com/docs/touch-action\n       */\n      'touch-y': [{\n        'touch-pan': ['y', 'up', 'down']\n      }],\n      /**\n       * Touch Action Pinch Zoom\n       * @see https://tailwindcss.com/docs/touch-action\n       */\n      'touch-pz': ['touch-pinch-zoom'],\n      /**\n       * User Select\n       * @see https://tailwindcss.com/docs/user-select\n       */\n      select: [{\n        select: ['none', 'text', 'all', 'auto']\n      }],\n      /**\n       * Will Change\n       * @see https://tailwindcss.com/docs/will-change\n       */\n      'will-change': [{\n        'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryValue]\n      }],\n      // SVG\n      /**\n       * Fill\n       * @see https://tailwindcss.com/docs/fill\n       */\n      fill: [{\n        fill: [colors, 'none']\n      }],\n      /**\n       * Stroke Width\n       * @see https://tailwindcss.com/docs/stroke-width\n       */\n      'stroke-w': [{\n        stroke: [isLength, isArbitraryLength, isArbitraryNumber]\n      }],\n      /**\n       * Stroke\n       * @see https://tailwindcss.com/docs/stroke\n       */\n      stroke: [{\n        stroke: [colors, 'none']\n      }],\n      // Accessibility\n      /**\n       * Screen Readers\n       * @see https://tailwindcss.com/docs/screen-readers\n       */\n      sr: ['sr-only', 'not-sr-only'],\n      /**\n       * Forced Color Adjust\n       * @see https://tailwindcss.com/docs/forced-color-adjust\n       */\n      'forced-color-adjust': [{\n        'forced-color-adjust': ['auto', 'none']\n      }]\n    },\n    conflictingClassGroups: {\n      overflow: ['overflow-x', 'overflow-y'],\n      overscroll: ['overscroll-x', 'overscroll-y'],\n      inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n      'inset-x': ['right', 'left'],\n      'inset-y': ['top', 'bottom'],\n      flex: ['basis', 'grow', 'shrink'],\n      gap: ['gap-x', 'gap-y'],\n      p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],\n      px: ['pr', 'pl'],\n      py: ['pt', 'pb'],\n      m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],\n      mx: ['mr', 'ml'],\n      my: ['mt', 'mb'],\n      size: ['w', 'h'],\n      'font-size': ['leading'],\n      'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\n      'fvn-ordinal': ['fvn-normal'],\n      'fvn-slashed-zero': ['fvn-normal'],\n      'fvn-figure': ['fvn-normal'],\n      'fvn-spacing': ['fvn-normal'],\n      'fvn-fraction': ['fvn-normal'],\n      'line-clamp': ['display', 'overflow'],\n      rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],\n      'rounded-s': ['rounded-ss', 'rounded-es'],\n      'rounded-e': ['rounded-se', 'rounded-ee'],\n      'rounded-t': ['rounded-tl', 'rounded-tr'],\n      'rounded-r': ['rounded-tr', 'rounded-br'],\n      'rounded-b': ['rounded-br', 'rounded-bl'],\n      'rounded-l': ['rounded-tl', 'rounded-bl'],\n      'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n      'border-w': ['border-w-s', 'border-w-e', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\n      'border-w-x': ['border-w-r', 'border-w-l'],\n      'border-w-y': ['border-w-t', 'border-w-b'],\n      'border-color': ['border-color-s', 'border-color-e', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\n      'border-color-x': ['border-color-r', 'border-color-l'],\n      'border-color-y': ['border-color-t', 'border-color-b'],\n      'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\n      'scroll-mx': ['scroll-mr', 'scroll-ml'],\n      'scroll-my': ['scroll-mt', 'scroll-mb'],\n      'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\n      'scroll-px': ['scroll-pr', 'scroll-pl'],\n      'scroll-py': ['scroll-pt', 'scroll-pb'],\n      touch: ['touch-x', 'touch-y', 'touch-pz'],\n      'touch-x': ['touch'],\n      'touch-y': ['touch'],\n      'touch-pz': ['touch']\n    },\n    conflictingClassGroupModifiers: {\n      'font-size': ['leading']\n    }\n  };\n};\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nconst mergeConfigs = (baseConfig, {\n  cacheSize,\n  prefix,\n  separator,\n  experimentalParseClassName,\n  extend = {},\n  override = {}\n}) => {\n  overrideProperty(baseConfig, 'cacheSize', cacheSize);\n  overrideProperty(baseConfig, 'prefix', prefix);\n  overrideProperty(baseConfig, 'separator', separator);\n  overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\n  for (const configKey in override) {\n    overrideConfigProperties(baseConfig[configKey], override[configKey]);\n  }\n  for (const key in extend) {\n    mergeConfigProperties(baseConfig[key], extend[key]);\n  }\n  return baseConfig;\n};\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\n  if (overrideValue !== undefined) {\n    baseObject[overrideKey] = overrideValue;\n  }\n};\nconst overrideConfigProperties = (baseObject, overrideObject) => {\n  if (overrideObject) {\n    for (const key in overrideObject) {\n      overrideProperty(baseObject, key, overrideObject[key]);\n    }\n  }\n};\nconst mergeConfigProperties = (baseObject, mergeObject) => {\n  if (mergeObject) {\n    for (const key in mergeObject) {\n      const mergeValue = mergeObject[key];\n      if (mergeValue !== undefined) {\n        baseObject[key] = (baseObject[key] || []).concat(mergeValue);\n      }\n    }\n  }\n};\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\nexport { createTailwindMerge, extendTailwindMerge, fromTheme, getDefaultConfig, mergeConfigs, twJoin, twMerge, validators };\n//# sourceMappingURL=bundle-mjs.mjs.map\n","import { type ClassValue, clsx } from 'clsx';\r\nimport { twMerge } from 'tailwind-merge';\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n  return twMerge(clsx(inputs));\r\n}\r\n\r\nexport const formatBytes = (bytes: number): string => {\r\n  if (bytes === 0) return '0 Bytes';\r\n  const k = 1024;\r\n  const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\r\n  const i = Math.floor(Math.log(bytes) / Math.log(k));\r\n  return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}`;\r\n};\r\n\r\nexport function getUserInfoFromLocal(): any {\r\n  let dataLogin: any = localStorage.getItem('dataLogin');\r\n  let user: any;\r\n  try {\r\n    if (dataLogin) {\r\n      dataLogin = JSON.parse(dataLogin);\r\n      user = dataLogin.user;\r\n    }\r\n  } catch (error) {\r\n    console.error('Error parsing dataLogin from localStorage:', error);\r\n    dataLogin = null;\r\n  }\r\n  return user;\r\n}\r\n\r\nexport function getAccessTokenInfoFromLocal(): any {\r\n  let dataLogin: any = localStorage.getItem('dataLogin');\r\n  let accessToken: any;\r\n  try {\r\n    if (dataLogin) {\r\n      dataLogin = JSON.parse(dataLogin);\r\n      accessToken = dataLogin.accessToken;\r\n    }\r\n  } catch (error) {\r\n    console.error('Error parsing dataLogin from localStorage:', error);\r\n    accessToken = null;\r\n    dataLogin = null;\r\n  }\r\n  return accessToken;\r\n}\r\n","import { type VariantProps, cva } from 'class-variance-authority';\r\nimport React from 'react';\r\n\r\nimport { cn } from '@/lib/utils';\r\n\r\nconst badgeVariants = cva(\r\n  'inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\r\n  {\r\n    variants: {\r\n      variant: {\r\n        default: 'border-transparent bg-primary text-primary-foreground hover:bg-primary/80',\r\n        secondary:\r\n          'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80',\r\n        destructive:\r\n          'border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80',\r\n        outline: 'text-foreground',\r\n      },\r\n    },\r\n    defaultVariants: {\r\n      variant: 'default',\r\n    },\r\n  },\r\n);\r\n\r\nexport interface BadgeProps\r\n  extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> {}\r\n\r\nfunction Badge({ className, variant, ...props }: BadgeProps) {\r\n  return <div className={cn(badgeVariants({ variant }), className)} {...props} />;\r\n}\r\n\r\nexport { Badge, badgeVariants };\r\n","import { Slot } from '@radix-ui/react-slot';\r\nimport { type VariantProps, cva } from 'class-variance-authority';\r\nimport * as React from 'react';\r\n\r\nimport { cn } from '@/lib/utils';\r\n\r\nconst buttonVariants = cva(\r\n  'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 s3-explr-ui-button',\r\n  {\r\n    variants: {\r\n      variant: {\r\n        default:\r\n          'bg-primary text-primary-foreground shadow hover:bg-primary/90 s3-explr-ui-button-default',\r\n        destructive:\r\n          'bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90 s3-explr-ui-button-destructive',\r\n        outline:\r\n          'border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground s3-explr-ui-button-outline',\r\n        secondary:\r\n          'bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80 s3-explr-ui-button-secondary',\r\n        ghost: 'hover:bg-accent hover:text-accent-foreground s3-explr-ui-button-ghost',\r\n        link: 'text-primary underline-offset-4 hover:underline s3-explr-ui-button-link',\r\n      },\r\n      size: {\r\n        default: 'h-9 px-4 py-2 s3-explr-ui-button-size-default',\r\n        sm: 'h-8 rounded-md px-3 text-xs s3-explr-ui-button-size-sm',\r\n        lg: 'h-10 rounded-md px-8 s3-explr-ui-button-size-lg',\r\n        icon: 'h-9 w-9 s3-explr-ui-button-size-icon',\r\n      },\r\n    },\r\n    defaultVariants: {\r\n      variant: 'default',\r\n      size: 'default',\r\n    },\r\n  },\r\n);\r\n\r\nexport interface ButtonProps\r\n  extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {\r\n  asChild?: boolean;\r\n}\r\n\r\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\r\n  ({ className, variant, size, asChild = false, ...props }, ref) => {\r\n    const Comp = asChild ? Slot : 'button';\r\n    return (\r\n      <Comp className={cn(buttonVariants({ variant, size, className }))} ref={ref} {...props} />\r\n    );\r\n  },\r\n);\r\nButton.displayName = 'Button';\r\n\r\nexport { Button, buttonVariants };\r\n","// src/use-previous.tsx\nimport * as React from \"react\";\nfunction usePrevious(value) {\n  const ref = React.useRef({ value, previous: value });\n  return React.useMemo(() => {\n    if (ref.current.value !== value) {\n      ref.current.previous = ref.current.value;\n      ref.current.value = value;\n    }\n    return ref.current.previous;\n  }, [value]);\n}\nexport {\n  usePrevious\n};\n//# sourceMappingURL=index.mjs.map\n","// src/use-size.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nfunction useSize(element) {\n  const [size, setSize] = React.useState(void 0);\n  useLayoutEffect(() => {\n    if (element) {\n      setSize({ width: element.offsetWidth, height: element.offsetHeight });\n      const resizeObserver = new ResizeObserver((entries) => {\n        if (!Array.isArray(entries)) {\n          return;\n        }\n        if (!entries.length) {\n          return;\n        }\n        const entry = entries[0];\n        let width;\n        let height;\n        if (\"borderBoxSize\" in entry) {\n          const borderSizeEntry = entry[\"borderBoxSize\"];\n          const borderSize = Array.isArray(borderSizeEntry) ? borderSizeEntry[0] : borderSizeEntry;\n          width = borderSize[\"inlineSize\"];\n          height = borderSize[\"blockSize\"];\n        } else {\n          width = element.offsetWidth;\n          height = element.offsetHeight;\n        }\n        setSize({ width, height });\n      });\n      resizeObserver.observe(element, { box: \"border-box\" });\n      return () => resizeObserver.unobserve(element);\n    } else {\n      setSize(void 0);\n    }\n  }, [element]);\n  return size;\n}\nexport {\n  useSize\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/checkbox.tsx\nimport * as React from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar CHECKBOX_NAME = \"Checkbox\";\nvar [createCheckboxContext, createCheckboxScope] = createContextScope(CHECKBOX_NAME);\nvar [CheckboxProviderImpl, useCheckboxContext] = createCheckboxContext(CHECKBOX_NAME);\nfunction CheckboxProvider(props) {\n  const {\n    __scopeCheckbox,\n    checked: checkedProp,\n    children,\n    defaultChecked,\n    disabled,\n    form,\n    name,\n    onCheckedChange,\n    required,\n    value = \"on\",\n    // @ts-expect-error\n    internal_do_not_use_render\n  } = props;\n  const [checked, setChecked] = useControllableState({\n    prop: checkedProp,\n    defaultProp: defaultChecked ?? false,\n    onChange: onCheckedChange,\n    caller: CHECKBOX_NAME\n  });\n  const [control, setControl] = React.useState(null);\n  const [bubbleInput, setBubbleInput] = React.useState(null);\n  const hasConsumerStoppedPropagationRef = React.useRef(false);\n  const isFormControl = control ? !!form || !!control.closest(\"form\") : (\n    // We set this to true by default so that events bubble to forms without JS (SSR)\n    true\n  );\n  const context = {\n    checked,\n    disabled,\n    setChecked,\n    control,\n    setControl,\n    name,\n    form,\n    value,\n    hasConsumerStoppedPropagationRef,\n    required,\n    defaultChecked: isIndeterminate(defaultChecked) ? false : defaultChecked,\n    isFormControl,\n    bubbleInput,\n    setBubbleInput\n  };\n  return /* @__PURE__ */ jsx(\n    CheckboxProviderImpl,\n    {\n      scope: __scopeCheckbox,\n      ...context,\n      children: isFunction(internal_do_not_use_render) ? internal_do_not_use_render(context) : children\n    }\n  );\n}\nvar TRIGGER_NAME = \"CheckboxTrigger\";\nvar CheckboxTrigger = React.forwardRef(\n  ({ __scopeCheckbox, onKeyDown, onClick, ...checkboxProps }, forwardedRef) => {\n    const {\n      control,\n      value,\n      disabled,\n      checked,\n      required,\n      setControl,\n      setChecked,\n      hasConsumerStoppedPropagationRef,\n      isFormControl,\n      bubbleInput\n    } = useCheckboxContext(TRIGGER_NAME, __scopeCheckbox);\n    const composedRefs = useComposedRefs(forwardedRef, setControl);\n    const initialCheckedStateRef = React.useRef(checked);\n    React.useEffect(() => {\n      const form = control?.form;\n      if (form) {\n        const reset = () => setChecked(initialCheckedStateRef.current);\n        form.addEventListener(\"reset\", reset);\n        return () => form.removeEventListener(\"reset\", reset);\n      }\n    }, [control, setChecked]);\n    return /* @__PURE__ */ jsx(\n      Primitive.button,\n      {\n        type: \"button\",\n        role: \"checkbox\",\n        \"aria-checked\": isIndeterminate(checked) ? \"mixed\" : checked,\n        \"aria-required\": required,\n        \"data-state\": getState(checked),\n        \"data-disabled\": disabled ? \"\" : void 0,\n        disabled,\n        value,\n        ...checkboxProps,\n        ref: composedRefs,\n        onKeyDown: composeEventHandlers(onKeyDown, (event) => {\n          if (event.key === \"Enter\") event.preventDefault();\n        }),\n        onClick: composeEventHandlers(onClick, (event) => {\n          setChecked((prevChecked) => isIndeterminate(prevChecked) ? true : !prevChecked);\n          if (bubbleInput && isFormControl) {\n            hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n            if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n          }\n        })\n      }\n    );\n  }\n);\nCheckboxTrigger.displayName = TRIGGER_NAME;\nvar Checkbox = React.forwardRef(\n  (props, forwardedRef) => {\n    const {\n      __scopeCheckbox,\n      name,\n      checked,\n      defaultChecked,\n      required,\n      disabled,\n      value,\n      onCheckedChange,\n      form,\n      ...checkboxProps\n    } = props;\n    return /* @__PURE__ */ jsx(\n      CheckboxProvider,\n      {\n        __scopeCheckbox,\n        checked,\n        defaultChecked,\n        disabled,\n        required,\n        onCheckedChange,\n        name,\n        form,\n        value,\n        internal_do_not_use_render: ({ isFormControl }) => /* @__PURE__ */ jsxs(Fragment, { children: [\n          /* @__PURE__ */ jsx(\n            CheckboxTrigger,\n            {\n              ...checkboxProps,\n              ref: forwardedRef,\n              __scopeCheckbox\n            }\n          ),\n          isFormControl && /* @__PURE__ */ jsx(\n            CheckboxBubbleInput,\n            {\n              __scopeCheckbox\n            }\n          )\n        ] })\n      }\n    );\n  }\n);\nCheckbox.displayName = CHECKBOX_NAME;\nvar INDICATOR_NAME = \"CheckboxIndicator\";\nvar CheckboxIndicator = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeCheckbox, forceMount, ...indicatorProps } = props;\n    const context = useCheckboxContext(INDICATOR_NAME, __scopeCheckbox);\n    return /* @__PURE__ */ jsx(\n      Presence,\n      {\n        present: forceMount || isIndeterminate(context.checked) || context.checked === true,\n        children: /* @__PURE__ */ jsx(\n          Primitive.span,\n          {\n            \"data-state\": getState(context.checked),\n            \"data-disabled\": context.disabled ? \"\" : void 0,\n            ...indicatorProps,\n            ref: forwardedRef,\n            style: { pointerEvents: \"none\", ...props.style }\n          }\n        )\n      }\n    );\n  }\n);\nCheckboxIndicator.displayName = INDICATOR_NAME;\nvar BUBBLE_INPUT_NAME = \"CheckboxBubbleInput\";\nvar CheckboxBubbleInput = React.forwardRef(\n  ({ __scopeCheckbox, ...props }, forwardedRef) => {\n    const {\n      control,\n      hasConsumerStoppedPropagationRef,\n      checked,\n      defaultChecked,\n      required,\n      disabled,\n      name,\n      value,\n      form,\n      bubbleInput,\n      setBubbleInput\n    } = useCheckboxContext(BUBBLE_INPUT_NAME, __scopeCheckbox);\n    const composedRefs = useComposedRefs(forwardedRef, setBubbleInput);\n    const prevChecked = usePrevious(checked);\n    const controlSize = useSize(control);\n    React.useEffect(() => {\n      const input = bubbleInput;\n      if (!input) return;\n      const inputProto = window.HTMLInputElement.prototype;\n      const descriptor = Object.getOwnPropertyDescriptor(\n        inputProto,\n        \"checked\"\n      );\n      const setChecked = descriptor.set;\n      const bubbles = !hasConsumerStoppedPropagationRef.current;\n      if (prevChecked !== checked && setChecked) {\n        const event = new Event(\"click\", { bubbles });\n        input.indeterminate = isIndeterminate(checked);\n        setChecked.call(input, isIndeterminate(checked) ? false : checked);\n        input.dispatchEvent(event);\n      }\n    }, [bubbleInput, prevChecked, checked, hasConsumerStoppedPropagationRef]);\n    const defaultCheckedRef = React.useRef(isIndeterminate(checked) ? false : checked);\n    return /* @__PURE__ */ jsx(\n      Primitive.input,\n      {\n        type: \"checkbox\",\n        \"aria-hidden\": true,\n        defaultChecked: defaultChecked ?? defaultCheckedRef.current,\n        required,\n        disabled,\n        name,\n        value,\n        form,\n        ...props,\n        tabIndex: -1,\n        ref: composedRefs,\n        style: {\n          ...props.style,\n          ...controlSize,\n          position: \"absolute\",\n          pointerEvents: \"none\",\n          opacity: 0,\n          margin: 0,\n          // We transform because the input is absolutely positioned but we have\n          // rendered it **after** the button. This pulls it back to sit on top\n          // of the button.\n          transform: \"translateX(-100%)\"\n        }\n      }\n    );\n  }\n);\nCheckboxBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction isFunction(value) {\n  return typeof value === \"function\";\n}\nfunction isIndeterminate(checked) {\n  return checked === \"indeterminate\";\n}\nfunction getState(checked) {\n  return isIndeterminate(checked) ? \"indeterminate\" : checked ? \"checked\" : \"unchecked\";\n}\nexport {\n  Checkbox,\n  CheckboxIndicator,\n  CheckboxIndicator as Indicator,\n  Checkbox as Root,\n  createCheckboxScope,\n  CheckboxBubbleInput as unstable_BubbleInput,\n  CheckboxBubbleInput as unstable_CheckboxBubbleInput,\n  CheckboxProvider as unstable_CheckboxProvider,\n  CheckboxTrigger as unstable_CheckboxTrigger,\n  CheckboxProvider as unstable_Provider,\n  CheckboxTrigger as unstable_Trigger\n};\n//# sourceMappingURL=index.mjs.map\n","import * as CheckboxPrimitive from '@radix-ui/react-checkbox';\r\nimport { Check, Minus } from 'lucide-react';\r\nimport * as React from 'react';\r\n\r\nimport { cn } from '@/lib/utils';\r\n\r\nconst Checkbox = React.forwardRef<\r\n  React.ElementRef<typeof CheckboxPrimitive.Root>,\r\n  React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\r\n>(({ className, checked, ...props }, ref) => (\r\n  <CheckboxPrimitive.Root\r\n    ref={ref}\r\n    checked={checked}\r\n    className={cn(\r\n      's3-explr-ui-checkbox peer h-4 w-4 shrink-0 rounded-sm border border-primary shadow focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=indeterminate]:bg-primary data-[state=indeterminate]:text-primary-foreground',\r\n      className,\r\n    )}\r\n    {...props}\r\n  >\r\n    <CheckboxPrimitive.Indicator\r\n      className={cn('s3-explr-ui-checkbox-indicator flex items-center justify-center text-current')}\r\n    >\r\n      {checked === 'indeterminate' ? (\r\n        <Minus className=\"s3-explr-ui-checkbox-minus h-4 w-4\" />\r\n      ) : (\r\n        <Check className=\"s3-explr-ui-checkbox-check h-4 w-4\" />\r\n      )}\r\n    </CheckboxPrimitive.Indicator>\r\n  </CheckboxPrimitive.Root>\r\n));\r\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\r\n\r\nexport { Checkbox };\r\n","import * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { X } from 'lucide-react';\nimport * as React from 'react';\n\nimport { cn } from '@/lib/utils';\n\nconst Dialog = DialogPrimitive.Root;\n\nconst DialogTrigger = DialogPrimitive.Trigger;\n\nconst DialogPortal = DialogPrimitive.Portal;\n\nconst DialogClose = DialogPrimitive.Close;\n\nconst DialogOverlay = React.forwardRef<\n  React.ElementRef<typeof DialogPrimitive.Overlay>,\n  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n  <DialogPrimitive.Overlay\n    ref={ref}\n    className={cn(\n      's3-explr-ui-dialog-overlay fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n      className,\n    )}\n    {...props}\n  />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = React.forwardRef<\n  React.ElementRef<typeof DialogPrimitive.Content>,\n  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n  <DialogPortal>\n    <DialogOverlay />\n    <DialogPrimitive.Content\n      ref={ref}\n      className={cn(\n        's3-explr-ui-dialog-content fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg',\n        className,\n      )}\n      {...props}\n    >\n      {children}\n      <DialogPrimitive.Close\n        className={cn(\n          's3-explr-ui-dialog-close absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground',\n        )}\n      >\n        <X className=\"s3-explr-ui-dialog-close-icon h-4 w-4\" />\n        <span className=\"s3-explr-ui-dialog-close-text sr-only\">Close</span>\n      </DialogPrimitive.Close>\n    </DialogPrimitive.Content>\n  </DialogPortal>\n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n  <div\n    className={cn(\n      's3-explr-ui-dialog-header flex flex-col space-y-1.5 text-center sm:text-left',\n      className,\n    )}\n    {...props}\n  />\n);\nDialogHeader.displayName = 'DialogHeader';\n\nconst DialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n  <div\n    className={cn(\n      's3-explr-ui-dialog-footer flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2',\n      className,\n    )}\n    {...props}\n  />\n);\nDialogFooter.displayName = 'DialogFooter';\n\nconst DialogTitle = React.forwardRef<\n  React.ElementRef<typeof DialogPrimitive.Title>,\n  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n  <DialogPrimitive.Title\n    ref={ref}\n    className={cn(\n      's3-explr-ui-dialog-title text-lg font-semibold leading-none tracking-tight',\n      className,\n    )}\n    {...props}\n  />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n  React.ElementRef<typeof DialogPrimitive.Description>,\n  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n  <DialogPrimitive.Description\n    ref={ref}\n    className={cn('s3-explr-ui-dialog-description text-sm text-muted-foreground', className)}\n    {...props}\n  />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n  Dialog,\n  DialogPortal,\n  DialogOverlay,\n  DialogTrigger,\n  DialogClose,\n  DialogContent,\n  DialogHeader,\n  DialogFooter,\n  DialogTitle,\n  DialogDescription,\n};\n","import * as React from 'react';\n\nimport { cn } from '@/lib/utils';\n\nconst Table = React.forwardRef<HTMLTableElement, React.HTMLAttributes<HTMLTableElement>>(\n  ({ className, ...props }, ref) => (\n    <div className={cn('relative w-full overflow-auto', 's3-explr-ui-table-container')}>\n      <table\n        ref={ref}\n        className={cn('w-full caption-bottom text-sm', 's3-explr-ui-table', className)}\n        {...props}\n      />\n    </div>\n  ),\n);\nTable.displayName = 'Table';\n\nconst TableHeader = React.forwardRef<\n  HTMLTableSectionElement,\n  React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n  <thead\n    ref={ref}\n    className={cn('[&_tr]:border-b', 's3-explr-ui-table-header', className)}\n    {...props}\n  />\n));\nTableHeader.displayName = 'TableHeader';\n\nconst TableBody = React.forwardRef<\n  HTMLTableSectionElement,\n  React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n  <tbody\n    ref={ref}\n    className={cn('[&_tr:last-child]:border-0', 's3-explr-ui-table-body', className)}\n    {...props}\n  />\n));\nTableBody.displayName = 'TableBody';\n\nconst TableFooter = React.forwardRef<\n  HTMLTableSectionElement,\n  React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n  <tfoot\n    ref={ref}\n    className={cn(\n      'border-t bg-muted/50 font-medium [&>tr]:last:border-b-0',\n      's3-explr-ui-table-footer',\n      className,\n    )}\n    {...props}\n  />\n));\nTableFooter.displayName = 'TableFooter';\n\nconst TableRow = React.forwardRef<HTMLTableRowElement, React.HTMLAttributes<HTMLTableRowElement>>(\n  ({ className, ...props }, ref) => (\n    <tr\n      ref={ref}\n      className={cn(\n        'border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted',\n        's3-explr-ui-table-row',\n        className,\n      )}\n      {...props}\n    />\n  ),\n);\nTableRow.displayName = 'TableRow';\n\nconst TableHead = React.forwardRef<\n  HTMLTableCellElement,\n  React.ThHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n  <th\n    ref={ref}\n    className={cn(\n      'h-10 px-2 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',\n      's3-explr-ui-table-head',\n      className,\n    )}\n    {...props}\n  />\n));\nTableHead.displayName = 'TableHead';\n\nconst TableCell = React.forwardRef<\n  HTMLTableCellElement,\n  React.TdHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n  <td\n    ref={ref}\n    className={cn(\n      'p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',\n      's3-explr-ui-table-cell',\n      className,\n    )}\n    {...props}\n  />\n));\nTableCell.displayName = 'TableCell';\n\nconst TableCaption = React.forwardRef<\n  HTMLTableCaptionElement,\n  React.HTMLAttributes<HTMLTableCaptionElement>\n>(({ className, ...props }, ref) => (\n  <caption\n    ref={ref}\n    className={cn('mt-4 text-sm text-muted-foreground', 's3-explr-ui-table-caption', className)}\n    {...props}\n  />\n));\nTableCaption.displayName = 'TableCaption';\n\nexport { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption };\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n  x: v,\n  y: v\n});\nconst oppositeSideMap = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nfunction clamp(start, value, end) {\n  return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n  return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n  return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n  return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n  return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n  const firstChar = placement[0];\n  return firstChar === 't' || firstChar === 'b' ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n  return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n  if (rtl === void 0) {\n    rtl = false;\n  }\n  const alignment = getAlignment(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const length = getAxisLength(alignmentAxis);\n  let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n  if (rects.reference[length] > rects.floating[length]) {\n    mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n  }\n  return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n  const oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n  return placement.includes('start') ? placement.replace('start', 'end') : placement.replace('end', 'start');\n}\nconst lrPlacement = ['left', 'right'];\nconst rlPlacement = ['right', 'left'];\nconst tbPlacement = ['top', 'bottom'];\nconst btPlacement = ['bottom', 'top'];\nfunction getSideList(side, isStart, rtl) {\n  switch (side) {\n    case 'top':\n    case 'bottom':\n      if (rtl) return isStart ? rlPlacement : lrPlacement;\n      return isStart ? lrPlacement : rlPlacement;\n    case 'left':\n    case 'right':\n      return isStart ? tbPlacement : btPlacement;\n    default:\n      return [];\n  }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n  const alignment = getAlignment(placement);\n  let list = getSideList(getSide(placement), direction === 'start', rtl);\n  if (alignment) {\n    list = list.map(side => side + \"-\" + alignment);\n    if (flipAlignment) {\n      list = list.concat(list.map(getOppositeAlignmentPlacement));\n    }\n  }\n  return list;\n}\nfunction getOppositePlacement(placement) {\n  const side = getSide(placement);\n  return oppositeSideMap[side] + placement.slice(side.length);\n}\nfunction expandPaddingObject(padding) {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n    ...padding\n  };\n}\nfunction getPaddingObject(padding) {\n  return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n    top: padding,\n    right: padding,\n    bottom: padding,\n    left: padding\n  };\n}\nfunction rectToClientRect(rect) {\n  const {\n    x,\n    y,\n    width,\n    height\n  } = rect;\n  return {\n    width,\n    height,\n    top: y,\n    left: x,\n    right: x + width,\n    bottom: y + height,\n    x,\n    y\n  };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n  let {\n    reference,\n    floating\n  } = _ref;\n  const sideAxis = getSideAxis(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const alignLength = getAxisLength(alignmentAxis);\n  const side = getSide(placement);\n  const isVertical = sideAxis === 'y';\n  const commonX = reference.x + reference.width / 2 - floating.width / 2;\n  const commonY = reference.y + reference.height / 2 - floating.height / 2;\n  const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n  let coords;\n  switch (side) {\n    case 'top':\n      coords = {\n        x: commonX,\n        y: reference.y - floating.height\n      };\n      break;\n    case 'bottom':\n      coords = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n    case 'right':\n      coords = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n    case 'left':\n      coords = {\n        x: reference.x - floating.width,\n        y: commonY\n      };\n      break;\n    default:\n      coords = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n  switch (getAlignment(placement)) {\n    case 'start':\n      coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n    case 'end':\n      coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n  }\n  return coords;\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n  var _await$platform$isEle;\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    x,\n    y,\n    platform,\n    rects,\n    elements,\n    strategy\n  } = state;\n  const {\n    boundary = 'clippingAncestors',\n    rootBoundary = 'viewport',\n    elementContext = 'floating',\n    altBoundary = false,\n    padding = 0\n  } = evaluate(options, state);\n  const paddingObject = getPaddingObject(padding);\n  const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n  const element = elements[altBoundary ? altContext : elementContext];\n  const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n    element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n    boundary,\n    rootBoundary,\n    strategy\n  }));\n  const rect = elementContext === 'floating' ? {\n    x,\n    y,\n    width: rects.floating.width,\n    height: rects.floating.height\n  } : rects.reference;\n  const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n  const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n    x: 1,\n    y: 1\n  } : {\n    x: 1,\n    y: 1\n  };\n  const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  }) : rect);\n  return {\n    top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n    bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n    left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n    right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n  };\n}\n\n// Maximum number of resets that can occur before bailing to avoid infinite reset loops.\nconst MAX_RESET_COUNT = 50;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n  const {\n    placement = 'bottom',\n    strategy = 'absolute',\n    middleware = [],\n    platform\n  } = config;\n  const platformWithDetectOverflow = platform.detectOverflow ? platform : {\n    ...platform,\n    detectOverflow\n  };\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n  let rects = await platform.getElementRects({\n    reference,\n    floating,\n    strategy\n  });\n  let {\n    x,\n    y\n  } = computeCoordsFromPlacement(rects, placement, rtl);\n  let statefulPlacement = placement;\n  let resetCount = 0;\n  const middlewareData = {};\n  for (let i = 0; i < middleware.length; i++) {\n    const currentMiddleware = middleware[i];\n    if (!currentMiddleware) {\n      continue;\n    }\n    const {\n      name,\n      fn\n    } = currentMiddleware;\n    const {\n      x: nextX,\n      y: nextY,\n      data,\n      reset\n    } = await fn({\n      x,\n      y,\n      initialPlacement: placement,\n      placement: statefulPlacement,\n      strategy,\n      middlewareData,\n      rects,\n      platform: platformWithDetectOverflow,\n      elements: {\n        reference,\n        floating\n      }\n    });\n    x = nextX != null ? nextX : x;\n    y = nextY != null ? nextY : y;\n    middlewareData[name] = {\n      ...middlewareData[name],\n      ...data\n    };\n    if (reset && resetCount < MAX_RESET_COUNT) {\n      resetCount++;\n      if (typeof reset === 'object') {\n        if (reset.placement) {\n          statefulPlacement = reset.placement;\n        }\n        if (reset.rects) {\n          rects = reset.rects === true ? await platform.getElementRects({\n            reference,\n            floating,\n            strategy\n          }) : reset.rects;\n        }\n        ({\n          x,\n          y\n        } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n      }\n      i = -1;\n    }\n  }\n  return {\n    x,\n    y,\n    placement: statefulPlacement,\n    strategy,\n    middlewareData\n  };\n};\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n  name: 'arrow',\n  options,\n  async fn(state) {\n    const {\n      x,\n      y,\n      placement,\n      rects,\n      platform,\n      elements,\n      middlewareData\n    } = state;\n    // Since `element` is required, we don't Partial<> the type.\n    const {\n      element,\n      padding = 0\n    } = evaluate(options, state) || {};\n    if (element == null) {\n      return {};\n    }\n    const paddingObject = getPaddingObject(padding);\n    const coords = {\n      x,\n      y\n    };\n    const axis = getAlignmentAxis(placement);\n    const length = getAxisLength(axis);\n    const arrowDimensions = await platform.getDimensions(element);\n    const isYAxis = axis === 'y';\n    const minProp = isYAxis ? 'top' : 'left';\n    const maxProp = isYAxis ? 'bottom' : 'right';\n    const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n    const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n    const startDiff = coords[axis] - rects.reference[axis];\n    const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n    let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n    // DOM platform can return `window` as the `offsetParent`.\n    if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n      clientSize = elements.floating[clientProp] || rects.floating[length];\n    }\n    const centerToReference = endDiff / 2 - startDiff / 2;\n\n    // If the padding is large enough that it causes the arrow to no longer be\n    // centered, modify the padding so that it is centered.\n    const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n    const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n    const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n    // Make sure the arrow doesn't overflow the floating element if the center\n    // point is outside the floating element's bounds.\n    const min$1 = minPadding;\n    const max = clientSize - arrowDimensions[length] - maxPadding;\n    const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n    const offset = clamp(min$1, center, max);\n\n    // If the reference is small enough that the arrow's padding causes it to\n    // to point to nothing for an aligned placement, adjust the offset of the\n    // floating element itself. To ensure `shift()` continues to take action,\n    // a single reset is performed when this is true.\n    const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n    const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n    return {\n      [axis]: coords[axis] + alignmentOffset,\n      data: {\n        [axis]: offset,\n        centerOffset: center - offset - alignmentOffset,\n        ...(shouldAddOffset && {\n          alignmentOffset\n        })\n      },\n      reset: shouldAddOffset\n    };\n  }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n  const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n  return allowedPlacementsSortedByAlignment.filter(placement => {\n    if (alignment) {\n      return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n    }\n    return true;\n  });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'autoPlacement',\n    options,\n    async fn(state) {\n      var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n      const {\n        rects,\n        middlewareData,\n        placement,\n        platform,\n        elements\n      } = state;\n      const {\n        crossAxis = false,\n        alignment,\n        allowedPlacements = placements,\n        autoAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n      const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n      const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n      const currentPlacement = placements$1[currentIndex];\n      if (currentPlacement == null) {\n        return {};\n      }\n      const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n      // Make `computeCoords` start from the right place.\n      if (placement !== currentPlacement) {\n        return {\n          reset: {\n            placement: placements$1[0]\n          }\n        };\n      }\n      const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n      const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n        placement: currentPlacement,\n        overflows: currentOverflows\n      }];\n      const nextPlacement = placements$1[currentIndex + 1];\n\n      // There are more placements to check.\n      if (nextPlacement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: nextPlacement\n          }\n        };\n      }\n      const placementsSortedByMostSpace = allOverflows.map(d => {\n        const alignment = getAlignment(d.placement);\n        return [d.placement, alignment && crossAxis ?\n        // Check along the mainAxis and main crossAxis side.\n        d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n        // Check only the mainAxis.\n        d.overflows[0], d.overflows];\n      }).sort((a, b) => a[1] - b[1]);\n      const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n      // Aligned placements should not check their opposite crossAxis\n      // side.\n      getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n      const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n      if (resetPlacement !== placement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: resetPlacement\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'flip',\n    options,\n    async fn(state) {\n      var _middlewareData$arrow, _middlewareData$flip;\n      const {\n        placement,\n        middlewareData,\n        rects,\n        initialPlacement,\n        platform,\n        elements\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true,\n        fallbackPlacements: specifiedFallbackPlacements,\n        fallbackStrategy = 'bestFit',\n        fallbackAxisSideDirection = 'none',\n        flipAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n\n      // If a reset by the arrow was caused due to an alignment offset being\n      // added, we should skip any logic now since `flip()` has already done its\n      // work.\n      // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n      if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      const side = getSide(placement);\n      const initialSideAxis = getSideAxis(initialPlacement);\n      const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n      const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n      const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n      const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n      if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n        fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n      }\n      const placements = [initialPlacement, ...fallbackPlacements];\n      const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n      const overflows = [];\n      let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n      if (checkMainAxis) {\n        overflows.push(overflow[side]);\n      }\n      if (checkCrossAxis) {\n        const sides = getAlignmentSides(placement, rects, rtl);\n        overflows.push(overflow[sides[0]], overflow[sides[1]]);\n      }\n      overflowsData = [...overflowsData, {\n        placement,\n        overflows\n      }];\n\n      // One or more sides is overflowing.\n      if (!overflows.every(side => side <= 0)) {\n        var _middlewareData$flip2, _overflowsData$filter;\n        const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n        const nextPlacement = placements[nextIndex];\n        if (nextPlacement) {\n          const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;\n          if (!ignoreCrossAxisOverflow ||\n          // We leave the current main axis only if every placement on that axis\n          // overflows the main axis.\n          overflowsData.every(d => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {\n            // Try next placement and re-run the lifecycle.\n            return {\n              data: {\n                index: nextIndex,\n                overflows: overflowsData\n              },\n              reset: {\n                placement: nextPlacement\n              }\n            };\n          }\n        }\n\n        // First, find the candidates that fit on the mainAxis side of overflow,\n        // then find the placement that fits the best on the main crossAxis side.\n        let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n        // Otherwise fallback.\n        if (!resetPlacement) {\n          switch (fallbackStrategy) {\n            case 'bestFit':\n              {\n                var _overflowsData$filter2;\n                const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n                  if (hasFallbackAxisSideDirection) {\n                    const currentSideAxis = getSideAxis(d.placement);\n                    return currentSideAxis === initialSideAxis ||\n                    // Create a bias to the `y` side axis due to horizontal\n                    // reading directions favoring greater width.\n                    currentSideAxis === 'y';\n                  }\n                  return true;\n                }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n                if (placement) {\n                  resetPlacement = placement;\n                }\n                break;\n              }\n            case 'initialPlacement':\n              resetPlacement = initialPlacement;\n              break;\n          }\n        }\n        if (placement !== resetPlacement) {\n          return {\n            reset: {\n              placement: resetPlacement\n            }\n          };\n        }\n      }\n      return {};\n    }\n  };\n};\n\nfunction getSideOffsets(overflow, rect) {\n  return {\n    top: overflow.top - rect.height,\n    right: overflow.right - rect.width,\n    bottom: overflow.bottom - rect.height,\n    left: overflow.left - rect.width\n  };\n}\nfunction isAnySideFullyClipped(overflow) {\n  return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'hide',\n    options,\n    async fn(state) {\n      const {\n        rects,\n        platform\n      } = state;\n      const {\n        strategy = 'referenceHidden',\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      switch (strategy) {\n        case 'referenceHidden':\n          {\n            const overflow = await platform.detectOverflow(state, {\n              ...detectOverflowOptions,\n              elementContext: 'reference'\n            });\n            const offsets = getSideOffsets(overflow, rects.reference);\n            return {\n              data: {\n                referenceHiddenOffsets: offsets,\n                referenceHidden: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        case 'escaped':\n          {\n            const overflow = await platform.detectOverflow(state, {\n              ...detectOverflowOptions,\n              altBoundary: true\n            });\n            const offsets = getSideOffsets(overflow, rects.floating);\n            return {\n              data: {\n                escapedOffsets: offsets,\n                escaped: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        default:\n          {\n            return {};\n          }\n      }\n    }\n  };\n};\n\nfunction getBoundingRect(rects) {\n  const minX = min(...rects.map(rect => rect.left));\n  const minY = min(...rects.map(rect => rect.top));\n  const maxX = max(...rects.map(rect => rect.right));\n  const maxY = max(...rects.map(rect => rect.bottom));\n  return {\n    x: minX,\n    y: minY,\n    width: maxX - minX,\n    height: maxY - minY\n  };\n}\nfunction getRectsByLine(rects) {\n  const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n  const groups = [];\n  let prevRect = null;\n  for (let i = 0; i < sortedRects.length; i++) {\n    const rect = sortedRects[i];\n    if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n      groups.push([rect]);\n    } else {\n      groups[groups.length - 1].push(rect);\n    }\n    prevRect = rect;\n  }\n  return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'inline',\n    options,\n    async fn(state) {\n      const {\n        placement,\n        elements,\n        rects,\n        platform,\n        strategy\n      } = state;\n      // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n      // ClientRect's bounds, despite the event listener being triggered. A\n      // padding of 2 seems to handle this issue.\n      const {\n        padding = 2,\n        x,\n        y\n      } = evaluate(options, state);\n      const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n      const clientRects = getRectsByLine(nativeClientRects);\n      const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n      const paddingObject = getPaddingObject(padding);\n      function getBoundingClientRect() {\n        // There are two rects and they are disjoined.\n        if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n          // Find the first rect in which the point is fully inside.\n          return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n        }\n\n        // There are 2 or more connected rects.\n        if (clientRects.length >= 2) {\n          if (getSideAxis(placement) === 'y') {\n            const firstRect = clientRects[0];\n            const lastRect = clientRects[clientRects.length - 1];\n            const isTop = getSide(placement) === 'top';\n            const top = firstRect.top;\n            const bottom = lastRect.bottom;\n            const left = isTop ? firstRect.left : lastRect.left;\n            const right = isTop ? firstRect.right : lastRect.right;\n            const width = right - left;\n            const height = bottom - top;\n            return {\n              top,\n              bottom,\n              left,\n              right,\n              width,\n              height,\n              x: left,\n              y: top\n            };\n          }\n          const isLeftSide = getSide(placement) === 'left';\n          const maxRight = max(...clientRects.map(rect => rect.right));\n          const minLeft = min(...clientRects.map(rect => rect.left));\n          const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n          const top = measureRects[0].top;\n          const bottom = measureRects[measureRects.length - 1].bottom;\n          const left = minLeft;\n          const right = maxRight;\n          const width = right - left;\n          const height = bottom - top;\n          return {\n            top,\n            bottom,\n            left,\n            right,\n            width,\n            height,\n            x: left,\n            y: top\n          };\n        }\n        return fallback;\n      }\n      const resetRects = await platform.getElementRects({\n        reference: {\n          getBoundingClientRect\n        },\n        floating: elements.floating,\n        strategy\n      });\n      if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n        return {\n          reset: {\n            rects: resetRects\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\nconst originSides = /*#__PURE__*/new Set(['left', 'top']);\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n  const {\n    placement,\n    platform,\n    elements\n  } = state;\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n  const side = getSide(placement);\n  const alignment = getAlignment(placement);\n  const isVertical = getSideAxis(placement) === 'y';\n  const mainAxisMulti = originSides.has(side) ? -1 : 1;\n  const crossAxisMulti = rtl && isVertical ? -1 : 1;\n  const rawValue = evaluate(options, state);\n\n  // eslint-disable-next-line prefer-const\n  let {\n    mainAxis,\n    crossAxis,\n    alignmentAxis\n  } = typeof rawValue === 'number' ? {\n    mainAxis: rawValue,\n    crossAxis: 0,\n    alignmentAxis: null\n  } : {\n    mainAxis: rawValue.mainAxis || 0,\n    crossAxis: rawValue.crossAxis || 0,\n    alignmentAxis: rawValue.alignmentAxis\n  };\n  if (alignment && typeof alignmentAxis === 'number') {\n    crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n  }\n  return isVertical ? {\n    x: crossAxis * crossAxisMulti,\n    y: mainAxis * mainAxisMulti\n  } : {\n    x: mainAxis * mainAxisMulti,\n    y: crossAxis * crossAxisMulti\n  };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n  if (options === void 0) {\n    options = 0;\n  }\n  return {\n    name: 'offset',\n    options,\n    async fn(state) {\n      var _middlewareData$offse, _middlewareData$arrow;\n      const {\n        x,\n        y,\n        placement,\n        middlewareData\n      } = state;\n      const diffCoords = await convertValueToCoords(state, options);\n\n      // If the placement is the same and the arrow caused an alignment offset\n      // then we don't need to change the positioning coordinates.\n      if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      return {\n        x: x + diffCoords.x,\n        y: y + diffCoords.y,\n        data: {\n          ...diffCoords,\n          placement\n        }\n      };\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'shift',\n    options,\n    async fn(state) {\n      const {\n        x,\n        y,\n        placement,\n        platform\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = false,\n        limiter = {\n          fn: _ref => {\n            let {\n              x,\n              y\n            } = _ref;\n            return {\n              x,\n              y\n            };\n          }\n        },\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n      const crossAxis = getSideAxis(getSide(placement));\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      if (checkMainAxis) {\n        const minSide = mainAxis === 'y' ? 'top' : 'left';\n        const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n        const min = mainAxisCoord + overflow[minSide];\n        const max = mainAxisCoord - overflow[maxSide];\n        mainAxisCoord = clamp(min, mainAxisCoord, max);\n      }\n      if (checkCrossAxis) {\n        const minSide = crossAxis === 'y' ? 'top' : 'left';\n        const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n        const min = crossAxisCoord + overflow[minSide];\n        const max = crossAxisCoord - overflow[maxSide];\n        crossAxisCoord = clamp(min, crossAxisCoord, max);\n      }\n      const limitedCoords = limiter.fn({\n        ...state,\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      });\n      return {\n        ...limitedCoords,\n        data: {\n          x: limitedCoords.x - x,\n          y: limitedCoords.y - y,\n          enabled: {\n            [mainAxis]: checkMainAxis,\n            [crossAxis]: checkCrossAxis\n          }\n        }\n      };\n    }\n  };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    options,\n    fn(state) {\n      const {\n        x,\n        y,\n        placement,\n        rects,\n        middlewareData\n      } = state;\n      const {\n        offset = 0,\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const crossAxis = getSideAxis(placement);\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      const rawOffset = evaluate(offset, state);\n      const computedOffset = typeof rawOffset === 'number' ? {\n        mainAxis: rawOffset,\n        crossAxis: 0\n      } : {\n        mainAxis: 0,\n        crossAxis: 0,\n        ...rawOffset\n      };\n      if (checkMainAxis) {\n        const len = mainAxis === 'y' ? 'height' : 'width';\n        const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n        const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n        if (mainAxisCoord < limitMin) {\n          mainAxisCoord = limitMin;\n        } else if (mainAxisCoord > limitMax) {\n          mainAxisCoord = limitMax;\n        }\n      }\n      if (checkCrossAxis) {\n        var _middlewareData$offse, _middlewareData$offse2;\n        const len = mainAxis === 'y' ? 'width' : 'height';\n        const isOriginSide = originSides.has(getSide(placement));\n        const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n        const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n        if (crossAxisCoord < limitMin) {\n          crossAxisCoord = limitMin;\n        } else if (crossAxisCoord > limitMax) {\n          crossAxisCoord = limitMax;\n        }\n      }\n      return {\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      };\n    }\n  };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'size',\n    options,\n    async fn(state) {\n      var _state$middlewareData, _state$middlewareData2;\n      const {\n        placement,\n        rects,\n        platform,\n        elements\n      } = state;\n      const {\n        apply = () => {},\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n      const side = getSide(placement);\n      const alignment = getAlignment(placement);\n      const isYAxis = getSideAxis(placement) === 'y';\n      const {\n        width,\n        height\n      } = rects.floating;\n      let heightSide;\n      let widthSide;\n      if (side === 'top' || side === 'bottom') {\n        heightSide = side;\n        widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n      } else {\n        widthSide = side;\n        heightSide = alignment === 'end' ? 'top' : 'bottom';\n      }\n      const maximumClippingHeight = height - overflow.top - overflow.bottom;\n      const maximumClippingWidth = width - overflow.left - overflow.right;\n      const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n      const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n      const noShift = !state.middlewareData.shift;\n      let availableHeight = overflowAvailableHeight;\n      let availableWidth = overflowAvailableWidth;\n      if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\n        availableWidth = maximumClippingWidth;\n      }\n      if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\n        availableHeight = maximumClippingHeight;\n      }\n      if (noShift && !alignment) {\n        const xMin = max(overflow.left, 0);\n        const xMax = max(overflow.right, 0);\n        const yMin = max(overflow.top, 0);\n        const yMax = max(overflow.bottom, 0);\n        if (isYAxis) {\n          availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n        } else {\n          availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n        }\n      }\n      await apply({\n        ...state,\n        availableWidth,\n        availableHeight\n      });\n      const nextDimensions = await platform.getDimensions(elements.floating);\n      if (width !== nextDimensions.width || height !== nextDimensions.height) {\n        return {\n          reset: {\n            rects: true\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","function hasWindow() {\n  return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n  if (isNode(node)) {\n    return (node.nodeName || '').toLowerCase();\n  }\n  // Mocked nodes in testing environments may not be instances of Node. By\n  // returning `#document` an infinite loop won't occur.\n  // https://github.com/floating-ui/floating-ui/issues/2317\n  return '#document';\n}\nfunction getWindow(node) {\n  var _node$ownerDocument;\n  return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n  var _ref;\n  return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n  if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n  return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n  const {\n    overflow,\n    overflowX,\n    overflowY,\n    display\n  } = getComputedStyle(element);\n  return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && display !== 'inline' && display !== 'contents';\n}\nfunction isTableElement(element) {\n  return /^(table|td|th)$/.test(getNodeName(element));\n}\nfunction isTopLayer(element) {\n  try {\n    if (element.matches(':popover-open')) {\n      return true;\n    }\n  } catch (_e) {\n    // no-op\n  }\n  try {\n    return element.matches(':modal');\n  } catch (_e) {\n    return false;\n  }\n}\nconst willChangeRe = /transform|translate|scale|rotate|perspective|filter/;\nconst containRe = /paint|layout|strict|content/;\nconst isNotNone = value => !!value && value !== 'none';\nlet isWebKitValue;\nfunction isContainingBlock(elementOrCss) {\n  const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n  return isNotNone(css.transform) || isNotNone(css.translate) || isNotNone(css.scale) || isNotNone(css.rotate) || isNotNone(css.perspective) || !isWebKit() && (isNotNone(css.backdropFilter) || isNotNone(css.filter)) || willChangeRe.test(css.willChange || '') || containRe.test(css.contain || '');\n}\nfunction getContainingBlock(element) {\n  let currentNode = getParentNode(element);\n  while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    if (isContainingBlock(currentNode)) {\n      return currentNode;\n    } else if (isTopLayer(currentNode)) {\n      return null;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  return null;\n}\nfunction isWebKit() {\n  if (isWebKitValue == null) {\n    isWebKitValue = typeof CSS !== 'undefined' && CSS.supports && CSS.supports('-webkit-backdrop-filter', 'none');\n  }\n  return isWebKitValue;\n}\nfunction isLastTraversableNode(node) {\n  return /^(html|body|#document)$/.test(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n  if (isElement(element)) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n  return {\n    scrollLeft: element.scrollX,\n    scrollTop: element.scrollY\n  };\n}\nfunction getParentNode(node) {\n  if (getNodeName(node) === 'html') {\n    return node;\n  }\n  const result =\n  // Step into the shadow DOM of the parent of a slotted node.\n  node.assignedSlot ||\n  // DOM Element detected.\n  node.parentNode ||\n  // ShadowRoot detected.\n  isShadowRoot(node) && node.host ||\n  // Fallback.\n  getDocumentElement(node);\n  return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n  const parentNode = getParentNode(node);\n  if (isLastTraversableNode(parentNode)) {\n    return node.ownerDocument ? node.ownerDocument.body : node.body;\n  }\n  if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n    return parentNode;\n  }\n  return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n  var _node$ownerDocument2;\n  if (list === void 0) {\n    list = [];\n  }\n  if (traverseIframes === void 0) {\n    traverseIframes = true;\n  }\n  const scrollableAncestor = getNearestOverflowAncestor(node);\n  const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n  const win = getWindow(scrollableAncestor);\n  if (isBody) {\n    const frameElement = getFrameElement(win);\n    return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n  } else {\n    return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n  }\n}\nfunction getFrameElement(win) {\n  return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n","import { rectToClientRect, arrow as arrow$1, autoPlacement as autoPlacement$1, detectOverflow as detectOverflow$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle as getComputedStyle$1, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n  const css = getComputedStyle$1(element);\n  // In testing environments, the `width` and `height` properties are empty\n  // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n  let width = parseFloat(css.width) || 0;\n  let height = parseFloat(css.height) || 0;\n  const hasOffset = isHTMLElement(element);\n  const offsetWidth = hasOffset ? element.offsetWidth : width;\n  const offsetHeight = hasOffset ? element.offsetHeight : height;\n  const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n  if (shouldFallback) {\n    width = offsetWidth;\n    height = offsetHeight;\n  }\n  return {\n    width,\n    height,\n    $: shouldFallback\n  };\n}\n\nfunction unwrapElement(element) {\n  return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n  const domElement = unwrapElement(element);\n  if (!isHTMLElement(domElement)) {\n    return createCoords(1);\n  }\n  const rect = domElement.getBoundingClientRect();\n  const {\n    width,\n    height,\n    $\n  } = getCssDimensions(domElement);\n  let x = ($ ? round(rect.width) : rect.width) / width;\n  let y = ($ ? round(rect.height) : rect.height) / height;\n\n  // 0, NaN, or Infinity should always fallback to 1.\n\n  if (!x || !Number.isFinite(x)) {\n    x = 1;\n  }\n  if (!y || !Number.isFinite(y)) {\n    y = 1;\n  }\n  return {\n    x,\n    y\n  };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n  const win = getWindow(element);\n  if (!isWebKit() || !win.visualViewport) {\n    return noOffsets;\n  }\n  return {\n    x: win.visualViewport.offsetLeft,\n    y: win.visualViewport.offsetTop\n  };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n  if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n    return false;\n  }\n  return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n  const clientRect = element.getBoundingClientRect();\n  const domElement = unwrapElement(element);\n  let scale = createCoords(1);\n  if (includeScale) {\n    if (offsetParent) {\n      if (isElement(offsetParent)) {\n        scale = getScale(offsetParent);\n      }\n    } else {\n      scale = getScale(element);\n    }\n  }\n  const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n  let x = (clientRect.left + visualOffsets.x) / scale.x;\n  let y = (clientRect.top + visualOffsets.y) / scale.y;\n  let width = clientRect.width / scale.x;\n  let height = clientRect.height / scale.y;\n  if (domElement) {\n    const win = getWindow(domElement);\n    const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n    let currentWin = win;\n    let currentIFrame = getFrameElement(currentWin);\n    while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n      const iframeScale = getScale(currentIFrame);\n      const iframeRect = currentIFrame.getBoundingClientRect();\n      const css = getComputedStyle$1(currentIFrame);\n      const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n      const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n      x *= iframeScale.x;\n      y *= iframeScale.y;\n      width *= iframeScale.x;\n      height *= iframeScale.y;\n      x += left;\n      y += top;\n      currentWin = getWindow(currentIFrame);\n      currentIFrame = getFrameElement(currentWin);\n    }\n  }\n  return rectToClientRect({\n    width,\n    height,\n    x,\n    y\n  });\n}\n\n// If <html> has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n  const leftScroll = getNodeScroll(element).scrollLeft;\n  if (!rect) {\n    return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n  }\n  return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll) {\n  const htmlRect = documentElement.getBoundingClientRect();\n  const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);\n  const y = htmlRect.top + scroll.scrollTop;\n  return {\n    x,\n    y\n  };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n  let {\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  } = _ref;\n  const isFixed = strategy === 'fixed';\n  const documentElement = getDocumentElement(offsetParent);\n  const topLayer = elements ? isTopLayer(elements.floating) : false;\n  if (offsetParent === documentElement || topLayer && isFixed) {\n    return rect;\n  }\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  let scale = createCoords(1);\n  const offsets = createCoords(0);\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isOffsetParentAnElement) {\n      const offsetRect = getBoundingClientRect(offsetParent);\n      scale = getScale(offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    }\n  }\n  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n  return {\n    width: rect.width * scale.x,\n    height: rect.height * scale.y,\n    x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,\n    y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n  };\n}\n\nfunction getClientRects(element) {\n  return Array.from(element.getClientRects());\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n  const html = getDocumentElement(element);\n  const scroll = getNodeScroll(element);\n  const body = element.ownerDocument.body;\n  const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n  const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n  let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n  const y = -scroll.scrollTop;\n  if (getComputedStyle$1(body).direction === 'rtl') {\n    x += max(html.clientWidth, body.clientWidth) - width;\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\n// Safety check: ensure the scrollbar space is reasonable in case this\n// calculation is affected by unusual styles.\n// Most scrollbars leave 15-18px of space.\nconst SCROLLBAR_MAX = 25;\nfunction getViewportRect(element, strategy) {\n  const win = getWindow(element);\n  const html = getDocumentElement(element);\n  const visualViewport = win.visualViewport;\n  let width = html.clientWidth;\n  let height = html.clientHeight;\n  let x = 0;\n  let y = 0;\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    const visualViewportBased = isWebKit();\n    if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n  const windowScrollbarX = getWindowScrollBarX(html);\n  // <html> `overflow: hidden` + `scrollbar-gutter: stable` reduces the\n  // visual width of the <html> but this is not considered in the size\n  // of `html.clientWidth`.\n  if (windowScrollbarX <= 0) {\n    const doc = html.ownerDocument;\n    const body = doc.body;\n    const bodyStyles = getComputedStyle(body);\n    const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;\n    const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);\n    if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {\n      width -= clippingStableScrollbarWidth;\n    }\n  } else if (windowScrollbarX <= SCROLLBAR_MAX) {\n    // If the <body> scrollbar is on the left, the width needs to be extended\n    // by the scrollbar amount so there isn't extra space on the right.\n    width += windowScrollbarX;\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n  const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n  const top = clientRect.top + element.clientTop;\n  const left = clientRect.left + element.clientLeft;\n  const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n  const width = element.clientWidth * scale.x;\n  const height = element.clientHeight * scale.y;\n  const x = left * scale.x;\n  const y = top * scale.y;\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n  let rect;\n  if (clippingAncestor === 'viewport') {\n    rect = getViewportRect(element, strategy);\n  } else if (clippingAncestor === 'document') {\n    rect = getDocumentRect(getDocumentElement(element));\n  } else if (isElement(clippingAncestor)) {\n    rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n  } else {\n    const visualOffsets = getVisualOffsets(element);\n    rect = {\n      x: clippingAncestor.x - visualOffsets.x,\n      y: clippingAncestor.y - visualOffsets.y,\n      width: clippingAncestor.width,\n      height: clippingAncestor.height\n    };\n  }\n  return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n  const parentNode = getParentNode(element);\n  if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n    return false;\n  }\n  return getComputedStyle$1(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n  const cachedResult = cache.get(element);\n  if (cachedResult) {\n    return cachedResult;\n  }\n  let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n  let currentContainingBlockComputedStyle = null;\n  const elementIsFixed = getComputedStyle$1(element).position === 'fixed';\n  let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    const computedStyle = getComputedStyle$1(currentNode);\n    const currentNodeIsContaining = isContainingBlock(currentNode);\n    if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n      currentContainingBlockComputedStyle = null;\n    }\n    const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && (currentContainingBlockComputedStyle.position === 'absolute' || currentContainingBlockComputedStyle.position === 'fixed') || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n    if (shouldDropCurrentNode) {\n      // Drop non-containing blocks.\n      result = result.filter(ancestor => ancestor !== currentNode);\n    } else {\n      // Record last containing block for next iteration.\n      currentContainingBlockComputedStyle = computedStyle;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  cache.set(element, result);\n  return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n  let {\n    element,\n    boundary,\n    rootBoundary,\n    strategy\n  } = _ref;\n  const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n  const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n  const firstRect = getClientRectFromClippingAncestor(element, clippingAncestors[0], strategy);\n  let top = firstRect.top;\n  let right = firstRect.right;\n  let bottom = firstRect.bottom;\n  let left = firstRect.left;\n  for (let i = 1; i < clippingAncestors.length; i++) {\n    const rect = getClientRectFromClippingAncestor(element, clippingAncestors[i], strategy);\n    top = max(rect.top, top);\n    right = min(rect.right, right);\n    bottom = min(rect.bottom, bottom);\n    left = max(rect.left, left);\n  }\n  return {\n    width: right - left,\n    height: bottom - top,\n    x: left,\n    y: top\n  };\n}\n\nfunction getDimensions(element) {\n  const {\n    width,\n    height\n  } = getCssDimensions(element);\n  return {\n    width,\n    height\n  };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  const isFixed = strategy === 'fixed';\n  const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  const offsets = createCoords(0);\n\n  // If the <body> scrollbar appears on the left (e.g. RTL systems). Use\n  // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n  function setLeftRTLScrollbarOffset() {\n    offsets.x = getWindowScrollBarX(documentElement);\n  }\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isOffsetParentAnElement) {\n      const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    } else if (documentElement) {\n      setLeftRTLScrollbarOffset();\n    }\n  }\n  if (isFixed && !isOffsetParentAnElement && documentElement) {\n    setLeftRTLScrollbarOffset();\n  }\n  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n  const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n  const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n  return {\n    x,\n    y,\n    width: rect.width,\n    height: rect.height\n  };\n}\n\nfunction isStaticPositioned(element) {\n  return getComputedStyle$1(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n  if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {\n    return null;\n  }\n  if (polyfill) {\n    return polyfill(element);\n  }\n  let rawOffsetParent = element.offsetParent;\n\n  // Firefox returns the <html> element as the offsetParent if it's non-static,\n  // while Chrome and Safari return the <body> element. The <body> element must\n  // be used to perform the correct calculations even if the <html> element is\n  // non-static.\n  if (getDocumentElement(element) === rawOffsetParent) {\n    rawOffsetParent = rawOffsetParent.ownerDocument.body;\n  }\n  return rawOffsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n  const win = getWindow(element);\n  if (isTopLayer(element)) {\n    return win;\n  }\n  if (!isHTMLElement(element)) {\n    let svgOffsetParent = getParentNode(element);\n    while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n      if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n        return svgOffsetParent;\n      }\n      svgOffsetParent = getParentNode(svgOffsetParent);\n    }\n    return win;\n  }\n  let offsetParent = getTrueOffsetParent(element, polyfill);\n  while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n    offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n  }\n  if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n    return win;\n  }\n  return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n  const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n  const getDimensionsFn = this.getDimensions;\n  const floatingDimensions = await getDimensionsFn(data.floating);\n  return {\n    reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n    floating: {\n      x: 0,\n      y: 0,\n      width: floatingDimensions.width,\n      height: floatingDimensions.height\n    }\n  };\n};\n\nfunction isRTL(element) {\n  return getComputedStyle$1(element).direction === 'rtl';\n}\n\nconst platform = {\n  convertOffsetParentRelativeRectToViewportRelativeRect,\n  getDocumentElement,\n  getClippingRect,\n  getOffsetParent,\n  getElementRects,\n  getClientRects,\n  getDimensions,\n  getScale,\n  isElement,\n  isRTL\n};\n\nfunction rectsAreEqual(a, b) {\n  return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n  let io = null;\n  let timeoutId;\n  const root = getDocumentElement(element);\n  function cleanup() {\n    var _io;\n    clearTimeout(timeoutId);\n    (_io = io) == null || _io.disconnect();\n    io = null;\n  }\n  function refresh(skip, threshold) {\n    if (skip === void 0) {\n      skip = false;\n    }\n    if (threshold === void 0) {\n      threshold = 1;\n    }\n    cleanup();\n    const elementRectForRootMargin = element.getBoundingClientRect();\n    const {\n      left,\n      top,\n      width,\n      height\n    } = elementRectForRootMargin;\n    if (!skip) {\n      onMove();\n    }\n    if (!width || !height) {\n      return;\n    }\n    const insetTop = floor(top);\n    const insetRight = floor(root.clientWidth - (left + width));\n    const insetBottom = floor(root.clientHeight - (top + height));\n    const insetLeft = floor(left);\n    const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n    const options = {\n      rootMargin,\n      threshold: max(0, min(1, threshold)) || 1\n    };\n    let isFirstUpdate = true;\n    function handleObserve(entries) {\n      const ratio = entries[0].intersectionRatio;\n      if (ratio !== threshold) {\n        if (!isFirstUpdate) {\n          return refresh();\n        }\n        if (!ratio) {\n          // If the reference is clipped, the ratio is 0. Throttle the refresh\n          // to prevent an infinite loop of updates.\n          timeoutId = setTimeout(() => {\n            refresh(false, 1e-7);\n          }, 1000);\n        } else {\n          refresh(false, ratio);\n        }\n      }\n      if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n        // It's possible that even though the ratio is reported as 1, the\n        // element is not actually fully within the IntersectionObserver's root\n        // area anymore. This can happen under performance constraints. This may\n        // be a bug in the browser's IntersectionObserver implementation. To\n        // work around this, we compare the element's bounding rect now with\n        // what it was at the time we created the IntersectionObserver. If they\n        // are not equal then the element moved, so we refresh.\n        refresh();\n      }\n      isFirstUpdate = false;\n    }\n\n    // Older browsers don't support a `document` as the root and will throw an\n    // error.\n    try {\n      io = new IntersectionObserver(handleObserve, {\n        ...options,\n        // Handle <iframe>s\n        root: root.ownerDocument\n      });\n    } catch (_e) {\n      io = new IntersectionObserver(handleObserve, options);\n    }\n    io.observe(element);\n  }\n  refresh(true);\n  return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    ancestorScroll = true,\n    ancestorResize = true,\n    elementResize = typeof ResizeObserver === 'function',\n    layoutShift = typeof IntersectionObserver === 'function',\n    animationFrame = false\n  } = options;\n  const referenceEl = unwrapElement(reference);\n  const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...(floating ? getOverflowAncestors(floating) : [])] : [];\n  ancestors.forEach(ancestor => {\n    ancestorScroll && ancestor.addEventListener('scroll', update, {\n      passive: true\n    });\n    ancestorResize && ancestor.addEventListener('resize', update);\n  });\n  const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n  let reobserveFrame = -1;\n  let resizeObserver = null;\n  if (elementResize) {\n    resizeObserver = new ResizeObserver(_ref => {\n      let [firstEntry] = _ref;\n      if (firstEntry && firstEntry.target === referenceEl && resizeObserver && floating) {\n        // Prevent update loops when using the `size` middleware.\n        // https://github.com/floating-ui/floating-ui/issues/1740\n        resizeObserver.unobserve(floating);\n        cancelAnimationFrame(reobserveFrame);\n        reobserveFrame = requestAnimationFrame(() => {\n          var _resizeObserver;\n          (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n        });\n      }\n      update();\n    });\n    if (referenceEl && !animationFrame) {\n      resizeObserver.observe(referenceEl);\n    }\n    if (floating) {\n      resizeObserver.observe(floating);\n    }\n  }\n  let frameId;\n  let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n  if (animationFrame) {\n    frameLoop();\n  }\n  function frameLoop() {\n    const nextRefRect = getBoundingClientRect(reference);\n    if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {\n      update();\n    }\n    prevRefRect = nextRefRect;\n    frameId = requestAnimationFrame(frameLoop);\n  }\n  update();\n  return () => {\n    var _resizeObserver2;\n    ancestors.forEach(ancestor => {\n      ancestorScroll && ancestor.removeEventListener('scroll', update);\n      ancestorResize && ancestor.removeEventListener('resize', update);\n    });\n    cleanupIo == null || cleanupIo();\n    (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n    resizeObserver = null;\n    if (animationFrame) {\n      cancelAnimationFrame(frameId);\n    }\n  };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n  // This caches the expensive `getClippingElementAncestors` function so that\n  // multiple lifecycle resets re-use the same result. It only lives for a\n  // single call. If other functions become expensive, we can add them as well.\n  const cache = new Map();\n  const mergedOptions = {\n    platform,\n    ...options\n  };\n  const platformWithCache = {\n    ...mergedOptions.platform,\n    _c: cache\n  };\n  return computePosition$1(reference, floating, {\n    ...mergedOptions,\n    platform: platformWithCache\n  });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n","import { computePosition, arrow as arrow$2, autoPlacement as autoPlacement$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1 } from '@floating-ui/dom';\nexport { autoUpdate, computePosition, detectOverflow, getOverflowAncestors, platform } from '@floating-ui/dom';\nimport * as React from 'react';\nimport { useLayoutEffect } from 'react';\nimport * as ReactDOM from 'react-dom';\n\nvar isClient = typeof document !== 'undefined';\n\nvar noop = function noop() {};\nvar index = isClient ? useLayoutEffect : noop;\n\n// Fork of `fast-deep-equal` that only does the comparisons we need and compares\n// functions\nfunction deepEqual(a, b) {\n  if (a === b) {\n    return true;\n  }\n  if (typeof a !== typeof b) {\n    return false;\n  }\n  if (typeof a === 'function' && a.toString() === b.toString()) {\n    return true;\n  }\n  let length;\n  let i;\n  let keys;\n  if (a && b && typeof a === 'object') {\n    if (Array.isArray(a)) {\n      length = a.length;\n      if (length !== b.length) return false;\n      for (i = length; i-- !== 0;) {\n        if (!deepEqual(a[i], b[i])) {\n          return false;\n        }\n      }\n      return true;\n    }\n    keys = Object.keys(a);\n    length = keys.length;\n    if (length !== Object.keys(b).length) {\n      return false;\n    }\n    for (i = length; i-- !== 0;) {\n      if (!{}.hasOwnProperty.call(b, keys[i])) {\n        return false;\n      }\n    }\n    for (i = length; i-- !== 0;) {\n      const key = keys[i];\n      if (key === '_owner' && a.$$typeof) {\n        continue;\n      }\n      if (!deepEqual(a[key], b[key])) {\n        return false;\n      }\n    }\n    return true;\n  }\n  return a !== a && b !== b;\n}\n\nfunction getDPR(element) {\n  if (typeof window === 'undefined') {\n    return 1;\n  }\n  const win = element.ownerDocument.defaultView || window;\n  return win.devicePixelRatio || 1;\n}\n\nfunction roundByDPR(element, value) {\n  const dpr = getDPR(element);\n  return Math.round(value * dpr) / dpr;\n}\n\nfunction useLatestRef(value) {\n  const ref = React.useRef(value);\n  index(() => {\n    ref.current = value;\n  });\n  return ref;\n}\n\n/**\n * Provides data to position a floating element.\n * @see https://floating-ui.com/docs/useFloating\n */\nfunction useFloating(options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    placement = 'bottom',\n    strategy = 'absolute',\n    middleware = [],\n    platform,\n    elements: {\n      reference: externalReference,\n      floating: externalFloating\n    } = {},\n    transform = true,\n    whileElementsMounted,\n    open\n  } = options;\n  const [data, setData] = React.useState({\n    x: 0,\n    y: 0,\n    strategy,\n    placement,\n    middlewareData: {},\n    isPositioned: false\n  });\n  const [latestMiddleware, setLatestMiddleware] = React.useState(middleware);\n  if (!deepEqual(latestMiddleware, middleware)) {\n    setLatestMiddleware(middleware);\n  }\n  const [_reference, _setReference] = React.useState(null);\n  const [_floating, _setFloating] = React.useState(null);\n  const setReference = React.useCallback(node => {\n    if (node !== referenceRef.current) {\n      referenceRef.current = node;\n      _setReference(node);\n    }\n  }, []);\n  const setFloating = React.useCallback(node => {\n    if (node !== floatingRef.current) {\n      floatingRef.current = node;\n      _setFloating(node);\n    }\n  }, []);\n  const referenceEl = externalReference || _reference;\n  const floatingEl = externalFloating || _floating;\n  const referenceRef = React.useRef(null);\n  const floatingRef = React.useRef(null);\n  const dataRef = React.useRef(data);\n  const hasWhileElementsMounted = whileElementsMounted != null;\n  const whileElementsMountedRef = useLatestRef(whileElementsMounted);\n  const platformRef = useLatestRef(platform);\n  const openRef = useLatestRef(open);\n  const update = React.useCallback(() => {\n    if (!referenceRef.current || !floatingRef.current) {\n      return;\n    }\n    const config = {\n      placement,\n      strategy,\n      middleware: latestMiddleware\n    };\n    if (platformRef.current) {\n      config.platform = platformRef.current;\n    }\n    computePosition(referenceRef.current, floatingRef.current, config).then(data => {\n      const fullData = {\n        ...data,\n        // The floating element's position may be recomputed while it's closed\n        // but still mounted (such as when transitioning out). To ensure\n        // `isPositioned` will be `false` initially on the next open, avoid\n        // setting it to `true` when `open === false` (must be specified).\n        isPositioned: openRef.current !== false\n      };\n      if (isMountedRef.current && !deepEqual(dataRef.current, fullData)) {\n        dataRef.current = fullData;\n        ReactDOM.flushSync(() => {\n          setData(fullData);\n        });\n      }\n    });\n  }, [latestMiddleware, placement, strategy, platformRef, openRef]);\n  index(() => {\n    if (open === false && dataRef.current.isPositioned) {\n      dataRef.current.isPositioned = false;\n      setData(data => ({\n        ...data,\n        isPositioned: false\n      }));\n    }\n  }, [open]);\n  const isMountedRef = React.useRef(false);\n  index(() => {\n    isMountedRef.current = true;\n    return () => {\n      isMountedRef.current = false;\n    };\n  }, []);\n  index(() => {\n    if (referenceEl) referenceRef.current = referenceEl;\n    if (floatingEl) floatingRef.current = floatingEl;\n    if (referenceEl && floatingEl) {\n      if (whileElementsMountedRef.current) {\n        return whileElementsMountedRef.current(referenceEl, floatingEl, update);\n      }\n      update();\n    }\n  }, [referenceEl, floatingEl, update, whileElementsMountedRef, hasWhileElementsMounted]);\n  const refs = React.useMemo(() => ({\n    reference: referenceRef,\n    floating: floatingRef,\n    setReference,\n    setFloating\n  }), [setReference, setFloating]);\n  const elements = React.useMemo(() => ({\n    reference: referenceEl,\n    floating: floatingEl\n  }), [referenceEl, floatingEl]);\n  const floatingStyles = React.useMemo(() => {\n    const initialStyles = {\n      position: strategy,\n      left: 0,\n      top: 0\n    };\n    if (!elements.floating) {\n      return initialStyles;\n    }\n    const x = roundByDPR(elements.floating, data.x);\n    const y = roundByDPR(elements.floating, data.y);\n    if (transform) {\n      return {\n        ...initialStyles,\n        transform: \"translate(\" + x + \"px, \" + y + \"px)\",\n        ...(getDPR(elements.floating) >= 1.5 && {\n          willChange: 'transform'\n        })\n      };\n    }\n    return {\n      position: strategy,\n      left: x,\n      top: y\n    };\n  }, [strategy, transform, elements.floating, data.x, data.y]);\n  return React.useMemo(() => ({\n    ...data,\n    update,\n    refs,\n    elements,\n    floatingStyles\n  }), [data, update, refs, elements, floatingStyles]);\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * This wraps the core `arrow` middleware to allow React refs as the element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow$1 = options => {\n  function isRef(value) {\n    return {}.hasOwnProperty.call(value, 'current');\n  }\n  return {\n    name: 'arrow',\n    options,\n    fn(state) {\n      const {\n        element,\n        padding\n      } = typeof options === 'function' ? options(state) : options;\n      if (element && isRef(element)) {\n        if (element.current != null) {\n          return arrow$2({\n            element: element.current,\n            padding\n          }).fn(state);\n        }\n        return {};\n      }\n      if (element) {\n        return arrow$2({\n          element,\n          padding\n        }).fn(state);\n      }\n      return {};\n    }\n  };\n};\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = (options, deps) => {\n  const result = offset$1(options);\n  return {\n    name: result.name,\n    fn: result.fn,\n    options: [options, deps]\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = (options, deps) => {\n  const result = shift$1(options);\n  return {\n    name: result.name,\n    fn: result.fn,\n    options: [options, deps]\n  };\n};\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = (options, deps) => {\n  const result = limitShift$1(options);\n  return {\n    fn: result.fn,\n    options: [options, deps]\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = (options, deps) => {\n  const result = flip$1(options);\n  return {\n    name: result.name,\n    fn: result.fn,\n    options: [options, deps]\n  };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = (options, deps) => {\n  const result = size$1(options);\n  return {\n    name: result.name,\n    fn: result.fn,\n    options: [options, deps]\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = (options, deps) => {\n  const result = autoPlacement$1(options);\n  return {\n    name: result.name,\n    fn: result.fn,\n    options: [options, deps]\n  };\n};\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = (options, deps) => {\n  const result = hide$1(options);\n  return {\n    name: result.name,\n    fn: result.fn,\n    options: [options, deps]\n  };\n};\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = (options, deps) => {\n  const result = inline$1(options);\n  return {\n    name: result.name,\n    fn: result.fn,\n    options: [options, deps]\n  };\n};\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * This wraps the core `arrow` middleware to allow React refs as the element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = (options, deps) => {\n  const result = arrow$1(options);\n  return {\n    name: result.name,\n    fn: result.fn,\n    options: [options, deps]\n  };\n};\n\nexport { arrow, autoPlacement, flip, hide, inline, limitShift, offset, shift, size, useFloating };\n","// src/arrow.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Arrow\";\nvar Arrow = React.forwardRef((props, forwardedRef) => {\n  const { children, width = 10, height = 5, ...arrowProps } = props;\n  return /* @__PURE__ */ jsx(\n    Primitive.svg,\n    {\n      ...arrowProps,\n      ref: forwardedRef,\n      width,\n      height,\n      viewBox: \"0 0 30 10\",\n      preserveAspectRatio: \"none\",\n      children: props.asChild ? children : /* @__PURE__ */ jsx(\"polygon\", { points: \"0,0 30,0 15,10\" })\n    }\n  );\n});\nArrow.displayName = NAME;\nvar Root = Arrow;\nexport {\n  Arrow,\n  Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/popper.tsx\nimport * as React from \"react\";\nimport {\n  useFloating,\n  autoUpdate,\n  offset,\n  shift,\n  limitShift,\n  hide,\n  arrow as floatingUIarrow,\n  flip,\n  size\n} from \"@floating-ui/react-dom\";\nimport * as ArrowPrimitive from \"@radix-ui/react-arrow\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { jsx } from \"react/jsx-runtime\";\nvar SIDE_OPTIONS = [\"top\", \"right\", \"bottom\", \"left\"];\nvar ALIGN_OPTIONS = [\"start\", \"center\", \"end\"];\nvar POPPER_NAME = \"Popper\";\nvar [createPopperContext, createPopperScope] = createContextScope(POPPER_NAME);\nvar [PopperProvider, usePopperContext] = createPopperContext(POPPER_NAME);\nvar Popper = (props) => {\n  const { __scopePopper, children } = props;\n  const [anchor, setAnchor] = React.useState(null);\n  const [placementState, setPlacementState] = React.useState(void 0);\n  return /* @__PURE__ */ jsx(\n    PopperProvider,\n    {\n      scope: __scopePopper,\n      anchor,\n      onAnchorChange: setAnchor,\n      placementState,\n      setPlacementState,\n      children\n    }\n  );\n};\nPopper.displayName = POPPER_NAME;\nvar ANCHOR_NAME = \"PopperAnchor\";\nvar PopperAnchor = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopePopper, virtualRef, ...anchorProps } = props;\n    const context = usePopperContext(ANCHOR_NAME, __scopePopper);\n    const ref = React.useRef(null);\n    const onAnchorChange = context.onAnchorChange;\n    const callbackRef = React.useCallback(\n      (node) => {\n        ref.current = node;\n        if (node) {\n          onAnchorChange(node);\n        }\n      },\n      [onAnchorChange]\n    );\n    const composedRefs = useComposedRefs(forwardedRef, callbackRef);\n    const anchorRef = React.useRef(null);\n    React.useEffect(() => {\n      if (!virtualRef) {\n        return;\n      }\n      const previousAnchor = anchorRef.current;\n      anchorRef.current = virtualRef.current;\n      if (previousAnchor !== anchorRef.current) {\n        onAnchorChange(anchorRef.current);\n      }\n    });\n    const sideAndAlign = context.placementState && getSideAndAlignFromPlacement(context.placementState);\n    const placedSide = sideAndAlign?.[0];\n    const placedAlign = sideAndAlign?.[1];\n    return virtualRef ? null : /* @__PURE__ */ jsx(\n      Primitive.div,\n      {\n        \"data-radix-popper-side\": placedSide,\n        \"data-radix-popper-align\": placedAlign,\n        ...anchorProps,\n        ref: composedRefs\n      }\n    );\n  }\n);\nPopperAnchor.displayName = ANCHOR_NAME;\nvar CONTENT_NAME = \"PopperContent\";\nvar [PopperContentProvider, useContentContext] = createPopperContext(CONTENT_NAME);\nvar PopperContent = React.forwardRef(\n  (props, forwardedRef) => {\n    const {\n      __scopePopper,\n      side = \"bottom\",\n      sideOffset = 0,\n      align = \"center\",\n      alignOffset = 0,\n      arrowPadding = 0,\n      avoidCollisions = true,\n      collisionBoundary = [],\n      collisionPadding: collisionPaddingProp = 0,\n      sticky = \"partial\",\n      hideWhenDetached = false,\n      updatePositionStrategy = \"optimized\",\n      onPlaced,\n      ...contentProps\n    } = props;\n    const context = usePopperContext(CONTENT_NAME, __scopePopper);\n    const [content, setContent] = React.useState(null);\n    const composedRefs = useComposedRefs(forwardedRef, setContent);\n    const [arrow, setArrow] = React.useState(null);\n    const arrowSize = useSize(arrow);\n    const arrowWidth = arrowSize?.width ?? 0;\n    const arrowHeight = arrowSize?.height ?? 0;\n    const desiredPlacement = side + (align !== \"center\" ? \"-\" + align : \"\");\n    const collisionPadding = typeof collisionPaddingProp === \"number\" ? collisionPaddingProp : { top: 0, right: 0, bottom: 0, left: 0, ...collisionPaddingProp };\n    const boundary = Array.isArray(collisionBoundary) ? collisionBoundary : [collisionBoundary];\n    const hasExplicitBoundaries = boundary.length > 0;\n    const detectOverflowOptions = {\n      padding: collisionPadding,\n      boundary: boundary.filter(isNotNull),\n      // with `strategy: 'fixed'`, this is the only way to get it to respect boundaries\n      altBoundary: hasExplicitBoundaries\n    };\n    const { refs, floatingStyles, placement, isPositioned, middlewareData } = useFloating({\n      // default to `fixed` strategy so users don't have to pick and we also avoid focus scroll issues\n      strategy: \"fixed\",\n      placement: desiredPlacement,\n      whileElementsMounted: (...args) => {\n        const cleanup = autoUpdate(...args, {\n          animationFrame: updatePositionStrategy === \"always\"\n        });\n        return cleanup;\n      },\n      elements: {\n        reference: context.anchor\n      },\n      middleware: [\n        offset({ mainAxis: sideOffset + arrowHeight, alignmentAxis: alignOffset }),\n        avoidCollisions && shift({\n          mainAxis: true,\n          crossAxis: false,\n          limiter: sticky === \"partial\" ? limitShift() : void 0,\n          ...detectOverflowOptions\n        }),\n        avoidCollisions && flip({ ...detectOverflowOptions }),\n        size({\n          ...detectOverflowOptions,\n          apply: ({ elements, rects, availableWidth, availableHeight }) => {\n            const { width: anchorWidth, height: anchorHeight } = rects.reference;\n            const contentStyle = elements.floating.style;\n            contentStyle.setProperty(\"--radix-popper-available-width\", `${availableWidth}px`);\n            contentStyle.setProperty(\"--radix-popper-available-height\", `${availableHeight}px`);\n            contentStyle.setProperty(\"--radix-popper-anchor-width\", `${anchorWidth}px`);\n            contentStyle.setProperty(\"--radix-popper-anchor-height\", `${anchorHeight}px`);\n          }\n        }),\n        arrow && floatingUIarrow({ element: arrow, padding: arrowPadding }),\n        transformOrigin({ arrowWidth, arrowHeight }),\n        hideWhenDetached && hide({\n          strategy: \"referenceHidden\",\n          ...detectOverflowOptions,\n          // `hide` detects whether the anchor (reference) is clipped, so when\n          // no explicit `collisionBoundary` is set we fall back to Floating\n          // UI's default clipping ancestors (e.g. a scrollable menu). This\n          // lets an occluded submenu hide once its anchor scrolls out of view\n          // (#3237). The collision/size middlewares deliberately keep the\n          // viewport-based default to avoid clamping content rendered inside\n          // transformed or overflow-clipping portal containers.\n          boundary: hasExplicitBoundaries ? detectOverflowOptions.boundary : void 0\n        })\n      ]\n    });\n    const setPlacementState = context.setPlacementState;\n    useLayoutEffect(() => {\n      setPlacementState(placement);\n      return () => {\n        setPlacementState(void 0);\n      };\n    }, [placement, setPlacementState]);\n    const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n    const handlePlaced = useCallbackRef(onPlaced);\n    useLayoutEffect(() => {\n      if (isPositioned) {\n        handlePlaced?.();\n      }\n    }, [isPositioned, handlePlaced]);\n    const arrowX = middlewareData.arrow?.x;\n    const arrowY = middlewareData.arrow?.y;\n    const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n    const [contentZIndex, setContentZIndex] = React.useState();\n    useLayoutEffect(() => {\n      if (content) setContentZIndex(window.getComputedStyle(content).zIndex);\n    }, [content]);\n    return /* @__PURE__ */ jsx(\n      \"div\",\n      {\n        ref: refs.setFloating,\n        \"data-radix-popper-content-wrapper\": \"\",\n        style: {\n          ...floatingStyles,\n          transform: isPositioned ? floatingStyles.transform : \"translate(0, -200%)\",\n          // keep off the page when measuring\n          minWidth: \"max-content\",\n          zIndex: contentZIndex,\n          \"--radix-popper-transform-origin\": [\n            middlewareData.transformOrigin?.x,\n            middlewareData.transformOrigin?.y\n          ].join(\" \"),\n          // hide the content if using the hide middleware and should be hidden\n          // set visibility to hidden and disable pointer events so the UI behaves\n          // as if the PopperContent isn't there at all\n          ...middlewareData.hide?.referenceHidden && {\n            visibility: \"hidden\",\n            pointerEvents: \"none\"\n          }\n        },\n        dir: props.dir,\n        children: /* @__PURE__ */ jsx(\n          PopperContentProvider,\n          {\n            scope: __scopePopper,\n            placedSide,\n            placedAlign,\n            onArrowChange: setArrow,\n            arrowX,\n            arrowY,\n            shouldHideArrow: cannotCenterArrow,\n            children: /* @__PURE__ */ jsx(\n              Primitive.div,\n              {\n                \"data-side\": placedSide,\n                \"data-align\": placedAlign,\n                ...contentProps,\n                ref: composedRefs,\n                style: {\n                  ...contentProps.style,\n                  // if the PopperContent hasn't been placed yet (not all measurements done)\n                  // we prevent animations so that users's animation don't kick in too early referring wrong sides\n                  animation: !isPositioned ? \"none\" : void 0\n                }\n              }\n            )\n          }\n        )\n      }\n    );\n  }\n);\nPopperContent.displayName = CONTENT_NAME;\nvar ARROW_NAME = \"PopperArrow\";\nvar OPPOSITE_SIDE = {\n  top: \"bottom\",\n  right: \"left\",\n  bottom: \"top\",\n  left: \"right\"\n};\nvar PopperArrow = React.forwardRef(function PopperArrow2(props, forwardedRef) {\n  const { __scopePopper, ...arrowProps } = props;\n  const contentContext = useContentContext(ARROW_NAME, __scopePopper);\n  const baseSide = OPPOSITE_SIDE[contentContext.placedSide];\n  return (\n    // we have to use an extra wrapper because `ResizeObserver` (used by `useSize`)\n    // doesn't report size as we'd expect on SVG elements.\n    // it reports their bounding box which is effectively the largest path inside the SVG.\n    /* @__PURE__ */ jsx(\n      \"span\",\n      {\n        ref: contentContext.onArrowChange,\n        style: {\n          position: \"absolute\",\n          left: contentContext.arrowX,\n          top: contentContext.arrowY,\n          [baseSide]: 0,\n          transformOrigin: {\n            top: \"\",\n            right: \"0 0\",\n            bottom: \"center 0\",\n            left: \"100% 0\"\n          }[contentContext.placedSide],\n          transform: {\n            top: \"translateY(100%)\",\n            right: \"translateY(50%) rotate(90deg) translateX(-50%)\",\n            bottom: `rotate(180deg)`,\n            left: \"translateY(50%) rotate(-90deg) translateX(50%)\"\n          }[contentContext.placedSide],\n          visibility: contentContext.shouldHideArrow ? \"hidden\" : void 0\n        },\n        children: /* @__PURE__ */ jsx(\n          ArrowPrimitive.Root,\n          {\n            ...arrowProps,\n            ref: forwardedRef,\n            style: {\n              ...arrowProps.style,\n              // ensures the element can be measured correctly (mostly for if SVG)\n              display: \"block\"\n            }\n          }\n        )\n      }\n    )\n  );\n});\nPopperArrow.displayName = ARROW_NAME;\nfunction isNotNull(value) {\n  return value !== null;\n}\nvar transformOrigin = (options) => ({\n  name: \"transformOrigin\",\n  options,\n  fn(data) {\n    const { placement, rects, middlewareData } = data;\n    const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n    const isArrowHidden = cannotCenterArrow;\n    const arrowWidth = isArrowHidden ? 0 : options.arrowWidth;\n    const arrowHeight = isArrowHidden ? 0 : options.arrowHeight;\n    const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n    const noArrowAlign = { start: \"0%\", center: \"50%\", end: \"100%\" }[placedAlign];\n    const arrowXCenter = (middlewareData.arrow?.x ?? 0) + arrowWidth / 2;\n    const arrowYCenter = (middlewareData.arrow?.y ?? 0) + arrowHeight / 2;\n    let x = \"\";\n    let y = \"\";\n    if (placedSide === \"bottom\") {\n      x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n      y = `${-arrowHeight}px`;\n    } else if (placedSide === \"top\") {\n      x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n      y = `${rects.floating.height + arrowHeight}px`;\n    } else if (placedSide === \"right\") {\n      x = `${-arrowHeight}px`;\n      y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n    } else if (placedSide === \"left\") {\n      x = `${rects.floating.width + arrowHeight}px`;\n      y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n    }\n    return { data: { x, y } };\n  }\n});\nfunction getSideAndAlignFromPlacement(placement) {\n  const [side, align = \"center\"] = placement.split(\"-\");\n  return [side, align];\n}\nvar Root2 = Popper;\nvar Anchor = PopperAnchor;\nvar Content = PopperContent;\nvar Arrow = PopperArrow;\nexport {\n  ALIGN_OPTIONS,\n  Anchor,\n  Arrow,\n  Content,\n  Popper,\n  PopperAnchor,\n  PopperArrow,\n  PopperContent,\n  Root2 as Root,\n  SIDE_OPTIONS,\n  createPopperScope\n};\n//# sourceMappingURL=index.mjs.map\n","// src/visually-hidden.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar VISUALLY_HIDDEN_STYLES = Object.freeze({\n  // See: https://github.com/twbs/bootstrap/blob/main/scss/mixins/_visually-hidden.scss\n  position: \"absolute\",\n  border: 0,\n  width: 1,\n  height: 1,\n  padding: 0,\n  margin: -1,\n  overflow: \"hidden\",\n  clip: \"rect(0, 0, 0, 0)\",\n  whiteSpace: \"nowrap\",\n  wordWrap: \"normal\"\n});\nvar NAME = \"VisuallyHidden\";\nvar VisuallyHidden = React.forwardRef(\n  (props, forwardedRef) => {\n    return /* @__PURE__ */ jsx(\n      Primitive.span,\n      {\n        ...props,\n        ref: forwardedRef,\n        style: { ...VISUALLY_HIDDEN_STYLES, ...props.style }\n      }\n    );\n  }\n);\nVisuallyHidden.displayName = NAME;\nvar Root = VisuallyHidden;\nexport {\n  Root,\n  VISUALLY_HIDDEN_STYLES,\n  VisuallyHidden\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/tooltip.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { createSlottable } from \"@radix-ui/react-slot\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport * as VisuallyHiddenPrimitive from \"@radix-ui/react-visually-hidden\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar [createTooltipContext, createTooltipScope] = createContextScope(\"Tooltip\", [\n  createPopperScope\n]);\nvar usePopperScope = createPopperScope();\nvar PROVIDER_NAME = \"TooltipProvider\";\nvar DEFAULT_DELAY_DURATION = 700;\nvar TOOLTIP_OPEN = \"tooltip.open\";\nvar [TooltipProviderContextProvider, useTooltipProviderContext] = createTooltipContext(PROVIDER_NAME);\nvar TooltipProvider = (props) => {\n  const {\n    __scopeTooltip,\n    delayDuration = DEFAULT_DELAY_DURATION,\n    skipDelayDuration = 300,\n    disableHoverableContent = false,\n    children\n  } = props;\n  const isOpenDelayedRef = React.useRef(true);\n  const isPointerInTransitRef = React.useRef(false);\n  const skipDelayTimerRef = React.useRef(0);\n  React.useEffect(() => {\n    const skipDelayTimer = skipDelayTimerRef.current;\n    return () => window.clearTimeout(skipDelayTimer);\n  }, []);\n  return /* @__PURE__ */ jsx(\n    TooltipProviderContextProvider,\n    {\n      scope: __scopeTooltip,\n      isOpenDelayedRef,\n      delayDuration,\n      onOpen: React.useCallback(() => {\n        if (skipDelayDuration <= 0) return;\n        window.clearTimeout(skipDelayTimerRef.current);\n        isOpenDelayedRef.current = false;\n      }, [skipDelayDuration]),\n      onClose: React.useCallback(() => {\n        if (skipDelayDuration <= 0) return;\n        window.clearTimeout(skipDelayTimerRef.current);\n        skipDelayTimerRef.current = window.setTimeout(\n          () => isOpenDelayedRef.current = true,\n          skipDelayDuration\n        );\n      }, [skipDelayDuration]),\n      isPointerInTransitRef,\n      onPointerInTransitChange: React.useCallback((inTransit) => {\n        isPointerInTransitRef.current = inTransit;\n      }, []),\n      disableHoverableContent,\n      children\n    }\n  );\n};\nTooltipProvider.displayName = PROVIDER_NAME;\nvar TOOLTIP_NAME = \"Tooltip\";\nvar [TooltipContextProvider, useTooltipContext] = createTooltipContext(TOOLTIP_NAME);\nvar Tooltip = (props) => {\n  const {\n    __scopeTooltip,\n    children,\n    open: openProp,\n    defaultOpen,\n    onOpenChange,\n    disableHoverableContent: disableHoverableContentProp,\n    delayDuration: delayDurationProp\n  } = props;\n  const providerContext = useTooltipProviderContext(TOOLTIP_NAME, props.__scopeTooltip);\n  const popperScope = usePopperScope(__scopeTooltip);\n  const [trigger, setTrigger] = React.useState(null);\n  const contentId = useId();\n  const openTimerRef = React.useRef(0);\n  const disableHoverableContent = disableHoverableContentProp ?? providerContext.disableHoverableContent;\n  const delayDuration = delayDurationProp ?? providerContext.delayDuration;\n  const wasOpenDelayedRef = React.useRef(false);\n  const [open, setOpen] = useControllableState({\n    prop: openProp,\n    defaultProp: defaultOpen ?? false,\n    onChange: (open2) => {\n      if (open2) {\n        providerContext.onOpen();\n        document.dispatchEvent(new CustomEvent(TOOLTIP_OPEN));\n      } else {\n        providerContext.onClose();\n      }\n      onOpenChange?.(open2);\n    },\n    caller: TOOLTIP_NAME\n  });\n  const stateAttribute = React.useMemo(() => {\n    return open ? wasOpenDelayedRef.current ? \"delayed-open\" : \"instant-open\" : \"closed\";\n  }, [open]);\n  const handleOpen = React.useCallback(() => {\n    window.clearTimeout(openTimerRef.current);\n    openTimerRef.current = 0;\n    wasOpenDelayedRef.current = false;\n    setOpen(true);\n  }, [setOpen]);\n  const handleClose = React.useCallback(() => {\n    window.clearTimeout(openTimerRef.current);\n    openTimerRef.current = 0;\n    setOpen(false);\n  }, [setOpen]);\n  const handleDelayedOpen = React.useCallback(() => {\n    window.clearTimeout(openTimerRef.current);\n    openTimerRef.current = window.setTimeout(() => {\n      wasOpenDelayedRef.current = true;\n      setOpen(true);\n      openTimerRef.current = 0;\n    }, delayDuration);\n  }, [delayDuration, setOpen]);\n  React.useEffect(() => {\n    return () => {\n      if (openTimerRef.current) {\n        window.clearTimeout(openTimerRef.current);\n        openTimerRef.current = 0;\n      }\n    };\n  }, []);\n  return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n    TooltipContextProvider,\n    {\n      scope: __scopeTooltip,\n      contentId,\n      open,\n      stateAttribute,\n      trigger,\n      onTriggerChange: setTrigger,\n      onTriggerEnter: React.useCallback(() => {\n        if (providerContext.isOpenDelayedRef.current) handleDelayedOpen();\n        else handleOpen();\n      }, [providerContext.isOpenDelayedRef, handleDelayedOpen, handleOpen]),\n      onTriggerLeave: React.useCallback(() => {\n        if (disableHoverableContent) {\n          handleClose();\n        } else {\n          window.clearTimeout(openTimerRef.current);\n          openTimerRef.current = 0;\n        }\n      }, [handleClose, disableHoverableContent]),\n      onOpen: handleOpen,\n      onClose: handleClose,\n      disableHoverableContent,\n      children\n    }\n  ) });\n};\nTooltip.displayName = TOOLTIP_NAME;\nvar TRIGGER_NAME = \"TooltipTrigger\";\nvar TooltipTrigger = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeTooltip, ...triggerProps } = props;\n    const context = useTooltipContext(TRIGGER_NAME, __scopeTooltip);\n    const providerContext = useTooltipProviderContext(TRIGGER_NAME, __scopeTooltip);\n    const popperScope = usePopperScope(__scopeTooltip);\n    const ref = React.useRef(null);\n    const composedRefs = useComposedRefs(forwardedRef, ref, context.onTriggerChange);\n    const isPointerDownRef = React.useRef(false);\n    const hasPointerMoveOpenedRef = React.useRef(false);\n    const handlePointerUp = React.useCallback(() => isPointerDownRef.current = false, []);\n    React.useEffect(() => {\n      return () => document.removeEventListener(\"pointerup\", handlePointerUp);\n    }, [handlePointerUp]);\n    return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { asChild: true, ...popperScope, children: /* @__PURE__ */ jsx(\n      Primitive.button,\n      {\n        \"aria-describedby\": context.open ? context.contentId : void 0,\n        \"data-state\": context.stateAttribute,\n        ...triggerProps,\n        ref: composedRefs,\n        onPointerMove: composeEventHandlers(props.onPointerMove, (event) => {\n          if (event.pointerType === \"touch\") return;\n          if (!hasPointerMoveOpenedRef.current && !providerContext.isPointerInTransitRef.current) {\n            context.onTriggerEnter();\n            hasPointerMoveOpenedRef.current = true;\n          }\n        }),\n        onPointerLeave: composeEventHandlers(props.onPointerLeave, () => {\n          context.onTriggerLeave();\n          hasPointerMoveOpenedRef.current = false;\n        }),\n        onPointerDown: composeEventHandlers(props.onPointerDown, () => {\n          if (context.open) {\n            context.onClose();\n          }\n          isPointerDownRef.current = true;\n          document.addEventListener(\"pointerup\", handlePointerUp, { once: true });\n        }),\n        onFocus: composeEventHandlers(props.onFocus, () => {\n          if (!isPointerDownRef.current) context.onOpen();\n        }),\n        onBlur: composeEventHandlers(props.onBlur, context.onClose),\n        onClick: composeEventHandlers(props.onClick, context.onClose)\n      }\n    ) });\n  }\n);\nTooltipTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"TooltipPortal\";\nvar [PortalProvider, usePortalContext] = createTooltipContext(PORTAL_NAME, {\n  forceMount: void 0\n});\nvar TooltipPortal = (props) => {\n  const { __scopeTooltip, forceMount, children, container } = props;\n  const context = useTooltipContext(PORTAL_NAME, __scopeTooltip);\n  return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeTooltip, forceMount, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children }) }) });\n};\nTooltipPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"TooltipContent\";\nvar TooltipContent = React.forwardRef(\n  (props, forwardedRef) => {\n    const portalContext = usePortalContext(CONTENT_NAME, props.__scopeTooltip);\n    const { forceMount = portalContext.forceMount, side = \"top\", ...contentProps } = props;\n    const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);\n    return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.disableHoverableContent ? /* @__PURE__ */ jsx(TooltipContentImpl, { side, ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(TooltipContentHoverable, { side, ...contentProps, ref: forwardedRef }) });\n  }\n);\nvar TooltipContentHoverable = React.forwardRef((props, forwardedRef) => {\n  const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);\n  const providerContext = useTooltipProviderContext(CONTENT_NAME, props.__scopeTooltip);\n  const ref = React.useRef(null);\n  const composedRefs = useComposedRefs(forwardedRef, ref);\n  const [pointerGraceArea, setPointerGraceArea] = React.useState(null);\n  const { trigger, onClose } = context;\n  const content = ref.current;\n  const { onPointerInTransitChange } = providerContext;\n  const handleRemoveGraceArea = React.useCallback(() => {\n    setPointerGraceArea(null);\n    onPointerInTransitChange(false);\n  }, [onPointerInTransitChange]);\n  const handleCreateGraceArea = React.useCallback(\n    (event, hoverTarget) => {\n      const currentTarget = event.currentTarget;\n      const exitPoint = { x: event.clientX, y: event.clientY };\n      const exitSide = getExitSideFromRect(exitPoint, currentTarget.getBoundingClientRect());\n      const paddedExitPoints = getPaddedExitPoints(exitPoint, exitSide);\n      const hoverTargetPoints = getPointsFromRect(hoverTarget.getBoundingClientRect());\n      const graceArea = getHull([...paddedExitPoints, ...hoverTargetPoints]);\n      setPointerGraceArea(graceArea);\n      onPointerInTransitChange(true);\n    },\n    [onPointerInTransitChange]\n  );\n  React.useEffect(() => {\n    return () => handleRemoveGraceArea();\n  }, [handleRemoveGraceArea]);\n  React.useEffect(() => {\n    if (trigger && content) {\n      const handleTriggerLeave = (event) => handleCreateGraceArea(event, content);\n      const handleContentLeave = (event) => handleCreateGraceArea(event, trigger);\n      trigger.addEventListener(\"pointerleave\", handleTriggerLeave);\n      content.addEventListener(\"pointerleave\", handleContentLeave);\n      return () => {\n        trigger.removeEventListener(\"pointerleave\", handleTriggerLeave);\n        content.removeEventListener(\"pointerleave\", handleContentLeave);\n      };\n    }\n  }, [trigger, content, handleCreateGraceArea, handleRemoveGraceArea]);\n  React.useEffect(() => {\n    if (pointerGraceArea) {\n      const handleTrackPointerGrace = (event) => {\n        const target = event.target;\n        const pointerPosition = { x: event.clientX, y: event.clientY };\n        const hasEnteredTarget = trigger?.contains(target) || content?.contains(target);\n        const isPointerOutsideGraceArea = !isPointInPolygon(pointerPosition, pointerGraceArea);\n        if (hasEnteredTarget) {\n          handleRemoveGraceArea();\n        } else if (isPointerOutsideGraceArea) {\n          handleRemoveGraceArea();\n          onClose();\n        }\n      };\n      document.addEventListener(\"pointermove\", handleTrackPointerGrace);\n      return () => document.removeEventListener(\"pointermove\", handleTrackPointerGrace);\n    }\n  }, [trigger, content, pointerGraceArea, onClose, handleRemoveGraceArea]);\n  return /* @__PURE__ */ jsx(TooltipContentImpl, { ...props, ref: composedRefs });\n});\nvar [VisuallyHiddenContentContextProvider, useVisuallyHiddenContentContext] = createTooltipContext(TOOLTIP_NAME, { isInside: false });\nvar Slottable = createSlottable(\"TooltipContent\");\nvar TooltipContentImpl = React.forwardRef(\n  (props, forwardedRef) => {\n    const {\n      __scopeTooltip,\n      children,\n      \"aria-label\": ariaLabel,\n      onEscapeKeyDown,\n      onPointerDownOutside,\n      ...contentProps\n    } = props;\n    const context = useTooltipContext(CONTENT_NAME, __scopeTooltip);\n    const popperScope = usePopperScope(__scopeTooltip);\n    const { onClose } = context;\n    React.useEffect(() => {\n      document.addEventListener(TOOLTIP_OPEN, onClose);\n      return () => document.removeEventListener(TOOLTIP_OPEN, onClose);\n    }, [onClose]);\n    React.useEffect(() => {\n      if (context.trigger) {\n        const handleScroll = (event) => {\n          if (event.target instanceof Node && event.target.contains(context.trigger)) {\n            onClose();\n          }\n        };\n        window.addEventListener(\"scroll\", handleScroll, { capture: true });\n        return () => window.removeEventListener(\"scroll\", handleScroll, { capture: true });\n      }\n    }, [context.trigger, onClose]);\n    return /* @__PURE__ */ jsx(\n      DismissableLayer,\n      {\n        asChild: true,\n        disableOutsidePointerEvents: false,\n        onEscapeKeyDown,\n        onPointerDownOutside,\n        onFocusOutside: (event) => event.preventDefault(),\n        onDismiss: onClose,\n        children: /* @__PURE__ */ jsxs(\n          PopperPrimitive.Content,\n          {\n            \"data-state\": context.stateAttribute,\n            ...popperScope,\n            ...contentProps,\n            ref: forwardedRef,\n            style: {\n              ...contentProps.style,\n              // re-namespace exposed content custom properties\n              ...{\n                \"--radix-tooltip-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n                \"--radix-tooltip-content-available-width\": \"var(--radix-popper-available-width)\",\n                \"--radix-tooltip-content-available-height\": \"var(--radix-popper-available-height)\",\n                \"--radix-tooltip-trigger-width\": \"var(--radix-popper-anchor-width)\",\n                \"--radix-tooltip-trigger-height\": \"var(--radix-popper-anchor-height)\"\n              }\n            },\n            children: [\n              /* @__PURE__ */ jsx(Slottable, { children }),\n              /* @__PURE__ */ jsx(VisuallyHiddenContentContextProvider, { scope: __scopeTooltip, isInside: true, children: /* @__PURE__ */ jsx(VisuallyHiddenPrimitive.Root, { id: context.contentId, role: \"tooltip\", children: ariaLabel || children }) })\n            ]\n          }\n        )\n      }\n    );\n  }\n);\nTooltipContent.displayName = CONTENT_NAME;\nvar ARROW_NAME = \"TooltipArrow\";\nvar TooltipArrow = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeTooltip, ...arrowProps } = props;\n    const popperScope = usePopperScope(__scopeTooltip);\n    const visuallyHiddenContentContext = useVisuallyHiddenContentContext(\n      ARROW_NAME,\n      __scopeTooltip\n    );\n    return visuallyHiddenContentContext.isInside ? null : /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef });\n  }\n);\nTooltipArrow.displayName = ARROW_NAME;\nfunction getExitSideFromRect(point, rect) {\n  const top = Math.abs(rect.top - point.y);\n  const bottom = Math.abs(rect.bottom - point.y);\n  const right = Math.abs(rect.right - point.x);\n  const left = Math.abs(rect.left - point.x);\n  switch (Math.min(top, bottom, right, left)) {\n    case left:\n      return \"left\";\n    case right:\n      return \"right\";\n    case top:\n      return \"top\";\n    case bottom:\n      return \"bottom\";\n    default:\n      throw new Error(\"unreachable\");\n  }\n}\nfunction getPaddedExitPoints(exitPoint, exitSide, padding = 5) {\n  const paddedExitPoints = [];\n  switch (exitSide) {\n    case \"top\":\n      paddedExitPoints.push(\n        { x: exitPoint.x - padding, y: exitPoint.y + padding },\n        { x: exitPoint.x + padding, y: exitPoint.y + padding }\n      );\n      break;\n    case \"bottom\":\n      paddedExitPoints.push(\n        { x: exitPoint.x - padding, y: exitPoint.y - padding },\n        { x: exitPoint.x + padding, y: exitPoint.y - padding }\n      );\n      break;\n    case \"left\":\n      paddedExitPoints.push(\n        { x: exitPoint.x + padding, y: exitPoint.y - padding },\n        { x: exitPoint.x + padding, y: exitPoint.y + padding }\n      );\n      break;\n    case \"right\":\n      paddedExitPoints.push(\n        { x: exitPoint.x - padding, y: exitPoint.y - padding },\n        { x: exitPoint.x - padding, y: exitPoint.y + padding }\n      );\n      break;\n  }\n  return paddedExitPoints;\n}\nfunction getPointsFromRect(rect) {\n  const { top, right, bottom, left } = rect;\n  return [\n    { x: left, y: top },\n    { x: right, y: top },\n    { x: right, y: bottom },\n    { x: left, y: bottom }\n  ];\n}\nfunction isPointInPolygon(point, polygon) {\n  const { x, y } = point;\n  let inside = false;\n  for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n    const ii = polygon[i];\n    const jj = polygon[j];\n    const xi = ii.x;\n    const yi = ii.y;\n    const xj = jj.x;\n    const yj = jj.y;\n    const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;\n    if (intersect) inside = !inside;\n  }\n  return inside;\n}\nfunction getHull(points) {\n  const newPoints = points.slice();\n  newPoints.sort((a, b) => {\n    if (a.x < b.x) return -1;\n    else if (a.x > b.x) return 1;\n    else if (a.y < b.y) return -1;\n    else if (a.y > b.y) return 1;\n    else return 0;\n  });\n  return getHullPresorted(newPoints);\n}\nfunction getHullPresorted(points) {\n  if (points.length <= 1) return points.slice();\n  const upperHull = [];\n  for (let i = 0; i < points.length; i++) {\n    const p = points[i];\n    while (upperHull.length >= 2) {\n      const q = upperHull[upperHull.length - 1];\n      const r = upperHull[upperHull.length - 2];\n      if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) upperHull.pop();\n      else break;\n    }\n    upperHull.push(p);\n  }\n  upperHull.pop();\n  const lowerHull = [];\n  for (let i = points.length - 1; i >= 0; i--) {\n    const p = points[i];\n    while (lowerHull.length >= 2) {\n      const q = lowerHull[lowerHull.length - 1];\n      const r = lowerHull[lowerHull.length - 2];\n      if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) lowerHull.pop();\n      else break;\n    }\n    lowerHull.push(p);\n  }\n  lowerHull.pop();\n  if (upperHull.length === 1 && lowerHull.length === 1 && upperHull[0].x === lowerHull[0].x && upperHull[0].y === lowerHull[0].y) {\n    return upperHull;\n  } else {\n    return upperHull.concat(lowerHull);\n  }\n}\nvar Provider = TooltipProvider;\nvar Root3 = Tooltip;\nvar Trigger = TooltipTrigger;\nvar Portal = TooltipPortal;\nvar Content2 = TooltipContent;\nvar Arrow2 = TooltipArrow;\nexport {\n  Arrow2 as Arrow,\n  Content2 as Content,\n  Portal,\n  Provider,\n  Root3 as Root,\n  Tooltip,\n  TooltipArrow,\n  TooltipContent,\n  TooltipPortal,\n  TooltipProvider,\n  TooltipTrigger,\n  Trigger,\n  createTooltipScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as TooltipPrimitive from '@radix-ui/react-tooltip';\r\nimport * as React from 'react';\r\n\r\nimport { cn } from '@/lib/utils';\r\n\r\nconst TooltipProvider = TooltipPrimitive.Provider;\r\n\r\nconst Tooltip = TooltipPrimitive.Root;\r\n\r\nconst TooltipTrigger = TooltipPrimitive.Trigger;\r\n\r\nconst TooltipContent = React.forwardRef<\r\n  React.ElementRef<typeof TooltipPrimitive.Content>,\r\n  React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\r\n>(({ className, sideOffset = 4, ...props }, ref) => (\r\n  <TooltipPrimitive.Portal>\r\n    <TooltipPrimitive.Content\r\n      ref={ref}\r\n      sideOffset={sideOffset}\r\n      className={cn(\r\n        'z-[100001] overflow-hidden rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\r\n        className,\r\n      )}\r\n      {...props}\r\n    />\r\n  </TooltipPrimitive.Portal>\r\n));\r\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\r\n\r\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\r\n","import axios from 'axios';\r\nimport {\r\n  CheckCircle,\r\n  Download,\r\n  FileText,\r\n  Folder,\r\n  FolderOpen,\r\n  Loader2,\r\n  RefreshCw,\r\n  XCircle,\r\n} from 'lucide-react';\r\nimport { useEffect, useMemo, useState } from 'react';\r\nimport { toast } from 'react-toastify';\r\n\r\nimport { Badge } from '@/components/ui/badge';\r\nimport { Button } from '@/components/ui/button';\r\nimport { Checkbox } from '@/components/ui/checkbox';\r\nimport {\r\n  Dialog,\r\n  DialogContent,\r\n  DialogDescription,\r\n  DialogFooter,\r\n  DialogHeader,\r\n  DialogTitle,\r\n  DialogTrigger,\r\n} from '@/components/ui/dialog';\r\nimport {\r\n  Table,\r\n  TableBody,\r\n  TableCell,\r\n  TableHead,\r\n  TableHeader,\r\n  TableRow,\r\n} from '@/components/ui/table';\r\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\r\nimport type {\r\n  ApproveRequest,\r\n  BulkApproveRequest,\r\n  BulkRejectRequest,\r\n  PaginatedResponse,\r\n  PaginationParams,\r\n  PendingDocument,\r\n  PendingDocumentStats,\r\n  RejectRequest,\r\n} from '@/types/external-document.types';\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────────\r\n// Service functions (inlined from external-document.service.ts)\r\n// ─────────────────────────────────────────────────────────────────────────────────\r\n\r\nconst API_ENDPOINT_BASE = '/api/external-documents';\r\n\r\nasync function getPendingDocuments(\r\n  apiBaseUrl: string,\r\n  params: PaginationParams,\r\n): Promise<PaginatedResponse<PendingDocument>> {\r\n  const response = await axios.get(`${apiBaseUrl}${API_ENDPOINT_BASE}/pending`, {\r\n    params: {\r\n      page: params.page,\r\n      limit: params.limit,\r\n      keyword: params.keyword,\r\n      status: params.status,\r\n      sortBy: params.sortBy,\r\n      sortOrder: params.sortOrder,\r\n      folderPath: params.folderPath,\r\n    },\r\n  });\r\n  return response.data;\r\n}\r\n\r\nasync function approveDocument(\r\n  apiBaseUrl: string,\r\n  request: ApproveRequest,\r\n): Promise<{ success: boolean; message: string }> {\r\n  const response = await axios.post(`${apiBaseUrl}${API_ENDPOINT_BASE}/approve`, request);\r\n  return response.data;\r\n}\r\n\r\nasync function rejectDocument(\r\n  apiBaseUrl: string,\r\n  request: RejectRequest,\r\n): Promise<{ success: boolean; message: string }> {\r\n  const response = await axios.post(`${apiBaseUrl}${API_ENDPOINT_BASE}/reject`, request);\r\n  return response.data;\r\n}\r\n\r\nasync function bulkApproveDocuments(\r\n  apiBaseUrl: string,\r\n  request: BulkApproveRequest,\r\n): Promise<{ success: boolean; message: string }> {\r\n  const response = await axios.post(`${apiBaseUrl}${API_ENDPOINT_BASE}/bulk-approve`, request);\r\n  return response.data;\r\n}\r\n\r\nasync function bulkRejectDocuments(\r\n  apiBaseUrl: string,\r\n  request: BulkRejectRequest,\r\n): Promise<{ success: boolean; message: string }> {\r\n  const response = await axios.post(`${apiBaseUrl}${API_ENDPOINT_BASE}/bulk-reject`, request);\r\n  return response.data;\r\n}\r\n\r\nasync function getPendingDocumentStats(apiBaseUrl: string): Promise<PendingDocumentStats> {\r\n  const response = await axios.get(`${apiBaseUrl}${API_ENDPOINT_BASE}/stats`);\r\n  return response.data;\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────────\r\n// Helpers\r\n// ─────────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction formatFileSize(bytes: number): string {\r\n  if (bytes === 0) return '0 B';\r\n  const k = 1024;\r\n  const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];\r\n  const i = Math.floor(Math.log(bytes) / Math.log(k));\r\n  return parseFloat((bytes / Math.pow(k, i)).toFixed(1)) + ' ' + sizes[i];\r\n}\r\n\r\nfunction formatDate(dateString: string): string {\r\n  const date = new Date(dateString);\r\n  return date.toLocaleDateString('vi-VN', {\r\n    year: 'numeric',\r\n    month: '2-digit',\r\n    day: '2-digit',\r\n    hour: '2-digit',\r\n    minute: '2-digit',\r\n  });\r\n}\r\n\r\n// Extract folder path segments for breadcrumb\r\nfunction getBreadcrumbPaths(folderPath: string): Array<{ label: string; path: string }> {\r\n  if (!folderPath) return [];\r\n  const segments = folderPath.split('/').filter(Boolean) as string[];\r\n  const breadcrumbs: Array<{ label: string; path: string }> = [];\r\n  let currentPath = '';\r\n\r\n  for (const seg of segments) {\r\n    currentPath = currentPath ? `${currentPath}/${seg}` : seg;\r\n    breadcrumbs.push({ label: seg, path: currentPath });\r\n  }\r\n\r\n  return breadcrumbs;\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────────\r\n// Sub-components\r\n// ─────────────────────────────────────────────────────────────────────────────────\r\n\r\nfunction ApproveConfirmDialog({\r\n  open,\r\n  onClose,\r\n  onConfirm,\r\n  document,\r\n  loading,\r\n}: {\r\n  open: boolean;\r\n  onClose: () => void;\r\n  onConfirm: () => void;\r\n  document: PendingDocument | null;\r\n  loading: boolean;\r\n}) {\r\n  if (!document) return null;\r\n  return (\r\n    <Dialog open={open} onOpenChange={(v) => !v && onClose()}>\r\n      <DialogContent>\r\n        <DialogHeader>\r\n          <DialogTitle>Xác nhận duyệt tài liệu</DialogTitle>\r\n          <DialogDescription>\r\n            Bạn có chắc chắn muốn duyệt tài liệu \"<strong>{document.fileName}</strong>\"?\r\n            <div className=\"mt-2 text-xs text-gray-500\">\r\n              Đường dẫn đích:{' '}\r\n              <code className=\"bg-gray-100 px-1 rounded\">\r\n                {document.targetPath.replace('pending_approval_external/', 'kho_doi_ngoai/')}\r\n              </code>\r\n            </div>\r\n          </DialogDescription>\r\n        </DialogHeader>\r\n        <DialogFooter>\r\n          <Button variant=\"outline\" onClick={onClose} disabled={loading}>\r\n            Hủy\r\n          </Button>\r\n          <Button\r\n            onClick={onConfirm}\r\n            disabled={loading}\r\n            className=\"bg-green-600 hover:bg-green-700\"\r\n          >\r\n            {loading ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : 'Xác nhận'}\r\n          </Button>\r\n        </DialogFooter>\r\n      </DialogContent>\r\n    </Dialog>\r\n  );\r\n}\r\n\r\nfunction RejectConfirmDialog({\r\n  open,\r\n  onClose,\r\n  onConfirm,\r\n  document,\r\n  loading,\r\n}: {\r\n  open: boolean;\r\n  onClose: () => void;\r\n  onConfirm: () => void;\r\n  document: PendingDocument | null;\r\n  loading: boolean;\r\n  rejectionReason: string;\r\n  setRejectionReason: (v: string) => void;\r\n}) {\r\n  if (!document) return null;\r\n  return (\r\n    <Dialog open={open} onOpenChange={(v) => !v && onClose()}>\r\n      <DialogContent>\r\n        <DialogHeader>\r\n          <DialogTitle className=\"text-red-600\">Xác nhận từ chối tài liệu</DialogTitle>\r\n          <DialogDescription>\r\n            Tài liệu \"<strong>{document.fileName}</strong>\" sẽ bị xóa khỏi vùng chờ duyệt.\r\n          </DialogDescription>\r\n        </DialogHeader>\r\n        <DialogFooter>\r\n          <Button variant=\"outline\" onClick={onClose} disabled={loading}>\r\n            Hủy\r\n          </Button>\r\n          <Button variant=\"destructive\" onClick={onConfirm} disabled={loading}>\r\n            {loading ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : 'Xác nhận từ chối'}\r\n          </Button>\r\n        </DialogFooter>\r\n      </DialogContent>\r\n    </Dialog>\r\n  );\r\n}\r\n\r\nfunction EmptyPendingState({ isFetching }: { isFetching: boolean }) {\r\n  return (\r\n    <div className=\"flex flex-col items-center justify-center py-12 text-center\">\r\n      <CheckCircle className=\"h-12 w-12 text-green-400\" />\r\n      <h3 className=\"mt-4 text-lg font-medium\">Không có tài liệu nào cần duyệt</h3>\r\n      <p className=\"mt-1 text-sm text-gray-500\">\r\n        {isFetching ? 'Đang tải...' : 'Tất cả tài liệu đã được duyệt hết.'}\r\n      </p>\r\n    </div>\r\n  );\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────────\r\n// Main Component\r\n// ─────────────────────────────────────────────────────────────────────────────────\r\n\r\nexport function PendingApprovalPage({\r\n  currentPrefix,\r\n  apiBaseUrl,\r\n  isUploading,\r\n}: {\r\n  currentPrefix: string;\r\n  apiBaseUrl: string;\r\n  isUploading: boolean;\r\n}) {\r\n  // UI-only mirror of backend approval access. The backend remains authoritative.\r\n  const hasAdminRole = useMemo(() => {\r\n    try {\r\n      const dataLogin = localStorage.getItem('dataLogin');\r\n      if (!dataLogin) return false;\r\n      const parsed: any = JSON.parse(dataLogin);\r\n      const user = parsed?.user || parsed;\r\n      if (user?.role === 'MASTER_ADMIN' || user?.effectiveRole === 'MASTER_ADMIN') return true;\r\n\r\n      return Object.values(user?.groupRoles || {}).some(\r\n        (role) => role === 'ADMIN' || role === 'SITE_ADMIN',\r\n      );\r\n    } catch {\r\n      return false;\r\n    }\r\n  }, []);\r\n\r\n  const isExternalPath =\r\n    currentPrefix.startsWith('kho_doi_ngoai/') || currentPrefix === 'kho_doi_ngoai/';\r\n\r\n  // Return null if not external path or user doesn't have admin role\r\n  if (!isExternalPath || !hasAdminRole) {\r\n    return null;\r\n  }\r\n\r\n  // State\r\n  const [keyword, setKeyword] = useState('');\r\n  const [page, setPage] = useState(1);\r\n  const [selectedKeys, setSelectedKeys] = useState<Set<string>>(new Set());\r\n  const [documents, setDocuments] = useState<PendingDocument[]>([]);\r\n  const [total, setTotal] = useState(0);\r\n  const [totalAllItems, setTotalAllItems] = useState(0);\r\n  const [isLoading, setIsLoading] = useState(false);\r\n  const [isApproving, setIsApproving] = useState(false);\r\n  const [isRejecting, setIsRejecting] = useState(false);\r\n  const [isBulkApproving, setIsBulkApproving] = useState(false);\r\n  const [isBulkRejecting, setIsBulkRejecting] = useState(false);\r\n  const [isFetching, setIsFetching] = useState(false);\r\n  const [showTableDialog, setShowTableDialog] = useState(false);\r\n  const [approveDialogOpen, setApproveDialogOpen] = useState(false);\r\n  const [rejectDialogOpen, setRejectDialogOpen] = useState(false);\r\n  const [rejectionReason, setRejectionReason] = useState('');\r\n  const [activeDocument, setActiveDocument] = useState<PendingDocument | null>(null);\r\n\r\n  // Folder navigation state\r\n  const [currentFolderPath, setCurrentFolderPath] = useState<string>(''); // Empty = root level\r\n\r\n  // Reset page and selection when folder path changes\r\n  useEffect(() => {\r\n    setPage(1);\r\n    setSelectedKeys(new Set());\r\n  }, [currentFolderPath]);\r\n\r\n  // Fetch pending documents from API\r\n  const fetchPendingDocuments = async () => {\r\n    setIsLoading(true);\r\n    try {\r\n      const response: PaginatedResponse<PendingDocument> = await getPendingDocuments(apiBaseUrl, {\r\n        page,\r\n        limit: 20,\r\n        keyword: keyword || undefined,\r\n        folderPath: currentFolderPath || undefined,\r\n      });\r\n      setDocuments(response.data);\r\n      setTotal(response.pagination.total);\r\n      setTotalAllItems(response.pagination.totalAllItems);\r\n    } catch (error) {\r\n      console.error('Failed to fetch pending documents:', error);\r\n      toast.error('Không thể tải danh sách tài liệu');\r\n    } finally {\r\n      setIsLoading(false);\r\n    }\r\n  };\r\n\r\n  // Fetch statistics\r\n  const fetchStats = async () => {\r\n    try {\r\n      await getPendingDocumentStats(apiBaseUrl);\r\n    } catch (error) {\r\n      console.error('Failed to fetch stats:', error);\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (!isUploading) {\r\n      fetchPendingDocuments();\r\n      fetchStats();\r\n    }\r\n  }, [page, keyword, currentFolderPath, isUploading]);\r\n\r\n  const totalPages = Math.max(1, Math.ceil(total / 20));\r\n\r\n  // Filter by keyword - match backend fields\r\n  const filteredDocuments = useMemo(() => {\r\n    if (!keyword) return documents;\r\n    return documents.filter(\r\n      (doc) =>\r\n        doc.fileName.toLowerCase().includes(keyword.toLowerCase()) ||\r\n        doc.tempPath.toLowerCase().includes(keyword.toLowerCase()) ||\r\n        doc.targetPath.toLowerCase().includes(keyword.toLowerCase()) ||\r\n        doc.modifiedBy?.toLowerCase().includes(keyword.toLowerCase()) ||\r\n        doc.creator?.toLowerCase().includes(keyword.toLowerCase()),\r\n    );\r\n  }, [documents, keyword]);\r\n\r\n  // Get only selectable documents (exclude folders)\r\n  const selectableDocuments = useMemo(\r\n    () => filteredDocuments.filter((doc) => !doc.isFolder),\r\n    [filteredDocuments],\r\n  );\r\n\r\n  // ── Folder Navigation Actions ──\r\n\r\n  const handleFolderClick = (doc: PendingDocument) => {\r\n    const cleanPath = doc.tempPath.endsWith('/') ? doc.tempPath.slice(0, -1) : doc.tempPath;\r\n    setCurrentFolderPath(cleanPath);\r\n    setKeyword('');\r\n  };\r\n\r\n  // const handleGoBack = () => {\r\n  //   if (!currentFolderPath) return;\r\n\r\n  //   const cleanPath = currentFolderPath.endsWith('/')\r\n  //     ? currentFolderPath.slice(0, -1)\r\n  //     : currentFolderPath;\r\n\r\n  //   const paths = cleanPath.split('/').filter(Boolean);\r\n  //   if (paths.length <= 1) {\r\n  //     setCurrentFolderPath('');\r\n  //   } else {\r\n  //     paths.pop();\r\n  //     setCurrentFolderPath(paths.join('/'));\r\n  //   }\r\n  //   setKeyword('');\r\n  // };\r\n\r\n  // ── Document Actions ──\r\n\r\n  const handleApprove = (doc: PendingDocument) => {\r\n    setActiveDocument(doc);\r\n    setApproveDialogOpen(true);\r\n  };\r\n\r\n  const handleConfirmApprove = async () => {\r\n    if (!activeDocument) return;\r\n    setIsApproving(true);\r\n    try {\r\n      const metadataPath = activeDocument.tempPath + '.metadata.json';\r\n      const targetPath = activeDocument.targetPath || '';\r\n      const result = await approveDocument(apiBaseUrl, {\r\n        metadataPath,\r\n        targetPath,\r\n      });\r\n      toast.success(result.message || 'Duyệt tài liệu thành công');\r\n      setDocuments((prev) => prev.filter((d) => d.tempPath !== activeDocument.tempPath));\r\n      setTotal((prev) => prev - 1);\r\n      fetchStats();\r\n    } catch (error: any) {\r\n      toast.error(error?.response?.data?.message || 'Không thể duyệt tài liệu');\r\n    } finally {\r\n      setIsApproving(false);\r\n      setApproveDialogOpen(false);\r\n      setActiveDocument(null);\r\n    }\r\n  };\r\n\r\n  const handleReject = (doc: PendingDocument) => {\r\n    setActiveDocument(doc);\r\n    setRejectionReason('');\r\n    setRejectDialogOpen(true);\r\n  };\r\n\r\n  const handleConfirmReject = async () => {\r\n    if (!activeDocument) return;\r\n    setIsRejecting(true);\r\n    try {\r\n      const metadataPath = activeDocument.tempPath + '.metadata.json';\r\n      const result = await rejectDocument(apiBaseUrl, {\r\n        metadataPath,\r\n        reason: rejectionReason,\r\n      } as RejectRequest);\r\n      toast.success(result.message || 'Từ chối tài liệu thành công');\r\n      setDocuments((prev) => prev.filter((d) => d.tempPath !== activeDocument.tempPath));\r\n      setTotal((prev) => prev - 1);\r\n      fetchStats();\r\n    } catch (error: any) {\r\n      toast.error(error?.response?.data?.message || 'Không thể từ chối tài liệu');\r\n    } finally {\r\n      setIsRejecting(false);\r\n      setRejectDialogOpen(false);\r\n      setActiveDocument(null);\r\n    }\r\n  };\r\n\r\n  const handleBulkApprove = async () => {\r\n    if (selectedKeys.size === 0) return;\r\n    setIsBulkApproving(true);\r\n    try {\r\n      const metadataPaths = Array.from(selectedKeys).map((key) => key + '.metadata.json');\r\n      const result = await bulkApproveDocuments(apiBaseUrl, {\r\n        metadataPaths,\r\n      } as BulkApproveRequest);\r\n      toast.success(result.message || `Đã duyệt ${selectedKeys.size} tài liệu`);\r\n      setSelectedKeys(new Set());\r\n      await fetchPendingDocuments();\r\n      await fetchStats();\r\n    } catch (error: any) {\r\n      toast.error(error?.response?.data?.message || 'Không thể duyệt hàng loạt');\r\n    } finally {\r\n      setIsBulkApproving(false);\r\n    }\r\n  };\r\n\r\n  const handleBulkReject = async () => {\r\n    if (selectedKeys.size === 0) return;\r\n    setIsBulkRejecting(true);\r\n    try {\r\n      const metadataPaths = Array.from(selectedKeys).map((key) => key + '.metadata.json');\r\n      const result = await bulkRejectDocuments(apiBaseUrl, {\r\n        metadataPaths,\r\n        reason: rejectionReason,\r\n      } as BulkRejectRequest);\r\n      toast.success(result.message || `Đã từ chối ${selectedKeys.size} tài liệu`);\r\n      setSelectedKeys(new Set());\r\n      await fetchPendingDocuments();\r\n      await fetchStats();\r\n    } catch (error: any) {\r\n      toast.error(error?.response?.data?.message || 'Không thể từ chối hàng loạt');\r\n    } finally {\r\n      setIsBulkRejecting(false);\r\n    }\r\n  };\r\n\r\n  // const handleExpandTable = () => {\r\n  //   setShowTableDialog(true);\r\n  // };\r\n\r\n  const handleRefresh = async () => {\r\n    setIsFetching(true);\r\n    try {\r\n      await Promise.all([fetchPendingDocuments(), fetchStats()]);\r\n      toast.success('Đã tải lại dữ liệu');\r\n    } catch {\r\n      toast.error('Không thể tải lại dữ liệu');\r\n    } finally {\r\n      setIsFetching(false);\r\n    }\r\n  };\r\n\r\n  // Build breadcrumb path segments\r\n  const breadcrumbPaths = useMemo(() => {\r\n    return getBreadcrumbPaths(currentFolderPath);\r\n  }, [currentFolderPath]);\r\n\r\n  // ── Download Handler ──\r\n  const handleDownload = async (paths: string[]) => {\r\n    try {\r\n      const response = await axios.post(\r\n        `${apiBaseUrl}/api/download`,\r\n        { paths },\r\n        { responseType: 'blob' },\r\n      );\r\n\r\n      const url = window.URL.createObjectURL(response.data);\r\n      const link = document.createElement('a');\r\n      link.href = url;\r\n\r\n      const contentDisposition =\r\n        response.headers['Content-Disposition'] || response.headers['content-disposition'];\r\n      const filenameMatch = contentDisposition?.match(/filename=\"(.+)\"/);\r\n      const filename = filenameMatch ? decodeURIComponent(filenameMatch[1]) : 'download.zip';\r\n\r\n      link.setAttribute('download', filename);\r\n      document.body.appendChild(link);\r\n      link.click();\r\n\r\n      document.body.removeChild(link);\r\n      window.URL.revokeObjectURL(url);\r\n\r\n      toast.success(`Đã bắt đầu tải xuống ${paths.length} mục`);\r\n    } catch (error) {\r\n      console.error('Error downloading files:', error);\r\n      toast.error('Không thể tải xuống tập tin');\r\n    }\r\n  };\r\n\r\n  const isInFolder = currentFolderPath.length > 0;\r\n\r\n  // ── Render ──\r\n  return (\r\n    <>\r\n      <div className=\"border rounded-lg bg-blue-50/50 overflow-hidden\">\r\n        <div className=\"h-[32px] px-3\">\r\n          <div className=\"flex items-center justify-between h-full\">\r\n            <div className=\"flex items-center gap-2 mr-2 flex-1\">\r\n              {/* Folder Navigation Breadcrumb */}\r\n              <div className=\"flex items-center gap-1\">\r\n                <FileText className=\"h-4 w-4 text-blue-600\" />\r\n              </div>\r\n\r\n              <Badge variant=\"secondary\">Tài liệu chờ duyệt ({totalAllItems})</Badge>\r\n            </div>\r\n\r\n            <div className=\"flex gap-2\">\r\n              <Dialog open={showTableDialog} onOpenChange={setShowTableDialog}>\r\n                <DialogTrigger asChild>\r\n                  <Button\r\n                    variant=\"outline\"\r\n                    size=\"sm\"\r\n                    disabled={isFetching || isLoading}\r\n                    className=\"h-7 px-2 text-xs\"\r\n                  >\r\n                    <Folder className=\"h-3.5 w-3.5\" />\r\n                  </Button>\r\n                </DialogTrigger>\r\n                <DialogContent className=\"max-w-5xl max-h-[80vh] overflow-y-auto\">\r\n                  <DialogHeader>\r\n                    <DialogTitle>Danh sách tài liệu chờ duyệt</DialogTitle>\r\n                    <DialogDescription>\r\n                      {total} tài liệu cần duyệt\r\n                      {isInFolder && (\r\n                        <span className=\"block mt-1 text-blue-600 font-medium\">\r\n                          <>\r\n                            <div className=\"flex items-center gap-1\">\r\n                              Thư mục:{' '}\r\n                              {breadcrumbPaths.map((bp, idx) => (\r\n                                <span key={bp.path} className=\"flex items-center\">\r\n                                  <button\r\n                                    onClick={() => setCurrentFolderPath(bp.path)}\r\n                                    className=\"h-6 px-2 text-sm text-blue-600 hover:text-blue-700 hover:bg-blue-100 rounded transition-colors\"\r\n                                  >\r\n                                    {bp.label === 'pending_approval_external'\r\n                                      ? 'kho_doi_ngoai'\r\n                                      : bp.label}\r\n                                  </button>\r\n                                  {idx < breadcrumbPaths.length - 1 && (\r\n                                    <span className=\"text-gray-400 mx-1\">/</span>\r\n                                  )}\r\n                                </span>\r\n                              ))}\r\n                            </div>\r\n                          </>\r\n                        </span>\r\n                      )}\r\n                    </DialogDescription>\r\n                  </DialogHeader>\r\n\r\n                  {/* Search & Bulk Actions Bar */}\r\n                  <div className=\"p-3 -mx-6 px-6 border-b bg-gray-50 -mt-[1px] flex items-center gap-3\">\r\n                    <input\r\n                      type=\"text\"\r\n                      placeholder=\"Tìm kiếm tên file, đường dẫn...\"\r\n                      value={keyword}\r\n                      onChange={(e) => {\r\n                        setKeyword(e.target.value);\r\n                        setPage(1);\r\n                      }}\r\n                      className=\"flex-1 px-3 py-2 text-sm border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\r\n                    />\r\n\r\n                    {selectedKeys.size > 0 && (\r\n                      <div className=\"flex items-center gap-2\">\r\n                        <Badge variant=\"outline\">Đã chọn: {selectedKeys.size}</Badge>\r\n                        <Button\r\n                          variant=\"outline\"\r\n                          size=\"sm\"\r\n                          onClick={handleBulkApprove}\r\n                          disabled={isBulkApproving}\r\n                          className=\"bg-green-50 text-green-700 border-green-200 hover:bg-green-100\"\r\n                        >\r\n                          Duyệt chọn\r\n                        </Button>\r\n                        <Button\r\n                          variant=\"outline\"\r\n                          size=\"sm\"\r\n                          onClick={handleBulkReject}\r\n                          disabled={isBulkRejecting}\r\n                          className=\"bg-red-50 text-red-700 border-red-200 hover:bg-red-100\"\r\n                        >\r\n                          Từ chối chọn\r\n                        </Button>\r\n                      </div>\r\n                    )}\r\n                  </div>\r\n\r\n                  {/* Table Content - Scrollable */}\r\n                  <div className=\"max-h-[60vh] overflow-auto mt-2\">\r\n                    <Table>\r\n                      <TableHeader>\r\n                        <TableRow>\r\n                          <TableHead className=\"w-12\">\r\n                            <Checkbox\r\n                              checked={\r\n                                selectableDocuments.length > 0 &&\r\n                                selectedKeys.size === selectableDocuments.length &&\r\n                                selectableDocuments.every((doc) => selectedKeys.has(doc.tempPath))\r\n                              }\r\n                              onCheckedChange={(checked) => {\r\n                                if (checked) {\r\n                                  setSelectedKeys(\r\n                                    new Set(selectableDocuments.map((d) => d.tempPath)),\r\n                                  );\r\n                                } else {\r\n                                  setSelectedKeys(new Set());\r\n                                }\r\n                              }}\r\n                            />\r\n                          </TableHead>\r\n                          <TableHead>Tên file</TableHead>\r\n                          <TableHead>Kích thước</TableHead>\r\n                          <TableHead>Người tạo</TableHead>\r\n                          {/* Người sửa đổi gần nhất, độc lập với người tạo */}\r\n                          <TableHead>Người sửa đổi</TableHead>\r\n                          <TableHead>Ngày sửa</TableHead>\r\n                          <TableHead>Trạng thái</TableHead>\r\n                          <TableHead className=\"text-right\">Thao tác</TableHead>\r\n                        </TableRow>\r\n                      </TableHeader>\r\n                      <TableBody>\r\n                        {isLoading ? (\r\n                          <TableRow>\r\n                            <TableCell colSpan={8} className=\"text-center py-8\">\r\n                              <Loader2 className=\"h-6 w-6 animate-spin mx-auto\" />\r\n                            </TableCell>\r\n                          </TableRow>\r\n                        ) : filteredDocuments.length === 0 ? (\r\n                          <TableRow>\r\n                            <TableCell colSpan={8}>\r\n                              <EmptyPendingState isFetching={isFetching} />\r\n                            </TableCell>\r\n                          </TableRow>\r\n                        ) : (\r\n                          filteredDocuments.map((doc) => (\r\n                            <TableRow\r\n                              key={doc.metadataPath || doc.tempPath || doc.id}\r\n                              className={doc.isFolder ? 'cursor-pointer hover:bg-blue-50' : ''}\r\n                              onClick={() => doc.isFolder && handleFolderClick(doc)}\r\n                            >\r\n                              <TableCell>\r\n                                <Checkbox\r\n                                  checked={doc.isFolder ? false : selectedKeys.has(doc.tempPath)}\r\n                                  onCheckedChange={(checked) => {\r\n                                    if (checked && !doc.isFolder) {\r\n                                      setSelectedKeys((prev) => new Set(prev).add(doc.tempPath));\r\n                                    }\r\n                                  }}\r\n                                  disabled={doc.isFolder}\r\n                                />\r\n                              </TableCell>\r\n                              <TableCell className=\"max-w-xs\">\r\n                                <div className=\"flex items-center gap-2 truncate\">\r\n                                  {doc.isFolder ? (\r\n                                    <Folder className=\"h-4 w-4 text-blue-400 flex-shrink-0\" />\r\n                                  ) : (\r\n                                    <FileText className=\"h-4 w-4 text-gray-400 flex-shrink-0\" />\r\n                                  )}\r\n                                  <span className=\"font-medium\">{doc.fileName}</span>\r\n                                  {doc.isFolder && (\r\n                                    <span className=\"text-xs text-blue-500 bg-blue-50 px-1.5 py-0.5 rounded\">\r\n                                      folder\r\n                                    </span>\r\n                                  )}\r\n                                </div>\r\n                              </TableCell>\r\n                              <TableCell>{doc.isFolder ? '-' : formatFileSize(doc.size)}</TableCell>\r\n                              <TableCell>{doc.creator || '-'}</TableCell>\r\n                              <TableCell>{doc.modifiedBy || '-'}</TableCell>\r\n                              <TableCell>\r\n                                {doc.modifiedAt ? formatDate(doc.modifiedAt) : '-'}\r\n                              </TableCell>\r\n                              <TableCell>\r\n                                {doc.isFolder ? (\r\n                                  <Badge\r\n                                    variant=\"outline\"\r\n                                    className=\"bg-blue-50 text-blue-700 border-blue-200\"\r\n                                  >\r\n                                    <FolderOpen className=\"h-3 w-3 mr-1\" />\r\n                                    Thư mục\r\n                                  </Badge>\r\n                                ) : (\r\n                                  <Badge\r\n                                    variant=\"outline\"\r\n                                    className=\"bg-yellow-50 text-yellow-700 border-yellow-200\"\r\n                                  >\r\n                                    Chờ duyệt\r\n                                  </Badge>\r\n                                )}\r\n                              </TableCell>\r\n                              <TableCell className=\"text-right\">\r\n                                {doc.isFolder ? (\r\n                                  <TooltipProvider>\r\n                                    <Tooltip>\r\n                                      <TooltipTrigger asChild>\r\n                                        <Button\r\n                                          variant=\"ghost\"\r\n                                          size=\"icon\"\r\n                                          onClick={(e) => {\r\n                                            e.stopPropagation();\r\n                                            handleFolderClick(doc);\r\n                                          }}\r\n                                          className=\"text-blue-600 hover:bg-blue-50\"\r\n                                        >\r\n                                          <FolderOpen className=\"h-4 w-4\" />\r\n                                        </Button>\r\n                                      </TooltipTrigger>\r\n                                      <TooltipContent>Mở thư mục</TooltipContent>\r\n                                    </Tooltip>\r\n                                  </TooltipProvider>\r\n                                ) : (\r\n                                  <TooltipProvider>\r\n                                    <div className=\"flex items-center justify-end gap-1\">\r\n                                      <Tooltip>\r\n                                        <TooltipTrigger asChild>\r\n                                          <Button\r\n                                            variant=\"ghost\"\r\n                                            size=\"icon\"\r\n                                            onClick={(e) => {\r\n                                              e.stopPropagation();\r\n                                              handleDownload([doc.tempPath]);\r\n                                            }}\r\n                                          >\r\n                                            <Download className=\"h-4 w-4\" />\r\n                                          </Button>\r\n                                        </TooltipTrigger>\r\n                                        <TooltipContent>Tải xuống</TooltipContent>\r\n                                      </Tooltip>\r\n                                      <Tooltip>\r\n                                        <TooltipTrigger asChild>\r\n                                          <Button\r\n                                            variant=\"ghost\"\r\n                                            size=\"icon\"\r\n                                            onClick={(e) => {\r\n                                              e.stopPropagation();\r\n                                              handleApprove(doc);\r\n                                            }}\r\n                                            className=\"text-green-600 hover:bg-green-50\"\r\n                                          >\r\n                                            <CheckCircle className=\"h-4 w-4\" />\r\n                                          </Button>\r\n                                        </TooltipTrigger>\r\n                                        <TooltipContent>Duyệt</TooltipContent>\r\n                                      </Tooltip>\r\n                                      <Tooltip>\r\n                                        <TooltipTrigger asChild>\r\n                                          <Button\r\n                                            variant=\"ghost\"\r\n                                            size=\"icon\"\r\n                                            onClick={(e) => {\r\n                                              e.stopPropagation();\r\n                                              handleReject(doc);\r\n                                            }}\r\n                                            className=\"text-red-600 hover:bg-red-50\"\r\n                                          >\r\n                                            <XCircle className=\"h-4 w-4\" />\r\n                                          </Button>\r\n                                        </TooltipTrigger>\r\n                                        <TooltipContent>Từ chối</TooltipContent>\r\n                                      </Tooltip>\r\n                                    </div>\r\n                                  </TooltipProvider>\r\n                                )}\r\n                              </TableCell>\r\n                            </TableRow>\r\n                          ))\r\n                        )}\r\n                      </TableBody>\r\n                    </Table>\r\n                  </div>\r\n\r\n                  {/* Pagination */}\r\n                  {!isLoading && total > 20 && (\r\n                    <div className=\"flex items-center justify-between p-3 border-t -mx-6 px-6 bg-gray-50\">\r\n                      <p className=\"text-sm text-gray-500\">\r\n                        Trang {page} / {totalPages}\r\n                      </p>\r\n                      <div className=\"flex items-center gap-2\">\r\n                        <Button\r\n                          variant=\"outline\"\r\n                          size=\"sm\"\r\n                          onClick={() => setPage((p) => Math.max(1, p - 1))}\r\n                          disabled={page <= 1}\r\n                        >\r\n                          Trước\r\n                        </Button>\r\n                        {Array.from({ length: Math.min(5, totalPages) }, (_, i) => (\r\n                          <Button\r\n                            key={i + 1}\r\n                            variant=\"outline\"\r\n                            size=\"sm\"\r\n                            onClick={() => setPage(i + 1)}\r\n                            className={\r\n                              page === i + 1 ? 'bg-blue-600 text-white border-blue-600' : ''\r\n                            }\r\n                          >\r\n                            {i + 1}\r\n                          </Button>\r\n                        ))}\r\n                        <Button\r\n                          variant=\"outline\"\r\n                          size=\"sm\"\r\n                          onClick={() => setPage((p) => Math.min(totalPages, p + 1))}\r\n                          disabled={page >= totalPages}\r\n                        >\r\n                          Sau\r\n                        </Button>\r\n                      </div>\r\n                    </div>\r\n                  )}\r\n                </DialogContent>\r\n              </Dialog>\r\n              <Button\r\n                variant=\"outline\"\r\n                size=\"sm\"\r\n                onClick={handleRefresh}\r\n                disabled={isFetching || isLoading}\r\n                className=\"h-7 px-2 text-xs\"\r\n              >\r\n                <RefreshCw className={`h-3.5 w-3.5 ${isFetching ? 'animate-spin' : ''}`} />\r\n              </Button>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n\r\n      {/* Dialogs */}\r\n      <ApproveConfirmDialog\r\n        open={approveDialogOpen}\r\n        onClose={() => {\r\n          setApproveDialogOpen(false);\r\n          setActiveDocument(null);\r\n        }}\r\n        onConfirm={handleConfirmApprove}\r\n        document={activeDocument}\r\n        loading={isApproving}\r\n      />\r\n      <RejectConfirmDialog\r\n        open={rejectDialogOpen}\r\n        onClose={() => {\r\n          setRejectDialogOpen(false);\r\n          setActiveDocument(null);\r\n        }}\r\n        onConfirm={handleConfirmReject}\r\n        document={activeDocument}\r\n        loading={isRejecting}\r\n        rejectionReason={rejectionReason}\r\n        setRejectionReason={setRejectionReason}\r\n      />\r\n    </>\r\n  );\r\n}\r\n","import { Slot } from '@radix-ui/react-slot';\r\nimport { ChevronRight, MoreHorizontal } from 'lucide-react';\r\nimport * as React from 'react';\r\n\r\nimport { cn } from '@/lib/utils';\r\n\r\nconst Breadcrumb = React.forwardRef<\r\n  HTMLElement,\r\n  React.ComponentPropsWithoutRef<'nav'> & {\r\n    separator?: React.ReactNode;\r\n  }\r\n>(({ className, ...props }, ref) => (\r\n  <nav\r\n    ref={ref}\r\n    aria-label=\"breadcrumb\"\r\n    className={cn('s3-explr-ui-breadcrumb', className)}\r\n    {...props}\r\n  />\r\n));\r\nBreadcrumb.displayName = 'Breadcrumb';\r\n\r\nconst BreadcrumbList = React.forwardRef<HTMLOListElement, React.ComponentPropsWithoutRef<'ol'>>(\r\n  ({ className, ...props }, ref) => (\r\n    <ol\r\n      ref={ref}\r\n      className={cn(\r\n        'flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5',\r\n        's3-explr-ui-breadcrumb-list',\r\n        className,\r\n      )}\r\n      {...props}\r\n    />\r\n  ),\r\n);\r\nBreadcrumbList.displayName = 'BreadcrumbList';\r\n\r\nconst BreadcrumbItem = React.forwardRef<HTMLLIElement, React.ComponentPropsWithoutRef<'li'>>(\r\n  ({ className, ...props }, ref) => (\r\n    <li\r\n      ref={ref}\r\n      className={cn('inline-flex items-center gap-1.5', 's3-explr-ui-breadcrumb-item', className)}\r\n      {...props}\r\n    />\r\n  ),\r\n);\r\nBreadcrumbItem.displayName = 'BreadcrumbItem';\r\n\r\nconst BreadcrumbLink = React.forwardRef<\r\n  HTMLAnchorElement,\r\n  React.ComponentPropsWithoutRef<'a'> & {\r\n    asChild?: boolean;\r\n  }\r\n>(({ asChild, className, ...props }, ref) => {\r\n  const Comp = asChild ? Slot : 'a';\r\n\r\n  return (\r\n    <Comp\r\n      ref={ref}\r\n      className={cn(\r\n        'transition-colors hover:text-foreground',\r\n        's3-explr-ui-breadcrumb-link',\r\n        className,\r\n      )}\r\n      {...props}\r\n    />\r\n  );\r\n});\r\nBreadcrumbLink.displayName = 'BreadcrumbLink';\r\n\r\nconst BreadcrumbPage = React.forwardRef<HTMLSpanElement, React.ComponentPropsWithoutRef<'span'>>(\r\n  ({ className, ...props }, ref) => (\r\n    <span\r\n      ref={ref}\r\n      role=\"link\"\r\n      aria-disabled=\"true\"\r\n      aria-current=\"page\"\r\n      className={cn('font-normal text-foreground', 's3-explr-ui-breadcrumb-page', className)}\r\n      {...props}\r\n    />\r\n  ),\r\n);\r\nBreadcrumbPage.displayName = 'BreadcrumbPage';\r\n\r\nconst BreadcrumbSeparator = ({ children, className, ...props }: React.ComponentProps<'li'>) => (\r\n  <li\r\n    role=\"presentation\"\r\n    aria-hidden=\"true\"\r\n    className={cn('[&>svg]:w-3.5 [&>svg]:h-3.5', 's3-explr-ui-breadcrumb-separator', className)}\r\n    {...props}\r\n  >\r\n    {children ?? <ChevronRight />}\r\n  </li>\r\n);\r\nBreadcrumbSeparator.displayName = 'BreadcrumbSeparator';\r\n\r\nconst BreadcrumbEllipsis = ({ className, ...props }: React.ComponentProps<'span'>) => (\r\n  <span\r\n    role=\"presentation\"\r\n    aria-hidden=\"true\"\r\n    className={cn(\r\n      'flex h-9 w-9 items-center justify-center',\r\n      's3-explr-ui-breadcrumb-ellipsis',\r\n      className,\r\n    )}\r\n    {...props}\r\n  >\r\n    <MoreHorizontal className=\"h-4 w-4\" />\r\n    <span className=\"sr-only\">More</span>\r\n  </span>\r\n);\r\nBreadcrumbEllipsis.displayName = 'BreadcrumbEllipsis';\r\n\r\nexport {\r\n  Breadcrumb,\r\n  BreadcrumbList,\r\n  BreadcrumbItem,\r\n  BreadcrumbLink,\r\n  BreadcrumbPage,\r\n  BreadcrumbSeparator,\r\n  BreadcrumbEllipsis,\r\n};\r\n","import * as React from 'react';\n\nimport { cn } from '@/lib/utils';\n\nconst Input = React.forwardRef<HTMLInputElement, React.ComponentProps<'input'>>(\n  ({ className, type, ...props }, ref) => {\n    return (\n      <input\n        type={type}\n        className={cn(\n          's3-explr-ui-input',\n          'flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',\n          className,\n        )}\n        ref={ref}\n        {...props}\n      />\n    );\n  },\n);\nInput.displayName = 'Input';\n\nexport { Input };\n","\"use client\";\n\n// src/label.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Label\";\nvar Label = React.forwardRef((props, forwardedRef) => {\n  return /* @__PURE__ */ jsx(\n    Primitive.label,\n    {\n      ...props,\n      ref: forwardedRef,\n      onMouseDown: (event) => {\n        const target = event.target;\n        if (target.closest(\"button, input, select, textarea\")) return;\n        props.onMouseDown?.(event);\n        if (!event.defaultPrevented && event.detail > 1) event.preventDefault();\n      }\n    }\n  );\n});\nLabel.displayName = NAME;\nvar Root = Label;\nexport {\n  Label,\n  Root\n};\n//# sourceMappingURL=index.mjs.map\n","'use client';\n\nimport * as LabelPrimitive from '@radix-ui/react-label';\nimport { type VariantProps, cva } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '@/lib/utils';\n\nconst labelVariants = cva(\n  'text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70 s3-explr-ui-label',\n  {\n    variants: {\n      variant: {\n        default: 's3-explr-ui-label-default',\n        required: 's3-explr-ui-label-required',\n        disabled: 's3-explr-ui-label-disabled',\n      },\n      size: {\n        default: 's3-explr-ui-label-size-default',\n        sm: 's3-explr-ui-label-size-sm',\n        lg: 's3-explr-ui-label-size-lg',\n      },\n    },\n    defaultVariants: {\n      variant: 'default',\n      size: 'default',\n    },\n  },\n);\n\nconst Label = React.forwardRef<\n  React.ElementRef<typeof LabelPrimitive.Root>,\n  React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> & VariantProps<typeof labelVariants>\n>(({ className, variant, size, ...props }, ref) => (\n  <LabelPrimitive.Root\n    ref={ref}\n    className={cn(labelVariants({ variant, size }), className)}\n    {...props}\n  />\n));\nLabel.displayName = LabelPrimitive.Root.displayName;\n\nexport { Label };\n","import { ChevronLeft, ChevronRight, MoreHorizontal } from 'lucide-react';\r\nimport * as React from 'react';\r\n\r\nimport { ButtonProps, buttonVariants } from '@/components/ui/button';\r\nimport { cn } from '@/lib/utils';\r\n\r\nconst Pagination = ({ className, ...props }: React.ComponentProps<'nav'>) => (\r\n  <nav\r\n    role=\"navigation\"\r\n    aria-label=\"pagination\"\r\n    className={cn('mx-auto flex w-full justify-center', className)}\r\n    {...props}\r\n  />\r\n);\r\nPagination.displayName = 'Pagination';\r\n\r\nconst PaginationContent = React.forwardRef<HTMLUListElement, React.ComponentProps<'ul'>>(\r\n  ({ className, ...props }, ref) => (\r\n    <ul ref={ref} className={cn('flex flex-row items-center gap-1', className)} {...props} />\r\n  ),\r\n);\r\nPaginationContent.displayName = 'PaginationContent';\r\n\r\nconst PaginationItem = React.forwardRef<HTMLLIElement, React.ComponentProps<'li'>>(\r\n  ({ className, ...props }, ref) => <li ref={ref} className={cn('', className)} {...props} />,\r\n);\r\nPaginationItem.displayName = 'PaginationItem';\r\n\r\ntype PaginationLinkProps = {\r\n  isActive?: boolean;\r\n} & Pick<ButtonProps, 'size'> &\r\n  React.ComponentProps<'a'>;\r\n\r\nconst PaginationLink = ({ className, isActive, size = 'icon', ...props }: PaginationLinkProps) => (\r\n  <a\r\n    aria-current={isActive ? 'page' : undefined}\r\n    className={cn(\r\n      buttonVariants({\r\n        variant: isActive ? 'outline' : 'ghost',\r\n        size,\r\n      }),\r\n      className,\r\n    )}\r\n    {...props}\r\n  />\r\n);\r\nPaginationLink.displayName = 'PaginationLink';\r\n\r\nconst PaginationPrevious = ({\r\n  className,\r\n  ...props\r\n}: React.ComponentProps<typeof PaginationLink>) => (\r\n  <PaginationLink\r\n    aria-label=\"Go to previous page\"\r\n    size=\"default\"\r\n    className={cn('gap-1 pl-2.5', className)}\r\n    {...props}\r\n  >\r\n    <ChevronLeft className=\"h-4 w-4\" />\r\n    <span>Previous</span>\r\n  </PaginationLink>\r\n);\r\nPaginationPrevious.displayName = 'PaginationPrevious';\r\n\r\nconst PaginationNext = ({ className, ...props }: React.ComponentProps<typeof PaginationLink>) => (\r\n  <PaginationLink\r\n    aria-label=\"Go to next page\"\r\n    size=\"default\"\r\n    className={cn('gap-1 pr-2.5', className)}\r\n    {...props}\r\n  >\r\n    <span>Next</span>\r\n    <ChevronRight className=\"h-4 w-4\" />\r\n  </PaginationLink>\r\n);\r\nPaginationNext.displayName = 'PaginationNext';\r\n\r\nconst PaginationEllipsis = ({ className, ...props }: React.ComponentProps<'span'>) => (\r\n  <span\r\n    aria-hidden\r\n    className={cn('flex h-9 w-9 items-center justify-center', className)}\r\n    {...props}\r\n  >\r\n    <MoreHorizontal className=\"h-4 w-4\" />\r\n    <span className=\"sr-only\">More pages</span>\r\n  </span>\r\n);\r\nPaginationEllipsis.displayName = 'PaginationEllipsis';\r\n\r\nexport {\r\n  Pagination,\r\n  PaginationContent,\r\n  PaginationLink,\r\n  PaginationItem,\r\n  PaginationPrevious,\r\n  PaginationNext,\r\n  PaginationEllipsis,\r\n};\r\n","// src/number.ts\nfunction clamp(value, [min, max]) {\n  return Math.min(max, Math.max(min, value));\n}\nexport {\n  clamp\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/collection-legacy.tsx\nimport * as React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createCollection(name) {\n  const PROVIDER_NAME = name + \"CollectionProvider\";\n  const [createCollectionContext, createCollectionScope] = createContextScope(PROVIDER_NAME);\n  const [CollectionProviderImpl, useCollectionContext] = createCollectionContext(\n    PROVIDER_NAME,\n    { collectionRef: { current: null }, itemMap: /* @__PURE__ */ new Map() }\n  );\n  const CollectionProvider = (props) => {\n    const { scope, children } = props;\n    const ref = React.useRef(null);\n    const itemMap = React.useRef(/* @__PURE__ */ new Map()).current;\n    return /* @__PURE__ */ jsx(CollectionProviderImpl, { scope, itemMap, collectionRef: ref, children });\n  };\n  CollectionProvider.displayName = PROVIDER_NAME;\n  const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n  const CollectionSlotImpl = createSlot(COLLECTION_SLOT_NAME);\n  const CollectionSlot = React.forwardRef(\n    (props, forwardedRef) => {\n      const { scope, children } = props;\n      const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n      const composedRefs = useComposedRefs(forwardedRef, context.collectionRef);\n      return /* @__PURE__ */ jsx(CollectionSlotImpl, { ref: composedRefs, children });\n    }\n  );\n  CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n  const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n  const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n  const CollectionItemSlotImpl = createSlot(ITEM_SLOT_NAME);\n  const CollectionItemSlot = React.forwardRef(\n    (props, forwardedRef) => {\n      const { scope, children, ...itemData } = props;\n      const ref = React.useRef(null);\n      const composedRefs = useComposedRefs(forwardedRef, ref);\n      const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n      React.useEffect(() => {\n        context.itemMap.set(ref, { ref, ...itemData });\n        return () => void context.itemMap.delete(ref);\n      });\n      return /* @__PURE__ */ jsx(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n    }\n  );\n  CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n  function useCollection(scope) {\n    const context = useCollectionContext(name + \"CollectionConsumer\", scope);\n    const getItems = React.useCallback(() => {\n      const collectionNode = context.collectionRef.current;\n      if (!collectionNode) return [];\n      const orderedNodes = Array.from(collectionNode.querySelectorAll(`[${ITEM_DATA_ATTR}]`));\n      const items = Array.from(context.itemMap.values());\n      const orderedItems = items.sort(\n        (a, b) => orderedNodes.indexOf(a.ref.current) - orderedNodes.indexOf(b.ref.current)\n      );\n      return orderedItems;\n    }, [context.collectionRef, context.itemMap]);\n    return getItems;\n  }\n  return [\n    { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n    useCollection,\n    createCollectionScope\n  ];\n}\n\n// src/collection.tsx\nimport * as React2 from \"react\";\nimport { createContextScope as createContextScope2 } from \"@radix-ui/react-context\";\nimport { useComposedRefs as useComposedRefs2 } from \"@radix-ui/react-compose-refs\";\nimport { createSlot as createSlot2 } from \"@radix-ui/react-slot\";\n\n// src/ordered-dictionary.ts\nvar __instanciated = /* @__PURE__ */ new WeakMap();\nvar OrderedDict = class _OrderedDict extends Map {\n  #keys;\n  constructor(entries) {\n    super(entries);\n    this.#keys = [...super.keys()];\n    __instanciated.set(this, true);\n  }\n  set(key, value) {\n    if (__instanciated.get(this)) {\n      if (this.has(key)) {\n        this.#keys[this.#keys.indexOf(key)] = key;\n      } else {\n        this.#keys.push(key);\n      }\n    }\n    super.set(key, value);\n    return this;\n  }\n  insert(index, key, value) {\n    const has = this.has(key);\n    const length = this.#keys.length;\n    const relativeIndex = toSafeInteger(index);\n    let actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n    const safeIndex = actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n    if (safeIndex === this.size || has && safeIndex === this.size - 1 || safeIndex === -1) {\n      this.set(key, value);\n      return this;\n    }\n    const size = this.size + (has ? 0 : 1);\n    if (relativeIndex < 0) {\n      actualIndex++;\n    }\n    const keys = [...this.#keys];\n    let nextValue;\n    let shouldSkip = false;\n    for (let i = actualIndex; i < size; i++) {\n      if (actualIndex === i) {\n        let nextKey = keys[i];\n        if (keys[i] === key) {\n          nextKey = keys[i + 1];\n        }\n        if (has) {\n          this.delete(key);\n        }\n        nextValue = this.get(nextKey);\n        this.set(key, value);\n      } else {\n        if (!shouldSkip && keys[i - 1] === key) {\n          shouldSkip = true;\n        }\n        const currentKey = keys[shouldSkip ? i : i - 1];\n        const currentValue = nextValue;\n        nextValue = this.get(currentKey);\n        this.delete(currentKey);\n        this.set(currentKey, currentValue);\n      }\n    }\n    return this;\n  }\n  with(index, key, value) {\n    const copy = new _OrderedDict(this);\n    copy.insert(index, key, value);\n    return copy;\n  }\n  before(key) {\n    const index = this.#keys.indexOf(key) - 1;\n    if (index < 0) {\n      return void 0;\n    }\n    return this.entryAt(index);\n  }\n  /**\n   * Sets a new key-value pair at the position before the given key.\n   */\n  setBefore(key, newKey, value) {\n    const index = this.#keys.indexOf(key);\n    if (index === -1) {\n      return this;\n    }\n    return this.insert(index, newKey, value);\n  }\n  after(key) {\n    let index = this.#keys.indexOf(key);\n    index = index === -1 || index === this.size - 1 ? -1 : index + 1;\n    if (index === -1) {\n      return void 0;\n    }\n    return this.entryAt(index);\n  }\n  /**\n   * Sets a new key-value pair at the position after the given key.\n   */\n  setAfter(key, newKey, value) {\n    const index = this.#keys.indexOf(key);\n    if (index === -1) {\n      return this;\n    }\n    return this.insert(index + 1, newKey, value);\n  }\n  first() {\n    return this.entryAt(0);\n  }\n  last() {\n    return this.entryAt(-1);\n  }\n  clear() {\n    this.#keys = [];\n    return super.clear();\n  }\n  delete(key) {\n    const deleted = super.delete(key);\n    if (deleted) {\n      this.#keys.splice(this.#keys.indexOf(key), 1);\n    }\n    return deleted;\n  }\n  deleteAt(index) {\n    const key = this.keyAt(index);\n    if (key !== void 0) {\n      return this.delete(key);\n    }\n    return false;\n  }\n  at(index) {\n    const key = at(this.#keys, index);\n    if (key !== void 0) {\n      return this.get(key);\n    }\n  }\n  entryAt(index) {\n    const key = at(this.#keys, index);\n    if (key !== void 0) {\n      return [key, this.get(key)];\n    }\n  }\n  indexOf(key) {\n    return this.#keys.indexOf(key);\n  }\n  keyAt(index) {\n    return at(this.#keys, index);\n  }\n  from(key, offset) {\n    const index = this.indexOf(key);\n    if (index === -1) {\n      return void 0;\n    }\n    let dest = index + offset;\n    if (dest < 0) dest = 0;\n    if (dest >= this.size) dest = this.size - 1;\n    return this.at(dest);\n  }\n  keyFrom(key, offset) {\n    const index = this.indexOf(key);\n    if (index === -1) {\n      return void 0;\n    }\n    let dest = index + offset;\n    if (dest < 0) dest = 0;\n    if (dest >= this.size) dest = this.size - 1;\n    return this.keyAt(dest);\n  }\n  find(predicate, thisArg) {\n    let index = 0;\n    for (const entry of this) {\n      if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n        return entry;\n      }\n      index++;\n    }\n    return void 0;\n  }\n  findIndex(predicate, thisArg) {\n    let index = 0;\n    for (const entry of this) {\n      if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n        return index;\n      }\n      index++;\n    }\n    return -1;\n  }\n  filter(predicate, thisArg) {\n    const entries = [];\n    let index = 0;\n    for (const entry of this) {\n      if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n        entries.push(entry);\n      }\n      index++;\n    }\n    return new _OrderedDict(entries);\n  }\n  map(callbackfn, thisArg) {\n    const entries = [];\n    let index = 0;\n    for (const entry of this) {\n      entries.push([entry[0], Reflect.apply(callbackfn, thisArg, [entry, index, this])]);\n      index++;\n    }\n    return new _OrderedDict(entries);\n  }\n  reduce(...args) {\n    const [callbackfn, initialValue] = args;\n    let index = 0;\n    let accumulator = initialValue ?? this.at(0);\n    for (const entry of this) {\n      if (index === 0 && args.length === 1) {\n        accumulator = entry;\n      } else {\n        accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n      }\n      index++;\n    }\n    return accumulator;\n  }\n  reduceRight(...args) {\n    const [callbackfn, initialValue] = args;\n    let accumulator = initialValue ?? this.at(-1);\n    for (let index = this.size - 1; index >= 0; index--) {\n      const entry = this.at(index);\n      if (index === this.size - 1 && args.length === 1) {\n        accumulator = entry;\n      } else {\n        accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n      }\n    }\n    return accumulator;\n  }\n  toSorted(compareFn) {\n    const entries = [...this.entries()].sort(compareFn);\n    return new _OrderedDict(entries);\n  }\n  toReversed() {\n    const reversed = new _OrderedDict();\n    for (let index = this.size - 1; index >= 0; index--) {\n      const key = this.keyAt(index);\n      const element = this.get(key);\n      reversed.set(key, element);\n    }\n    return reversed;\n  }\n  toSpliced(...args) {\n    const entries = [...this.entries()];\n    entries.splice(...args);\n    return new _OrderedDict(entries);\n  }\n  slice(start, end) {\n    const result = new _OrderedDict();\n    let stop = this.size - 1;\n    if (start === void 0) {\n      return result;\n    }\n    if (start < 0) {\n      start = start + this.size;\n    }\n    if (end !== void 0 && end > 0) {\n      stop = end - 1;\n    }\n    for (let index = start; index <= stop; index++) {\n      const key = this.keyAt(index);\n      const element = this.get(key);\n      result.set(key, element);\n    }\n    return result;\n  }\n  every(predicate, thisArg) {\n    let index = 0;\n    for (const entry of this) {\n      if (!Reflect.apply(predicate, thisArg, [entry, index, this])) {\n        return false;\n      }\n      index++;\n    }\n    return true;\n  }\n  some(predicate, thisArg) {\n    let index = 0;\n    for (const entry of this) {\n      if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n        return true;\n      }\n      index++;\n    }\n    return false;\n  }\n};\nfunction at(array, index) {\n  if (\"at\" in Array.prototype) {\n    return Array.prototype.at.call(array, index);\n  }\n  const actualIndex = toSafeIndex(array, index);\n  return actualIndex === -1 ? void 0 : array[actualIndex];\n}\nfunction toSafeIndex(array, index) {\n  const length = array.length;\n  const relativeIndex = toSafeInteger(index);\n  const actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n  return actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n}\nfunction toSafeInteger(number) {\n  return number !== number || number === 0 ? 0 : Math.trunc(number);\n}\n\n// src/collection.tsx\nimport { jsx as jsx2 } from \"react/jsx-runtime\";\nfunction createCollection2(name) {\n  const PROVIDER_NAME = name + \"CollectionProvider\";\n  const [createCollectionContext, createCollectionScope] = createContextScope2(PROVIDER_NAME);\n  const [CollectionContextProvider, useCollectionContext] = createCollectionContext(\n    PROVIDER_NAME,\n    {\n      collectionElement: null,\n      collectionRef: { current: null },\n      collectionRefObject: { current: null },\n      itemMap: new OrderedDict(),\n      setItemMap: () => void 0\n    }\n  );\n  const CollectionProvider = ({ state, ...props }) => {\n    return state ? /* @__PURE__ */ jsx2(CollectionProviderImpl, { ...props, state }) : /* @__PURE__ */ jsx2(CollectionInit, { ...props });\n  };\n  CollectionProvider.displayName = PROVIDER_NAME;\n  const CollectionInit = (props) => {\n    const state = useInitCollection();\n    return /* @__PURE__ */ jsx2(CollectionProviderImpl, { ...props, state });\n  };\n  CollectionInit.displayName = PROVIDER_NAME + \"Init\";\n  const CollectionProviderImpl = (props) => {\n    const { scope, children, state } = props;\n    const ref = React2.useRef(null);\n    const [collectionElement, setCollectionElement] = React2.useState(\n      null\n    );\n    const composeRefs = useComposedRefs2(ref, setCollectionElement);\n    const [itemMap, setItemMap] = state;\n    React2.useEffect(() => {\n      if (!collectionElement) return;\n      const observer = getChildListObserver(() => {\n      });\n      observer.observe(collectionElement, {\n        childList: true,\n        subtree: true\n      });\n      return () => {\n        observer.disconnect();\n      };\n    }, [collectionElement]);\n    return /* @__PURE__ */ jsx2(\n      CollectionContextProvider,\n      {\n        scope,\n        itemMap,\n        setItemMap,\n        collectionRef: composeRefs,\n        collectionRefObject: ref,\n        collectionElement,\n        children\n      }\n    );\n  };\n  CollectionProviderImpl.displayName = PROVIDER_NAME + \"Impl\";\n  const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n  const CollectionSlotImpl = createSlot2(COLLECTION_SLOT_NAME);\n  const CollectionSlot = React2.forwardRef(\n    (props, forwardedRef) => {\n      const { scope, children } = props;\n      const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n      const composedRefs = useComposedRefs2(forwardedRef, context.collectionRef);\n      return /* @__PURE__ */ jsx2(CollectionSlotImpl, { ref: composedRefs, children });\n    }\n  );\n  CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n  const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n  const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n  const CollectionItemSlotImpl = createSlot2(ITEM_SLOT_NAME);\n  const CollectionItemSlot = React2.forwardRef(\n    (props, forwardedRef) => {\n      const { scope, children, ...itemData } = props;\n      const ref = React2.useRef(null);\n      const [element, setElement] = React2.useState(null);\n      const composedRefs = useComposedRefs2(forwardedRef, ref, setElement);\n      const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n      const { setItemMap } = context;\n      const itemDataRef = React2.useRef(itemData);\n      if (!shallowEqual(itemDataRef.current, itemData)) {\n        itemDataRef.current = itemData;\n      }\n      const memoizedItemData = itemDataRef.current;\n      React2.useEffect(() => {\n        const itemData2 = memoizedItemData;\n        setItemMap((map) => {\n          if (!element) {\n            return map;\n          }\n          if (!map.has(element)) {\n            map.set(element, { ...itemData2, element });\n            return map.toSorted(sortByDocumentPosition);\n          }\n          return map.set(element, { ...itemData2, element }).toSorted(sortByDocumentPosition);\n        });\n        return () => {\n          setItemMap((map) => {\n            if (!element || !map.has(element)) {\n              return map;\n            }\n            map.delete(element);\n            return new OrderedDict(map);\n          });\n        };\n      }, [element, memoizedItemData, setItemMap]);\n      return /* @__PURE__ */ jsx2(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n    }\n  );\n  CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n  function useInitCollection() {\n    return React2.useState(new OrderedDict());\n  }\n  function useCollection(scope) {\n    const { itemMap } = useCollectionContext(name + \"CollectionConsumer\", scope);\n    return itemMap;\n  }\n  const functions = {\n    createCollectionScope,\n    useCollection,\n    useInitCollection\n  };\n  return [\n    { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n    functions\n  ];\n}\nfunction shallowEqual(a, b) {\n  if (a === b) return true;\n  if (typeof a !== \"object\" || typeof b !== \"object\") return false;\n  if (a == null || b == null) return false;\n  const keysA = Object.keys(a);\n  const keysB = Object.keys(b);\n  if (keysA.length !== keysB.length) return false;\n  for (const key of keysA) {\n    if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n    if (a[key] !== b[key]) return false;\n  }\n  return true;\n}\nfunction isElementPreceding(a, b) {\n  return !!(b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING);\n}\nfunction sortByDocumentPosition(a, b) {\n  return !a[1].element || !b[1].element ? 0 : isElementPreceding(a[1].element, b[1].element) ? -1 : 1;\n}\nfunction getChildListObserver(callback) {\n  const observer = new MutationObserver((mutationsList) => {\n    for (const mutation of mutationsList) {\n      if (mutation.type === \"childList\") {\n        callback();\n        return;\n      }\n    }\n  });\n  return observer;\n}\nexport {\n  createCollection,\n  createCollection2 as unstable_createCollection\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/direction.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DirectionContext = React.createContext(void 0);\nvar DirectionProvider = (props) => {\n  const { dir, children } = props;\n  return /* @__PURE__ */ jsx(DirectionContext.Provider, { value: dir, children });\n};\nfunction useDirection(localDir) {\n  const globalDir = React.useContext(DirectionContext);\n  return localDir || globalDir || \"ltr\";\n}\nvar Provider = DirectionProvider;\nexport {\n  DirectionProvider,\n  Provider,\n  useDirection\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/select.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { clamp } from \"@radix-ui/number\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { VISUALLY_HIDDEN_STYLES } from \"@radix-ui/react-visually-hidden\";\nimport { hideOthers } from \"aria-hidden\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { Fragment as Fragment2, jsx, jsxs } from \"react/jsx-runtime\";\nvar OPEN_KEYS = [\" \", \"Enter\", \"ArrowUp\", \"ArrowDown\"];\nvar SELECTION_KEYS = [\" \", \"Enter\"];\nvar SELECT_NAME = \"Select\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(SELECT_NAME);\nvar [createSelectContext, createSelectScope] = createContextScope(SELECT_NAME, [\n  createCollectionScope,\n  createPopperScope\n]);\nvar usePopperScope = createPopperScope();\nvar [SelectProviderImpl, useSelectContext] = createSelectContext(SELECT_NAME);\nvar [SelectNativeOptionsProvider, useSelectNativeOptionsContext] = createSelectContext(SELECT_NAME);\nvar PROVIDER_NAME = \"SelectProvider\";\nfunction SelectProvider(props) {\n  const {\n    __scopeSelect,\n    children,\n    open: openProp,\n    defaultOpen,\n    onOpenChange,\n    value: valueProp,\n    defaultValue,\n    onValueChange,\n    dir,\n    name,\n    autoComplete,\n    disabled,\n    required,\n    form,\n    // @ts-expect-error internal render prop used by `Select` to compose its default parts\n    internal_do_not_use_render\n  } = props;\n  const popperScope = usePopperScope(__scopeSelect);\n  const [trigger, setTrigger] = React.useState(null);\n  const [valueNode, setValueNode] = React.useState(null);\n  const [valueNodeHasChildren, setValueNodeHasChildren] = React.useState(false);\n  const direction = useDirection(dir);\n  const [open, setOpen] = useControllableState({\n    prop: openProp,\n    defaultProp: defaultOpen ?? false,\n    onChange: onOpenChange,\n    caller: SELECT_NAME\n  });\n  const [value, setValue] = useControllableState({\n    prop: valueProp,\n    defaultProp: defaultValue,\n    onChange: onValueChange,\n    caller: SELECT_NAME\n  });\n  const triggerPointerDownPosRef = React.useRef(null);\n  const isFormControl = trigger ? !!form || !!trigger.closest(\"form\") : true;\n  const [nativeOptionsSet, setNativeOptionsSet] = React.useState(/* @__PURE__ */ new Set());\n  const contentId = useId();\n  const nativeSelectKey = Array.from(nativeOptionsSet).map((option) => option.props.value).join(\";\");\n  const handleNativeOptionAdd = React.useCallback((option) => {\n    setNativeOptionsSet((prev) => new Set(prev).add(option));\n  }, []);\n  const handleNativeOptionRemove = React.useCallback((option) => {\n    setNativeOptionsSet((prev) => {\n      const optionsSet = new Set(prev);\n      optionsSet.delete(option);\n      return optionsSet;\n    });\n  }, []);\n  const context = {\n    required,\n    trigger,\n    onTriggerChange: setTrigger,\n    valueNode,\n    onValueNodeChange: setValueNode,\n    valueNodeHasChildren,\n    onValueNodeHasChildrenChange: setValueNodeHasChildren,\n    contentId,\n    value,\n    onValueChange: setValue,\n    open,\n    onOpenChange: setOpen,\n    dir: direction,\n    triggerPointerDownPosRef,\n    disabled,\n    name,\n    autoComplete,\n    form,\n    nativeOptions: nativeOptionsSet,\n    nativeSelectKey,\n    isFormControl\n  };\n  return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(SelectProviderImpl, { scope: __scopeSelect, ...context, children: /* @__PURE__ */ jsx(Collection.Provider, { scope: __scopeSelect, children: /* @__PURE__ */ jsx(\n    SelectNativeOptionsProvider,\n    {\n      scope: __scopeSelect,\n      onNativeOptionAdd: handleNativeOptionAdd,\n      onNativeOptionRemove: handleNativeOptionRemove,\n      children: isFunction(internal_do_not_use_render) ? internal_do_not_use_render(context) : children\n    }\n  ) }) }) });\n}\nSelectProvider.displayName = PROVIDER_NAME;\nvar Select = (props) => {\n  const { __scopeSelect, children, ...providerProps } = props;\n  return /* @__PURE__ */ jsx(\n    SelectProvider,\n    {\n      __scopeSelect,\n      ...providerProps,\n      internal_do_not_use_render: ({ isFormControl }) => /* @__PURE__ */ jsxs(Fragment2, { children: [\n        children,\n        isFormControl ? /* @__PURE__ */ jsx(\n          SelectBubbleInput,\n          {\n            __scopeSelect\n          }\n        ) : null\n      ] })\n    }\n  );\n};\nSelect.displayName = SELECT_NAME;\nvar TRIGGER_NAME = \"SelectTrigger\";\nvar SelectTrigger = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeSelect, disabled = false, ...triggerProps } = props;\n    const popperScope = usePopperScope(__scopeSelect);\n    const context = useSelectContext(TRIGGER_NAME, __scopeSelect);\n    const isDisabled = context.disabled || disabled;\n    const composedRefs = useComposedRefs(forwardedRef, context.onTriggerChange);\n    const getItems = useCollection(__scopeSelect);\n    const pointerTypeRef = React.useRef(\"touch\");\n    const [searchRef, handleTypeaheadSearch, resetTypeahead] = useTypeaheadSearch((search) => {\n      const enabledItems = getItems().filter((item) => !item.disabled);\n      const currentItem = enabledItems.find((item) => item.value === context.value);\n      const nextItem = findNextItem(enabledItems, search, currentItem);\n      if (nextItem !== void 0) {\n        context.onValueChange(nextItem.value);\n      }\n    });\n    const handleOpen = (pointerEvent) => {\n      if (!isDisabled) {\n        context.onOpenChange(true);\n        resetTypeahead();\n      }\n      if (pointerEvent) {\n        context.triggerPointerDownPosRef.current = {\n          x: Math.round(pointerEvent.pageX),\n          y: Math.round(pointerEvent.pageY)\n        };\n      }\n    };\n    return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { asChild: true, ...popperScope, children: /* @__PURE__ */ jsx(\n      Primitive.button,\n      {\n        type: \"button\",\n        role: \"combobox\",\n        \"aria-controls\": context.open ? context.contentId : void 0,\n        \"aria-expanded\": context.open,\n        \"aria-required\": context.required,\n        \"aria-autocomplete\": \"none\",\n        dir: context.dir,\n        \"data-state\": context.open ? \"open\" : \"closed\",\n        disabled: isDisabled,\n        \"data-disabled\": isDisabled ? \"\" : void 0,\n        \"data-placeholder\": shouldShowPlaceholder(context.value) ? \"\" : void 0,\n        ...triggerProps,\n        ref: composedRefs,\n        onClick: composeEventHandlers(triggerProps.onClick, (event) => {\n          event.currentTarget.focus();\n          if (pointerTypeRef.current !== \"mouse\") {\n            handleOpen(event);\n          }\n        }),\n        onPointerDown: composeEventHandlers(triggerProps.onPointerDown, (event) => {\n          pointerTypeRef.current = event.pointerType;\n          const target = event.target;\n          if (target.hasPointerCapture(event.pointerId)) {\n            target.releasePointerCapture(event.pointerId);\n          }\n          if (event.button === 0 && event.ctrlKey === false && event.pointerType === \"mouse\") {\n            handleOpen(event);\n            event.preventDefault();\n          }\n        }),\n        onKeyDown: composeEventHandlers(triggerProps.onKeyDown, (event) => {\n          const isTypingAhead = searchRef.current !== \"\";\n          const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n          if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);\n          if (isTypingAhead && event.key === \" \") return;\n          if (OPEN_KEYS.includes(event.key)) {\n            handleOpen();\n            event.preventDefault();\n          }\n        })\n      }\n    ) });\n  }\n);\nSelectTrigger.displayName = TRIGGER_NAME;\nvar VALUE_NAME = \"SelectValue\";\nvar SelectValue = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeSelect, className, style, children, placeholder = \"\", ...valueProps } = props;\n    const context = useSelectContext(VALUE_NAME, __scopeSelect);\n    const { onValueNodeHasChildrenChange } = context;\n    const hasChildren = children !== void 0;\n    const composedRefs = useComposedRefs(forwardedRef, context.onValueNodeChange);\n    useLayoutEffect(() => {\n      onValueNodeHasChildrenChange(hasChildren);\n    }, [onValueNodeHasChildrenChange, hasChildren]);\n    const showPlaceholder = shouldShowPlaceholder(context.value);\n    return /* @__PURE__ */ jsx(\n      Primitive.span,\n      {\n        ...valueProps,\n        asChild: showPlaceholder ? false : valueProps.asChild,\n        ref: composedRefs,\n        style: { pointerEvents: \"none\" },\n        children: /* @__PURE__ */ jsx(React.Fragment, { children: showPlaceholder ? placeholder : children }, showPlaceholder ? \"placeholder\" : \"value\")\n      }\n    );\n  }\n);\nSelectValue.displayName = VALUE_NAME;\nvar ICON_NAME = \"SelectIcon\";\nvar SelectIcon = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeSelect, children, ...iconProps } = props;\n    return /* @__PURE__ */ jsx(Primitive.span, { \"aria-hidden\": true, ...iconProps, ref: forwardedRef, children: children || \"\\u25BC\" });\n  }\n);\nSelectIcon.displayName = ICON_NAME;\nvar PORTAL_NAME = \"SelectPortal\";\nvar [PortalProvider, usePortalContext] = createSelectContext(PORTAL_NAME, {\n  forceMount: void 0\n});\nvar SelectPortal = (props) => {\n  const { __scopeSelect, forceMount, ...portalProps } = props;\n  return /* @__PURE__ */ jsx(PortalProvider, { scope: props.__scopeSelect, forceMount, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, ...portalProps }) });\n};\nSelectPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"SelectContent\";\nvar SelectContent = React.forwardRef(\n  (props, forwardedRef) => {\n    const portalContext = usePortalContext(CONTENT_NAME, props.__scopeSelect);\n    const { forceMount = portalContext.forceMount, ...contentProps } = props;\n    const context = useSelectContext(CONTENT_NAME, props.__scopeSelect);\n    const [fragment, setFragment] = React.useState();\n    useLayoutEffect(() => {\n      setFragment(new DocumentFragment());\n    }, []);\n    return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: ({ present }) => present ? /* @__PURE__ */ jsx(SelectContentImpl, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(SelectContentFragment, { ...contentProps, fragment }) });\n  }\n);\nSelectContent.displayName = CONTENT_NAME;\nvar SelectContentFragment = React.forwardRef((props, forwardedRef) => {\n  const { __scopeSelect, children, fragment } = props;\n  if (!fragment) return null;\n  return ReactDOM.createPortal(\n    /* @__PURE__ */ jsx(SelectContentProvider, { scope: __scopeSelect, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: __scopeSelect, children: /* @__PURE__ */ jsx(\"div\", { ref: forwardedRef, children }) }) }),\n    fragment\n  );\n});\nSelectContentFragment.displayName = \"SelectContentFragment\";\nvar CONTENT_MARGIN = 10;\nvar [SelectContentProvider, useSelectContentContext] = createSelectContext(CONTENT_NAME);\nvar CONTENT_IMPL_NAME = \"SelectContentImpl\";\nvar Slot = createSlot(\"SelectContent.RemoveScroll\");\nvar SelectContentImpl = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeSelect } = props;\n    const {\n      position = \"item-aligned\",\n      onCloseAutoFocus,\n      onEscapeKeyDown,\n      onPointerDownOutside,\n      //\n      // PopperContent props\n      side,\n      sideOffset,\n      align,\n      alignOffset,\n      arrowPadding,\n      collisionBoundary,\n      collisionPadding,\n      sticky,\n      hideWhenDetached,\n      avoidCollisions,\n      //\n      ...contentProps\n    } = props;\n    const context = useSelectContext(CONTENT_NAME, __scopeSelect);\n    const [content, setContent] = React.useState(null);\n    const [viewport, setViewport] = React.useState(null);\n    const composedRefs = useComposedRefs(forwardedRef, setContent);\n    const [selectedItem, setSelectedItem] = React.useState(null);\n    const [selectedItemText, setSelectedItemText] = React.useState(\n      null\n    );\n    const getItems = useCollection(__scopeSelect);\n    const [isPositioned, setIsPositioned] = React.useState(false);\n    const firstValidItemFoundRef = React.useRef(false);\n    React.useEffect(() => {\n      if (content) return hideOthers(content);\n    }, [content]);\n    useFocusGuards();\n    const focusFirst = React.useCallback(\n      (candidates) => {\n        const [firstItem, ...restItems] = getItems().map((item) => item.ref.current);\n        const [lastItem] = restItems.slice(-1);\n        const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n        for (const candidate of candidates) {\n          if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n          candidate?.scrollIntoView({ block: \"nearest\" });\n          if (candidate === firstItem && viewport) viewport.scrollTop = 0;\n          if (candidate === lastItem && viewport) viewport.scrollTop = viewport.scrollHeight;\n          candidate?.focus();\n          if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n        }\n      },\n      [getItems, viewport]\n    );\n    const focusSelectedItem = React.useCallback(\n      () => focusFirst([selectedItem, content]),\n      [focusFirst, selectedItem, content]\n    );\n    React.useEffect(() => {\n      if (isPositioned) {\n        focusSelectedItem();\n      }\n    }, [isPositioned, focusSelectedItem]);\n    const { onOpenChange, triggerPointerDownPosRef } = context;\n    React.useEffect(() => {\n      if (content) {\n        let pointerMoveDelta = { x: 0, y: 0 };\n        const handlePointerMove = (event) => {\n          pointerMoveDelta = {\n            x: Math.abs(Math.round(event.pageX) - (triggerPointerDownPosRef.current?.x ?? 0)),\n            y: Math.abs(Math.round(event.pageY) - (triggerPointerDownPosRef.current?.y ?? 0))\n          };\n        };\n        const handlePointerUp = (event) => {\n          if (pointerMoveDelta.x <= 10 && pointerMoveDelta.y <= 10) {\n            event.preventDefault();\n          } else {\n            if (!event.composedPath().includes(content)) {\n              onOpenChange(false);\n            }\n          }\n          document.removeEventListener(\"pointermove\", handlePointerMove);\n          triggerPointerDownPosRef.current = null;\n        };\n        if (triggerPointerDownPosRef.current !== null) {\n          document.addEventListener(\"pointermove\", handlePointerMove);\n          document.addEventListener(\"pointerup\", handlePointerUp, { capture: true, once: true });\n        }\n        return () => {\n          document.removeEventListener(\"pointermove\", handlePointerMove);\n          document.removeEventListener(\"pointerup\", handlePointerUp, { capture: true });\n        };\n      }\n    }, [content, onOpenChange, triggerPointerDownPosRef]);\n    React.useEffect(() => {\n      const close = () => onOpenChange(false);\n      window.addEventListener(\"blur\", close);\n      window.addEventListener(\"resize\", close);\n      return () => {\n        window.removeEventListener(\"blur\", close);\n        window.removeEventListener(\"resize\", close);\n      };\n    }, [onOpenChange]);\n    const [searchRef, handleTypeaheadSearch] = useTypeaheadSearch((search) => {\n      const enabledItems = getItems().filter((item) => !item.disabled);\n      const currentItem = enabledItems.find((item) => item.ref.current === document.activeElement);\n      const nextItem = findNextItem(enabledItems, search, currentItem);\n      if (nextItem) {\n        setTimeout(() => nextItem.ref.current?.focus());\n      }\n    });\n    const itemRefCallback = React.useCallback(\n      (node, value, disabled) => {\n        const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;\n        const isSelectedItem = context.value !== void 0 && context.value === value;\n        if (isSelectedItem || isFirstValidItem) {\n          setSelectedItem(node);\n          if (isFirstValidItem) firstValidItemFoundRef.current = true;\n        }\n      },\n      [context.value]\n    );\n    const handleItemLeave = React.useCallback(() => content?.focus(), [content]);\n    const itemTextRefCallback = React.useCallback(\n      (node, value, disabled) => {\n        const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;\n        const isSelectedItem = context.value !== void 0 && context.value === value;\n        if (isSelectedItem || isFirstValidItem) {\n          setSelectedItemText(node);\n        }\n      },\n      [context.value]\n    );\n    const SelectPosition = position === \"popper\" ? SelectPopperPosition : SelectItemAlignedPosition;\n    const popperContentProps = SelectPosition === SelectPopperPosition ? {\n      side,\n      sideOffset,\n      align,\n      alignOffset,\n      arrowPadding,\n      collisionBoundary,\n      collisionPadding,\n      sticky,\n      hideWhenDetached,\n      avoidCollisions\n    } : {};\n    return /* @__PURE__ */ jsx(\n      SelectContentProvider,\n      {\n        scope: __scopeSelect,\n        content,\n        viewport,\n        onViewportChange: setViewport,\n        itemRefCallback,\n        selectedItem,\n        onItemLeave: handleItemLeave,\n        itemTextRefCallback,\n        focusSelectedItem,\n        selectedItemText,\n        position,\n        isPositioned,\n        searchRef,\n        children: /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, children: /* @__PURE__ */ jsx(\n          FocusScope,\n          {\n            asChild: true,\n            trapped: context.open,\n            onMountAutoFocus: (event) => {\n              event.preventDefault();\n            },\n            onUnmountAutoFocus: composeEventHandlers(onCloseAutoFocus, (event) => {\n              context.trigger?.focus({ preventScroll: true });\n              event.preventDefault();\n            }),\n            children: /* @__PURE__ */ jsx(\n              DismissableLayer,\n              {\n                asChild: true,\n                disableOutsidePointerEvents: true,\n                onEscapeKeyDown,\n                onPointerDownOutside,\n                onFocusOutside: (event) => event.preventDefault(),\n                onDismiss: () => context.onOpenChange(false),\n                children: /* @__PURE__ */ jsx(\n                  SelectPosition,\n                  {\n                    role: \"listbox\",\n                    id: context.contentId,\n                    \"data-state\": context.open ? \"open\" : \"closed\",\n                    dir: context.dir,\n                    onContextMenu: (event) => event.preventDefault(),\n                    ...contentProps,\n                    ...popperContentProps,\n                    onPlaced: () => setIsPositioned(true),\n                    ref: composedRefs,\n                    style: {\n                      // flex layout so we can place the scroll buttons properly\n                      display: \"flex\",\n                      flexDirection: \"column\",\n                      // reset the outline by default as the content MAY get focused\n                      outline: \"none\",\n                      ...contentProps.style\n                    },\n                    onKeyDown: composeEventHandlers(contentProps.onKeyDown, (event) => {\n                      const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n                      if (event.key === \"Tab\") event.preventDefault();\n                      if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);\n                      if ([\"ArrowUp\", \"ArrowDown\", \"Home\", \"End\"].includes(event.key)) {\n                        const items = getItems().filter((item) => !item.disabled);\n                        let candidateNodes = items.map((item) => item.ref.current);\n                        if ([\"ArrowUp\", \"End\"].includes(event.key)) {\n                          candidateNodes = candidateNodes.slice().reverse();\n                        }\n                        if ([\"ArrowUp\", \"ArrowDown\"].includes(event.key)) {\n                          const currentElement = event.target;\n                          const currentIndex = candidateNodes.indexOf(currentElement);\n                          candidateNodes = candidateNodes.slice(currentIndex + 1);\n                        }\n                        setTimeout(() => focusFirst(candidateNodes));\n                        event.preventDefault();\n                      }\n                    })\n                  }\n                )\n              }\n            )\n          }\n        ) })\n      }\n    );\n  }\n);\nSelectContentImpl.displayName = CONTENT_IMPL_NAME;\nvar ITEM_ALIGNED_POSITION_NAME = \"SelectItemAlignedPosition\";\nvar SelectItemAlignedPosition = React.forwardRef((props, forwardedRef) => {\n  const { __scopeSelect, onPlaced, ...popperProps } = props;\n  const context = useSelectContext(CONTENT_NAME, __scopeSelect);\n  const contentContext = useSelectContentContext(CONTENT_NAME, __scopeSelect);\n  const [contentWrapper, setContentWrapper] = React.useState(null);\n  const [content, setContent] = React.useState(null);\n  const composedRefs = useComposedRefs(forwardedRef, setContent);\n  const getItems = useCollection(__scopeSelect);\n  const shouldExpandOnScrollRef = React.useRef(false);\n  const shouldRepositionRef = React.useRef(true);\n  const { viewport, selectedItem, selectedItemText, focusSelectedItem } = contentContext;\n  const position = React.useCallback(() => {\n    if (context.trigger && context.valueNode && contentWrapper && content && viewport && selectedItem && selectedItemText) {\n      const triggerRect = context.trigger.getBoundingClientRect();\n      const contentRect = content.getBoundingClientRect();\n      const valueNodeRect = context.valueNode.getBoundingClientRect();\n      const itemTextRect = selectedItemText.getBoundingClientRect();\n      if (context.dir !== \"rtl\") {\n        const itemTextOffset = itemTextRect.left - contentRect.left;\n        const left = valueNodeRect.left - itemTextOffset;\n        const leftDelta = triggerRect.left - left;\n        const minContentWidth = triggerRect.width + leftDelta;\n        const contentWidth = Math.max(minContentWidth, contentRect.width);\n        const rightEdge = window.innerWidth - CONTENT_MARGIN;\n        const clampedLeft = clamp(left, [\n          CONTENT_MARGIN,\n          // Prevents the content from going off the starting edge of the\n          // viewport. It may still go off the ending edge, but this can be\n          // controlled by the user since they may want to manage overflow in a\n          // specific way.\n          // https://github.com/radix-ui/primitives/issues/2049\n          Math.max(CONTENT_MARGIN, rightEdge - contentWidth)\n        ]);\n        contentWrapper.style.minWidth = minContentWidth + \"px\";\n        contentWrapper.style.left = clampedLeft + \"px\";\n      } else {\n        const itemTextOffset = contentRect.right - itemTextRect.right;\n        const right = window.innerWidth - valueNodeRect.right - itemTextOffset;\n        const rightDelta = window.innerWidth - triggerRect.right - right;\n        const minContentWidth = triggerRect.width + rightDelta;\n        const contentWidth = Math.max(minContentWidth, contentRect.width);\n        const leftEdge = window.innerWidth - CONTENT_MARGIN;\n        const clampedRight = clamp(right, [\n          CONTENT_MARGIN,\n          Math.max(CONTENT_MARGIN, leftEdge - contentWidth)\n        ]);\n        contentWrapper.style.minWidth = minContentWidth + \"px\";\n        contentWrapper.style.right = clampedRight + \"px\";\n      }\n      const items = getItems();\n      const availableHeight = window.innerHeight - CONTENT_MARGIN * 2;\n      const itemsHeight = viewport.scrollHeight;\n      const contentStyles = window.getComputedStyle(content);\n      const contentBorderTopWidth = parseInt(contentStyles.borderTopWidth, 10);\n      const contentPaddingTop = parseInt(contentStyles.paddingTop, 10);\n      const contentBorderBottomWidth = parseInt(contentStyles.borderBottomWidth, 10);\n      const contentPaddingBottom = parseInt(contentStyles.paddingBottom, 10);\n      const fullContentHeight = contentBorderTopWidth + contentPaddingTop + itemsHeight + contentPaddingBottom + contentBorderBottomWidth;\n      const minContentHeight = Math.min(selectedItem.offsetHeight * 5, fullContentHeight);\n      const viewportStyles = window.getComputedStyle(viewport);\n      const viewportPaddingTop = parseInt(viewportStyles.paddingTop, 10);\n      const viewportPaddingBottom = parseInt(viewportStyles.paddingBottom, 10);\n      const topEdgeToTriggerMiddle = triggerRect.top + triggerRect.height / 2 - CONTENT_MARGIN;\n      const triggerMiddleToBottomEdge = availableHeight - topEdgeToTriggerMiddle;\n      const selectedItemHalfHeight = selectedItem.offsetHeight / 2;\n      const itemOffsetMiddle = selectedItem.offsetTop + selectedItemHalfHeight;\n      const contentTopToItemMiddle = contentBorderTopWidth + contentPaddingTop + itemOffsetMiddle;\n      const itemMiddleToContentBottom = fullContentHeight - contentTopToItemMiddle;\n      const willAlignWithoutTopOverflow = contentTopToItemMiddle <= topEdgeToTriggerMiddle;\n      if (willAlignWithoutTopOverflow) {\n        const isLastItem = items.length > 0 && selectedItem === items[items.length - 1].ref.current;\n        contentWrapper.style.bottom = \"0px\";\n        const viewportOffsetBottom = content.clientHeight - viewport.offsetTop - viewport.offsetHeight;\n        const clampedTriggerMiddleToBottomEdge = Math.max(\n          triggerMiddleToBottomEdge,\n          selectedItemHalfHeight + // viewport might have padding bottom, include it to avoid a scrollable viewport\n          (isLastItem ? viewportPaddingBottom : 0) + viewportOffsetBottom + contentBorderBottomWidth\n        );\n        const height = contentTopToItemMiddle + clampedTriggerMiddleToBottomEdge;\n        contentWrapper.style.height = height + \"px\";\n      } else {\n        const isFirstItem = items.length > 0 && selectedItem === items[0].ref.current;\n        contentWrapper.style.top = \"0px\";\n        const clampedTopEdgeToTriggerMiddle = Math.max(\n          topEdgeToTriggerMiddle,\n          contentBorderTopWidth + viewport.offsetTop + // viewport might have padding top, include it to avoid a scrollable viewport\n          (isFirstItem ? viewportPaddingTop : 0) + selectedItemHalfHeight\n        );\n        const height = clampedTopEdgeToTriggerMiddle + itemMiddleToContentBottom;\n        contentWrapper.style.height = height + \"px\";\n        viewport.scrollTop = contentTopToItemMiddle - topEdgeToTriggerMiddle + viewport.offsetTop;\n      }\n      contentWrapper.style.margin = `${CONTENT_MARGIN}px 0`;\n      contentWrapper.style.minHeight = minContentHeight + \"px\";\n      contentWrapper.style.maxHeight = availableHeight + \"px\";\n      onPlaced?.();\n      requestAnimationFrame(() => shouldExpandOnScrollRef.current = true);\n    }\n  }, [\n    getItems,\n    context.trigger,\n    context.valueNode,\n    contentWrapper,\n    content,\n    viewport,\n    selectedItem,\n    selectedItemText,\n    context.dir,\n    onPlaced\n  ]);\n  useLayoutEffect(() => position(), [position]);\n  const [contentZIndex, setContentZIndex] = React.useState();\n  useLayoutEffect(() => {\n    if (content) setContentZIndex(window.getComputedStyle(content).zIndex);\n  }, [content]);\n  const handleScrollButtonChange = React.useCallback(\n    (node) => {\n      if (node && shouldRepositionRef.current === true) {\n        position();\n        focusSelectedItem?.();\n        shouldRepositionRef.current = false;\n      }\n    },\n    [position, focusSelectedItem]\n  );\n  return /* @__PURE__ */ jsx(\n    SelectViewportProvider,\n    {\n      scope: __scopeSelect,\n      contentWrapper,\n      shouldExpandOnScrollRef,\n      onScrollButtonChange: handleScrollButtonChange,\n      children: /* @__PURE__ */ jsx(\n        \"div\",\n        {\n          ref: setContentWrapper,\n          style: {\n            display: \"flex\",\n            flexDirection: \"column\",\n            position: \"fixed\",\n            zIndex: contentZIndex\n          },\n          children: /* @__PURE__ */ jsx(\n            Primitive.div,\n            {\n              ...popperProps,\n              ref: composedRefs,\n              style: {\n                // When we get the height of the content, it includes borders. If we were to set\n                // the height without having `boxSizing: 'border-box'` it would be too big.\n                boxSizing: \"border-box\",\n                // We need to ensure the content doesn't get taller than the wrapper\n                maxHeight: \"100%\",\n                ...popperProps.style\n              }\n            }\n          )\n        }\n      )\n    }\n  );\n});\nSelectItemAlignedPosition.displayName = ITEM_ALIGNED_POSITION_NAME;\nvar POPPER_POSITION_NAME = \"SelectPopperPosition\";\nvar SelectPopperPosition = React.forwardRef((props, forwardedRef) => {\n  const {\n    __scopeSelect,\n    align = \"start\",\n    collisionPadding = CONTENT_MARGIN,\n    ...popperProps\n  } = props;\n  const popperScope = usePopperScope(__scopeSelect);\n  return /* @__PURE__ */ jsx(\n    PopperPrimitive.Content,\n    {\n      ...popperScope,\n      ...popperProps,\n      ref: forwardedRef,\n      align,\n      collisionPadding,\n      style: {\n        // Ensure border-box for floating-ui calculations\n        boxSizing: \"border-box\",\n        ...popperProps.style,\n        // re-namespace exposed content custom properties\n        ...{\n          \"--radix-select-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n          \"--radix-select-content-available-width\": \"var(--radix-popper-available-width)\",\n          \"--radix-select-content-available-height\": \"var(--radix-popper-available-height)\",\n          \"--radix-select-trigger-width\": \"var(--radix-popper-anchor-width)\",\n          \"--radix-select-trigger-height\": \"var(--radix-popper-anchor-height)\"\n        }\n      }\n    }\n  );\n});\nSelectPopperPosition.displayName = POPPER_POSITION_NAME;\nvar [SelectViewportProvider, useSelectViewportContext] = createSelectContext(CONTENT_NAME, {});\nvar VIEWPORT_NAME = \"SelectViewport\";\nvar SelectViewport = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeSelect, nonce, ...viewportProps } = props;\n    const contentContext = useSelectContentContext(VIEWPORT_NAME, __scopeSelect);\n    const viewportContext = useSelectViewportContext(VIEWPORT_NAME, __scopeSelect);\n    const composedRefs = useComposedRefs(forwardedRef, contentContext.onViewportChange);\n    const prevScrollTopRef = React.useRef(0);\n    return /* @__PURE__ */ jsxs(Fragment2, { children: [\n      /* @__PURE__ */ jsx(\n        \"style\",\n        {\n          dangerouslySetInnerHTML: {\n            __html: `[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}`\n          },\n          nonce\n        }\n      ),\n      /* @__PURE__ */ jsx(Collection.Slot, { scope: __scopeSelect, children: /* @__PURE__ */ jsx(\n        Primitive.div,\n        {\n          \"data-radix-select-viewport\": \"\",\n          role: \"presentation\",\n          ...viewportProps,\n          ref: composedRefs,\n          style: {\n            // we use position: 'relative' here on the `viewport` so that when we call\n            // `selectedItem.offsetTop` in calculations, the offset is relative to the viewport\n            // (independent of the scrollUpButton).\n            position: \"relative\",\n            flex: 1,\n            // Viewport should only be scrollable in the vertical direction.\n            // This won't work in vertical writing modes, so we'll need to\n            // revisit this if/when that is supported\n            // https://developer.chrome.com/blog/vertical-form-controls\n            overflow: \"hidden auto\",\n            ...viewportProps.style\n          },\n          onScroll: composeEventHandlers(viewportProps.onScroll, (event) => {\n            const viewport = event.currentTarget;\n            const { contentWrapper, shouldExpandOnScrollRef } = viewportContext;\n            if (shouldExpandOnScrollRef?.current && contentWrapper) {\n              const scrolledBy = Math.abs(prevScrollTopRef.current - viewport.scrollTop);\n              if (scrolledBy > 0) {\n                const availableHeight = window.innerHeight - CONTENT_MARGIN * 2;\n                const cssMinHeight = parseFloat(contentWrapper.style.minHeight);\n                const cssHeight = parseFloat(contentWrapper.style.height);\n                const prevHeight = Math.max(cssMinHeight, cssHeight);\n                if (prevHeight < availableHeight) {\n                  const nextHeight = prevHeight + scrolledBy;\n                  const clampedNextHeight = Math.min(availableHeight, nextHeight);\n                  const heightDiff = nextHeight - clampedNextHeight;\n                  contentWrapper.style.height = clampedNextHeight + \"px\";\n                  if (contentWrapper.style.bottom === \"0px\") {\n                    viewport.scrollTop = heightDiff > 0 ? heightDiff : 0;\n                    contentWrapper.style.justifyContent = \"flex-end\";\n                  }\n                }\n              }\n            }\n            prevScrollTopRef.current = viewport.scrollTop;\n          })\n        }\n      ) })\n    ] });\n  }\n);\nSelectViewport.displayName = VIEWPORT_NAME;\nvar GROUP_NAME = \"SelectGroup\";\nvar [SelectGroupContextProvider, useSelectGroupContext] = createSelectContext(GROUP_NAME);\nvar SelectGroup = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeSelect, ...groupProps } = props;\n    const groupId = useId();\n    return /* @__PURE__ */ jsx(SelectGroupContextProvider, { scope: __scopeSelect, id: groupId, children: /* @__PURE__ */ jsx(Primitive.div, { role: \"group\", \"aria-labelledby\": groupId, ...groupProps, ref: forwardedRef }) });\n  }\n);\nSelectGroup.displayName = GROUP_NAME;\nvar LABEL_NAME = \"SelectLabel\";\nvar SelectLabel = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeSelect, ...labelProps } = props;\n    const groupContext = useSelectGroupContext(LABEL_NAME, __scopeSelect);\n    return /* @__PURE__ */ jsx(Primitive.div, { id: groupContext.id, ...labelProps, ref: forwardedRef });\n  }\n);\nSelectLabel.displayName = LABEL_NAME;\nvar ITEM_NAME = \"SelectItem\";\nvar [SelectItemContextProvider, useSelectItemContext] = createSelectContext(ITEM_NAME);\nvar SelectItem = React.forwardRef(\n  (props, forwardedRef) => {\n    const {\n      __scopeSelect,\n      value,\n      disabled = false,\n      textValue: textValueProp,\n      ...itemProps\n    } = props;\n    const context = useSelectContext(ITEM_NAME, __scopeSelect);\n    const contentContext = useSelectContentContext(ITEM_NAME, __scopeSelect);\n    const isSelected = context.value === value;\n    const [textValue, setTextValue] = React.useState(textValueProp ?? \"\");\n    const [isFocused, setIsFocused] = React.useState(false);\n    const handleItemRefCallback = useCallbackRef(\n      (node) => contentContext.itemRefCallback?.(node, value, disabled)\n    );\n    const composedRefs = useComposedRefs(forwardedRef, handleItemRefCallback);\n    const textId = useId();\n    const pointerTypeRef = React.useRef(\"touch\");\n    const handleSelect = () => {\n      if (!disabled) {\n        context.onValueChange(value);\n        context.onOpenChange(false);\n      }\n    };\n    return /* @__PURE__ */ jsx(\n      SelectItemContextProvider,\n      {\n        scope: __scopeSelect,\n        value,\n        disabled,\n        textId,\n        isSelected,\n        onItemTextChange: React.useCallback((node) => {\n          setTextValue((prevTextValue) => prevTextValue || (node?.textContent ?? \"\").trim());\n        }, []),\n        children: /* @__PURE__ */ jsx(\n          Collection.ItemSlot,\n          {\n            scope: __scopeSelect,\n            value,\n            disabled,\n            textValue,\n            children: /* @__PURE__ */ jsx(\n              Primitive.div,\n              {\n                role: \"option\",\n                \"aria-labelledby\": textId,\n                \"data-highlighted\": isFocused ? \"\" : void 0,\n                \"aria-selected\": isSelected && isFocused,\n                \"data-state\": isSelected ? \"checked\" : \"unchecked\",\n                \"aria-disabled\": disabled || void 0,\n                \"data-disabled\": disabled ? \"\" : void 0,\n                tabIndex: disabled ? void 0 : -1,\n                ...itemProps,\n                ref: composedRefs,\n                onFocus: composeEventHandlers(itemProps.onFocus, () => setIsFocused(true)),\n                onBlur: composeEventHandlers(itemProps.onBlur, () => setIsFocused(false)),\n                onClick: composeEventHandlers(itemProps.onClick, () => {\n                  if (pointerTypeRef.current !== \"mouse\") handleSelect();\n                }),\n                onPointerUp: composeEventHandlers(itemProps.onPointerUp, () => {\n                  if (pointerTypeRef.current === \"mouse\") handleSelect();\n                }),\n                onPointerDown: composeEventHandlers(itemProps.onPointerDown, (event) => {\n                  pointerTypeRef.current = event.pointerType;\n                }),\n                onPointerMove: composeEventHandlers(itemProps.onPointerMove, (event) => {\n                  pointerTypeRef.current = event.pointerType;\n                  if (disabled) {\n                    contentContext.onItemLeave?.();\n                  } else if (pointerTypeRef.current === \"mouse\") {\n                    event.currentTarget.focus({ preventScroll: true });\n                  }\n                }),\n                onPointerLeave: composeEventHandlers(itemProps.onPointerLeave, (event) => {\n                  if (event.currentTarget === document.activeElement) {\n                    contentContext.onItemLeave?.();\n                  }\n                }),\n                onKeyDown: composeEventHandlers(itemProps.onKeyDown, (event) => {\n                  const isTypingAhead = contentContext.searchRef?.current !== \"\";\n                  if (isTypingAhead && event.key === \" \") return;\n                  if (SELECTION_KEYS.includes(event.key)) handleSelect();\n                  if (event.key === \" \") event.preventDefault();\n                })\n              }\n            )\n          }\n        )\n      }\n    );\n  }\n);\nSelectItem.displayName = ITEM_NAME;\nvar ITEM_TEXT_NAME = \"SelectItemText\";\nvar SelectItemText = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeSelect, className, style, ...itemTextProps } = props;\n    const context = useSelectContext(ITEM_TEXT_NAME, __scopeSelect);\n    const contentContext = useSelectContentContext(ITEM_TEXT_NAME, __scopeSelect);\n    const itemContext = useSelectItemContext(ITEM_TEXT_NAME, __scopeSelect);\n    const nativeOptionsContext = useSelectNativeOptionsContext(ITEM_TEXT_NAME, __scopeSelect);\n    const [itemTextNode, setItemTextNode] = React.useState(null);\n    const handleItemTextRefCallback = useCallbackRef(\n      (node) => contentContext.itemTextRefCallback?.(node, itemContext.value, itemContext.disabled)\n    );\n    const composedRefs = useComposedRefs(\n      forwardedRef,\n      setItemTextNode,\n      itemContext.onItemTextChange,\n      handleItemTextRefCallback\n    );\n    const textContent = itemTextNode?.textContent;\n    const nativeOption = React.useMemo(\n      () => /* @__PURE__ */ jsx(\"option\", { value: itemContext.value, disabled: itemContext.disabled, children: textContent }, itemContext.value),\n      [itemContext.disabled, itemContext.value, textContent]\n    );\n    const { onNativeOptionAdd, onNativeOptionRemove } = nativeOptionsContext;\n    useLayoutEffect(() => {\n      onNativeOptionAdd(nativeOption);\n      return () => onNativeOptionRemove(nativeOption);\n    }, [onNativeOptionAdd, onNativeOptionRemove, nativeOption]);\n    return /* @__PURE__ */ jsxs(Fragment2, { children: [\n      /* @__PURE__ */ jsx(Primitive.span, { id: itemContext.textId, ...itemTextProps, ref: composedRefs }),\n      itemContext.isSelected && context.valueNode && !context.valueNodeHasChildren && !shouldShowPlaceholder(context.value) ? ReactDOM.createPortal(itemTextProps.children, context.valueNode) : null\n    ] });\n  }\n);\nSelectItemText.displayName = ITEM_TEXT_NAME;\nvar ITEM_INDICATOR_NAME = \"SelectItemIndicator\";\nvar SelectItemIndicator = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeSelect, ...itemIndicatorProps } = props;\n    const itemContext = useSelectItemContext(ITEM_INDICATOR_NAME, __scopeSelect);\n    return itemContext.isSelected ? /* @__PURE__ */ jsx(Primitive.span, { \"aria-hidden\": true, ...itemIndicatorProps, ref: forwardedRef }) : null;\n  }\n);\nSelectItemIndicator.displayName = ITEM_INDICATOR_NAME;\nvar SCROLL_UP_BUTTON_NAME = \"SelectScrollUpButton\";\nvar SelectScrollUpButton = React.forwardRef((props, forwardedRef) => {\n  const contentContext = useSelectContentContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect);\n  const viewportContext = useSelectViewportContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect);\n  const [canScrollUp, setCanScrollUp] = React.useState(false);\n  const composedRefs = useComposedRefs(forwardedRef, viewportContext.onScrollButtonChange);\n  useLayoutEffect(() => {\n    if (contentContext.viewport && contentContext.isPositioned) {\n      let handleScroll2 = function() {\n        const canScrollUp2 = viewport.scrollTop > 0;\n        setCanScrollUp(canScrollUp2);\n      };\n      var handleScroll = handleScroll2;\n      const viewport = contentContext.viewport;\n      handleScroll2();\n      viewport.addEventListener(\"scroll\", handleScroll2);\n      return () => viewport.removeEventListener(\"scroll\", handleScroll2);\n    }\n  }, [contentContext.viewport, contentContext.isPositioned]);\n  return canScrollUp ? /* @__PURE__ */ jsx(\n    SelectScrollButtonImpl,\n    {\n      ...props,\n      ref: composedRefs,\n      onAutoScroll: () => {\n        const { viewport, selectedItem } = contentContext;\n        if (viewport && selectedItem) {\n          viewport.scrollTop = viewport.scrollTop - selectedItem.offsetHeight;\n        }\n      }\n    }\n  ) : null;\n});\nSelectScrollUpButton.displayName = SCROLL_UP_BUTTON_NAME;\nvar SCROLL_DOWN_BUTTON_NAME = \"SelectScrollDownButton\";\nvar SelectScrollDownButton = React.forwardRef((props, forwardedRef) => {\n  const contentContext = useSelectContentContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);\n  const viewportContext = useSelectViewportContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);\n  const [canScrollDown, setCanScrollDown] = React.useState(false);\n  const composedRefs = useComposedRefs(forwardedRef, viewportContext.onScrollButtonChange);\n  useLayoutEffect(() => {\n    if (contentContext.viewport && contentContext.isPositioned) {\n      let handleScroll2 = function() {\n        const maxScroll = viewport.scrollHeight - viewport.clientHeight;\n        const canScrollDown2 = Math.ceil(viewport.scrollTop) < maxScroll;\n        setCanScrollDown(canScrollDown2);\n      };\n      var handleScroll = handleScroll2;\n      const viewport = contentContext.viewport;\n      handleScroll2();\n      viewport.addEventListener(\"scroll\", handleScroll2);\n      return () => viewport.removeEventListener(\"scroll\", handleScroll2);\n    }\n  }, [contentContext.viewport, contentContext.isPositioned]);\n  return canScrollDown ? /* @__PURE__ */ jsx(\n    SelectScrollButtonImpl,\n    {\n      ...props,\n      ref: composedRefs,\n      onAutoScroll: () => {\n        const { viewport, selectedItem } = contentContext;\n        if (viewport && selectedItem) {\n          viewport.scrollTop = viewport.scrollTop + selectedItem.offsetHeight;\n        }\n      }\n    }\n  ) : null;\n});\nSelectScrollDownButton.displayName = SCROLL_DOWN_BUTTON_NAME;\nvar SelectScrollButtonImpl = React.forwardRef((props, forwardedRef) => {\n  const { __scopeSelect, onAutoScroll, ...scrollIndicatorProps } = props;\n  const contentContext = useSelectContentContext(\"SelectScrollButton\", __scopeSelect);\n  const autoScrollTimerRef = React.useRef(null);\n  const getItems = useCollection(__scopeSelect);\n  const clearAutoScrollTimer = React.useCallback(() => {\n    if (autoScrollTimerRef.current !== null) {\n      window.clearInterval(autoScrollTimerRef.current);\n      autoScrollTimerRef.current = null;\n    }\n  }, []);\n  React.useEffect(() => {\n    return () => clearAutoScrollTimer();\n  }, [clearAutoScrollTimer]);\n  useLayoutEffect(() => {\n    const activeItem = getItems().find((item) => item.ref.current === document.activeElement);\n    activeItem?.ref.current?.scrollIntoView({ block: \"nearest\" });\n  }, [getItems]);\n  return /* @__PURE__ */ jsx(\n    Primitive.div,\n    {\n      \"aria-hidden\": true,\n      ...scrollIndicatorProps,\n      ref: forwardedRef,\n      style: { flexShrink: 0, ...scrollIndicatorProps.style },\n      onPointerDown: composeEventHandlers(scrollIndicatorProps.onPointerDown, () => {\n        if (autoScrollTimerRef.current === null) {\n          autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);\n        }\n      }),\n      onPointerMove: composeEventHandlers(scrollIndicatorProps.onPointerMove, () => {\n        contentContext.onItemLeave?.();\n        if (autoScrollTimerRef.current === null) {\n          autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);\n        }\n      }),\n      onPointerLeave: composeEventHandlers(scrollIndicatorProps.onPointerLeave, () => {\n        clearAutoScrollTimer();\n      })\n    }\n  );\n});\nvar SEPARATOR_NAME = \"SelectSeparator\";\nvar SelectSeparator = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeSelect, ...separatorProps } = props;\n    return /* @__PURE__ */ jsx(Primitive.div, { \"aria-hidden\": true, ...separatorProps, ref: forwardedRef });\n  }\n);\nSelectSeparator.displayName = SEPARATOR_NAME;\nvar ARROW_NAME = \"SelectArrow\";\nvar SelectArrow = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeSelect, ...arrowProps } = props;\n    const popperScope = usePopperScope(__scopeSelect);\n    const contentContext = useSelectContentContext(ARROW_NAME, __scopeSelect);\n    return contentContext.position === \"popper\" ? /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef }) : null;\n  }\n);\nSelectArrow.displayName = ARROW_NAME;\nvar BUBBLE_INPUT_NAME = \"SelectBubbleInput\";\nvar SelectBubbleInput = React.forwardRef(\n  ({ __scopeSelect, ...props }, forwardedRef) => {\n    const context = useSelectContext(BUBBLE_INPUT_NAME, __scopeSelect);\n    const { value, onValueChange, required, disabled, name, autoComplete, form } = context;\n    const { nativeOptions, nativeSelectKey } = context;\n    const ref = React.useRef(null);\n    const composedRefs = useComposedRefs(forwardedRef, ref);\n    const selectValue = value ?? \"\";\n    const prevValue = usePrevious(selectValue);\n    const hasEmptyValueOption = Array.from(nativeOptions).some(\n      (option) => (option.props.value ?? \"\") === \"\"\n    );\n    React.useEffect(() => {\n      const select = ref.current;\n      if (!select) return;\n      const selectProto = window.HTMLSelectElement.prototype;\n      const descriptor = Object.getOwnPropertyDescriptor(\n        selectProto,\n        \"value\"\n      );\n      const setValue = descriptor.set;\n      if (prevValue !== selectValue && setValue) {\n        const event = new Event(\"change\", { bubbles: true });\n        setValue.call(select, selectValue);\n        select.dispatchEvent(event);\n      }\n    }, [prevValue, selectValue]);\n    return /* @__PURE__ */ jsxs(\n      Primitive.select,\n      {\n        \"aria-hidden\": true,\n        required,\n        tabIndex: -1,\n        name,\n        autoComplete,\n        disabled,\n        form,\n        onChange: (event) => onValueChange(event.target.value),\n        ...props,\n        style: { ...VISUALLY_HIDDEN_STYLES, ...props.style },\n        ref: composedRefs,\n        defaultValue: selectValue,\n        children: [\n          shouldShowPlaceholder(value) && !hasEmptyValueOption ? /* @__PURE__ */ jsx(\"option\", { value: \"\" }) : null,\n          Array.from(nativeOptions)\n        ]\n      },\n      nativeSelectKey\n    );\n  }\n);\nSelectBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction isFunction(value) {\n  return typeof value === \"function\";\n}\nfunction shouldShowPlaceholder(value) {\n  return value === \"\" || value === void 0;\n}\nfunction useTypeaheadSearch(onSearchChange) {\n  const handleSearchChange = useCallbackRef(onSearchChange);\n  const searchRef = React.useRef(\"\");\n  const timerRef = React.useRef(0);\n  const handleTypeaheadSearch = React.useCallback(\n    (key) => {\n      const search = searchRef.current + key;\n      handleSearchChange(search);\n      (function updateSearch(value) {\n        searchRef.current = value;\n        window.clearTimeout(timerRef.current);\n        if (value !== \"\") timerRef.current = window.setTimeout(() => updateSearch(\"\"), 1e3);\n      })(search);\n    },\n    [handleSearchChange]\n  );\n  const resetTypeahead = React.useCallback(() => {\n    searchRef.current = \"\";\n    window.clearTimeout(timerRef.current);\n  }, []);\n  React.useEffect(() => {\n    return () => window.clearTimeout(timerRef.current);\n  }, []);\n  return [searchRef, handleTypeaheadSearch, resetTypeahead];\n}\nfunction findNextItem(items, search, currentItem) {\n  const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0]);\n  const normalizedSearch = isRepeated ? search[0] : search;\n  const currentItemIndex = currentItem ? items.indexOf(currentItem) : -1;\n  let wrappedItems = wrapArray(items, Math.max(currentItemIndex, 0));\n  const excludeCurrentItem = normalizedSearch.length === 1;\n  if (excludeCurrentItem) wrappedItems = wrappedItems.filter((v) => v !== currentItem);\n  const nextItem = wrappedItems.find(\n    (item) => item.textValue.toLowerCase().startsWith(normalizedSearch.toLowerCase())\n  );\n  return nextItem !== currentItem ? nextItem : void 0;\n}\nfunction wrapArray(array, startIndex) {\n  return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\nexport {\n  SelectArrow as Arrow,\n  SelectContent as Content,\n  SelectGroup as Group,\n  SelectIcon as Icon,\n  SelectItem as Item,\n  SelectItemIndicator as ItemIndicator,\n  SelectItemText as ItemText,\n  SelectLabel as Label,\n  SelectPortal as Portal,\n  Select as Root,\n  SelectScrollDownButton as ScrollDownButton,\n  SelectScrollUpButton as ScrollUpButton,\n  Select,\n  SelectArrow,\n  SelectContent,\n  SelectGroup,\n  SelectIcon,\n  SelectItem,\n  SelectItemIndicator,\n  SelectItemText,\n  SelectLabel,\n  SelectPortal,\n  SelectScrollDownButton,\n  SelectScrollUpButton,\n  SelectSeparator,\n  SelectTrigger,\n  SelectValue,\n  SelectViewport,\n  SelectSeparator as Separator,\n  SelectTrigger as Trigger,\n  SelectValue as Value,\n  SelectViewport as Viewport,\n  createSelectScope,\n  SelectBubbleInput as unstable_BubbleInput,\n  SelectProvider as unstable_Provider,\n  SelectBubbleInput as unstable_SelectBubbleInput,\n  SelectProvider as unstable_SelectProvider\n};\n//# sourceMappingURL=index.mjs.map\n","import * as SelectPrimitive from '@radix-ui/react-select';\r\nimport { Check, ChevronDown } from 'lucide-react';\r\nimport * as React from 'react';\r\n\r\nimport { cn } from '@/lib/utils';\r\n\r\nconst Select = SelectPrimitive.Root;\r\n\r\nconst SelectGroup = SelectPrimitive.Group;\r\n\r\nconst SelectValue = SelectPrimitive.Value;\r\n\r\nconst SelectTrigger = React.forwardRef<\r\n  React.ElementRef<typeof SelectPrimitive.Trigger>,\r\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\r\n>(({ className, children, ...props }, ref) => (\r\n  <SelectPrimitive.Trigger\r\n    ref={ref}\r\n    className={cn(\r\n      'flex h-9 w-full items-center justify-between rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50',\r\n      className,\r\n    )}\r\n    {...props}\r\n  >\r\n    {children}\r\n    <SelectPrimitive.Icon asChild>\r\n      <ChevronDown className=\"h-4 w-4 opacity-50\" />\r\n    </SelectPrimitive.Icon>\r\n  </SelectPrimitive.Trigger>\r\n));\r\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\r\n\r\nconst SelectContent = React.forwardRef<\r\n  React.ElementRef<typeof SelectPrimitive.Content>,\r\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\r\n>(({ className, children, position = 'popper', ...props }, ref) => (\r\n  <SelectPrimitive.Portal>\r\n    <SelectPrimitive.Content\r\n      ref={ref}\r\n      className={cn(\r\n        'relative z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\r\n        position === 'popper' &&\r\n          'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',\r\n        className,\r\n      )}\r\n      position={position}\r\n      {...props}\r\n    >\r\n      <SelectPrimitive.Viewport\r\n        className={cn(\r\n          'p-1',\r\n          position === 'popper' &&\r\n            'h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]',\r\n        )}\r\n      >\r\n        {children}\r\n      </SelectPrimitive.Viewport>\r\n    </SelectPrimitive.Content>\r\n  </SelectPrimitive.Portal>\r\n));\r\nSelectContent.displayName = SelectPrimitive.Content.displayName;\r\n\r\nconst SelectLabel = React.forwardRef<\r\n  React.ElementRef<typeof SelectPrimitive.Label>,\r\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\r\n>(({ className, ...props }, ref) => (\r\n  <SelectPrimitive.Label\r\n    ref={ref}\r\n    className={cn('px-2 py-1.5 text-sm font-semibold', className)}\r\n    {...props}\r\n  />\r\n));\r\nSelectLabel.displayName = SelectPrimitive.Label.displayName;\r\n\r\nconst SelectItem = React.forwardRef<\r\n  React.ElementRef<typeof SelectPrimitive.Item>,\r\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\r\n>(({ className, children, ...props }, ref) => (\r\n  <SelectPrimitive.Item\r\n    ref={ref}\r\n    className={cn(\r\n      'relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\r\n      className,\r\n    )}\r\n    {...props}\r\n  >\r\n    <span className=\"absolute right-2 flex h-3.5 w-3.5 items-center justify-center\">\r\n      <SelectPrimitive.ItemIndicator>\r\n        <Check className=\"h-4 w-4\" />\r\n      </SelectPrimitive.ItemIndicator>\r\n    </span>\r\n    <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\r\n  </SelectPrimitive.Item>\r\n));\r\nSelectItem.displayName = SelectPrimitive.Item.displayName;\r\n\r\nconst SelectSeparator = React.forwardRef<\r\n  React.ElementRef<typeof SelectPrimitive.Separator>,\r\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\r\n>(({ className, ...props }, ref) => (\r\n  <SelectPrimitive.Separator\r\n    ref={ref}\r\n    className={cn('-mx-1 my-1 h-px bg-muted', className)}\r\n    {...props}\r\n  />\r\n));\r\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName;\r\n\r\nexport {\r\n  Select,\r\n  SelectGroup,\r\n  SelectValue,\r\n  SelectTrigger,\r\n  SelectContent,\r\n  SelectLabel,\r\n  SelectItem,\r\n  SelectSeparator,\r\n};\r\n","\"use client\";\n\n// src/switch.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar SWITCH_NAME = \"Switch\";\nvar [createSwitchContext, createSwitchScope] = createContextScope(SWITCH_NAME);\nvar [SwitchProviderImpl, useSwitchContext] = createSwitchContext(SWITCH_NAME);\nfunction SwitchProvider(props) {\n  const {\n    __scopeSwitch,\n    checked: checkedProp,\n    children,\n    defaultChecked,\n    disabled,\n    form,\n    name,\n    onCheckedChange,\n    required,\n    value = \"on\",\n    // @ts-expect-error\n    internal_do_not_use_render\n  } = props;\n  const [checked, setChecked] = useControllableState({\n    prop: checkedProp,\n    defaultProp: defaultChecked ?? false,\n    onChange: onCheckedChange,\n    caller: SWITCH_NAME\n  });\n  const [control, setControl] = React.useState(null);\n  const [bubbleInput, setBubbleInput] = React.useState(null);\n  const hasConsumerStoppedPropagationRef = React.useRef(false);\n  const isFormControl = control ? !!form || !!control.closest(\"form\") : (\n    // We set this to true by default so that events bubble to forms without JS (SSR)\n    true\n  );\n  const context = {\n    checked,\n    setChecked,\n    disabled,\n    control,\n    setControl,\n    name,\n    form,\n    value,\n    hasConsumerStoppedPropagationRef,\n    required,\n    defaultChecked,\n    isFormControl,\n    bubbleInput,\n    setBubbleInput\n  };\n  return /* @__PURE__ */ jsx(SwitchProviderImpl, { scope: __scopeSwitch, ...context, children: isFunction(internal_do_not_use_render) ? internal_do_not_use_render(context) : children });\n}\nvar TRIGGER_NAME = \"SwitchTrigger\";\nvar SwitchTrigger = React.forwardRef(\n  ({ __scopeSwitch, onClick, ...switchProps }, forwardedRef) => {\n    const {\n      value,\n      disabled,\n      checked,\n      required,\n      setControl,\n      setChecked,\n      hasConsumerStoppedPropagationRef,\n      isFormControl,\n      bubbleInput\n    } = useSwitchContext(TRIGGER_NAME, __scopeSwitch);\n    const composedRefs = useComposedRefs(forwardedRef, setControl);\n    return /* @__PURE__ */ jsx(\n      Primitive.button,\n      {\n        type: \"button\",\n        role: \"switch\",\n        \"aria-checked\": checked,\n        \"aria-required\": required,\n        \"data-state\": getState(checked),\n        \"data-disabled\": disabled ? \"\" : void 0,\n        disabled,\n        value,\n        ...switchProps,\n        ref: composedRefs,\n        onClick: composeEventHandlers(onClick, (event) => {\n          setChecked((prevChecked) => !prevChecked);\n          if (bubbleInput && isFormControl) {\n            hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n            if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n          }\n        })\n      }\n    );\n  }\n);\nSwitchTrigger.displayName = TRIGGER_NAME;\nvar Switch = React.forwardRef(\n  (props, forwardedRef) => {\n    const {\n      __scopeSwitch,\n      name,\n      checked,\n      defaultChecked,\n      required,\n      disabled,\n      value,\n      onCheckedChange,\n      form,\n      ...switchProps\n    } = props;\n    return /* @__PURE__ */ jsx(\n      SwitchProvider,\n      {\n        __scopeSwitch,\n        checked,\n        defaultChecked,\n        disabled,\n        required,\n        onCheckedChange,\n        name,\n        form,\n        value,\n        internal_do_not_use_render: ({ isFormControl }) => /* @__PURE__ */ jsxs(Fragment, { children: [\n          /* @__PURE__ */ jsx(\n            SwitchTrigger,\n            {\n              ...switchProps,\n              ref: forwardedRef,\n              __scopeSwitch\n            }\n          ),\n          isFormControl && /* @__PURE__ */ jsx(\n            SwitchBubbleInput,\n            {\n              __scopeSwitch\n            }\n          )\n        ] })\n      }\n    );\n  }\n);\nSwitch.displayName = SWITCH_NAME;\nvar THUMB_NAME = \"SwitchThumb\";\nvar SwitchThumb = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeSwitch, ...thumbProps } = props;\n    const context = useSwitchContext(THUMB_NAME, __scopeSwitch);\n    return /* @__PURE__ */ jsx(\n      Primitive.span,\n      {\n        \"data-state\": getState(context.checked),\n        \"data-disabled\": context.disabled ? \"\" : void 0,\n        ...thumbProps,\n        ref: forwardedRef\n      }\n    );\n  }\n);\nSwitchThumb.displayName = THUMB_NAME;\nvar BUBBLE_INPUT_NAME = \"SwitchBubbleInput\";\nvar SwitchBubbleInput = React.forwardRef(\n  ({ __scopeSwitch, ...props }, forwardedRef) => {\n    const {\n      control,\n      hasConsumerStoppedPropagationRef,\n      checked,\n      defaultChecked,\n      required,\n      disabled,\n      name,\n      value,\n      form,\n      bubbleInput,\n      setBubbleInput\n    } = useSwitchContext(BUBBLE_INPUT_NAME, __scopeSwitch);\n    const composedRefs = useComposedRefs(forwardedRef, setBubbleInput);\n    const prevChecked = usePrevious(checked);\n    const controlSize = useSize(control);\n    React.useEffect(() => {\n      const input = bubbleInput;\n      if (!input) return;\n      const inputProto = window.HTMLInputElement.prototype;\n      const descriptor = Object.getOwnPropertyDescriptor(\n        inputProto,\n        \"checked\"\n      );\n      const setChecked = descriptor.set;\n      const bubbles = !hasConsumerStoppedPropagationRef.current;\n      if (prevChecked !== checked && setChecked) {\n        const event = new Event(\"click\", { bubbles });\n        setChecked.call(input, checked);\n        input.dispatchEvent(event);\n      }\n    }, [bubbleInput, prevChecked, checked, hasConsumerStoppedPropagationRef]);\n    const defaultCheckedRef = React.useRef(checked);\n    return /* @__PURE__ */ jsx(\n      Primitive.input,\n      {\n        type: \"checkbox\",\n        \"aria-hidden\": true,\n        defaultChecked: defaultChecked ?? defaultCheckedRef.current,\n        required,\n        disabled,\n        name,\n        value,\n        form,\n        ...props,\n        tabIndex: -1,\n        ref: composedRefs,\n        style: {\n          ...props.style,\n          ...controlSize,\n          position: \"absolute\",\n          pointerEvents: \"none\",\n          opacity: 0,\n          margin: 0,\n          // We transform because the input is absolutely positioned but we have\n          // rendered it **after** the button. This pulls it back to sit on top\n          // of the button.\n          transform: \"translateX(-100%)\"\n        }\n      }\n    );\n  }\n);\nSwitchBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction isFunction(value) {\n  return typeof value === \"function\";\n}\nfunction getState(checked) {\n  return checked ? \"checked\" : \"unchecked\";\n}\nexport {\n  Switch as Root,\n  Switch,\n  SwitchThumb,\n  SwitchThumb as Thumb,\n  createSwitchScope,\n  SwitchBubbleInput as unstable_BubbleInput,\n  SwitchProvider as unstable_Provider,\n  SwitchBubbleInput as unstable_SwitchBubbleInput,\n  SwitchProvider as unstable_SwitchProvider,\n  SwitchTrigger as unstable_SwitchTrigger,\n  SwitchTrigger as unstable_Trigger\n};\n//# sourceMappingURL=index.mjs.map\n","import * as SwitchPrimitive from '@radix-ui/react-switch';\r\nimport * as React from 'react';\r\n\r\nimport { cn } from '@/lib/utils';\r\n\r\nconst Switch = React.forwardRef<\r\n  React.ElementRef<typeof SwitchPrimitive.Root>,\r\n  React.ComponentPropsWithoutRef<typeof SwitchPrimitive.Root>\r\n>(({ className, ...props }, ref) => (\r\n  <SwitchPrimitive.Root\r\n    ref={ref}\r\n    className={cn(\r\n      's3-explr-ui-switch peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input',\r\n      className,\r\n    )}\r\n    {...props}\r\n  >\r\n    <SwitchPrimitive.Thumb\r\n      className={cn(\r\n        's3-explr-ui-switch-thumb pointer-events-none block h-4 w-4 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0',\r\n      )}\r\n    />\r\n  </SwitchPrimitive.Root>\r\n));\r\nSwitch.displayName = 'Switch';\r\n\r\nexport { Switch };\r\n","\"use client\";\n\n// src/roving-focus-group.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { jsx } from \"react/jsx-runtime\";\nvar ENTRY_FOCUS = \"rovingFocusGroup.onEntryFocus\";\nvar EVENT_OPTIONS = { bubbles: false, cancelable: true };\nvar GROUP_NAME = \"RovingFocusGroup\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(GROUP_NAME);\nvar [createRovingFocusGroupContext, createRovingFocusGroupScope] = createContextScope(\n  GROUP_NAME,\n  [createCollectionScope]\n);\nvar [RovingFocusProvider, useRovingFocusContext] = createRovingFocusGroupContext(GROUP_NAME);\nvar RovingFocusGroup = React.forwardRef(\n  (props, forwardedRef) => {\n    return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeRovingFocusGroup, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeRovingFocusGroup, children: /* @__PURE__ */ jsx(RovingFocusGroupImpl, { ...props, ref: forwardedRef }) }) });\n  }\n);\nRovingFocusGroup.displayName = GROUP_NAME;\nvar RovingFocusGroupImpl = React.forwardRef((props, forwardedRef) => {\n  const {\n    __scopeRovingFocusGroup,\n    orientation,\n    loop = false,\n    dir,\n    currentTabStopId: currentTabStopIdProp,\n    defaultCurrentTabStopId,\n    onCurrentTabStopIdChange,\n    onEntryFocus,\n    preventScrollOnEntryFocus = false,\n    ...groupProps\n  } = props;\n  const ref = React.useRef(null);\n  const composedRefs = useComposedRefs(forwardedRef, ref);\n  const direction = useDirection(dir);\n  const [currentTabStopId, setCurrentTabStopId] = useControllableState({\n    prop: currentTabStopIdProp,\n    defaultProp: defaultCurrentTabStopId ?? null,\n    onChange: onCurrentTabStopIdChange,\n    caller: GROUP_NAME\n  });\n  const [isTabbingBackOut, setIsTabbingBackOut] = React.useState(false);\n  const handleEntryFocus = useCallbackRef(onEntryFocus);\n  const getItems = useCollection(__scopeRovingFocusGroup);\n  const isClickFocusRef = React.useRef(false);\n  const [focusableItemsCount, setFocusableItemsCount] = React.useState(0);\n  React.useEffect(() => {\n    const node = ref.current;\n    if (node) {\n      node.addEventListener(ENTRY_FOCUS, handleEntryFocus);\n      return () => node.removeEventListener(ENTRY_FOCUS, handleEntryFocus);\n    }\n  }, [handleEntryFocus]);\n  return /* @__PURE__ */ jsx(\n    RovingFocusProvider,\n    {\n      scope: __scopeRovingFocusGroup,\n      orientation,\n      dir: direction,\n      loop,\n      currentTabStopId,\n      onItemFocus: React.useCallback(\n        (tabStopId) => setCurrentTabStopId(tabStopId),\n        [setCurrentTabStopId]\n      ),\n      onItemShiftTab: React.useCallback(() => setIsTabbingBackOut(true), []),\n      onFocusableItemAdd: React.useCallback(\n        () => setFocusableItemsCount((prevCount) => prevCount + 1),\n        []\n      ),\n      onFocusableItemRemove: React.useCallback(\n        () => setFocusableItemsCount((prevCount) => prevCount - 1),\n        []\n      ),\n      children: /* @__PURE__ */ jsx(\n        Primitive.div,\n        {\n          tabIndex: isTabbingBackOut || focusableItemsCount === 0 ? -1 : 0,\n          \"data-orientation\": orientation,\n          ...groupProps,\n          ref: composedRefs,\n          style: { outline: \"none\", ...props.style },\n          onMouseDown: composeEventHandlers(props.onMouseDown, () => {\n            isClickFocusRef.current = true;\n          }),\n          onFocus: composeEventHandlers(props.onFocus, (event) => {\n            const isKeyboardFocus = !isClickFocusRef.current;\n            if (event.target === event.currentTarget && isKeyboardFocus && !isTabbingBackOut) {\n              const entryFocusEvent = new CustomEvent(ENTRY_FOCUS, EVENT_OPTIONS);\n              event.currentTarget.dispatchEvent(entryFocusEvent);\n              if (!entryFocusEvent.defaultPrevented) {\n                const items = getItems().filter((item) => item.focusable);\n                const activeItem = items.find((item) => item.active);\n                const currentItem = items.find((item) => item.id === currentTabStopId);\n                const candidateItems = [activeItem, currentItem, ...items].filter(\n                  Boolean\n                );\n                const candidateNodes = candidateItems.map((item) => item.ref.current);\n                focusFirst(candidateNodes, preventScrollOnEntryFocus);\n              }\n            }\n            isClickFocusRef.current = false;\n          }),\n          onBlur: composeEventHandlers(props.onBlur, () => setIsTabbingBackOut(false))\n        }\n      )\n    }\n  );\n});\nvar ITEM_NAME = \"RovingFocusGroupItem\";\nvar RovingFocusGroupItem = React.forwardRef(\n  (props, forwardedRef) => {\n    const {\n      __scopeRovingFocusGroup,\n      focusable = true,\n      active = false,\n      tabStopId,\n      children,\n      ...itemProps\n    } = props;\n    const autoId = useId();\n    const id = tabStopId || autoId;\n    const context = useRovingFocusContext(ITEM_NAME, __scopeRovingFocusGroup);\n    const isCurrentTabStop = context.currentTabStopId === id;\n    const getItems = useCollection(__scopeRovingFocusGroup);\n    const { onFocusableItemAdd, onFocusableItemRemove, currentTabStopId } = context;\n    React.useEffect(() => {\n      if (focusable) {\n        onFocusableItemAdd();\n        return () => onFocusableItemRemove();\n      }\n    }, [focusable, onFocusableItemAdd, onFocusableItemRemove]);\n    return /* @__PURE__ */ jsx(\n      Collection.ItemSlot,\n      {\n        scope: __scopeRovingFocusGroup,\n        id,\n        focusable,\n        active,\n        children: /* @__PURE__ */ jsx(\n          Primitive.span,\n          {\n            tabIndex: isCurrentTabStop ? 0 : -1,\n            \"data-orientation\": context.orientation,\n            ...itemProps,\n            ref: forwardedRef,\n            onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {\n              if (!focusable) event.preventDefault();\n              else context.onItemFocus(id);\n            }),\n            onFocus: composeEventHandlers(props.onFocus, () => context.onItemFocus(id)),\n            onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n              if (event.key === \"Tab\" && event.shiftKey) {\n                context.onItemShiftTab();\n                return;\n              }\n              if (event.target !== event.currentTarget) return;\n              const focusIntent = getFocusIntent(event, context.orientation, context.dir);\n              if (focusIntent !== void 0) {\n                if (event.metaKey || event.ctrlKey || event.altKey || event.shiftKey) return;\n                event.preventDefault();\n                const items = getItems().filter((item) => item.focusable);\n                let candidateNodes = items.map((item) => item.ref.current);\n                if (focusIntent === \"last\") candidateNodes.reverse();\n                else if (focusIntent === \"prev\" || focusIntent === \"next\") {\n                  if (focusIntent === \"prev\") candidateNodes.reverse();\n                  const currentIndex = candidateNodes.indexOf(event.currentTarget);\n                  candidateNodes = context.loop ? wrapArray(candidateNodes, currentIndex + 1) : candidateNodes.slice(currentIndex + 1);\n                }\n                setTimeout(() => focusFirst(candidateNodes));\n              }\n            }),\n            children: typeof children === \"function\" ? children({ isCurrentTabStop, hasTabStop: currentTabStopId != null }) : children\n          }\n        )\n      }\n    );\n  }\n);\nRovingFocusGroupItem.displayName = ITEM_NAME;\nvar MAP_KEY_TO_FOCUS_INTENT = {\n  ArrowLeft: \"prev\",\n  ArrowUp: \"prev\",\n  ArrowRight: \"next\",\n  ArrowDown: \"next\",\n  PageUp: \"first\",\n  Home: \"first\",\n  PageDown: \"last\",\n  End: \"last\"\n};\nfunction getDirectionAwareKey(key, dir) {\n  if (dir !== \"rtl\") return key;\n  return key === \"ArrowLeft\" ? \"ArrowRight\" : key === \"ArrowRight\" ? \"ArrowLeft\" : key;\n}\nfunction getFocusIntent(event, orientation, dir) {\n  const key = getDirectionAwareKey(event.key, dir);\n  if (orientation === \"vertical\" && [\"ArrowLeft\", \"ArrowRight\"].includes(key)) return void 0;\n  if (orientation === \"horizontal\" && [\"ArrowUp\", \"ArrowDown\"].includes(key)) return void 0;\n  return MAP_KEY_TO_FOCUS_INTENT[key];\n}\nfunction focusFirst(candidates, preventScroll = false) {\n  const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n  for (const candidate of candidates) {\n    if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n    candidate.focus({ preventScroll });\n    if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n  }\n}\nfunction wrapArray(array, startIndex) {\n  return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\nvar Root = RovingFocusGroup;\nvar Item = RovingFocusGroupItem;\nexport {\n  Item,\n  Root,\n  RovingFocusGroup,\n  RovingFocusGroupItem,\n  createRovingFocusGroupScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/tabs.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { createRovingFocusGroupScope } from \"@radix-ui/react-roving-focus\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { jsx } from \"react/jsx-runtime\";\nvar TABS_NAME = \"Tabs\";\nvar [createTabsContext, createTabsScope] = createContextScope(TABS_NAME, [\n  createRovingFocusGroupScope\n]);\nvar useRovingFocusGroupScope = createRovingFocusGroupScope();\nvar [TabsProvider, useTabsContext] = createTabsContext(TABS_NAME);\nvar Tabs = React.forwardRef(\n  (props, forwardedRef) => {\n    const {\n      __scopeTabs,\n      value: valueProp,\n      onValueChange,\n      defaultValue,\n      orientation = \"horizontal\",\n      dir,\n      activationMode = \"automatic\",\n      ...tabsProps\n    } = props;\n    const direction = useDirection(dir);\n    const [value, setValue] = useControllableState({\n      prop: valueProp,\n      onChange: onValueChange,\n      defaultProp: defaultValue ?? \"\",\n      caller: TABS_NAME\n    });\n    return /* @__PURE__ */ jsx(\n      TabsProvider,\n      {\n        scope: __scopeTabs,\n        baseId: useId(),\n        value,\n        onValueChange: setValue,\n        orientation,\n        dir: direction,\n        activationMode,\n        children: /* @__PURE__ */ jsx(\n          Primitive.div,\n          {\n            dir: direction,\n            \"data-orientation\": orientation,\n            ...tabsProps,\n            ref: forwardedRef\n          }\n        )\n      }\n    );\n  }\n);\nTabs.displayName = TABS_NAME;\nvar TAB_LIST_NAME = \"TabsList\";\nvar TabsList = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeTabs, loop = true, ...listProps } = props;\n    const context = useTabsContext(TAB_LIST_NAME, __scopeTabs);\n    const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n    return /* @__PURE__ */ jsx(\n      RovingFocusGroup.Root,\n      {\n        asChild: true,\n        ...rovingFocusGroupScope,\n        orientation: context.orientation,\n        dir: context.dir,\n        loop,\n        children: /* @__PURE__ */ jsx(\n          Primitive.div,\n          {\n            role: \"tablist\",\n            \"aria-orientation\": context.orientation,\n            ...listProps,\n            ref: forwardedRef\n          }\n        )\n      }\n    );\n  }\n);\nTabsList.displayName = TAB_LIST_NAME;\nvar TRIGGER_NAME = \"TabsTrigger\";\nvar TabsTrigger = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeTabs, value, disabled = false, ...triggerProps } = props;\n    const context = useTabsContext(TRIGGER_NAME, __scopeTabs);\n    const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n    const triggerId = makeTriggerId(context.baseId, value);\n    const contentId = makeContentId(context.baseId, value);\n    const isSelected = value === context.value;\n    return /* @__PURE__ */ jsx(\n      RovingFocusGroup.Item,\n      {\n        asChild: true,\n        ...rovingFocusGroupScope,\n        focusable: !disabled,\n        active: isSelected,\n        children: /* @__PURE__ */ jsx(\n          Primitive.button,\n          {\n            type: \"button\",\n            role: \"tab\",\n            \"aria-selected\": isSelected,\n            \"aria-controls\": contentId,\n            \"data-state\": isSelected ? \"active\" : \"inactive\",\n            \"data-disabled\": disabled ? \"\" : void 0,\n            disabled,\n            id: triggerId,\n            ...triggerProps,\n            ref: forwardedRef,\n            onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {\n              if (!disabled && event.button === 0 && event.ctrlKey === false) {\n                context.onValueChange(value);\n              } else {\n                event.preventDefault();\n              }\n            }),\n            onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n              if ([\" \", \"Enter\"].includes(event.key)) context.onValueChange(value);\n            }),\n            onFocus: composeEventHandlers(props.onFocus, () => {\n              const isAutomaticActivation = context.activationMode !== \"manual\";\n              if (!isSelected && !disabled && isAutomaticActivation) {\n                context.onValueChange(value);\n              }\n            })\n          }\n        )\n      }\n    );\n  }\n);\nTabsTrigger.displayName = TRIGGER_NAME;\nvar CONTENT_NAME = \"TabsContent\";\nvar TabsContent = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeTabs, value, forceMount, children, ...contentProps } = props;\n    const context = useTabsContext(CONTENT_NAME, __scopeTabs);\n    const triggerId = makeTriggerId(context.baseId, value);\n    const contentId = makeContentId(context.baseId, value);\n    const isSelected = value === context.value;\n    const isMountAnimationPreventedRef = React.useRef(isSelected);\n    React.useEffect(() => {\n      const rAF = requestAnimationFrame(() => isMountAnimationPreventedRef.current = false);\n      return () => cancelAnimationFrame(rAF);\n    }, []);\n    return /* @__PURE__ */ jsx(Presence, { present: forceMount || isSelected, children: ({ present }) => /* @__PURE__ */ jsx(\n      Primitive.div,\n      {\n        \"data-state\": isSelected ? \"active\" : \"inactive\",\n        \"data-orientation\": context.orientation,\n        role: \"tabpanel\",\n        \"aria-labelledby\": triggerId,\n        hidden: !present,\n        id: contentId,\n        tabIndex: 0,\n        ...contentProps,\n        ref: forwardedRef,\n        style: {\n          ...props.style,\n          animationDuration: isMountAnimationPreventedRef.current ? \"0s\" : void 0\n        },\n        children: present && children\n      }\n    ) });\n  }\n);\nTabsContent.displayName = CONTENT_NAME;\nfunction makeTriggerId(baseId, value) {\n  return `${baseId}-trigger-${value}`;\n}\nfunction makeContentId(baseId, value) {\n  return `${baseId}-content-${value}`;\n}\nvar Root2 = Tabs;\nvar List = TabsList;\nvar Trigger = TabsTrigger;\nvar Content = TabsContent;\nexport {\n  Content,\n  List,\n  Root2 as Root,\n  Tabs,\n  TabsContent,\n  TabsList,\n  TabsTrigger,\n  Trigger,\n  createTabsScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as TabsPrimitive from '@radix-ui/react-tabs';\nimport * as React from 'react';\n\nimport { cn } from '@/lib/utils';\n\nconst Tabs = TabsPrimitive.Root;\n\nconst TabsList = React.forwardRef<\n  React.ElementRef<typeof TabsPrimitive.List>,\n  React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n  <TabsPrimitive.List\n    ref={ref}\n    className={cn(\n      'inline-flex h-9 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground',\n      className,\n    )}\n    {...props}\n  />\n));\nTabsList.displayName = TabsPrimitive.List.displayName;\n\nconst TabsTrigger = React.forwardRef<\n  React.ElementRef<typeof TabsPrimitive.Trigger>,\n  React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n  <TabsPrimitive.Trigger\n    ref={ref}\n    className={cn(\n      'inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow',\n      className,\n    )}\n    {...props}\n  />\n));\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\n\nconst TabsContent = React.forwardRef<\n  React.ElementRef<typeof TabsPrimitive.Content>,\n  React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n  <TabsPrimitive.Content\n    ref={ref}\n    className={cn(\n      'mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n      className,\n    )}\n    {...props}\n  />\n));\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","import * as React from 'react';\n\nimport { cn } from '@/lib/utils';\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, React.ComponentProps<'textarea'>>(\n  ({ className, ...props }, ref) => {\n    return (\n      <textarea\n        className={cn(\n          'flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',\n          className,\n        )}\n        ref={ref}\n        {...props}\n      />\n    );\n  },\n);\nTextarea.displayName = 'Textarea';\n\nexport { Textarea };\n","\"use client\";\n\n// src/toast.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport * as DismissableLayer from \"@radix-ui/react-dismissable-layer\";\nimport { Portal } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive, dispatchDiscreteCustomEvent } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { VisuallyHidden } from \"@radix-ui/react-visually-hidden\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar PROVIDER_NAME = \"ToastProvider\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(\"Toast\");\nvar [createToastContext, createToastScope] = createContextScope(\"Toast\", [createCollectionScope]);\nvar [ToastProviderProvider, useToastProviderContext] = createToastContext(PROVIDER_NAME);\nvar ToastProvider = (props) => {\n  const {\n    __scopeToast,\n    label = \"Notification\",\n    duration = 5e3,\n    swipeDirection = \"right\",\n    swipeThreshold = 50,\n    announcerContainer,\n    children\n  } = props;\n  const [viewport, setViewport] = React.useState(null);\n  const [toastCount, setToastCount] = React.useState(0);\n  const isFocusedToastEscapeKeyDownRef = React.useRef(false);\n  const isClosePausedRef = React.useRef(false);\n  if (!label.trim()) {\n    console.error(\n      `Invalid prop \\`label\\` supplied to \\`${PROVIDER_NAME}\\`. Expected non-empty \\`string\\`.`\n    );\n  }\n  return /* @__PURE__ */ jsx(Collection.Provider, { scope: __scopeToast, children: /* @__PURE__ */ jsx(\n    ToastProviderProvider,\n    {\n      scope: __scopeToast,\n      label,\n      duration,\n      swipeDirection,\n      swipeThreshold,\n      toastCount,\n      viewport,\n      onViewportChange: setViewport,\n      onToastAdd: React.useCallback(() => setToastCount((prevCount) => prevCount + 1), []),\n      onToastRemove: React.useCallback(() => setToastCount((prevCount) => prevCount - 1), []),\n      isFocusedToastEscapeKeyDownRef,\n      isClosePausedRef,\n      announcerContainer,\n      children\n    }\n  ) });\n};\nToastProvider.displayName = PROVIDER_NAME;\nvar VIEWPORT_NAME = \"ToastViewport\";\nvar VIEWPORT_DEFAULT_HOTKEY = [\"F8\"];\nvar VIEWPORT_PAUSE = \"toast.viewportPause\";\nvar VIEWPORT_RESUME = \"toast.viewportResume\";\nvar ToastViewport = React.forwardRef(\n  (props, forwardedRef) => {\n    const {\n      __scopeToast,\n      hotkey = VIEWPORT_DEFAULT_HOTKEY,\n      label = \"Notifications ({hotkey})\",\n      ...viewportProps\n    } = props;\n    const context = useToastProviderContext(VIEWPORT_NAME, __scopeToast);\n    const getItems = useCollection(__scopeToast);\n    const wrapperRef = React.useRef(null);\n    const headFocusProxyRef = React.useRef(null);\n    const tailFocusProxyRef = React.useRef(null);\n    const ref = React.useRef(null);\n    const composedRefs = useComposedRefs(forwardedRef, ref, context.onViewportChange);\n    const hotkeyLabel = hotkey.join(\"+\").replace(/Key/g, \"\").replace(/Digit/g, \"\");\n    const hasToasts = context.toastCount > 0;\n    React.useEffect(() => {\n      const handleKeyDown = (event) => {\n        const isHotkeyPressed = hotkey.length !== 0 && hotkey.every((key) => event[key] || event.code === key);\n        if (isHotkeyPressed) ref.current?.focus();\n      };\n      document.addEventListener(\"keydown\", handleKeyDown);\n      return () => document.removeEventListener(\"keydown\", handleKeyDown);\n    }, [hotkey]);\n    React.useEffect(() => {\n      const wrapper = wrapperRef.current;\n      const viewport = ref.current;\n      if (hasToasts && wrapper && viewport) {\n        const handlePause = () => {\n          if (!context.isClosePausedRef.current) {\n            const pauseEvent = new CustomEvent(VIEWPORT_PAUSE);\n            viewport.dispatchEvent(pauseEvent);\n            context.isClosePausedRef.current = true;\n          }\n        };\n        const handleResume = () => {\n          if (context.isClosePausedRef.current) {\n            const resumeEvent = new CustomEvent(VIEWPORT_RESUME);\n            viewport.dispatchEvent(resumeEvent);\n            context.isClosePausedRef.current = false;\n          }\n        };\n        const handleFocusOutResume = (event) => {\n          const isFocusMovingOutside = !wrapper.contains(event.relatedTarget);\n          if (isFocusMovingOutside) handleResume();\n        };\n        const handlePointerLeaveResume = () => {\n          const isFocusInside = wrapper.contains(document.activeElement);\n          if (!isFocusInside) handleResume();\n        };\n        wrapper.addEventListener(\"focusin\", handlePause);\n        wrapper.addEventListener(\"focusout\", handleFocusOutResume);\n        wrapper.addEventListener(\"pointermove\", handlePause);\n        wrapper.addEventListener(\"pointerleave\", handlePointerLeaveResume);\n        window.addEventListener(\"blur\", handlePause);\n        window.addEventListener(\"focus\", handleResume);\n        return () => {\n          wrapper.removeEventListener(\"focusin\", handlePause);\n          wrapper.removeEventListener(\"focusout\", handleFocusOutResume);\n          wrapper.removeEventListener(\"pointermove\", handlePause);\n          wrapper.removeEventListener(\"pointerleave\", handlePointerLeaveResume);\n          window.removeEventListener(\"blur\", handlePause);\n          window.removeEventListener(\"focus\", handleResume);\n        };\n      }\n    }, [hasToasts, context.isClosePausedRef]);\n    const getSortedTabbableCandidates = React.useCallback(\n      ({ tabbingDirection }) => {\n        const toastItems = getItems();\n        const tabbableCandidates = toastItems.map((toastItem) => {\n          const toastNode = toastItem.ref.current;\n          const toastTabbableCandidates = [toastNode, ...getTabbableCandidates(toastNode)];\n          return tabbingDirection === \"forwards\" ? toastTabbableCandidates : toastTabbableCandidates.reverse();\n        });\n        return (tabbingDirection === \"forwards\" ? tabbableCandidates.reverse() : tabbableCandidates).flat();\n      },\n      [getItems]\n    );\n    React.useEffect(() => {\n      const viewport = ref.current;\n      if (viewport) {\n        const handleKeyDown = (event) => {\n          const isMetaKey = event.altKey || event.ctrlKey || event.metaKey;\n          const isTabKey = event.key === \"Tab\" && !isMetaKey;\n          if (isTabKey) {\n            const focusedElement = document.activeElement;\n            const isTabbingBackwards = event.shiftKey;\n            const targetIsViewport = event.target === viewport;\n            if (targetIsViewport && isTabbingBackwards) {\n              headFocusProxyRef.current?.focus();\n              return;\n            }\n            const tabbingDirection = isTabbingBackwards ? \"backwards\" : \"forwards\";\n            const sortedCandidates = getSortedTabbableCandidates({ tabbingDirection });\n            const index = sortedCandidates.findIndex((candidate) => candidate === focusedElement);\n            if (focusFirst(sortedCandidates.slice(index + 1))) {\n              event.preventDefault();\n            } else {\n              isTabbingBackwards ? headFocusProxyRef.current?.focus() : tailFocusProxyRef.current?.focus();\n            }\n          }\n        };\n        viewport.addEventListener(\"keydown\", handleKeyDown);\n        return () => viewport.removeEventListener(\"keydown\", handleKeyDown);\n      }\n    }, [getItems, getSortedTabbableCandidates]);\n    return /* @__PURE__ */ jsxs(\n      DismissableLayer.Branch,\n      {\n        ref: wrapperRef,\n        role: \"region\",\n        \"aria-label\": label.replace(\"{hotkey}\", hotkeyLabel),\n        tabIndex: -1,\n        style: { pointerEvents: hasToasts ? void 0 : \"none\" },\n        children: [\n          hasToasts && /* @__PURE__ */ jsx(\n            FocusProxy,\n            {\n              ref: headFocusProxyRef,\n              onFocusFromOutsideViewport: () => {\n                const tabbableCandidates = getSortedTabbableCandidates({\n                  tabbingDirection: \"forwards\"\n                });\n                focusFirst(tabbableCandidates);\n              }\n            }\n          ),\n          /* @__PURE__ */ jsx(Collection.Slot, { scope: __scopeToast, children: /* @__PURE__ */ jsx(Primitive.ol, { tabIndex: -1, ...viewportProps, ref: composedRefs }) }),\n          hasToasts && /* @__PURE__ */ jsx(\n            FocusProxy,\n            {\n              ref: tailFocusProxyRef,\n              onFocusFromOutsideViewport: () => {\n                const tabbableCandidates = getSortedTabbableCandidates({\n                  tabbingDirection: \"backwards\"\n                });\n                focusFirst(tabbableCandidates);\n              }\n            }\n          )\n        ]\n      }\n    );\n  }\n);\nToastViewport.displayName = VIEWPORT_NAME;\nvar FOCUS_PROXY_NAME = \"ToastFocusProxy\";\nvar FocusProxy = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeToast, onFocusFromOutsideViewport, ...proxyProps } = props;\n    const context = useToastProviderContext(FOCUS_PROXY_NAME, __scopeToast);\n    return /* @__PURE__ */ jsx(\n      VisuallyHidden,\n      {\n        tabIndex: 0,\n        ...proxyProps,\n        ref: forwardedRef,\n        style: { position: \"fixed\" },\n        onFocus: (event) => {\n          const prevFocusedElement = event.relatedTarget;\n          const isFocusFromOutsideViewport = !context.viewport?.contains(prevFocusedElement);\n          if (isFocusFromOutsideViewport) onFocusFromOutsideViewport();\n        }\n      }\n    );\n  }\n);\nFocusProxy.displayName = FOCUS_PROXY_NAME;\nvar TOAST_NAME = \"Toast\";\nvar TOAST_SWIPE_START = \"toast.swipeStart\";\nvar TOAST_SWIPE_MOVE = \"toast.swipeMove\";\nvar TOAST_SWIPE_CANCEL = \"toast.swipeCancel\";\nvar TOAST_SWIPE_END = \"toast.swipeEnd\";\nvar Toast = React.forwardRef(\n  (props, forwardedRef) => {\n    const { forceMount, open: openProp, defaultOpen, onOpenChange, ...toastProps } = props;\n    const [open, setOpen] = useControllableState({\n      prop: openProp,\n      defaultProp: defaultOpen ?? true,\n      onChange: onOpenChange,\n      caller: TOAST_NAME\n    });\n    return /* @__PURE__ */ jsx(Presence, { present: forceMount || open, children: /* @__PURE__ */ jsx(\n      ToastImpl,\n      {\n        open,\n        ...toastProps,\n        ref: forwardedRef,\n        onClose: () => setOpen(false),\n        onPause: useCallbackRef(props.onPause),\n        onResume: useCallbackRef(props.onResume),\n        onSwipeStart: composeEventHandlers(props.onSwipeStart, (event) => {\n          event.currentTarget.setAttribute(\"data-swipe\", \"start\");\n        }),\n        onSwipeMove: composeEventHandlers(props.onSwipeMove, (event) => {\n          const { x, y } = event.detail.delta;\n          event.currentTarget.setAttribute(\"data-swipe\", \"move\");\n          event.currentTarget.style.setProperty(\"--radix-toast-swipe-move-x\", `${x}px`);\n          event.currentTarget.style.setProperty(\"--radix-toast-swipe-move-y\", `${y}px`);\n        }),\n        onSwipeCancel: composeEventHandlers(props.onSwipeCancel, (event) => {\n          event.currentTarget.setAttribute(\"data-swipe\", \"cancel\");\n          event.currentTarget.style.removeProperty(\"--radix-toast-swipe-move-x\");\n          event.currentTarget.style.removeProperty(\"--radix-toast-swipe-move-y\");\n          event.currentTarget.style.removeProperty(\"--radix-toast-swipe-end-x\");\n          event.currentTarget.style.removeProperty(\"--radix-toast-swipe-end-y\");\n        }),\n        onSwipeEnd: composeEventHandlers(props.onSwipeEnd, (event) => {\n          const { x, y } = event.detail.delta;\n          event.currentTarget.setAttribute(\"data-swipe\", \"end\");\n          event.currentTarget.style.removeProperty(\"--radix-toast-swipe-move-x\");\n          event.currentTarget.style.removeProperty(\"--radix-toast-swipe-move-y\");\n          event.currentTarget.style.setProperty(\"--radix-toast-swipe-end-x\", `${x}px`);\n          event.currentTarget.style.setProperty(\"--radix-toast-swipe-end-y\", `${y}px`);\n          setOpen(false);\n        })\n      }\n    ) });\n  }\n);\nToast.displayName = TOAST_NAME;\nvar [ToastInteractiveProvider, useToastInteractiveContext] = createToastContext(TOAST_NAME, {\n  onClose() {\n  }\n});\nvar ToastImpl = React.forwardRef(\n  (props, forwardedRef) => {\n    const {\n      __scopeToast,\n      type = \"foreground\",\n      duration: durationProp,\n      open,\n      onClose,\n      onEscapeKeyDown,\n      onPause,\n      onResume,\n      onSwipeStart,\n      onSwipeMove,\n      onSwipeCancel,\n      onSwipeEnd,\n      ...toastProps\n    } = props;\n    const context = useToastProviderContext(TOAST_NAME, __scopeToast);\n    const [node, setNode] = React.useState(null);\n    const composedRefs = useComposedRefs(forwardedRef, setNode);\n    const pointerStartRef = React.useRef(null);\n    const swipeDeltaRef = React.useRef(null);\n    const duration = durationProp || context.duration;\n    const closeTimerStartTimeRef = React.useRef(0);\n    const closeTimerRemainingTimeRef = React.useRef(duration);\n    const closeTimerRef = React.useRef(0);\n    const { onToastAdd, onToastRemove } = context;\n    const handleClose = useCallbackRef(() => {\n      const isFocusInToast = node?.contains(document.activeElement);\n      if (isFocusInToast) context.viewport?.focus();\n      onClose();\n    });\n    const startTimer = React.useCallback(\n      (duration2) => {\n        if (!duration2 || duration2 === Infinity) return;\n        window.clearTimeout(closeTimerRef.current);\n        closeTimerStartTimeRef.current = (/* @__PURE__ */ new Date()).getTime();\n        closeTimerRef.current = window.setTimeout(handleClose, duration2);\n      },\n      [handleClose]\n    );\n    React.useEffect(() => {\n      const viewport = context.viewport;\n      if (viewport) {\n        const handleResume = () => {\n          startTimer(closeTimerRemainingTimeRef.current);\n          onResume?.();\n        };\n        const handlePause = () => {\n          const elapsedTime = (/* @__PURE__ */ new Date()).getTime() - closeTimerStartTimeRef.current;\n          closeTimerRemainingTimeRef.current = closeTimerRemainingTimeRef.current - elapsedTime;\n          window.clearTimeout(closeTimerRef.current);\n          onPause?.();\n        };\n        viewport.addEventListener(VIEWPORT_PAUSE, handlePause);\n        viewport.addEventListener(VIEWPORT_RESUME, handleResume);\n        return () => {\n          viewport.removeEventListener(VIEWPORT_PAUSE, handlePause);\n          viewport.removeEventListener(VIEWPORT_RESUME, handleResume);\n        };\n      }\n    }, [context.viewport, duration, onPause, onResume, startTimer]);\n    React.useEffect(() => {\n      if (open && !context.isClosePausedRef.current) startTimer(duration);\n    }, [open, duration, context.isClosePausedRef, startTimer]);\n    React.useEffect(() => {\n      return () => {\n        window.clearTimeout(closeTimerRef.current);\n      };\n    }, []);\n    React.useEffect(() => {\n      onToastAdd();\n      return () => onToastRemove();\n    }, [onToastAdd, onToastRemove]);\n    const announceTextContent = React.useMemo(() => {\n      return node ? getAnnounceTextContent(node) : null;\n    }, [node]);\n    if (!context.viewport) return null;\n    return /* @__PURE__ */ jsxs(Fragment, { children: [\n      announceTextContent && /* @__PURE__ */ jsx(\n        ToastAnnounce,\n        {\n          __scopeToast,\n          role: \"status\",\n          \"aria-live\": type === \"foreground\" ? \"assertive\" : \"polite\",\n          children: announceTextContent\n        }\n      ),\n      /* @__PURE__ */ jsx(ToastInteractiveProvider, { scope: __scopeToast, onClose: handleClose, children: ReactDOM.createPortal(\n        /* @__PURE__ */ jsx(Collection.ItemSlot, { scope: __scopeToast, children: /* @__PURE__ */ jsx(\n          DismissableLayer.Root,\n          {\n            asChild: true,\n            onEscapeKeyDown: composeEventHandlers(onEscapeKeyDown, () => {\n              if (!context.isFocusedToastEscapeKeyDownRef.current) handleClose();\n              context.isFocusedToastEscapeKeyDownRef.current = false;\n            }),\n            children: /* @__PURE__ */ jsx(\n              Primitive.li,\n              {\n                tabIndex: 0,\n                \"data-state\": open ? \"open\" : \"closed\",\n                \"data-swipe-direction\": context.swipeDirection,\n                ...toastProps,\n                ref: composedRefs,\n                style: { userSelect: \"none\", touchAction: \"none\", ...props.style },\n                onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n                  if (event.key !== \"Escape\") return;\n                  onEscapeKeyDown?.(event.nativeEvent);\n                  if (!event.nativeEvent.defaultPrevented) {\n                    context.isFocusedToastEscapeKeyDownRef.current = true;\n                    handleClose();\n                  }\n                }),\n                onPointerDown: composeEventHandlers(props.onPointerDown, (event) => {\n                  if (event.button !== 0) return;\n                  pointerStartRef.current = { x: event.clientX, y: event.clientY };\n                }),\n                onPointerMove: composeEventHandlers(props.onPointerMove, (event) => {\n                  if (!pointerStartRef.current) return;\n                  const x = event.clientX - pointerStartRef.current.x;\n                  const y = event.clientY - pointerStartRef.current.y;\n                  const hasSwipeMoveStarted = Boolean(swipeDeltaRef.current);\n                  const isHorizontalSwipe = [\"left\", \"right\"].includes(context.swipeDirection);\n                  const clamp = [\"left\", \"up\"].includes(context.swipeDirection) ? Math.min : Math.max;\n                  const clampedX = isHorizontalSwipe ? clamp(0, x) : 0;\n                  const clampedY = !isHorizontalSwipe ? clamp(0, y) : 0;\n                  const moveStartBuffer = event.pointerType === \"touch\" ? 10 : 2;\n                  const delta = { x: clampedX, y: clampedY };\n                  const eventDetail = { originalEvent: event, delta };\n                  if (hasSwipeMoveStarted) {\n                    swipeDeltaRef.current = delta;\n                    handleAndDispatchCustomEvent(TOAST_SWIPE_MOVE, onSwipeMove, eventDetail, {\n                      discrete: false\n                    });\n                  } else if (isDeltaInDirection(delta, context.swipeDirection, moveStartBuffer)) {\n                    swipeDeltaRef.current = delta;\n                    handleAndDispatchCustomEvent(TOAST_SWIPE_START, onSwipeStart, eventDetail, {\n                      discrete: false\n                    });\n                    event.target.setPointerCapture(event.pointerId);\n                  } else if (Math.abs(x) > moveStartBuffer || Math.abs(y) > moveStartBuffer) {\n                    pointerStartRef.current = null;\n                  }\n                }),\n                onPointerUp: composeEventHandlers(props.onPointerUp, (event) => {\n                  const delta = swipeDeltaRef.current;\n                  const target = event.target;\n                  if (target.hasPointerCapture(event.pointerId)) {\n                    target.releasePointerCapture(event.pointerId);\n                  }\n                  swipeDeltaRef.current = null;\n                  pointerStartRef.current = null;\n                  if (delta) {\n                    const toast = event.currentTarget;\n                    const eventDetail = { originalEvent: event, delta };\n                    if (isDeltaInDirection(delta, context.swipeDirection, context.swipeThreshold)) {\n                      handleAndDispatchCustomEvent(TOAST_SWIPE_END, onSwipeEnd, eventDetail, {\n                        discrete: true\n                      });\n                    } else {\n                      handleAndDispatchCustomEvent(\n                        TOAST_SWIPE_CANCEL,\n                        onSwipeCancel,\n                        eventDetail,\n                        {\n                          discrete: true\n                        }\n                      );\n                    }\n                    toast.addEventListener(\"click\", (event2) => event2.preventDefault(), {\n                      once: true\n                    });\n                  }\n                })\n              }\n            )\n          }\n        ) }),\n        context.viewport\n      ) })\n    ] });\n  }\n);\nvar ToastAnnounce = (props) => {\n  const { __scopeToast, children, ...announceProps } = props;\n  const context = useToastProviderContext(TOAST_NAME, __scopeToast);\n  const [renderAnnounceText, setRenderAnnounceText] = React.useState(false);\n  const [isAnnounced, setIsAnnounced] = React.useState(false);\n  useNextFrame(() => setRenderAnnounceText(true));\n  React.useEffect(() => {\n    const timer = window.setTimeout(() => setIsAnnounced(true), 1e3);\n    return () => window.clearTimeout(timer);\n  }, []);\n  return isAnnounced ? null : /* @__PURE__ */ jsx(Portal, { asChild: true, container: context.announcerContainer || void 0, children: /* @__PURE__ */ jsx(VisuallyHidden, { ...announceProps, children: renderAnnounceText && /* @__PURE__ */ jsxs(Fragment, { children: [\n    context.label,\n    \" \",\n    children\n  ] }) }) });\n};\nvar TITLE_NAME = \"ToastTitle\";\nvar ToastTitle = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeToast, ...titleProps } = props;\n    return /* @__PURE__ */ jsx(Primitive.div, { ...titleProps, ref: forwardedRef });\n  }\n);\nToastTitle.displayName = TITLE_NAME;\nvar DESCRIPTION_NAME = \"ToastDescription\";\nvar ToastDescription = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeToast, ...descriptionProps } = props;\n    return /* @__PURE__ */ jsx(Primitive.div, { ...descriptionProps, ref: forwardedRef });\n  }\n);\nToastDescription.displayName = DESCRIPTION_NAME;\nvar ACTION_NAME = \"ToastAction\";\nvar ToastAction = React.forwardRef(\n  (props, forwardedRef) => {\n    const { altText, ...actionProps } = props;\n    if (!altText.trim()) {\n      console.error(\n        `Invalid prop \\`altText\\` supplied to \\`${ACTION_NAME}\\`. Expected non-empty \\`string\\`.`\n      );\n      return null;\n    }\n    return /* @__PURE__ */ jsx(ToastAnnounceExclude, { altText, asChild: true, children: /* @__PURE__ */ jsx(ToastClose, { ...actionProps, ref: forwardedRef }) });\n  }\n);\nToastAction.displayName = ACTION_NAME;\nvar CLOSE_NAME = \"ToastClose\";\nvar ToastClose = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeToast, ...closeProps } = props;\n    const interactiveContext = useToastInteractiveContext(CLOSE_NAME, __scopeToast);\n    return /* @__PURE__ */ jsx(ToastAnnounceExclude, { asChild: true, children: /* @__PURE__ */ jsx(\n      Primitive.button,\n      {\n        type: \"button\",\n        ...closeProps,\n        ref: forwardedRef,\n        onClick: composeEventHandlers(props.onClick, interactiveContext.onClose)\n      }\n    ) });\n  }\n);\nToastClose.displayName = CLOSE_NAME;\nvar ToastAnnounceExclude = React.forwardRef((props, forwardedRef) => {\n  const { __scopeToast, altText, ...announceExcludeProps } = props;\n  return /* @__PURE__ */ jsx(\n    Primitive.div,\n    {\n      \"data-radix-toast-announce-exclude\": \"\",\n      \"data-radix-toast-announce-alt\": altText || void 0,\n      ...announceExcludeProps,\n      ref: forwardedRef\n    }\n  );\n});\nfunction getAnnounceTextContent(container) {\n  const textContent = [];\n  const childNodes = Array.from(container.childNodes);\n  childNodes.forEach((node) => {\n    if (node.nodeType === node.TEXT_NODE && node.textContent) textContent.push(node.textContent);\n    if (isHTMLElement(node)) {\n      const isHidden = node.ariaHidden || node.hidden || node.style.display === \"none\";\n      const isExcluded = node.dataset.radixToastAnnounceExclude === \"\";\n      if (!isHidden) {\n        if (isExcluded) {\n          const altText = node.dataset.radixToastAnnounceAlt;\n          if (altText) textContent.push(altText);\n        } else {\n          textContent.push(...getAnnounceTextContent(node));\n        }\n      }\n    }\n  });\n  return textContent;\n}\nfunction handleAndDispatchCustomEvent(name, handler, detail, { discrete }) {\n  const currentTarget = detail.originalEvent.currentTarget;\n  const event = new CustomEvent(name, { bubbles: true, cancelable: true, detail });\n  if (handler) currentTarget.addEventListener(name, handler, { once: true });\n  if (discrete) {\n    dispatchDiscreteCustomEvent(currentTarget, event);\n  } else {\n    currentTarget.dispatchEvent(event);\n  }\n}\nvar isDeltaInDirection = (delta, direction, threshold = 0) => {\n  const deltaX = Math.abs(delta.x);\n  const deltaY = Math.abs(delta.y);\n  const isDeltaX = deltaX > deltaY;\n  if (direction === \"left\" || direction === \"right\") {\n    return isDeltaX && deltaX > threshold;\n  } else {\n    return !isDeltaX && deltaY > threshold;\n  }\n};\nfunction useNextFrame(callback = () => {\n}) {\n  const fn = useCallbackRef(callback);\n  useLayoutEffect(() => {\n    let raf1 = 0;\n    let raf2 = 0;\n    raf1 = window.requestAnimationFrame(() => raf2 = window.requestAnimationFrame(fn));\n    return () => {\n      window.cancelAnimationFrame(raf1);\n      window.cancelAnimationFrame(raf2);\n    };\n  }, [fn]);\n}\nfunction isHTMLElement(node) {\n  return node.nodeType === node.ELEMENT_NODE;\n}\nfunction getTabbableCandidates(container) {\n  const nodes = [];\n  const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {\n    acceptNode: (node) => {\n      const isHiddenInput = node.tagName === \"INPUT\" && node.type === \"hidden\";\n      if (node.disabled || node.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP;\n      return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\n    }\n  });\n  while (walker.nextNode()) nodes.push(walker.currentNode);\n  return nodes;\n}\nfunction focusFirst(candidates) {\n  const previouslyFocusedElement = document.activeElement;\n  return candidates.some((candidate) => {\n    if (candidate === previouslyFocusedElement) return true;\n    candidate.focus();\n    return document.activeElement !== previouslyFocusedElement;\n  });\n}\nvar Provider = ToastProvider;\nvar Viewport = ToastViewport;\nvar Root2 = Toast;\nvar Title = ToastTitle;\nvar Description = ToastDescription;\nvar Action = ToastAction;\nvar Close = ToastClose;\nexport {\n  Action,\n  Close,\n  Description,\n  Provider,\n  Root2 as Root,\n  Title,\n  Toast,\n  ToastAction,\n  ToastClose,\n  ToastDescription,\n  ToastProvider,\n  ToastTitle,\n  ToastViewport,\n  Viewport,\n  createToastScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as ToastPrimitives from '@radix-ui/react-toast';\nimport { type VariantProps, cva } from 'class-variance-authority';\nimport { X } from 'lucide-react';\nimport * as React from 'react';\n\nimport { cn } from '@/lib/utils';\n\nconst ToastProvider = ToastPrimitives.Provider;\n\nconst ToastViewport = React.forwardRef<\n  React.ElementRef<typeof ToastPrimitives.Viewport>,\n  React.ComponentPropsWithoutRef<typeof ToastPrimitives.Viewport>\n>(({ className, ...props }, ref) => (\n  <ToastPrimitives.Viewport\n    ref={ref}\n    className={cn(\n      's3-explr-ui-toast-viewport fixed top-0 flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px] z-[10000]',\n      className,\n    )}\n    {...props}\n  />\n));\nToastViewport.displayName = ToastPrimitives.Viewport.displayName;\n\nconst toastVariants = cva(\n  's3-explr-ui-toast group pointer-events-auto relative flex w-full items-center justify-between space-x-2 overflow-hidden rounded-md border p-4 pr-6 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full',\n  {\n    variants: {\n      variant: {\n        default: 's3-explr-ui-toast-default border bg-background text-foreground',\n        destructive:\n          's3-explr-ui-toast-destructive destructive group border-destructive bg-destructive text-destructive-foreground',\n      },\n    },\n    defaultVariants: {\n      variant: 'default',\n    },\n  },\n);\n\nconst Toast = React.forwardRef<\n  React.ElementRef<typeof ToastPrimitives.Root>,\n  React.ComponentPropsWithoutRef<typeof ToastPrimitives.Root> & VariantProps<typeof toastVariants>\n>(({ className, variant, ...props }, ref) => {\n  return (\n    <ToastPrimitives.Root\n      ref={ref}\n      className={cn(toastVariants({ variant }), className)}\n      {...props}\n    />\n  );\n});\nToast.displayName = ToastPrimitives.Root.displayName;\n\nconst ToastAction = React.forwardRef<\n  React.ElementRef<typeof ToastPrimitives.Action>,\n  React.ComponentPropsWithoutRef<typeof ToastPrimitives.Action>\n>(({ className, ...props }, ref) => (\n  <ToastPrimitives.Action\n    ref={ref}\n    className={cn(\n      's3-explr-ui-toast-action inline-flex h-8 shrink-0 items-center justify-center rounded-md border bg-transparent px-3 text-sm font-medium transition-colors hover:bg-secondary focus:outline-none focus:ring-1 focus:ring-ring disabled:pointer-events-none disabled:opacity-50 group-[.destructive]:border-muted/40 group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground group-[.destructive]:focus:ring-destructive',\n      className,\n    )}\n    {...props}\n  />\n));\nToastAction.displayName = ToastPrimitives.Action.displayName;\n\nconst ToastClose = React.forwardRef<\n  React.ElementRef<typeof ToastPrimitives.Close>,\n  React.ComponentPropsWithoutRef<typeof ToastPrimitives.Close>\n>(({ className, ...props }, ref) => (\n  <ToastPrimitives.Close\n    ref={ref}\n    className={cn(\n      'absolute right-1 top-1 rounded-md p-1 text-foreground/50 opacity-0 transition-opacity duration-200 ease-in-out hover:text-foreground focus:opacity-100 focus:outline-none focus:ring-1 group-hover:opacity-100 group-[.destructive]:text-red-300 group-[.destructive]:hover:text-red-50 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600 font-bold',\n      className,\n    )}\n    toast-close=\"\"\n    {...props}\n  >\n    <X className=\"s3-explr-ui-toast-close-icon h-4 w-4\" />\n  </ToastPrimitives.Close>\n));\nToastClose.displayName = ToastPrimitives.Close.displayName;\n\nconst ToastTitle = React.forwardRef<\n  React.ElementRef<typeof ToastPrimitives.Title>,\n  React.ComponentPropsWithoutRef<typeof ToastPrimitives.Title>\n>(({ className, ...props }, ref) => (\n  <ToastPrimitives.Title\n    ref={ref}\n    className={cn('s3-explr-ui-toast-title text-sm font-semibold [&+div]:text-xs', className)}\n    {...props}\n  />\n));\nToastTitle.displayName = ToastPrimitives.Title.displayName;\n\nconst ToastDescription = React.forwardRef<\n  React.ElementRef<typeof ToastPrimitives.Description>,\n  React.ComponentPropsWithoutRef<typeof ToastPrimitives.Description>\n>(({ className, ...props }, ref) => (\n  <ToastPrimitives.Description\n    ref={ref}\n    className={cn('text-sm opacity-90 font-bold', className)}\n    {...props}\n  />\n));\nToastDescription.displayName = ToastPrimitives.Description.displayName;\n\ntype ToastProps = React.ComponentPropsWithoutRef<typeof Toast>;\n\ntype ToastActionElement = React.ReactElement<typeof ToastAction>;\n\nexport {\n  type ToastProps,\n  type ToastActionElement,\n  ToastProvider,\n  ToastViewport,\n  Toast,\n  ToastTitle,\n  ToastDescription,\n  ToastClose,\n  ToastAction,\n};\n","'use client';\r\n\r\n// Inspired by react-hot-toast library\r\nimport * as React from 'react';\r\n\r\nimport type { ToastActionElement, ToastProps } from '@/components/ui/toast';\r\n\r\nconst TOAST_LIMIT = 1;\r\nconst TOAST_REMOVE_DELAY = 1000000;\r\n\r\ntype ToasterToast = ToastProps & {\r\n  id: string;\r\n  title?: React.ReactNode;\r\n  description?: React.ReactNode;\r\n  action?: ToastActionElement;\r\n};\r\n\r\nconst actionTypes = {\r\n  ADD_TOAST: 'ADD_TOAST',\r\n  UPDATE_TOAST: 'UPDATE_TOAST',\r\n  DISMISS_TOAST: 'DISMISS_TOAST',\r\n  REMOVE_TOAST: 'REMOVE_TOAST',\r\n} as const;\r\n\r\nlet count = 0;\r\n\r\nfunction genId() {\r\n  count = (count + 1) % Number.MAX_SAFE_INTEGER;\r\n  return count.toString();\r\n}\r\n\r\ntype ActionType = typeof actionTypes;\r\n\r\ntype Action =\r\n  | {\r\n      type: ActionType['ADD_TOAST'];\r\n      toast: ToasterToast;\r\n    }\r\n  | {\r\n      type: ActionType['UPDATE_TOAST'];\r\n      toast: Partial<ToasterToast>;\r\n    }\r\n  | {\r\n      type: ActionType['DISMISS_TOAST'];\r\n      toastId?: ToasterToast['id'];\r\n    }\r\n  | {\r\n      type: ActionType['REMOVE_TOAST'];\r\n      toastId?: ToasterToast['id'];\r\n    };\r\n\r\ninterface State {\r\n  toasts: ToasterToast[];\r\n}\r\n\r\nconst toastTimeouts = new Map<string, ReturnType<typeof setTimeout>>();\r\n\r\nconst addToRemoveQueue = (toastId: string) => {\r\n  if (toastTimeouts.has(toastId)) {\r\n    return;\r\n  }\r\n\r\n  const timeout = setTimeout(() => {\r\n    toastTimeouts.delete(toastId);\r\n    dispatch({\r\n      type: 'REMOVE_TOAST',\r\n      toastId: toastId,\r\n    });\r\n  }, TOAST_REMOVE_DELAY);\r\n\r\n  toastTimeouts.set(toastId, timeout);\r\n};\r\n\r\nexport const reducer = (state: State, action: Action): State => {\r\n  switch (action.type) {\r\n    case 'ADD_TOAST':\r\n      return {\r\n        ...state,\r\n        toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),\r\n      };\r\n\r\n    case 'UPDATE_TOAST':\r\n      return {\r\n        ...state,\r\n        toasts: state.toasts.map((t) => (t.id === action.toast.id ? { ...t, ...action.toast } : t)),\r\n      };\r\n\r\n    case 'DISMISS_TOAST': {\r\n      const { toastId } = action;\r\n\r\n      // ! Side effects ! - This could be extracted into a dismissToast() action,\r\n      // but I'll keep it here for simplicity\r\n      if (toastId) {\r\n        addToRemoveQueue(toastId);\r\n      } else {\r\n        state.toasts.forEach((toast) => {\r\n          addToRemoveQueue(toast.id);\r\n        });\r\n      }\r\n\r\n      return {\r\n        ...state,\r\n        toasts: state.toasts.map((t) =>\r\n          t.id === toastId || toastId === undefined\r\n            ? {\r\n                ...t,\r\n                open: false,\r\n              }\r\n            : t,\r\n        ),\r\n      };\r\n    }\r\n    case 'REMOVE_TOAST':\r\n      if (action.toastId === undefined) {\r\n        return {\r\n          ...state,\r\n          toasts: [],\r\n        };\r\n      }\r\n      return {\r\n        ...state,\r\n        toasts: state.toasts.filter((t) => t.id !== action.toastId),\r\n      };\r\n  }\r\n};\r\n\r\nconst listeners: Array<(state: State) => void> = [];\r\n\r\nlet memoryState: State = { toasts: [] };\r\n\r\nfunction dispatch(action: Action) {\r\n  memoryState = reducer(memoryState, action);\r\n  listeners.forEach((listener) => {\r\n    listener(memoryState);\r\n  });\r\n}\r\n\r\ntype Toast = Omit<ToasterToast, 'id'>;\r\n\r\nfunction toast({ ...props }: Toast) {\r\n  const id = genId();\r\n\r\n  const update = (props: ToasterToast) =>\r\n    dispatch({\r\n      type: 'UPDATE_TOAST',\r\n      toast: { ...props, id },\r\n    });\r\n  const dismiss = () => dispatch({ type: 'DISMISS_TOAST', toastId: id });\r\n\r\n  dispatch({\r\n    type: 'ADD_TOAST',\r\n    toast: {\r\n      ...props,\r\n      id,\r\n      open: true,\r\n      onOpenChange: (open) => {\r\n        if (!open) dismiss();\r\n      },\r\n    },\r\n  });\r\n\r\n  return {\r\n    id: id,\r\n    dismiss,\r\n    update,\r\n  };\r\n}\r\n\r\nfunction useToast() {\r\n  const [state, setState] = React.useState<State>(memoryState);\r\n\r\n  React.useEffect(() => {\r\n    listeners.push(setState);\r\n    return () => {\r\n      const index = listeners.indexOf(setState);\r\n      if (index > -1) {\r\n        listeners.splice(index, 1);\r\n      }\r\n    };\r\n  }, [state]);\r\n\r\n  return {\r\n    ...state,\r\n    toast,\r\n    dismiss: (toastId?: string) => dispatch({ type: 'DISMISS_TOAST', toastId }),\r\n  };\r\n}\r\n\r\nexport { useToast, toast };\r\n","import {\r\n  Toast,\r\n  ToastClose,\r\n  ToastDescription,\r\n  ToastProvider,\r\n  ToastTitle,\r\n  ToastViewport,\r\n} from '@/components/ui/toast';\r\nimport { useToast } from '@/hooks/use-toast';\r\n\r\nexport function Toaster() {\r\n  const { toasts } = useToast();\r\n\r\n  return (\r\n    <ToastProvider>\r\n      {toasts.map(function ({ id, title, description, action, ...props }) {\r\n        return (\r\n          <Toast key={id} {...props} className={`s3-explr-ui-toast ${props.className || ''}`}>\r\n            <div className=\"s3-explr-ui-toast-content grid gap-1\">\r\n              {title && <ToastTitle className=\"s3-explr-ui-toast-title\">{title}</ToastTitle>}\r\n              {description && (\r\n                <ToastDescription\r\n                  className=\"s3-explr-ui-toast-description\"\r\n                  style={{\r\n                    wordBreak: 'break-all',\r\n                    whiteSpace: 'pre-line',\r\n                    maxWidth: 400,\r\n                    overflowWrap: 'break-word',\r\n                  }}\r\n                >\r\n                  {description}\r\n                </ToastDescription>\r\n              )}\r\n            </div>\r\n            {action && <div className=\"s3-explr-ui-toast-action\">{action}</div>}\r\n            <ToastClose className=\"s3-explr-ui-toast-close\" />\r\n          </Toast>\r\n        );\r\n      })}\r\n      <ToastViewport className=\"s3-explr-ui-toast-viewport\" />\r\n    </ToastProvider>\r\n  );\r\n}\r\n","import * as React from \"react\";\nfunction XMarkIcon({\n  title,\n  titleId,\n  ...props\n}, svgRef) {\n  return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    viewBox: \"0 0 24 24\",\n    fill: \"currentColor\",\n    \"aria-hidden\": \"true\",\n    \"data-slot\": \"icon\",\n    ref: svgRef,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M5.47 5.47a.75.75 0 0 1 1.06 0L12 10.94l5.47-5.47a.75.75 0 1 1 1.06 1.06L13.06 12l5.47 5.47a.75.75 0 1 1-1.06 1.06L12 13.06l-5.47 5.47a.75.75 0 0 1-1.06-1.06L10.94 12 5.47 6.53a.75.75 0 0 1 0-1.06Z\",\n    clipRule: \"evenodd\"\n  }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(XMarkIcon);\nexport default ForwardRef;","import { useRef } from 'react';\nexport var createUpdateEffect = function (hook) { return function (effect, deps) {\n    var isMounted = useRef(false);\n    // for react-refresh\n    hook(function () {\n        return function () {\n            isMounted.current = false;\n        };\n    }, []);\n    hook(function () {\n        if (!isMounted.current) {\n            isMounted.current = true;\n        }\n        else {\n            return effect();\n        }\n    }, deps);\n}; };\nexport default createUpdateEffect;\n","export var isObject = function (value) {\n    return value !== null && typeof value === 'object';\n};\nexport var isFunction = function (value) {\n    return typeof value === 'function';\n};\nexport var isString = function (value) { return typeof value === 'string'; };\nexport var isBoolean = function (value) { return typeof value === 'boolean'; };\nexport var isNumber = function (value) { return typeof value === 'number'; };\nexport var isUndef = function (value) { return typeof value === 'undefined'; };\n","var isDev = process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'test';\nexport default isDev;\n","import { useEffect } from 'react';\nimport { createUpdateEffect } from '../createUpdateEffect';\nexport default createUpdateEffect(useEffect);\n","import { useRef } from 'react';\nfunction useLatest(value) {\n    var ref = useRef(value);\n    ref.current = value;\n    return ref;\n}\nexport default useLatest;\n","import { useEffect } from 'react';\nimport useLatest from '../useLatest';\nimport { isFunction } from '../utils';\nimport isDev from '../utils/isDev';\nvar useUnmount = function (fn) {\n    if (isDev) {\n        if (!isFunction(fn)) {\n            console.error(\"useUnmount expected parameter is a function, got \".concat(typeof fn));\n        }\n    }\n    var fnRef = useLatest(fn);\n    useEffect(function () { return function () {\n        fnRef.current();\n    }; }, []);\n};\nexport default useUnmount;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n *   console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n  return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n  var index = string.length;\n\n  while (index-- && reWhitespace.test(string.charAt(index))) {}\n  return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n  return string\n    ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n    : string;\n}\n\nmodule.exports = baseTrim;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n    getRawTag = require('./_getRawTag'),\n    objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseTrim = require('./_baseTrim'),\n    isObject = require('./isObject'),\n    isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = baseTrim(value);\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var isObject = require('./isObject'),\n    now = require('./now'),\n    toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n *  Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n *  The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n *   'leading': true,\n *   'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n  var lastArgs,\n      lastThis,\n      maxWait,\n      result,\n      timerId,\n      lastCallTime,\n      lastInvokeTime = 0,\n      leading = false,\n      maxing = false,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  wait = toNumber(wait) || 0;\n  if (isObject(options)) {\n    leading = !!options.leading;\n    maxing = 'maxWait' in options;\n    maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n\n  function invokeFunc(time) {\n    var args = lastArgs,\n        thisArg = lastThis;\n\n    lastArgs = lastThis = undefined;\n    lastInvokeTime = time;\n    result = func.apply(thisArg, args);\n    return result;\n  }\n\n  function leadingEdge(time) {\n    // Reset any `maxWait` timer.\n    lastInvokeTime = time;\n    // Start the timer for the trailing edge.\n    timerId = setTimeout(timerExpired, wait);\n    // Invoke the leading edge.\n    return leading ? invokeFunc(time) : result;\n  }\n\n  function remainingWait(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime,\n        timeWaiting = wait - timeSinceLastCall;\n\n    return maxing\n      ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n      : timeWaiting;\n  }\n\n  function shouldInvoke(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime;\n\n    // Either this is the first call, activity has stopped and we're at the\n    // trailing edge, the system time has gone backwards and we're treating\n    // it as the trailing edge, or we've hit the `maxWait` limit.\n    return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n  }\n\n  function timerExpired() {\n    var time = now();\n    if (shouldInvoke(time)) {\n      return trailingEdge(time);\n    }\n    // Restart the timer.\n    timerId = setTimeout(timerExpired, remainingWait(time));\n  }\n\n  function trailingEdge(time) {\n    timerId = undefined;\n\n    // Only invoke if we have `lastArgs` which means `func` has been\n    // debounced at least once.\n    if (trailing && lastArgs) {\n      return invokeFunc(time);\n    }\n    lastArgs = lastThis = undefined;\n    return result;\n  }\n\n  function cancel() {\n    if (timerId !== undefined) {\n      clearTimeout(timerId);\n    }\n    lastInvokeTime = 0;\n    lastArgs = lastCallTime = lastThis = timerId = undefined;\n  }\n\n  function flush() {\n    return timerId === undefined ? result : trailingEdge(now());\n  }\n\n  function debounced() {\n    var time = now(),\n        isInvoking = shouldInvoke(time);\n\n    lastArgs = arguments;\n    lastThis = this;\n    lastCallTime = time;\n\n    if (isInvoking) {\n      if (timerId === undefined) {\n        return leadingEdge(lastCallTime);\n      }\n      if (maxing) {\n        // Handle invocations in a tight loop.\n        clearTimeout(timerId);\n        timerId = setTimeout(timerExpired, wait);\n        return invokeFunc(lastCallTime);\n      }\n    }\n    if (timerId === undefined) {\n      timerId = setTimeout(timerExpired, wait);\n    }\n    return result;\n  }\n  debounced.cancel = cancel;\n  debounced.flush = flush;\n  return debounced;\n}\n\nmodule.exports = debounce;\n","import debounce from 'lodash/debounce';\nfunction isNodeOrWeb() {\n    var freeGlobal = (typeof global === 'undefined' ? 'undefined' : typeof global) == 'object' &&\n        global &&\n        global.Object === Object &&\n        global;\n    var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n    return freeGlobal || freeSelf;\n}\nif (!isNodeOrWeb()) {\n    global.Date = Date;\n}\nexport { debounce };\n","import { __read, __spreadArray } from \"tslib\";\nimport { debounce } from '../utils/lodash-polyfill';\nimport { useMemo } from 'react';\nimport useLatest from '../useLatest';\nimport useUnmount from '../useUnmount';\nimport { isFunction } from '../utils';\nimport isDev from '../utils/isDev';\nfunction useDebounceFn(fn, options) {\n    var _a;\n    if (isDev) {\n        if (!isFunction(fn)) {\n            console.error(\"useDebounceFn expected parameter is a function, got \".concat(typeof fn));\n        }\n    }\n    var fnRef = useLatest(fn);\n    var wait = (_a = options === null || options === void 0 ? void 0 : options.wait) !== null && _a !== void 0 ? _a : 1000;\n    var debounced = useMemo(function () {\n        return debounce(function () {\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            return fnRef.current.apply(fnRef, __spreadArray([], __read(args), false));\n        }, wait, options);\n    }, []);\n    useUnmount(function () {\n        debounced.cancel();\n    });\n    return {\n        run: debounced,\n        cancel: debounced.cancel,\n        flush: debounced.flush,\n    };\n}\nexport default useDebounceFn;\n","import { __read } from \"tslib\";\nimport { useEffect, useState } from 'react';\nimport useDebounceFn from '../useDebounceFn';\nimport useUpdateEffect from '../useUpdateEffect';\nfunction useDebounceEffect(effect, deps, options) {\n    var _a = __read(useState({}), 2), flag = _a[0], setFlag = _a[1];\n    var run = useDebounceFn(function () {\n        setFlag({});\n    }, options).run;\n    useEffect(function () {\n        return run();\n    }, deps);\n    useUpdateEffect(effect, [flag]);\n}\nexport default useDebounceEffect;\n","import { XMarkIcon } from '@heroicons/react/24/solid';\r\nimport { useDebounceEffect } from 'ahooks';\r\nimport { forwardRef, useImperativeHandle, useRef, useState } from 'react';\r\n\r\nimport { Input } from '@/components/ui/input.tsx';\r\n\r\nconst SearchBox = forwardRef<\r\n  {\r\n    setValue: (value: string) => void;\r\n  },\r\n  {\r\n    onChange: (searchQuery: string) => void;\r\n    /** Trang thai dang tai ket qua tu phia cha (pha fetch API). */\r\n    loading?: boolean;\r\n  }\r\n>(({ onChange, loading = false }, ref) => {\r\n  const searchInputRef = useRef<HTMLInputElement>(null);\r\n  const [searchQuery, setSearchQuery] = useState('');\r\n  // Dang cho debounce: nguoi dung vua go nhung chua goi onChange.\r\n  const [isDebouncing, setIsDebouncing] = useState(false);\r\n\r\n  useImperativeHandle(ref, () => ({\r\n    setValue: (value: string) => {\r\n      setSearchQuery(value);\r\n      searchInputRef.current?.focus();\r\n    },\r\n  }));\r\n\r\n  useDebounceEffect(\r\n    () => {\r\n      setIsDebouncing(false);\r\n      onChange?.(searchQuery);\r\n    },\r\n    [searchQuery],\r\n    {\r\n      wait: 300,\r\n    },\r\n  );\r\n\r\n  // Hien spinner khi dang cho debounce hoac dang fetch va co tu khoa.\r\n  const showSpinner = (isDebouncing || loading) && searchQuery.length > 0;\r\n\r\n  return (\r\n    <>\r\n      <Input\r\n        ref={searchInputRef}\r\n        type=\"text\"\r\n        placeholder=\"Search files...\"\r\n        value={searchQuery}\r\n        onChange={(e) => {\r\n          setSearchQuery(e.target.value);\r\n          if (e.target.value) {\r\n            setIsDebouncing(true);\r\n          } else {\r\n            setIsDebouncing(false);\r\n          }\r\n        }}\r\n        className=\"pr-8\"\r\n        aria-busy={showSpinner}\r\n      />\r\n      {showSpinner ? (\r\n        <div\r\n          className=\"absolute right-2 top-1/2 -translate-y-1/2 text-gray-400\"\r\n          role=\"status\"\r\n          aria-label=\"Đang tìm kiếm\"\r\n        >\r\n          <svg\r\n            className=\"h-4 w-4 animate-spin\"\r\n            xmlns=\"http://www.w3.org/2000/svg\"\r\n            fill=\"none\"\r\n            viewBox=\"0 0 24 24\"\r\n          >\r\n            <circle\r\n              className=\"opacity-25\"\r\n              cx=\"12\"\r\n              cy=\"12\"\r\n              r=\"10\"\r\n              stroke=\"currentColor\"\r\n              strokeWidth=\"4\"\r\n            />\r\n            <path\r\n              className=\"opacity-75\"\r\n              fill=\"currentColor\"\r\n              d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\r\n            />\r\n          </svg>\r\n        </div>\r\n      ) : (\r\n        searchQuery && (\r\n          <button\r\n            onClick={() => {\r\n              setSearchQuery('');\r\n              setIsDebouncing(false);\r\n              searchInputRef.current?.focus();\r\n            }}\r\n            className=\"absolute right-2 top-1/2 -translate-y-1/2 text-gray-500 hover:text-gray-700\"\r\n            aria-label=\"Xóa tìm kiếm\"\r\n          >\r\n            <XMarkIcon className=\"h-5 w-5\" />\r\n          </button>\r\n        )\r\n      )}\r\n    </>\r\n  );\r\n});\r\n\r\nexport default SearchBox;\r\n","/**\r\n * Client configuration module for API URLs and environment settings.\r\n * Reads from Vite environment variables with proper fallbacks.\r\n *\r\n * Environment variables (set in .env or .env.local):\r\n * - VITE_APP_API_URL: Base URL for the S3 Explorer API server\r\n * - VITE_APP_ENVIRONMENT: Current environment (development/production)\r\n * - VITE_ONE_DRIVE_REDIRECT_URI: OneDrive OAuth redirect URI\r\n * - VITE_EMAIL_CRAWLER_API_KEY: `x-api-key` cho các API được gate phía server (crawler +\r\n *   `/api/bld-reports/config`) — chưa set thì dùng DEFAULT_API_KEY (xem api-key-headers.ts)\r\n *\r\n * Production bundle (package nhúng vào frontend host) LUÔN gọi S3 Explorer server trên host\r\n * đang phục vụ trang (`<origin>/s3-explorer`, vd `https://dev-hoaphat.cagent.cmcts.ai/s3-explorer`)\r\n * và bỏ qua `VITE_APP_API_URL`, vì giá trị đó bị bake lúc đóng gói trên máy build (`.env` trỏ\r\n * `http://localhost:3002`) và sẽ trỏ sai deployment (dev/uat/prod). Dev server (`vite`) không\r\n * proxy `/s3-explorer` nên vẫn cần `VITE_APP_API_URL`.\r\n */\r\n\r\nconst isProduction = import.meta.env.MODE === 'production';\r\n\r\n/**\r\n * Host frontend proxies this S3 Explorer server under `/s3-explorer/`\r\n * (`location /s3-explorer/` in the host nginx), so the API lives at\r\n * `<current-host>/s3-explorer/api/...`.\r\n */\r\nexport const DEFAULT_HOST_API_PATH = '/s3-explorer';\r\n\r\n/**\r\n * Resolve the API base URL with this precedence:\r\n * 1. `VITE_APP_API_URL` — dev server (`vite` không proxy `/s3-explorer` sang server local).\r\n * 2. `origin` — bundle production: gọi S3 Explorer server ngay trên domain đang phục vụ trang\r\n *    (`<origin>/s3-explorer/api/...`, vd `https://dev-hoaphat.cagent.cmcts.ai/s3-explorer/api`)\r\n *    nên package nhúng vào frontend host không cần cấu hình gì lúc đóng gói.\r\n * 3. `http://localhost:3000` — no env and no `window` (SSR/tests).\r\n */\r\nexport function resolveApiBaseUrl(envUrl: string | undefined, origin: string | undefined): string {\r\n  if (envUrl) return envUrl;\r\n  if (origin) return `${origin}${DEFAULT_HOST_API_PATH}`;\r\n  return 'http://localhost:3000';\r\n}\r\n\r\nfunction getApiBaseUrl(): string {\r\n  const envUrl = import.meta.env.VITE_APP_API_URL;\r\n  const origin = typeof window === 'undefined' ? undefined : window.location.origin;\r\n\r\n  // Bundle production (package nhúng vào frontend host / deploy sau nginx): API base LUÔN theo\r\n  // domain đang phục vụ trang — KHÔNG dùng `VITE_APP_API_URL`, vì giá trị này bị bake lúc đóng\r\n  // gói trên máy build (vd `http://localhost:3002` từ `.env`) và trỏ sai deployment (dev/uat/prod).\r\n  // Dev server (MODE=development) không proxy `/s3-explorer` nên vẫn cần env.\r\n  if (isProduction && origin) return `${origin}${DEFAULT_HOST_API_PATH}`;\r\n\r\n  const baseUrl = resolveApiBaseUrl(envUrl, origin);\r\n\r\n  // Dev server without env: keep the old localhost fallback + warning.\r\n  if (!envUrl && !isProduction) {\r\n    console.warn(\r\n      `[S3Explorer Config] VITE_APP_API_URL not set, using fallback: ${baseUrl}`,\r\n      '\\nSet VITE_APP_API_URL in .env or .env.local to configure the API URL.',\r\n    );\r\n  }\r\n\r\n  return baseUrl;\r\n}\r\n\r\n/**\r\n * API base URL for the S3 Explorer backend.\r\n * Production builds call the current host (`<origin>/s3-explorer`) so the prebuilt package\r\n * embedded into a frontend host works without deployment-specific configuration; dev builds\r\n * read `VITE_APP_API_URL`.\r\n */\r\nexport const API_BASE_URL = getApiBaseUrl();\r\n\r\n/**\r\n * Logs current configuration in non-production environments.\r\n * Call this during app initialization for debugging.\r\n */\r\nexport function logConfig(): void {\r\n  if (!isProduction) {\r\n    console.debug('[S3Explorer Config]', {\r\n      API_BASE_URL,\r\n      VITE_APP_ENVIRONMENT: import.meta.env.VITE_APP_ENVIRONMENT || 'not set',\r\n      MODE: import.meta.env.MODE,\r\n    });\r\n  }\r\n}\r\n\r\nexport default {\r\n  API_BASE_URL,\r\n  isProduction,\r\n  logConfig,\r\n};\r\n","'use strict';\n\nconst denyList = new Set([\n\t'ENOTFOUND',\n\t'ENETUNREACH',\n\n\t// SSL errors from https://github.com/nodejs/node/blob/fc8e3e2cdc521978351de257030db0076d79e0ab/src/crypto/crypto_common.cc#L301-L328\n\t'UNABLE_TO_GET_ISSUER_CERT',\n\t'UNABLE_TO_GET_CRL',\n\t'UNABLE_TO_DECRYPT_CERT_SIGNATURE',\n\t'UNABLE_TO_DECRYPT_CRL_SIGNATURE',\n\t'UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY',\n\t'CERT_SIGNATURE_FAILURE',\n\t'CRL_SIGNATURE_FAILURE',\n\t'CERT_NOT_YET_VALID',\n\t'CERT_HAS_EXPIRED',\n\t'CRL_NOT_YET_VALID',\n\t'CRL_HAS_EXPIRED',\n\t'ERROR_IN_CERT_NOT_BEFORE_FIELD',\n\t'ERROR_IN_CERT_NOT_AFTER_FIELD',\n\t'ERROR_IN_CRL_LAST_UPDATE_FIELD',\n\t'ERROR_IN_CRL_NEXT_UPDATE_FIELD',\n\t'OUT_OF_MEM',\n\t'DEPTH_ZERO_SELF_SIGNED_CERT',\n\t'SELF_SIGNED_CERT_IN_CHAIN',\n\t'UNABLE_TO_GET_ISSUER_CERT_LOCALLY',\n\t'UNABLE_TO_VERIFY_LEAF_SIGNATURE',\n\t'CERT_CHAIN_TOO_LONG',\n\t'CERT_REVOKED',\n\t'INVALID_CA',\n\t'PATH_LENGTH_EXCEEDED',\n\t'INVALID_PURPOSE',\n\t'CERT_UNTRUSTED',\n\t'CERT_REJECTED',\n\t'HOSTNAME_MISMATCH'\n]);\n\n// TODO: Use `error?.code` when targeting Node.js 14\nmodule.exports = error => !denyList.has(error && error.code);\n","import isRetryAllowed from 'is-retry-allowed';\nexport const namespace = 'axios-retry';\nexport function isNetworkError(error) {\n    const CODE_EXCLUDE_LIST = ['ERR_CANCELED', 'ECONNABORTED'];\n    if (error.response) {\n        return false;\n    }\n    if (!error.code) {\n        return false;\n    }\n    // Prevents retrying timed out & cancelled requests\n    if (CODE_EXCLUDE_LIST.includes(error.code)) {\n        return false;\n    }\n    // Prevents retrying unsafe errors\n    return isRetryAllowed(error);\n}\nconst SAFE_HTTP_METHODS = ['get', 'head', 'options'];\nconst IDEMPOTENT_HTTP_METHODS = SAFE_HTTP_METHODS.concat(['put', 'delete']);\nexport function isRetryableError(error) {\n    return (error.code !== 'ECONNABORTED' &&\n        (!error.response ||\n            error.response.status === 429 ||\n            (error.response.status >= 500 && error.response.status <= 599)));\n}\nexport function isSafeRequestError(error) {\n    if (!error.config?.method) {\n        // Cannot determine if the request can be retried\n        return false;\n    }\n    return isRetryableError(error) && SAFE_HTTP_METHODS.indexOf(error.config.method) !== -1;\n}\nexport function isIdempotentRequestError(error) {\n    if (!error.config?.method) {\n        // Cannot determine if the request can be retried\n        return false;\n    }\n    return isRetryableError(error) && IDEMPOTENT_HTTP_METHODS.indexOf(error.config.method) !== -1;\n}\nexport function isNetworkOrIdempotentRequestError(error) {\n    return isNetworkError(error) || isIdempotentRequestError(error);\n}\nexport function retryAfter(error = undefined) {\n    const retryAfterHeader = error?.response?.headers['retry-after'];\n    if (!retryAfterHeader) {\n        return 0;\n    }\n    // if the retry after header is a number, convert it to milliseconds\n    let retryAfterMs = (Number(retryAfterHeader) || 0) * 1000;\n    // If the retry after header is a date, get the number of milliseconds until that date\n    if (retryAfterMs === 0) {\n        retryAfterMs = (new Date(retryAfterHeader).valueOf() || 0) - Date.now();\n    }\n    return Math.max(0, retryAfterMs);\n}\nfunction noDelay(_retryNumber = 0, error = undefined) {\n    return Math.max(0, retryAfter(error));\n}\nexport function exponentialDelay(retryNumber = 0, error = undefined, delayFactor = 100) {\n    const calculatedDelay = 2 ** retryNumber * delayFactor;\n    const delay = Math.max(calculatedDelay, retryAfter(error));\n    const randomSum = delay * 0.2 * Math.random(); // 0-20% of the delay\n    return delay + randomSum;\n}\n/**\n * Linear delay\n * @param {number | undefined} delayFactor - delay factor in milliseconds (default: 100)\n * @returns {function} (retryNumber: number, error: AxiosError | undefined) => number\n */\nexport function linearDelay(delayFactor = 100) {\n    return (retryNumber = 0, error = undefined) => {\n        const delay = retryNumber * delayFactor;\n        return Math.max(delay, retryAfter(error));\n    };\n}\nexport const DEFAULT_OPTIONS = {\n    retries: 3,\n    retryCondition: isNetworkOrIdempotentRequestError,\n    retryDelay: noDelay,\n    shouldResetTimeout: false,\n    onRetry: () => { },\n    onMaxRetryTimesExceeded: () => { },\n    validateResponse: null\n};\nfunction getRequestOptions(config, defaultOptions) {\n    return { ...DEFAULT_OPTIONS, ...defaultOptions, ...config[namespace] };\n}\nfunction setCurrentState(config, defaultOptions, resetLastRequestTime = false) {\n    const currentState = getRequestOptions(config, defaultOptions || {});\n    currentState.retryCount = currentState.retryCount || 0;\n    if (!currentState.lastRequestTime || resetLastRequestTime) {\n        currentState.lastRequestTime = Date.now();\n    }\n    config[namespace] = currentState;\n    return currentState;\n}\nfunction fixConfig(axiosInstance, config) {\n    // @ts-ignore\n    if (axiosInstance.defaults.agent === config.agent) {\n        // @ts-ignore\n        delete config.agent;\n    }\n    if (axiosInstance.defaults.httpAgent === config.httpAgent) {\n        delete config.httpAgent;\n    }\n    if (axiosInstance.defaults.httpsAgent === config.httpsAgent) {\n        delete config.httpsAgent;\n    }\n}\nasync function shouldRetry(currentState, error) {\n    const { retries, retryCondition } = currentState;\n    const shouldRetryOrPromise = (currentState.retryCount || 0) < retries && retryCondition(error);\n    // This could be a promise\n    if (typeof shouldRetryOrPromise === 'object') {\n        try {\n            const shouldRetryPromiseResult = await shouldRetryOrPromise;\n            // keep return true unless shouldRetryPromiseResult return false for compatibility\n            return shouldRetryPromiseResult !== false;\n        }\n        catch (_err) {\n            return false;\n        }\n    }\n    return shouldRetryOrPromise;\n}\nasync function handleRetry(axiosInstance, currentState, error, config) {\n    currentState.retryCount += 1;\n    const { retryDelay, shouldResetTimeout, onRetry } = currentState;\n    const delay = retryDelay(currentState.retryCount, error);\n    // Axios fails merging this configuration to the default configuration because it has an issue\n    // with circular structures: https://github.com/mzabriskie/axios/issues/370\n    fixConfig(axiosInstance, config);\n    if (!shouldResetTimeout && config.timeout && currentState.lastRequestTime) {\n        const lastRequestDuration = Date.now() - currentState.lastRequestTime;\n        const timeout = config.timeout - lastRequestDuration - delay;\n        if (timeout <= 0) {\n            return Promise.reject(error);\n        }\n        config.timeout = timeout;\n    }\n    config.transformRequest = [(data) => data];\n    await onRetry(currentState.retryCount, error, config);\n    if (config.signal?.aborted) {\n        return Promise.resolve(axiosInstance(config));\n    }\n    return new Promise((resolve) => {\n        const abortListener = () => {\n            clearTimeout(timeout);\n            resolve(axiosInstance(config));\n        };\n        const timeout = setTimeout(() => {\n            resolve(axiosInstance(config));\n            if (config.signal?.removeEventListener) {\n                config.signal.removeEventListener('abort', abortListener);\n            }\n        }, delay);\n        if (config.signal?.addEventListener) {\n            config.signal.addEventListener('abort', abortListener, { once: true });\n        }\n    });\n}\nasync function handleMaxRetryTimesExceeded(currentState, error) {\n    if (currentState.retryCount >= currentState.retries)\n        await currentState.onMaxRetryTimesExceeded(error, currentState.retryCount);\n}\nconst axiosRetry = (axiosInstance, defaultOptions) => {\n    const requestInterceptorId = axiosInstance.interceptors.request.use((config) => {\n        setCurrentState(config, defaultOptions, true);\n        if (config[namespace]?.validateResponse) {\n            // by setting this, all HTTP responses will be go through the error interceptor first\n            config.validateStatus = () => false;\n        }\n        return config;\n    });\n    const responseInterceptorId = axiosInstance.interceptors.response.use(null, async (error) => {\n        const { config } = error;\n        // If we have no information to retry the request\n        if (!config) {\n            return Promise.reject(error);\n        }\n        const currentState = setCurrentState(config, defaultOptions);\n        if (error.response && currentState.validateResponse?.(error.response)) {\n            // no issue with response\n            return error.response;\n        }\n        if (await shouldRetry(currentState, error)) {\n            return handleRetry(axiosInstance, currentState, error, config);\n        }\n        await handleMaxRetryTimesExceeded(currentState, error);\n        return Promise.reject(error);\n    });\n    return { requestInterceptorId, responseInterceptorId };\n};\n// Compatibility with CommonJS\naxiosRetry.isNetworkError = isNetworkError;\naxiosRetry.isSafeRequestError = isSafeRequestError;\naxiosRetry.isIdempotentRequestError = isIdempotentRequestError;\naxiosRetry.isNetworkOrIdempotentRequestError = isNetworkOrIdempotentRequestError;\naxiosRetry.exponentialDelay = exponentialDelay;\naxiosRetry.linearDelay = linearDelay;\naxiosRetry.isRetryableError = isRetryableError;\nexport default axiosRetry;\n","/**\r\n * Header `x-api-key` cho các API phía server được gate bằng shared secret `EMAIL_CRAWLER_API_KEY`\r\n * (`createApiKeyGate` — xem `packages/server/src/api/middleware/api-key-gate.ts`): gate\r\n * fail-closed, thiếu env ⇒ 503, sai key ⇒ 401.\r\n *\r\n * Key lấy từ `VITE_EMAIL_CRAWLER_API_KEY` (set trong `.env` khi chạy dev, hoặc truyền lúc build\r\n * bundle nhúng vào host frontend); khi biến này chưa/rỗng ⇒ dùng `DEFAULT_API_KEY` để bundle không\r\n * cấu hình vẫn gọi được API. Trả `{}` khi URL không thuộc API được gate, để không gắn header thừa\r\n * lên API khác.\r\n */\r\n\r\n/**\r\n * Mọi route crawler phía server được mount dưới segment này (`app.route('/api/email-crawler', …)`\r\n * trong `packages/server/index.ts`) và đều qua gate.\r\n */\r\nexport const EMAIL_CRAWLER_API_URL_SEGMENT = '/api/email-crawler/';\r\n\r\n/**\r\n * Cấu hình BLD Reports — `GET/PUT /api/bld-reports/config` dùng chung key với crawler\r\n * (xem `bld-reports.routes.ts`). Các route BLD Reports khác không gate vì tab HTML/PNG mở bằng\r\n * `window.open` không gắn được header.\r\n */\r\nexport const BLD_REPORTS_CONFIG_API_URL = '/api/bld-reports/config';\r\n\r\nconst API_KEY_PROTECTED_URL_SEGMENTS = [\r\n  EMAIL_CRAWLER_API_URL_SEGMENT,\r\n  BLD_REPORTS_CONFIG_API_URL,\r\n];\r\n\r\n/**\r\n * Key mặc định, dùng khi bundle không được cấu hình `VITE_EMAIL_CRAWLER_API_KEY` (dev/build).\r\n * Phải trùng `EMAIL_CRAWLER_API_KEY` của server — xem `packages/server/.env.example`. Giá trị\r\n * này nằm trong JS của bundle nên ai xem cũng đọc được.\r\n */\r\nexport const DEFAULT_API_KEY = '8d3cea9539b25f45c801ae918941ebc6ea40d0f953eeef7d';\r\n\r\nexport function apiKeyHeaders(url: string | undefined): Record<string, string> {\r\n  if (!url || !API_KEY_PROTECTED_URL_SEGMENTS.some((segment) => url.includes(segment))) {\r\n    return {};\r\n  }\r\n  const apiKey = (import.meta.env['VITE_EMAIL_CRAWLER_API_KEY'] ?? '').trim() || DEFAULT_API_KEY;\r\n  return apiKey ? { 'x-api-key': apiKey } : {};\r\n}\r\n","import axios from 'axios';\r\nimport axiosRetry from 'axios-retry';\r\n\r\nimport { API_BASE_URL } from './config';\r\nimport { apiKeyHeaders } from './api-key-headers';\r\n\r\n// Configure axios defaults\r\naxios.defaults.baseURL = API_BASE_URL;\r\n\r\n// Configure axios retry\r\naxiosRetry(axios, {\r\n  retries: 3,\r\n  shouldResetTimeout: true,\r\n  retryCondition: (error: any) => {\r\n    return axiosRetry.isRetryableError(error) && error.config.method === 'get';\r\n  },\r\n});\r\n\r\n// Add request interceptor to include user info in headers\r\naxios.interceptors.request.use(\r\n  (config) => {\r\n    // Các API được gate `createApiKeyGate` phía server (crawler + `/api/bld-reports/config`) cần\r\n    // header `x-api-key` (từ `VITE_EMAIL_CRAWLER_API_KEY`) — xem api-key-headers.ts.\r\n    Object.assign(config.headers, apiKeyHeaders(config.url));\r\n\r\n    try {\r\n      // Get user info from localStorage\r\n      const dataLogin: any = localStorage.getItem('dataLogin');\r\n      if (dataLogin) {\r\n        let parsed: any;\r\n        try {\r\n          parsed = JSON.parse(dataLogin);\r\n        } catch (error) {\r\n          console.log('🚀 ~ axios.ts:27 ~ error:', error);\r\n        }\r\n        const user = parsed?.user;\r\n\r\n        if (user) {\r\n          // Add username and user_id to headers\r\n          config.headers['x-username'] = user.username || 'unknown';\r\n          config.headers['x-user-id'] = user.id || '';\r\n        }\r\n      }\r\n    } catch (error) {\r\n      console.error('Error adding user info to request headers:', error);\r\n    }\r\n\r\n    return config;\r\n  },\r\n  (error) => {\r\n    return Promise.reject(error);\r\n  },\r\n);\r\n\r\nexport default axios;\r\n","/**\r\n * Client API cho module BLD Reports (báo cáo Ban lãnh đạo).\r\n *\r\n * Server đã chuẩn hoá sẵn cả camelCase (response) và snake_case (request body):\r\n * - GET  /api/bld-reports/config → { config, issues, warnings, outlook }\r\n * - PUT  /api/bld-reports/config ← { enabled, schedule_cron, sharepoint_urls,\r\n *                                    teams_private_channel, teams_send_enabled }\r\n *\r\n * Không lưu secret ở client; chỉ hiển thị trạng thái env do server trả về.\r\n *\r\n * Mọi hàm nhận `apiBaseUrl` (API base runtime — prop `apiBaseUrl` khi S3 Explorer được\r\n * nhúng vào frontend host, vd `https://dev-hoaphat.cagent.cmcts.ai/s3-explorer`) và ghép\r\n * URL tuyệt đối, KHÔNG dựa vào `axios.defaults.baseURL`: bundle đã build của package không\r\n * biết domain triển khai nên mặc định sẽ rơi về `http://localhost:3000` (xem `lib/config.ts`).\r\n */\r\n\r\nimport axios from './axios';\r\n\r\n/**\r\n * Thư mục S3 chứa artifact báo cáo BLD (`bld-reports/<periodType>/<periodKey>/report.{html,png}`\r\n * — xem `packages/server/src/modules/bld-reports/reports/artifacts.ts`).\r\n *\r\n * Trên S3 Explorer, đây là thư mục DUY NHẤT hiển thị nút cấu hình scheduler và nút\r\n * \"Lịch sử báo cáo\" (trước đây gắn nhầm vào `kho_ban_lanh_dao/`).\r\n */\r\nconst BLD_REPORTS_FOLDER_SEGMENT = 'bld-reports';\r\nexport const BLD_REPORTS_FOLDER_PREFIX = `${BLD_REPORTS_FOLDER_SEGMENT}/`;\r\n\r\n/** True khi prefix hiện tại là chính thư mục `bld-reports` (không áp dụng cho thư mục con). */\r\nexport function isBldReportsFolderPrefix(prefix: string | null | undefined): boolean {\r\n  if (!prefix) return false;\r\n  // Prefix có thể có `/` ở đầu (root) và luôn có `/` ở cuối; so khớp sau khi chuẩn hoá.\r\n  return prefix.replace(/^\\/+|\\/+$/g, '') === BLD_REPORTS_FOLDER_SEGMENT;\r\n}\r\n\r\n/** 4 nguồn dữ liệu Excel đọc từ SharePoint. */\r\nexport type BldSourceKey =\r\n  | 'production_inventory'\r\n  | 'electrical_structure'\r\n  | 'equipment_status'\r\n  | 'production_stoppage';\r\n\r\nexport const BLD_SOURCE_KEYS: readonly BldSourceKey[] = [\r\n  'production_inventory',\r\n  'electrical_structure',\r\n  'equipment_status',\r\n  'production_stoppage',\r\n];\r\n\r\n/** Nhãn tiếng Việt của 4 nguồn (dùng cho UI). */\r\nexport const BLD_SOURCE_LABELS: Record<BldSourceKey, string> = {\r\n  production_inventory: 'Tồn kho sản xuất (sản xuất – bán hàng – tồn kho)',\r\n  electrical_structure: 'Cơ cấu điện',\r\n  equipment_status: 'Tình trạng thiết bị hàng ngày',\r\n  production_stoppage: 'Kế hoạch dừng sản xuất',\r\n};\r\n\r\nexport type BldSharePointUrls = Partial<Record<BldSourceKey, string>>;\r\n\r\nexport interface BldTeamsPrivateChannel {\r\n  teamId: string;\r\n  channelId: string;\r\n}\r\n\r\nexport interface BldReportsConfig {\r\n  enabled: boolean;\r\n  scheduleCron: string;\r\n  sharepointUrls: BldSharePointUrls;\r\n  teamsPrivateChannel: BldTeamsPrivateChannel | null;\r\n  teamsSendEnabled: boolean;\r\n  /** Hiện thông tin chẩn đoán (chip nguồn/ngày dữ liệu, cảnh báo/lỗi) trong HTML + card Teams. */\r\n  showDevWarnings: boolean;\r\n  /** Cho phép ghi đè dữ liệu ngày đã tồn tại (đã báo cáo) — mặc định false (khóa, không sửa). */\r\n  allowOverwriteExistingDays: boolean;\r\n  /** Mailbox Ban lãnh đạo cho 2 API app-only của CEO Assistant/MCP (unread-messages, calendar). */\r\n  mailbox: string | null;\r\n}\r\n\r\nexport interface BldConfigIssue {\r\n  key: string;\r\n  message: string;\r\n}\r\n\r\nexport interface BldReportsConfigSnapshot {\r\n  config: BldReportsConfig;\r\n  issues: BldConfigIssue[];\r\n  warnings: string[];\r\n  /** Trạng thái cấu hình app-only phía server (chỉ tên env thiếu, không giá trị). */\r\n  outlook: { configured: boolean; missingVars: string[] };\r\n}\r\n\r\n/** True nếu chuỗi là URL https thuộc tenant SharePoint (*.sharepoint.com). */\r\nexport function isSharePointUrl(value: string): boolean {\r\n  try {\r\n    const url = new URL(value.trim());\r\n    return url.protocol === 'https:' && url.hostname.toLowerCase().endsWith('.sharepoint.com');\r\n  } catch {\r\n    return false;\r\n  }\r\n}\r\n\r\n/** True nếu chuỗi là địa chỉ email hợp lệ ở mức cơ bản (dùng cho mailbox Ban lãnh đạo). */\r\nexport function isMailboxAddress(value: string): boolean {\r\n  return /^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$/.test(value.trim());\r\n}\r\n\r\n/**\r\n * Parse URL channel private của Teams thành { teamId, channelId }.\r\n * Hỗ trợ các dạng:\r\n * - https://teams.microsoft.com/l/team/<teamId>/conversations?groupId=<teamId>&tenantId=...\r\n * - https://teams.microsoft.com/l/channel/<channelId>/<name>?groupId=<teamId>\r\n * Trả về null nếu thiếu 1 trong 2 định danh.\r\n */\r\nexport function parseTeamsChannelUrl(value: string): BldTeamsPrivateChannel | null {\r\n  let url: URL;\r\n  try {\r\n    url = new URL(value.trim());\r\n  } catch {\r\n    return null;\r\n  }\r\n\r\n  const segments = url.pathname.split('/').filter(Boolean);\r\n  let teamId: string | null = null;\r\n  let channelId: string | null = null;\r\n  try {\r\n    for (let index = 0; index < segments.length - 1; index += 1) {\r\n      const marker = segments[index]?.toLowerCase();\r\n      const next = segments[index + 1];\r\n      if (!next) continue;\r\n      if (marker === 'team' && !teamId) teamId = decodeURIComponent(next);\r\n      if (marker === 'channel' && !channelId) channelId = decodeURIComponent(next);\r\n    }\r\n  } catch {\r\n    return null;\r\n  }\r\n\r\n  const groupId = url.searchParams.get('groupId');\r\n  if (!teamId && groupId) teamId = groupId;\r\n  if (!teamId || !channelId) return null;\r\n  return { teamId, channelId };\r\n}\r\n\r\n/** Body PUT /api/bld-reports/config (đúng tên khoá snake_case server nhận). */\r\nexport interface SaveBldReportsConfigInput {\r\n  enabled: boolean;\r\n  schedule_cron: string;\r\n  sharepoint_urls: BldSharePointUrls;\r\n  teams_private_channel: BldTeamsPrivateChannel | null;\r\n  teams_send_enabled: boolean;\r\n  show_dev_warnings: boolean;\r\n  allow_overwrite_existing_days: boolean;\r\n  mailbox: string | null;\r\n}\r\n\r\nfunction extractError(err: unknown, fallback: string): string {\r\n  if (axios.isAxiosError(err) && err.response?.data && typeof err.response.data === 'object') {\r\n    const data = err.response.data as {\r\n      error?: string;\r\n      message?: string;\r\n      issues?: BldConfigIssue[];\r\n    };\r\n    const firstIssue = Array.isArray(data.issues)\r\n      ? data.issues.find(\r\n          (issue) => issue && typeof issue.message === 'string' && issue.message.trim().length > 0,\r\n        )\r\n      : undefined;\r\n    if (firstIssue) return data.error ? `${data.error}: ${firstIssue.message}` : firstIssue.message;\r\n    if (data.error) return data.error;\r\n    if (data.message) return data.message;\r\n  }\r\n  if (err instanceof Error) return err.message;\r\n  return fallback;\r\n}\r\n\r\n/** GET /api/bld-reports/config — đọc cấu hình (apiBaseUrl: API base runtime của caller). */\r\nexport async function getBldReportsConfig(apiBaseUrl: string): Promise<BldReportsConfigSnapshot> {\r\n  const response = await axios.get<BldReportsConfigSnapshot>(\r\n    `${apiBaseUrl}/api/bld-reports/config`,\r\n  );\r\n  return response.data;\r\n}\r\n\r\nexport async function saveBldReportsConfig(\r\n  apiBaseUrl: string,\r\n  input: SaveBldReportsConfigInput,\r\n): Promise<BldReportsConfig> {\r\n  try {\r\n    const response = await axios.put<{ ok: boolean; config: BldReportsConfig }>(\r\n      `${apiBaseUrl}/api/bld-reports/config`,\r\n      input,\r\n    );\r\n    return response.data.config;\r\n  } catch (err) {\r\n    throw new Error(extractError(err, 'Không lưu được cấu hình báo cáo Ban lãnh đạo'));\r\n  }\r\n}\r\n","/**\r\n * Client API cho màn hình \"Lịch sử tạo báo cáo\" (BLD Reports).\r\n *\r\n * Server trả camelCase cho cả response lẫn request body:\r\n * - GET  /api/bld-reports/history?periodType&status&from&to&page&limit\r\n * - POST /api/bld-reports/test-generate ← { periodType, periodEnd, sources,\r\n *                                          persist, sendTeams, includeSpecialIncidents }\r\n *                                        → 202 { jobId } (chạy nền)\r\n * - GET  /api/bld-reports/test-generate/:jobId → { status: running|done|failed, result?, error? }\r\n * - GET  /api/bld-reports/:id/html  (HTML document)\r\n * - GET  /api/bld-reports/:id/png   (PNG hoặc 404)\r\n *\r\n * Không lưu secret ở client; chỉ gọi API qua axios dùng chung (đã inject\r\n * x-username / x-user-id).\r\n *\r\n * Mọi hàm nhận `apiBaseUrl` (API base runtime — prop `apiBaseUrl` khi S3 Explorer được\r\n * nhúng vào frontend host) và ghép URL tuyệt đối, KHÔNG dựa vào `axios.defaults.baseURL`:\r\n * bundle đã build của package không biết domain triển khai nên mặc định rơi về\r\n * `http://localhost:3000` (xem `lib/config.ts`).\r\n */\r\n\r\nimport axios from './axios';\r\nimport { type BldSourceKey } from './bld-reports-api';\r\n\r\n/** Múi giờ hiển thị của toàn bộ báo cáo BLD. */\r\nexport const BLD_HISTORY_TIMEZONE = 'Asia/Ho_Chi_Minh';\r\n\r\nexport type BldPeriodType = 'day' | 'week' | 'month' | 'quarter';\r\n\r\nexport type BldReportRunStatus = 'running' | 'success' | 'failed' | 'skipped';\r\n\r\nexport type BldReportRunTrigger = 'scheduler' | 'manual' | 'test';\r\n\r\n/** Một bản ghi trong lịch sử tạo báo cáo. */\r\nexport interface BldReportHistoryItem {\r\n  runId: string;\r\n  startedAt: string;\r\n  finishedAt: string | null;\r\n  durationMs: number | null;\r\n  periodType: BldPeriodType;\r\n  periodKey: string;\r\n  status: BldReportRunStatus;\r\n  errorMessage: string | null;\r\n  teamsSent: boolean;\r\n  teamsChannels: unknown;\r\n  teamsSentAt: string | null;\r\n  reportId: string | null;\r\n  trigger: BldReportRunTrigger;\r\n  dryRun: boolean;\r\n  htmlUrl: string | null;\r\n  pngUrl: string | null;\r\n}\r\n\r\n/** Tham số lọc cho GET /api/bld-reports/history. */\r\nexport interface BldReportHistoryQuery {\r\n  periodType?: BldPeriodType | null;\r\n  status?: BldReportRunStatus | null;\r\n  from?: string | null;\r\n  to?: string | null;\r\n  page?: number;\r\n  limit?: number;\r\n}\r\n\r\nexport interface BldReportHistoryResponse {\r\n  data: BldReportHistoryItem[];\r\n  total: number;\r\n  page: number;\r\n  limit: number;\r\n}\r\n\r\n/** Thống kê đọc dữ liệu của 1 nguồn trong lần chạy thử. */\r\nexport interface BldTestGenerateSourceStats {\r\n  rows: number;\r\n  skippedSheets: string[];\r\n  missingLabels: string[];\r\n  warnings: string[];\r\n}\r\n\r\n/** Ngày dữ liệu thực tế của 1 nguồn (có thể đã backfill về ngày trước). */\r\nexport interface BldTestGenerateSourceDate {\r\n  requestedDate: string;\r\n  dataDate: string;\r\n  backfilled: boolean;\r\n}\r\n\r\nexport interface BldTestGenerateResult {\r\n  ok: boolean;\r\n  periodType: BldPeriodType;\r\n  periodKey: string;\r\n  periodStart: string;\r\n  periodEnd: string;\r\n  sourceDates: Record<string, BldTestGenerateSourceDate>;\r\n  stats: Record<string, BldTestGenerateSourceStats>;\r\n  htmlPreviewUrl: string | null;\r\n  html: string | null;\r\n  pngUrl: string | null;\r\n  warnings: string[];\r\n  errors: string[];\r\n  durationMs: number;\r\n}\r\n\r\n/** Body POST /api/bld-reports/test-generate. */\r\nexport interface BldTestGenerateInput {\r\n  periodType?: BldPeriodType;\r\n  /** Ngày cuối của kỳ đã chọn (YYYY-MM-DD); server tự suy ra ngày chạy tương ứng. */\r\n  periodEnd?: string;\r\n  sources?: BldSourceKey[];\r\n  persist?: boolean;\r\n  sendTeams?: boolean;\r\n  includeSpecialIncidents?: boolean;\r\n}\r\n\r\nexport const BLD_PERIOD_TYPE_LABELS: Record<BldPeriodType, string> = {\r\n  day: 'Ngày',\r\n  week: 'Tuần',\r\n  month: 'Tháng',\r\n  quarter: 'Quý',\r\n};\r\n\r\nexport const BLD_PERIOD_TYPE_OPTIONS: readonly BldPeriodType[] = [\r\n  'day',\r\n  'week',\r\n  'month',\r\n  'quarter',\r\n];\r\n\r\nexport const BLD_RUN_STATUS_LABELS: Record<BldReportRunStatus, string> = {\r\n  running: 'Đang chạy',\r\n  success: 'Thành công',\r\n  failed: 'Thất bại',\r\n  skipped: 'Bỏ qua',\r\n};\r\n\r\nexport const BLD_RUN_STATUS_OPTIONS: readonly BldReportRunStatus[] = [\r\n  'success',\r\n  'failed',\r\n  'running',\r\n  'skipped',\r\n];\r\n\r\nexport const BLD_RUN_TRIGGER_LABELS: Record<BldReportRunTrigger, string> = {\r\n  scheduler: 'Lịch tự động',\r\n  manual: 'Chạy tay',\r\n  test: 'Chạy test',\r\n};\r\n\r\n/** Class Tailwind cho badge trạng thái (success=xanh, failed=đỏ, running=vàng, skipped=xám). */\r\nexport const BLD_RUN_STATUS_CLASSES: Record<BldReportRunStatus, string> = {\r\n  success: 'border-transparent bg-green-600 text-white',\r\n  failed: 'border-transparent bg-red-600 text-white',\r\n  running: 'border-transparent bg-amber-500 text-white',\r\n  skipped: 'border-transparent bg-gray-400 text-white',\r\n};\r\n\r\n/** Định dạng thời lượng: 850 → \"850ms\", 1250 → \"1.2s\", 65000 → \"1m 5s\". */\r\nexport function formatBldDuration(durationMs: number | null | undefined): string | null {\r\n  if (typeof durationMs !== 'number' || !Number.isFinite(durationMs) || durationMs < 0) {\r\n    return null;\r\n  }\r\n  if (durationMs < 1000) return `${Math.round(durationMs)}ms`;\r\n  const seconds = durationMs / 1000;\r\n  if (seconds < 60) {\r\n    // Cắt bớt (không làm tròn) để \"1250ms\" hiển thị \"1.2s\" như spec.\r\n    const truncated = Math.floor(seconds * 10) / 10;\r\n    return `${Number.isInteger(truncated) ? truncated.toFixed(0) : truncated.toFixed(1)}s`;\r\n  }\r\n  const minutes = Math.floor(seconds / 60);\r\n  const restSeconds = Math.floor(seconds % 60);\r\n  return `${minutes}m ${restSeconds}s`;\r\n}\r\n\r\n/** Định dạng thời điểm theo giờ Việt Nam; trả null nếu giá trị rỗng/không hợp lệ. */\r\nexport function formatBldDateTime(value: string | null | undefined): string | null {\r\n  if (!value) return null;\r\n  const date = new Date(value);\r\n  if (Number.isNaN(date.getTime())) return null;\r\n  return date.toLocaleString('vi-VN', {\r\n    timeZone: BLD_HISTORY_TIMEZONE,\r\n    hour12: false,\r\n  });\r\n}\r\n\r\n/** Nhãn kỳ báo cáo: \"Ngày 2026-09-25\", \"Tuần 2026-W39\", ... */\r\nexport function formatBldPeriodLabel(\r\n  periodType: BldPeriodType,\r\n  periodKey: string,\r\n): string {\r\n  const label = BLD_PERIOD_TYPE_LABELS[periodType];\r\n  const key = periodKey?.trim();\r\n  if (!label) return key ?? '';\r\n  return key ? `${label} ${key}` : label;\r\n}\r\n\r\n/**\r\n * Ghép đường dẫn API tương đối (vd `/api/bld-reports/:id/html`) với API base runtime\r\n * (`apiBaseUrl` của caller) trước khi mở tab mới. `window.open` không đi qua axios nên\r\n * đường dẫn tương đối sẽ mở nhầm trên origin của SPA (ra trang Not Found).\r\n * URL tuyệt đối (http/https) giữ nguyên.\r\n */\r\nexport function resolveBldApiUrl(apiBaseUrl: string, url: string): string {\r\n  if (/^(?:[a-z][a-z0-9+.-]*:)?\\/\\//i.test(url)) return url;\r\n  const base = apiBaseUrl.replace(/\\/+$/, '');\r\n  if (!base) return url;\r\n  return `${base}${url.startsWith('/') ? '' : '/'}${url}`;\r\n}\r\n\r\ninterface BldErrorPayload {\r\n  error?: string;\r\n  message?: string;\r\n  issues?: { message?: string }[];\r\n}\r\n\r\n/**\r\n * Lấy thông điệp lỗi từ response của server: ưu tiên issues[0].message,\r\n * sau đó `error`, rồi `message`.\r\n */\r\nexport function extractBldError(err: unknown, fallback: string): string {\r\n  if (axios.isAxiosError(err) && err.response?.data && typeof err.response.data === 'object') {\r\n    const data = err.response.data as BldErrorPayload;\r\n    const firstIssue = Array.isArray(data.issues)\r\n      ? data.issues.find(\r\n          (issue) => issue && typeof issue.message === 'string' && issue.message.trim().length > 0,\r\n        )\r\n      : undefined;\r\n    if (firstIssue?.message) {\r\n      return data.error ? `${data.error}: ${firstIssue.message}` : firstIssue.message;\r\n    }\r\n    if (data.error) return data.error;\r\n    if (data.message) return data.message;\r\n  }\r\n  if (err instanceof Error) return err.message;\r\n  return fallback;\r\n}\r\n\r\nfunction toNumber(value: unknown, fallback: number): number {\r\n  return typeof value === 'number' && Number.isFinite(value) ? value : fallback;\r\n}\r\n\r\nfunction toStringArray(value: unknown): string[] {\r\n  if (!Array.isArray(value)) return [];\r\n  return value.filter((item): item is string => typeof item === 'string');\r\n}\r\n\r\n/** GET /api/bld-reports/history — danh sách bản ghi đã phân trang. */\r\nexport async function listBldReportHistory(\r\n  apiBaseUrl: string,\r\n  query: BldReportHistoryQuery = {},\r\n): Promise<BldReportHistoryResponse> {\r\n  const page = typeof query.page === 'number' && query.page > 0 ? query.page : 1;\r\n  const limit = typeof query.limit === 'number' && query.limit > 0 ? query.limit : 20;\r\n  const params: {\r\n    page: number;\r\n    limit: number;\r\n    periodType?: BldPeriodType;\r\n    status?: BldReportRunStatus;\r\n    from?: string;\r\n    to?: string;\r\n  } = { page, limit };\r\n  if (query.periodType) params.periodType = query.periodType;\r\n  if (query.status) params.status = query.status;\r\n  if (query.from) params.from = query.from;\r\n  if (query.to) params.to = query.to;\r\n\r\n  try {\r\n    const response = await axios.get<Partial<BldReportHistoryResponse>>(\r\n      `${apiBaseUrl}/api/bld-reports/history`,\r\n      { params },\r\n    );\r\n    const data = response.data ?? {};\r\n    return {\r\n      data: Array.isArray(data.data) ? data.data : [],\r\n      total: toNumber(data.total, 0),\r\n      page: toNumber(data.page, page),\r\n      limit: toNumber(data.limit, limit),\r\n    };\r\n  } catch (err) {\r\n    throw new Error(extractBldError(err, 'Không tải được lịch sử tạo báo cáo.'));\r\n  }\r\n}\r\n\r\nfunction normalizeStats(value: unknown): Record<string, BldTestGenerateSourceStats> {\r\n  if (!value || typeof value !== 'object') return {};\r\n  const result: Record<string, BldTestGenerateSourceStats> = {};\r\n  for (const [key, raw] of Object.entries(value as Record<string, unknown>)) {\r\n    const item = (raw ?? {}) as Partial<BldTestGenerateSourceStats>;\r\n    result[key] = {\r\n      rows: toNumber(item.rows, 0),\r\n      skippedSheets: toStringArray(item.skippedSheets),\r\n      missingLabels: toStringArray(item.missingLabels),\r\n      warnings: toStringArray(item.warnings),\r\n    };\r\n  }\r\n  return result;\r\n}\r\n\r\nfunction normalizeSourceDates(value: unknown): Record<string, BldTestGenerateSourceDate> {\r\n  if (!value || typeof value !== 'object') return {};\r\n  const result: Record<string, BldTestGenerateSourceDate> = {};\r\n  for (const [key, raw] of Object.entries(value as Record<string, unknown>)) {\r\n    const item = (raw ?? {}) as Partial<BldTestGenerateSourceDate>;\r\n    result[key] = {\r\n      requestedDate: typeof item.requestedDate === 'string' ? item.requestedDate : '',\r\n      dataDate: typeof item.dataDate === 'string' ? item.dataDate : '',\r\n      backfilled: item.backfilled === true,\r\n    };\r\n  }\r\n  return result;\r\n}\r\n\r\n/** Chu kỳ poll và thời gian chờ tối đa của `runBldTestGenerate` (ms). */\r\nexport interface BldTestGeneratePollOptions {\r\n  pollIntervalMs?: number;\r\n  timeoutMs?: number;\r\n  /** Huỷ chờ kết quả (vd. component unmount): `runBldTestGenerate` reject với `AbortError`. */\r\n  signal?: AbortSignal;\r\n}\r\n\r\nconst TEST_GENERATE_POLL_INTERVAL_MS = 5_000;\r\n// Job Redis sống 1 giờ; chờ tối đa 15 phút trước khi báo quá hạn.\r\nconst TEST_GENERATE_TIMEOUT_MS = 15 * 60 * 1000;\r\n\r\ninterface BldTestGenerateJobResponse {\r\n  jobId?: string;\r\n  status?: 'running' | 'done' | 'failed';\r\n  result?: Partial<BldTestGenerateResult>;\r\n  error?: string;\r\n}\r\n\r\n/** Chờ `ms` hoặc tới khi `signal` abort (resolve sớm, caller tự kiểm tra `signal.aborted`). */\r\nfunction waitOrAbort(ms: number, signal: AbortSignal | undefined): Promise<void> {\r\n  // Executor form: client lib là ES2020 (không có `Promise.withResolvers`).\r\n  return new Promise((resolve) => {\r\n    if (signal?.aborted) {\r\n      resolve();\r\n      return;\r\n    }\r\n    const finish = () => {\r\n      clearTimeout(timer);\r\n      signal?.removeEventListener('abort', finish);\r\n      resolve();\r\n    };\r\n    const timer = setTimeout(finish, ms);\r\n    signal?.addEventListener('abort', finish, { once: true });\r\n  });\r\n}\r\n\r\nfunction normalizeTestGenerateResult(data: Partial<BldTestGenerateResult>): BldTestGenerateResult {\r\n  return {\r\n    ok: data.ok === true,\r\n    periodType: (data.periodType ?? 'day') as BldPeriodType,\r\n    periodKey: typeof data.periodKey === 'string' ? data.periodKey : '',\r\n    periodStart: typeof data.periodStart === 'string' ? data.periodStart : '',\r\n    periodEnd: typeof data.periodEnd === 'string' ? data.periodEnd : '',\r\n    sourceDates: normalizeSourceDates(data.sourceDates),\r\n    stats: normalizeStats(data.stats),\r\n    htmlPreviewUrl: typeof data.htmlPreviewUrl === 'string' ? data.htmlPreviewUrl : null,\r\n    html: typeof data.html === 'string' ? data.html : null,\r\n    pngUrl: typeof data.pngUrl === 'string' ? data.pngUrl : null,\r\n    warnings: toStringArray(data.warnings),\r\n    errors: toStringArray(data.errors),\r\n    durationMs: toNumber(data.durationMs, 0),\r\n  };\r\n}\r\n\r\n/**\r\n * POST /api/bld-reports/test-generate — chạy thử pipeline (mặc định không persist).\r\n *\r\n * Server chạy nền: POST trả 202 + `jobId` ngay (tránh 504 của ALB/ingress/nginx với pipeline\r\n * dài), sau đó poll `GET /test-generate/:jobId` tới khi job `done`/`failed`.\r\n */\r\nexport async function runBldTestGenerate(\r\n  apiBaseUrl: string,\r\n  input: BldTestGenerateInput = {},\r\n  poll: BldTestGeneratePollOptions = {},\r\n): Promise<BldTestGenerateResult> {\r\n  const body: BldTestGenerateInput = {\r\n    persist: input.persist ?? false,\r\n  };\r\n  if (input.periodType) body.periodType = input.periodType;\r\n  if (input.periodEnd) body.periodEnd = input.periodEnd;\r\n  if (input.sources && input.sources.length > 0) body.sources = [...input.sources];\r\n  if (typeof input.sendTeams === 'boolean') body.sendTeams = input.sendTeams;\r\n  if (typeof input.includeSpecialIncidents === 'boolean') {\r\n    body.includeSpecialIncidents = input.includeSpecialIncidents;\r\n  }\r\n\r\n  const pollIntervalMs = poll.pollIntervalMs ?? TEST_GENERATE_POLL_INTERVAL_MS;\r\n  const timeoutMs = poll.timeoutMs ?? TEST_GENERATE_TIMEOUT_MS;\r\n\r\n  try {\r\n    const started = await axios.post<BldTestGenerateJobResponse>(\r\n      `${apiBaseUrl}/api/bld-reports/test-generate`,\r\n      body,\r\n    );\r\n    const jobId = started.data?.jobId;\r\n    if (!jobId) throw new Error('Server không trả jobId cho lần chạy test.');\r\n\r\n    const deadline = Date.now() + timeoutMs;\r\n    for (;;) {\r\n      await waitOrAbort(pollIntervalMs, poll.signal);\r\n      if (poll.signal?.aborted) throw new DOMException('Đã huỷ chờ kết quả test.', 'AbortError');\r\n      const response = await axios.get<BldTestGenerateJobResponse>(\r\n        `${apiBaseUrl}/api/bld-reports/test-generate/${encodeURIComponent(jobId)}`,\r\n        { signal: poll.signal },\r\n      );\r\n      const job = response.data ?? {};\r\n      if (job.status === 'done') return normalizeTestGenerateResult(job.result ?? {});\r\n      if (job.status === 'failed') {\r\n        throw new Error(job.error || 'Không chạy được test tạo báo cáo.');\r\n      }\r\n      if (Date.now() >= deadline) {\r\n        throw new Error(\r\n          `Chạy test quá ${Math.round(timeoutMs / 60_000)} phút chưa xong — xem trạng thái tại lịch sử chạy.`,\r\n        );\r\n      }\r\n    }\r\n  } catch (err) {\r\n    if (poll.signal?.aborted) throw new DOMException('Đã huỷ chờ kết quả test.', 'AbortError');\r\n    throw new Error(extractBldError(err, 'Không chạy được test tạo báo cáo.'));\r\n  }\r\n}\r\n","/**\r\n * Kỳ báo cáo BLD phía client (ngày / tuần / tháng / quý) cho bộ chọn kỳ ở \"Chạy test nhanh\".\r\n *\r\n * Logic thuần trên chuỗi `YYYY-MM-DD` (tính bằng UTC, không phụ thuộc múi giờ máy). Tuần chạy\r\n * thứ 2 → Chủ nhật (ISO) giống server (`period-rules.ts`). Server cần `periodEnd` của kỳ đã chọn.\r\n */\r\nimport type { BldPeriodType } from '@/lib/bld-reports-history-api';\r\n\r\nconst MS_PER_DAY = 24 * 60 * 60 * 1000;\r\n\r\nexport interface BldPeriodSelection {\r\n  periodType: BldPeriodType;\r\n  periodStart: string;\r\n  periodEnd: string;\r\n  label: string;\r\n}\r\n\r\nexport interface BldDayCell {\r\n  date: string;\r\n  inMonth: boolean;\r\n}\r\n\r\nexport interface BldWeekOfMonth {\r\n  /** Số thứ tự tuần trong tháng, bắt đầu từ 1 (tuần chứa ngày 1 là Tuần 1). */\r\n  index: number;\r\n  start: string;\r\n  end: string;\r\n}\r\n\r\nfunction pad(value: number): string {\r\n  return String(value).padStart(2, '0');\r\n}\r\n\r\nfunction toUtc(dateOnly: string): number {\r\n  const [year = 0, month = 1, day = 1] = dateOnly.split('-').map((part) => Number.parseInt(part, 10));\r\n  return Date.UTC(year, month - 1, day);\r\n}\r\n\r\nfunction fromUtc(ms: number): string {\r\n  const date = new Date(ms);\r\n  return `${date.getUTCFullYear()}-${pad(date.getUTCMonth() + 1)}-${pad(date.getUTCDate())}`;\r\n}\r\n\r\nfunction shiftDate(dateOnly: string, days: number): string {\r\n  return fromUtc(toUtc(dateOnly) + days * MS_PER_DAY);\r\n}\r\n\r\n/** Số ngày lùi từ `dateOnly` về thứ 2 (thứ 2 = 0 … Chủ nhật = 6). */\r\nfunction daysBackToMonday(dateOnly: string): number {\r\n  return (new Date(toUtc(dateOnly)).getUTCDay() + 6) % 7;\r\n}\r\n\r\nfunction startOfIsoWeek(dateOnly: string): string {\r\n  return shiftDate(dateOnly, -daysBackToMonday(dateOnly));\r\n}\r\n\r\nfunction lastDayOfMonth(year: number, month: number): string {\r\n  return fromUtc(Date.UTC(year, month, 0));\r\n}\r\n\r\nfunction formatDmy(dateOnly: string): string {\r\n  const [year, month, day] = dateOnly.split('-');\r\n  return `${day}/${month}/${year}`;\r\n}\r\n\r\n/** Lưới lịch tháng 6 hàng x 7 cột (thứ 2 đầu hàng), kèm ngày của tháng liền kề. */\r\nexport function getMonthDayGrid(year: number, month: number): BldDayCell[] {\r\n  const first = `${year}-${pad(month)}-01`;\r\n  const gridStart = startOfIsoWeek(first);\r\n  return Array.from({ length: 42 }, (_, offset) => {\r\n    const date = shiftDate(gridStart, offset);\r\n    return { date, inMonth: date.startsWith(`${year}-${pad(month)}-`) };\r\n  });\r\n}\r\n\r\n/** Các tuần (thứ 2 → Chủ nhật) chạm vào tháng, kể cả tuần vắt sang tháng liền kề. */\r\nexport function getMonthWeeks(year: number, month: number): BldWeekOfMonth[] {\r\n  const lastDay = lastDayOfMonth(year, month);\r\n  const weeks: BldWeekOfMonth[] = [];\r\n  let start = startOfIsoWeek(`${year}-${pad(month)}-01`);\r\n  while (start <= lastDay) {\r\n    weeks.push({ index: weeks.length + 1, start, end: shiftDate(start, 6) });\r\n    start = shiftDate(start, 7);\r\n  }\r\n  return weeks;\r\n}\r\n\r\nexport function makeDaySelection(date: string): BldPeriodSelection {\r\n  return { periodType: 'day', periodStart: date, periodEnd: date, label: formatDmy(date) };\r\n}\r\n\r\nexport function makeWeekSelection(weekStart: string, indexInMonth: number): BldPeriodSelection {\r\n  const periodEnd = shiftDate(weekStart, 6);\r\n  return {\r\n    periodType: 'week',\r\n    periodStart: weekStart,\r\n    periodEnd,\r\n    label: `Tuần ${indexInMonth} (${formatDmy(weekStart)} - ${formatDmy(periodEnd)})`,\r\n  };\r\n}\r\n\r\nexport function makeMonthSelection(year: number, month: number): BldPeriodSelection {\r\n  return {\r\n    periodType: 'month',\r\n    periodStart: `${year}-${pad(month)}-01`,\r\n    periodEnd: lastDayOfMonth(year, month),\r\n    label: `Tháng ${month}/${year}`,\r\n  };\r\n}\r\n\r\nexport function makeQuarterSelection(year: number, quarter: number): BldPeriodSelection {\r\n  const startMonth = (quarter - 1) * 3 + 1;\r\n  return {\r\n    periodType: 'quarter',\r\n    periodStart: `${year}-${pad(startMonth)}-01`,\r\n    periodEnd: lastDayOfMonth(year, startMonth + 2),\r\n    label: `Quý ${quarter}/${year}`,\r\n  };\r\n}\r\n\r\n/** Kỳ chứa `today` cho từng loại (mặc định khi mở popup / đổi loại kỳ). */\r\nexport function getDefaultPeriodSelection(\r\n  periodType: BldPeriodType,\r\n  today: string,\r\n): BldPeriodSelection {\r\n  const year = Number.parseInt(today.slice(0, 4), 10);\r\n  const month = Number.parseInt(today.slice(5, 7), 10);\r\n  switch (periodType) {\r\n    case 'day':\r\n      return makeDaySelection(today);\r\n    case 'week': {\r\n      const week = getMonthWeeks(year, month).find(\r\n        (item) => item.start <= today && today <= item.end,\r\n      );\r\n      // `today` luôn nằm trong một tuần của tháng chứa nó; fallback chỉ để thỏa kiểu.\r\n      return week ? makeWeekSelection(week.start, week.index) : makeWeekSelection(startOfIsoWeek(today), 1);\r\n    }\r\n    case 'month':\r\n      return makeMonthSelection(year, month);\r\n    case 'quarter':\r\n      return makeQuarterSelection(year, Math.ceil(month / 3));\r\n  }\r\n}\r\n\r\n/** Kỳ bắt đầu sau hôm nay thì chưa có dữ liệu → bị vô hiệu hóa trong bộ chọn. */\r\nexport function isPeriodInFuture(periodStart: string, today: string): boolean {\r\n  return periodStart > today;\r\n}\r\n","import { CalendarDays, ChevronLeft, ChevronRight } from 'lucide-react';\r\nimport { useCallback, useEffect, useRef, useState } from 'react';\r\n\r\nimport { cn } from '@/lib/utils';\r\nimport {\r\n  getMonthDayGrid,\r\n  getMonthWeeks,\r\n  isPeriodInFuture,\r\n  makeDaySelection,\r\n  makeMonthSelection,\r\n  makeQuarterSelection,\r\n  makeWeekSelection,\r\n  type BldPeriodSelection,\r\n} from '@/lib/bld-report-periods';\r\nimport type { BldPeriodType } from '@/lib/bld-reports-history-api';\r\n\r\n/**\r\n * Bộ chọn kỳ báo cáo giống trang frontend `user-agents`: ngày (lịch tháng), tuần (danh sách\r\n * tuần trong tháng), tháng (lưới 12 tháng), quý (4 quý). Kỳ bắt đầu sau `today` bị vô hiệu hóa.\r\n * Panel render tại chỗ (không portal) để nằm trong focus scope của Dialog bao ngoài.\r\n */\r\n\r\nconst FIELD_LABELS: Record<BldPeriodType, string> = {\r\n  day: 'Ngày báo cáo',\r\n  week: 'Tuần báo cáo',\r\n  month: 'Tháng báo cáo',\r\n  quarter: 'Quý báo cáo',\r\n};\r\n\r\nconst WEEKDAY_HEADERS = ['T2', 'T3', 'T4', 'T5', 'T6', 'T7', 'CN'] as const;\r\n\r\nconst MONTHS = Array.from({ length: 12 }, (_, index) => index + 1);\r\nconst QUARTERS = [1, 2, 3, 4] as const;\r\n\r\ninterface MonthView {\r\n  year: number;\r\n  month: number;\r\n}\r\n\r\nfunction dmyShort(dateOnly: string): string {\r\n  return `${dateOnly.slice(8, 10)}/${dateOnly.slice(5, 7)}`;\r\n}\r\n\r\nfunction dmyFull(dateOnly: string): string {\r\n  return `${dateOnly.slice(8, 10)}/${dateOnly.slice(5, 7)}/${dateOnly.slice(0, 4)}`;\r\n}\r\n\r\n/** Tháng/năm panel mở ra: tháng chứa ngày cuối kỳ đang chọn (tuần vắt tháng tính theo ngày cuối). */\r\nfunction viewFromValue(value: BldPeriodSelection): MonthView {\r\n  const anchor = value.periodType === 'week' ? value.periodEnd : value.periodStart;\r\n  return { year: Number.parseInt(anchor.slice(0, 4), 10), month: Number.parseInt(anchor.slice(5, 7), 10) };\r\n}\r\n\r\nconst cellBase =\r\n  'rounded-md px-2 py-2 text-sm transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring';\r\nconst cellIdle = 'hover:bg-accent hover:text-accent-foreground';\r\nconst cellSelected = 'bg-primary text-primary-foreground hover:bg-primary/90';\r\nconst cellDisabled = 'cursor-not-allowed text-muted-foreground/40';\r\n\r\nfunction NavButton({\r\n  label,\r\n  disabled,\r\n  onClick,\r\n  direction,\r\n}: {\r\n  label: string;\r\n  disabled?: boolean;\r\n  onClick: () => void;\r\n  direction: 'prev' | 'next';\r\n}) {\r\n  const Icon = direction === 'prev' ? ChevronLeft : ChevronRight;\r\n  return (\r\n    <button\r\n      type=\"button\"\r\n      aria-label={label}\r\n      disabled={disabled}\r\n      onClick={onClick}\r\n      className=\"rounded-md p-1 text-muted-foreground hover:bg-accent disabled:cursor-not-allowed disabled:opacity-40\"\r\n    >\r\n      <Icon className=\"h-4 w-4\" />\r\n    </button>\r\n  );\r\n}\r\n\r\nexport function BldPeriodPicker({\r\n  value,\r\n  onChange,\r\n  today,\r\n  className,\r\n}: {\r\n  value: BldPeriodSelection;\r\n  onChange: (next: BldPeriodSelection) => void;\r\n  /** Hôm nay theo giờ Việt Nam, `YYYY-MM-DD`. */\r\n  today: string;\r\n  className?: string;\r\n}) {\r\n  const [open, setOpen] = useState(false);\r\n  const [view, setView] = useState<MonthView>(() => viewFromValue(value));\r\n  const rootRef = useRef<HTMLDivElement>(null);\r\n\r\n  const todayYear = Number.parseInt(today.slice(0, 4), 10);\r\n  const todayMonth = Number.parseInt(today.slice(5, 7), 10);\r\n\r\n  const close = useCallback(() => setOpen(false), []);\r\n\r\n  useEffect(() => {\r\n    if (!open) return;\r\n    const handlePointerDown = (event: MouseEvent) => {\r\n      if (rootRef.current && !rootRef.current.contains(event.target as Node)) close();\r\n    };\r\n    const handleKeyDown = (event: KeyboardEvent) => {\r\n      if (event.key !== 'Escape') return;\r\n      // Escape chỉ đóng panel, không đóng Dialog bao ngoài. Radix nghe Escape ở `document`\r\n      // (capture) nên phải chặn sớm hơn ở `window` (capture).\r\n      event.stopPropagation();\r\n      close();\r\n    };\r\n    document.addEventListener('mousedown', handlePointerDown);\r\n    window.addEventListener('keydown', handleKeyDown, true);\r\n    return () => {\r\n      document.removeEventListener('mousedown', handlePointerDown);\r\n      window.removeEventListener('keydown', handleKeyDown, true);\r\n    };\r\n  }, [open, close]);\r\n\r\n  const select = (next: BldPeriodSelection) => {\r\n    onChange(next);\r\n    close();\r\n  };\r\n\r\n  const toggle = () => {\r\n    if (!open) setView(viewFromValue(value));\r\n    setOpen((previous) => !previous);\r\n  };\r\n\r\n  const periodType = value.periodType;\r\n  const isMonthScoped = periodType === 'day' || periodType === 'week';\r\n\r\n  const shiftMonth = (delta: number) =>\r\n    setView((previous) => {\r\n      const index = previous.year * 12 + (previous.month - 1) + delta;\r\n      return { year: Math.floor(index / 12), month: (index % 12) + 1 };\r\n    });\r\n  const shiftYear = (delta: number) =>\r\n    setView((previous) => ({ ...previous, year: previous.year + delta }));\r\n\r\n  const atCurrentMonth = view.year * 12 + view.month >= todayYear * 12 + todayMonth;\r\n  const atCurrentYear = view.year >= todayYear;\r\n\r\n  return (\r\n    <div ref={rootRef} className={cn('relative', className)}>\r\n      <span className=\"mb-1 block text-sm font-medium leading-none\" aria-hidden=\"true\">\r\n        {FIELD_LABELS[periodType]}\r\n      </span>\r\n      <button\r\n        type=\"button\"\r\n        aria-label={FIELD_LABELS[periodType]}\r\n        aria-haspopup=\"dialog\"\r\n        aria-expanded={open}\r\n        onClick={toggle}\r\n        className=\"flex h-9 w-full items-center justify-between rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\"\r\n      >\r\n        <span>{value.label}</span>\r\n        <CalendarDays className=\"h-4 w-4 text-muted-foreground\" />\r\n      </button>\r\n\r\n      {open && (\r\n        <div\r\n          role=\"dialog\"\r\n          aria-label={`Chọn ${FIELD_LABELS[periodType].toLowerCase()}`}\r\n          className=\"absolute left-0 top-full z-50 mt-2 w-[320px] rounded-lg border bg-background p-4 shadow-lg\"\r\n        >\r\n          <div className=\"mb-3 flex items-center justify-between\">\r\n            {isMonthScoped ? (\r\n              <>\r\n                <NavButton direction=\"prev\" label=\"Tháng trước\" onClick={() => shiftMonth(-1)} />\r\n                <span className=\"text-base font-semibold\">{`Tháng ${view.month} / ${view.year}`}</span>\r\n                <NavButton\r\n                  direction=\"next\"\r\n                  label=\"Tháng sau\"\r\n                  disabled={atCurrentMonth}\r\n                  onClick={() => shiftMonth(1)}\r\n                />\r\n              </>\r\n            ) : (\r\n              <>\r\n                <NavButton direction=\"prev\" label=\"Năm trước\" onClick={() => shiftYear(-1)} />\r\n                <span className=\"text-base font-semibold\">{view.year}</span>\r\n                <NavButton\r\n                  direction=\"next\"\r\n                  label=\"Năm sau\"\r\n                  disabled={atCurrentYear}\r\n                  onClick={() => shiftYear(1)}\r\n                />\r\n              </>\r\n            )}\r\n          </div>\r\n\r\n          {periodType === 'day' && (\r\n            <div>\r\n              <div className=\"mb-1 grid grid-cols-7 text-center text-xs text-muted-foreground\">\r\n                {WEEKDAY_HEADERS.map((header) => (\r\n                  <span key={header}>{header}</span>\r\n                ))}\r\n              </div>\r\n              <div className=\"grid grid-cols-7 gap-y-1 text-center\">\r\n                {getMonthDayGrid(view.year, view.month).map((cell) => {\r\n                  const disabled = !cell.inMonth || isPeriodInFuture(cell.date, today);\r\n                  const selected = cell.date === value.periodStart;\r\n                  return (\r\n                    <button\r\n                      key={cell.date}\r\n                      type=\"button\"\r\n                      aria-label={dmyFull(cell.date)}\r\n                      aria-pressed={selected}\r\n                      disabled={disabled}\r\n                      onClick={() => select(makeDaySelection(cell.date))}\r\n                      className={cn(\r\n                        cellBase,\r\n                        selected ? cellSelected : disabled ? cellDisabled : cellIdle,\r\n                      )}\r\n                    >\r\n                      {Number.parseInt(cell.date.slice(8, 10), 10)}\r\n                    </button>\r\n                  );\r\n                })}\r\n              </div>\r\n            </div>\r\n          )}\r\n\r\n          {periodType === 'week' && (\r\n            <div className=\"grid grid-cols-2 gap-2 text-center\">\r\n              {getMonthWeeks(view.year, view.month).map((week) => {\r\n                const disabled = isPeriodInFuture(week.start, today);\r\n                const selected = week.start === value.periodStart;\r\n                const range = `${dmyShort(week.start)} - ${dmyShort(week.end)}`;\r\n                return (\r\n                  <button\r\n                    key={week.start}\r\n                    type=\"button\"\r\n                    aria-label={`Tuần ${week.index} (${range})`}\r\n                    aria-pressed={selected}\r\n                    disabled={disabled}\r\n                    onClick={() => select(makeWeekSelection(week.start, week.index))}\r\n                    className={cn(\r\n                      cellBase,\r\n                      'flex flex-col items-center py-3',\r\n                      selected ? cellSelected : disabled ? cellDisabled : cellIdle,\r\n                    )}\r\n                  >\r\n                    <span>{`Tuần ${week.index}`}</span>\r\n                    <span className={cn('text-xs', selected ? '' : 'text-muted-foreground')}>\r\n                      {`(${range})`}\r\n                    </span>\r\n                  </button>\r\n                );\r\n              })}\r\n            </div>\r\n          )}\r\n\r\n          {periodType === 'month' && (\r\n            <div className=\"grid grid-cols-3 gap-2 text-center\">\r\n              {MONTHS.map((month) => {\r\n                const next = makeMonthSelection(view.year, month);\r\n                const disabled = isPeriodInFuture(next.periodStart, today);\r\n                const selected = next.periodStart === value.periodStart;\r\n                return (\r\n                  <button\r\n                    key={month}\r\n                    type=\"button\"\r\n                    aria-label={`Tháng ${month}`}\r\n                    aria-pressed={selected}\r\n                    disabled={disabled}\r\n                    onClick={() => select(next)}\r\n                    className={cn(\r\n                      cellBase,\r\n                      'py-4',\r\n                      selected ? cellSelected : disabled ? cellDisabled : cellIdle,\r\n                    )}\r\n                  >\r\n                    {`Tháng ${month}`}\r\n                  </button>\r\n                );\r\n              })}\r\n            </div>\r\n          )}\r\n\r\n          {periodType === 'quarter' && (\r\n            <div className=\"grid grid-cols-2 gap-2 text-center\">\r\n              {QUARTERS.map((quarter) => {\r\n                const next = makeQuarterSelection(view.year, quarter);\r\n                const disabled = isPeriodInFuture(next.periodStart, today);\r\n                const selected = next.periodStart === value.periodStart;\r\n                const months = `Tháng ${(quarter - 1) * 3 + 1} - ${quarter * 3}`;\r\n                return (\r\n                  <button\r\n                    key={quarter}\r\n                    type=\"button\"\r\n                    aria-label={`Quý ${quarter} (${months})`}\r\n                    aria-pressed={selected}\r\n                    disabled={disabled}\r\n                    onClick={() => select(next)}\r\n                    className={cn(\r\n                      cellBase,\r\n                      'flex flex-col items-center py-3',\r\n                      selected ? cellSelected : disabled ? cellDisabled : cellIdle,\r\n                    )}\r\n                  >\r\n                    <span>{`Quý ${quarter}`}</span>\r\n                    <span className={cn('text-xs', selected ? '' : 'text-muted-foreground')}>\r\n                      {`(${months})`}\r\n                    </span>\r\n                  </button>\r\n                );\r\n              })}\r\n            </div>\r\n          )}\r\n        </div>\r\n      )}\r\n    </div>\r\n  );\r\n}\r\n","import { Loader2, PlayCircle, RefreshCw } from 'lucide-react';\r\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\r\n\r\nimport { Badge } from '@/components/ui/badge';\r\nimport { Button } from '@/components/ui/button';\r\nimport { Checkbox } from '@/components/ui/checkbox';\r\nimport {\r\n  Dialog,\r\n  DialogContent,\r\n  DialogDescription,\r\n  DialogFooter,\r\n  DialogHeader,\r\n  DialogTitle,\r\n} from '@/components/ui/dialog';\r\nimport { Input } from '@/components/ui/input';\r\nimport { Label } from '@/components/ui/label';\r\nimport {\r\n  Pagination,\r\n  PaginationContent,\r\n  PaginationEllipsis,\r\n  PaginationItem,\r\n  PaginationLink,\r\n  PaginationNext,\r\n  PaginationPrevious,\r\n} from '@/components/ui/pagination';\r\nimport {\r\n  Select,\r\n  SelectContent,\r\n  SelectItem,\r\n  SelectTrigger,\r\n  SelectValue,\r\n} from '@/components/ui/select';\r\nimport {\r\n  Table,\r\n  TableBody,\r\n  TableCell,\r\n  TableHead,\r\n  TableHeader,\r\n  TableRow,\r\n} from '@/components/ui/table';\r\nimport { Toaster } from '@/components/ui/toaster';\r\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\r\nimport { useToast } from '@/hooks/use-toast';\r\nimport { BLD_SOURCE_KEYS, BLD_SOURCE_LABELS, type BldSourceKey } from '@/lib/bld-reports-api';\r\nimport {\r\n  BLD_HISTORY_TIMEZONE,\r\n  BLD_PERIOD_TYPE_LABELS,\r\n  BLD_PERIOD_TYPE_OPTIONS,\r\n  BLD_RUN_STATUS_CLASSES,\r\n  BLD_RUN_STATUS_LABELS,\r\n  BLD_RUN_STATUS_OPTIONS,\r\n  BLD_RUN_TRIGGER_LABELS,\r\n  formatBldDateTime,\r\n  formatBldDuration,\r\n  formatBldPeriodLabel,\r\n  listBldReportHistory,\r\n  resolveBldApiUrl,\r\n  runBldTestGenerate,\r\n  type BldPeriodType,\r\n  type BldReportHistoryItem,\r\n  type BldReportRunStatus,\r\n  type BldTestGenerateResult,\r\n} from '@/lib/bld-reports-history-api';\r\nimport { BldPeriodPicker } from '@/features/bld-reports/BldPeriodPicker';\r\nimport {\r\n  getDefaultPeriodSelection,\r\n  type BldPeriodSelection,\r\n} from '@/lib/bld-report-periods';\r\nimport { API_BASE_URL } from '@/lib/config';\r\n\r\nconst PAGE_SIZE = 20;\r\nconst AUTO_REFRESH_MS = 10_000;\r\nconst ALL_VALUE = 'all';\r\n\r\ntype PeriodFilter = typeof ALL_VALUE | BldPeriodType;\r\ntype StatusFilter = typeof ALL_VALUE | BldReportRunStatus;\r\n\r\n/** Hôm nay theo giờ Việt Nam, dạng YYYY-MM-DD (mặc định và giới hạn trên của bộ chọn kỳ). */\r\nfunction getTodayInVietnam(): string {\r\n  return new Date().toLocaleDateString('en-CA', { timeZone: BLD_HISTORY_TIMEZONE });\r\n}\r\n\r\nfunction createAllSourcesEnabled(): Record<BldSourceKey, boolean> {\r\n  const result = {} as Record<BldSourceKey, boolean>;\r\n  for (const key of BLD_SOURCE_KEYS) result[key] = true;\r\n  return result;\r\n}\r\n\r\nfunction openInNewTab(apiBaseUrl: string, url: string): void {\r\n  window.open(resolveBldApiUrl(apiBaseUrl, url), '_blank', 'noopener,noreferrer');\r\n}\r\n\r\nexport function ReportHistory({\r\n  className,\r\n  apiBaseUrl = API_BASE_URL,\r\n  layout = 'page',\r\n}: {\r\n  className?: string;\r\n  /** API base runtime của S3 Explorer (khi nhúng vào frontend host). Mặc định `API_BASE_URL`. */\r\n  apiBaseUrl?: string;\r\n  /**\r\n   * `page`: trang độc lập (route `/report-history`, app standalone) — chiếm trọn màn hình\r\n   * và tự render `Toaster`.\r\n   * `embedded`: nội dung nhúng trong modal của frontend host — không dùng `min-h-screen`,\r\n   * dùng `Toaster` sẵn có của `Home` và chừa chỗ bên phải cho nút đóng của Dialog.\r\n   */\r\n  layout?: 'page' | 'embedded';\r\n}) {\r\n  const { toast } = useToast();\r\n\r\n  const [items, setItems] = useState<BldReportHistoryItem[]>([]);\r\n  const [total, setTotal] = useState(0);\r\n  const [page, setPage] = useState(1);\r\n  const [loading, setLoading] = useState(true);\r\n  const [refreshing, setRefreshing] = useState(false);\r\n  const [error, setError] = useState<string | null>(null);\r\n\r\n  const [periodType, setPeriodType] = useState<PeriodFilter>(ALL_VALUE);\r\n  const [status, setStatus] = useState<StatusFilter>(ALL_VALUE);\r\n  const [from, setFrom] = useState('');\r\n  const [to, setTo] = useState('');\r\n\r\n  const [errorDetail, setErrorDetail] = useState<BldReportHistoryItem | null>(null);\r\n\r\n  const [testOpen, setTestOpen] = useState(false);\r\n  const [testPeriod, setTestPeriod] = useState<BldPeriodSelection>(() =>\r\n    getDefaultPeriodSelection('day', getTodayInVietnam()),\r\n  );\r\n  const [testSources, setTestSources] = useState<Record<BldSourceKey, boolean>>(\r\n    createAllSourcesEnabled,\r\n  );\r\n  const [testPersist, setTestPersist] = useState(false);\r\n  const [testRunning, setTestRunning] = useState(false);\r\n  const [testResult, setTestResult] = useState<BldTestGenerateResult | null>(null);\r\n  const [testError, setTestError] = useState<string | null>(null);\r\n  const testAbortRef = useRef<AbortController | null>(null);\r\n\r\n  const load = useCallback(\r\n    async (targetPage: number, options?: { silent?: boolean }) => {\r\n      const silent = options?.silent === true;\r\n      if (silent) setRefreshing(true);\r\n      else setLoading(true);\r\n      try {\r\n        const response = await listBldReportHistory(apiBaseUrl, {\r\n          periodType: periodType === ALL_VALUE ? null : periodType,\r\n          status: status === ALL_VALUE ? null : status,\r\n          from: from || null,\r\n          to: to || null,\r\n          page: targetPage,\r\n          limit: PAGE_SIZE,\r\n        });\r\n        setItems(response.data);\r\n        setTotal(response.total);\r\n        setError(null);\r\n      } catch (err) {\r\n        const message =\r\n          err instanceof Error ? err.message : 'Không tải được lịch sử tạo báo cáo.';\r\n        setError(message);\r\n        if (silent) {\r\n          toast({ variant: 'destructive', title: 'Lỗi làm mới', description: message });\r\n        }\r\n      } finally {\r\n        if (silent) setRefreshing(false);\r\n        else setLoading(false);\r\n      }\r\n    },\r\n    [periodType, status, from, to, toast, apiBaseUrl],\r\n  );\r\n\r\n  useEffect(() => {\r\n    void load(page);\r\n  }, [load, page]);\r\n\r\n  // Rời trang khi test đang chạy: dừng poll để không setState sau unmount (job vẫn chạy nền\r\n  // trên server, kết quả xem ở lịch sử).\r\n  useEffect(() => () => testAbortRef.current?.abort(), []);\r\n\r\n  const hasRunning = useMemo(() => items.some((item) => item.status === 'running'), [items]);\r\n\r\n  // Tự động làm mới khi còn bản ghi đang chạy; dọn interval khi unmount/hết running.\r\n  useEffect(() => {\r\n    if (!hasRunning) return undefined;\r\n    const timer = window.setInterval(() => {\r\n      void load(page, { silent: true });\r\n    }, AUTO_REFRESH_MS);\r\n    return () => window.clearInterval(timer);\r\n  }, [hasRunning, load, page]);\r\n\r\n  const totalPages = Math.max(1, Math.ceil(total / PAGE_SIZE));\r\n\r\n  const handleRunTest = async () => {\r\n    const selectedSources = BLD_SOURCE_KEYS.filter((key) => testSources[key]);\r\n    if (selectedSources.length === 0) {\r\n      toast({\r\n        variant: 'destructive',\r\n        title: 'Thiếu nguồn dữ liệu',\r\n        description: 'Chọn ít nhất một nguồn dữ liệu để chạy test.',\r\n      });\r\n      return;\r\n    }\r\n\r\n    const controller = new AbortController();\r\n    testAbortRef.current = controller;\r\n    setTestRunning(true);\r\n    setTestError(null);\r\n    setTestResult(null);\r\n    try {\r\n      const result = await runBldTestGenerate(\r\n        apiBaseUrl,\r\n        {\r\n          periodType: testPeriod.periodType,\r\n          periodEnd: testPeriod.periodEnd,\r\n          sources: selectedSources,\r\n          persist: testPersist,\r\n        },\r\n        { signal: controller.signal },\r\n      );\r\n      setTestResult(result);\r\n      if (result.errors.length > 0) {\r\n        toast({\r\n          variant: 'destructive',\r\n          title: 'Chạy test có lỗi',\r\n          description: result.errors[0] ?? 'Xem chi tiết trong hộp thoại.',\r\n        });\r\n      } else {\r\n        toast({\r\n          title: 'Chạy test thành công',\r\n          description: `${formatBldPeriodLabel(result.periodType, result.periodKey)} · ${formatBldDuration(result.durationMs) ?? '0ms'}`,\r\n        });\r\n      }\r\n      void load(page);\r\n    } catch (err) {\r\n      if (controller.signal.aborted) return;\r\n      const message = err instanceof Error ? err.message : 'Không chạy được test tạo báo cáo.';\r\n      setTestError(message);\r\n      toast({ variant: 'destructive', title: 'Chạy test thất bại', description: message });\r\n    } finally {\r\n      if (!controller.signal.aborted) setTestRunning(false);\r\n    }\r\n  };\r\n\r\n  const renderPagination = () => {\r\n    if (totalPages <= 1) return null;\r\n    return (\r\n      <Pagination>\r\n        <PaginationContent>\r\n          <PaginationItem>\r\n            <PaginationPrevious\r\n              onClick={() => setPage((current) => Math.max(1, current - 1))}\r\n              className={page === 1 ? 'pointer-events-none opacity-50' : 'cursor-pointer'}\r\n            />\r\n          </PaginationItem>\r\n          {Array.from({ length: totalPages }, (_, index) => index + 1)\r\n            .filter(\r\n              (pageNumber) =>\r\n                pageNumber === 1 ||\r\n                pageNumber === totalPages ||\r\n                Math.abs(pageNumber - page) <= 1,\r\n            )\r\n            .map((pageNumber, index, array) => (\r\n              <span key={pageNumber} className=\"flex items-center\">\r\n                {index > 0 && array[index - 1] !== pageNumber - 1 && (\r\n                  <PaginationItem>\r\n                    <PaginationEllipsis />\r\n                  </PaginationItem>\r\n                )}\r\n                <PaginationItem>\r\n                  <PaginationLink\r\n                    onClick={() => setPage(pageNumber)}\r\n                    isActive={page === pageNumber}\r\n                    className={loading ? 'pointer-events-none' : 'cursor-pointer'}\r\n                  >\r\n                    {pageNumber}\r\n                  </PaginationLink>\r\n                </PaginationItem>\r\n              </span>\r\n            ))}\r\n          <PaginationItem>\r\n            <PaginationNext\r\n              onClick={() => setPage((current) => Math.min(totalPages, current + 1))}\r\n              className={\r\n                page === totalPages || loading ? 'pointer-events-none opacity-50' : 'cursor-pointer'\r\n              }\r\n            />\r\n          </PaginationItem>\r\n        </PaginationContent>\r\n      </Pagination>\r\n    );\r\n  };\r\n\r\n  const isEmbedded = layout === 'embedded';\r\n\r\n  return (\r\n    <TooltipProvider delayDuration={200}>\r\n      <div\r\n        className={\r\n          (isEmbedded\r\n            ? 'w-full bg-background p-6 pr-12'\r\n            : 'min-h-screen w-full bg-background p-6') + ` ${className ?? ''}`\r\n        }\r\n      >\r\n        {!isEmbedded && <Toaster />}\r\n        <div className=\"mx-auto w-full max-w-[1400px] space-y-4\">\r\n          <header className=\"flex flex-wrap items-start justify-between gap-3\">\r\n            <div className=\"space-y-1\">\r\n              <h1 className=\"text-2xl font-semibold\">Lịch sử tạo báo cáo</h1>\r\n              <p className=\"text-sm text-muted-foreground\">\r\n                Theo dõi các lần tạo báo cáo Ban lãnh đạo, trạng thái gửi Teams và chạy test nhanh.\r\n              </p>\r\n              {hasRunning && (\r\n                <p className=\"flex items-center gap-1 text-xs text-amber-600\">\r\n                  <Loader2 className=\"h-3 w-3 animate-spin\" />\r\n                  Đang có báo cáo chạy — tự động làm mới mỗi 10 giây.\r\n                </p>\r\n              )}\r\n            </div>\r\n            <div className=\"flex items-center gap-2\">\r\n              <Button\r\n                variant=\"default\"\r\n                size=\"sm\"\r\n                className=\"flex items-center gap-2\"\r\n                onClick={() => setTestOpen(true)}\r\n              >\r\n                <PlayCircle className=\"h-4 w-4\" />\r\n                Chạy test nhanh\r\n              </Button>\r\n              <Button\r\n                variant=\"outline\"\r\n                size=\"sm\"\r\n                className=\"flex items-center gap-2\"\r\n                disabled={loading || refreshing}\r\n                onClick={() => void load(page)}\r\n              >\r\n                <RefreshCw className={`h-4 w-4 ${loading || refreshing ? 'animate-spin' : ''}`} />\r\n                Làm mới\r\n              </Button>\r\n            </div>\r\n          </header>\r\n\r\n          <div className=\"flex flex-wrap items-end gap-3 rounded-md border p-3\">\r\n            <div className=\"space-y-1\">\r\n              <Label htmlFor=\"bld-history-period\">Loại báo cáo</Label>\r\n              <Select\r\n                value={periodType}\r\n                onValueChange={(value) => {\r\n                  setPeriodType(value as PeriodFilter);\r\n                  setPage(1);\r\n                }}\r\n              >\r\n                <SelectTrigger id=\"bld-history-period\" className=\"w-[160px]\">\r\n                  <SelectValue placeholder=\"Tất cả\" />\r\n                </SelectTrigger>\r\n                <SelectContent>\r\n                  <SelectItem value={ALL_VALUE}>Tất cả</SelectItem>\r\n                  {BLD_PERIOD_TYPE_OPTIONS.map((option) => (\r\n                    <SelectItem key={option} value={option}>\r\n                      {BLD_PERIOD_TYPE_LABELS[option]}\r\n                    </SelectItem>\r\n                  ))}\r\n                </SelectContent>\r\n              </Select>\r\n            </div>\r\n\r\n            <div className=\"space-y-1\">\r\n              <Label htmlFor=\"bld-history-status\">Trạng thái</Label>\r\n              <Select\r\n                value={status}\r\n                onValueChange={(value) => {\r\n                  setStatus(value as StatusFilter);\r\n                  setPage(1);\r\n                }}\r\n              >\r\n                <SelectTrigger id=\"bld-history-status\" className=\"w-[160px]\">\r\n                  <SelectValue placeholder=\"Tất cả\" />\r\n                </SelectTrigger>\r\n                <SelectContent>\r\n                  <SelectItem value={ALL_VALUE}>Tất cả</SelectItem>\r\n                  {BLD_RUN_STATUS_OPTIONS.map((option) => (\r\n                    <SelectItem key={option} value={option}>\r\n                      {BLD_RUN_STATUS_LABELS[option]}\r\n                    </SelectItem>\r\n                  ))}\r\n                </SelectContent>\r\n              </Select>\r\n            </div>\r\n\r\n            <div className=\"space-y-1\">\r\n              <Label htmlFor=\"bld-history-from\">Từ ngày</Label>\r\n              <Input\r\n                id=\"bld-history-from\"\r\n                type=\"date\"\r\n                className=\"w-[160px]\"\r\n                value={from}\r\n                onChange={(event) => {\r\n                  setFrom(event.target.value);\r\n                  setPage(1);\r\n                }}\r\n              />\r\n            </div>\r\n\r\n            <div className=\"space-y-1\">\r\n              <Label htmlFor=\"bld-history-to\">Đến ngày</Label>\r\n              <Input\r\n                id=\"bld-history-to\"\r\n                type=\"date\"\r\n                className=\"w-[160px]\"\r\n                value={to}\r\n                onChange={(event) => {\r\n                  setTo(event.target.value);\r\n                  setPage(1);\r\n                }}\r\n              />\r\n            </div>\r\n\r\n            {(periodType !== ALL_VALUE || status !== ALL_VALUE || from !== '' || to !== '') && (\r\n              <Button\r\n                variant=\"ghost\"\r\n                size=\"sm\"\r\n                onClick={() => {\r\n                  setPeriodType(ALL_VALUE);\r\n                  setStatus(ALL_VALUE);\r\n                  setFrom('');\r\n                  setTo('');\r\n                  setPage(1);\r\n                }}\r\n              >\r\n                Xoá bộ lọc\r\n              </Button>\r\n            )}\r\n          </div>\r\n\r\n          {error && (\r\n            <div className=\"flex flex-wrap items-center justify-between gap-3 rounded-md border border-red-300 bg-red-50 p-3 text-sm text-red-700\">\r\n              <span>Không tải được lịch sử tạo báo cáo: {error}</span>\r\n              <Button variant=\"outline\" size=\"sm\" onClick={() => void load(page)}>\r\n                Thử lại\r\n              </Button>\r\n            </div>\r\n          )}\r\n\r\n          <div className=\"rounded-md border\">\r\n            <Table>\r\n              <TableHeader>\r\n                <TableRow>\r\n                  <TableHead className=\"w-[220px]\">Thời gian</TableHead>\r\n                  <TableHead className=\"w-[200px]\">Loại báo cáo</TableHead>\r\n                  <TableHead className=\"w-[140px]\">Trạng thái</TableHead>\r\n                  <TableHead>Lỗi (nếu có)</TableHead>\r\n                  <TableHead className=\"w-[220px]\">Đã gửi Teams lãnh đạo</TableHead>\r\n                  <TableHead className=\"w-[160px]\">Xem</TableHead>\r\n                </TableRow>\r\n              </TableHeader>\r\n              <TableBody>\r\n                {loading && items.length === 0 && (\r\n                  <TableRow>\r\n                    <TableCell colSpan={6} className=\"py-10 text-center text-muted-foreground\">\r\n                      <span className=\"flex items-center justify-center gap-2\">\r\n                        <Loader2 className=\"h-4 w-4 animate-spin\" />\r\n                        Đang tải lịch sử...\r\n                      </span>\r\n                    </TableCell>\r\n                  </TableRow>\r\n                )}\r\n\r\n                {!loading && items.length === 0 && !error && (\r\n                  <TableRow>\r\n                    <TableCell colSpan={6} className=\"py-10 text-center text-muted-foreground\">\r\n                      Chưa có bản ghi nào\r\n                    </TableCell>\r\n                  </TableRow>\r\n                )}\r\n\r\n                {items.map((item) => {\r\n                  const startedLabel = formatBldDateTime(item.startedAt) ?? item.startedAt;\r\n                  const finishedLabel = formatBldDateTime(item.finishedAt);\r\n                  const durationLabel = formatBldDuration(item.durationMs);\r\n                  const sentAtLabel = formatBldDateTime(item.teamsSentAt);\r\n                  // Chỉ lượt thành công mới có báo cáo; không tự dựng URL từ `reportId` cho lượt\r\n                  // thất bại/đang chạy (reportId join theo kỳ có thể trỏ tới báo cáo cũ).\r\n                  const htmlUrl = item.status === 'success' ? item.htmlUrl : null;\r\n                  const pngUrl = item.status === 'success' ? item.pngUrl : null;\r\n\r\n                  return (\r\n                    <TableRow key={item.runId}>\r\n                      <TableCell>\r\n                        <div className=\"font-medium\">{startedLabel}</div>\r\n                        <div className=\"text-xs text-muted-foreground\">\r\n                          {finishedLabel ? `Kết thúc: ${finishedLabel}` : 'Chưa kết thúc'}\r\n                          {durationLabel ? ` · ${durationLabel}` : ''}\r\n                        </div>\r\n                      </TableCell>\r\n\r\n                      <TableCell>\r\n                        <div className=\"flex flex-col items-start gap-1\">\r\n                          <Badge variant=\"outline\">\r\n                            {formatBldPeriodLabel(item.periodType, item.periodKey)}\r\n                          </Badge>\r\n                          <div className=\"flex items-center gap-1\">\r\n                            {item.trigger === 'test' && (\r\n                              <Badge variant=\"secondary\">{BLD_RUN_TRIGGER_LABELS.test}</Badge>\r\n                            )}\r\n                            {item.dryRun && (\r\n                              <Badge variant=\"secondary\" className=\"border-dashed\">\r\n                                chạy thử\r\n                              </Badge>\r\n                            )}\r\n                            {item.trigger === 'manual' && !item.dryRun && (\r\n                              <span className=\"text-xs text-muted-foreground\">\r\n                                {BLD_RUN_TRIGGER_LABELS.manual}\r\n                              </span>\r\n                            )}\r\n                          </div>\r\n                        </div>\r\n                      </TableCell>\r\n\r\n                      <TableCell>\r\n                        <Badge className={BLD_RUN_STATUS_CLASSES[item.status]}>\r\n                          {BLD_RUN_STATUS_LABELS[item.status]}\r\n                        </Badge>\r\n                      </TableCell>\r\n\r\n                      <TableCell>\r\n                        {item.errorMessage ? (\r\n                          <button\r\n                            type=\"button\"\r\n                            onClick={() => setErrorDetail(item)}\r\n                            className=\"max-w-[320px] cursor-pointer truncate text-left text-sm text-red-600 underline decoration-dotted\"\r\n                            title=\"Bấm để xem đầy đủ\"\r\n                          >\r\n                            {item.errorMessage}\r\n                          </button>\r\n                        ) : (\r\n                          <span className=\"text-muted-foreground\">—</span>\r\n                        )}\r\n                      </TableCell>\r\n\r\n                      <TableCell>\r\n                        {item.teamsSent ? (\r\n                          <div className=\"text-sm\">\r\n                            <span className=\"font-medium text-green-600\">Có</span>\r\n                            {sentAtLabel && (\r\n                              <div className=\"text-xs text-muted-foreground\">{sentAtLabel}</div>\r\n                            )}\r\n                          </div>\r\n                        ) : (\r\n                          <span className=\"text-sm text-muted-foreground\">Không</span>\r\n                        )}\r\n                      </TableCell>\r\n\r\n                      <TableCell>\r\n                        <div className=\"flex items-center gap-1\">\r\n                          <Button\r\n                            variant=\"outline\"\r\n                            size=\"sm\"\r\n                            disabled={!htmlUrl}\r\n                            onClick={() => {\r\n                              if (htmlUrl) openInNewTab(apiBaseUrl, htmlUrl);\r\n                            }}\r\n                          >\r\n                            Xem\r\n                          </Button>\r\n                          {pngUrl && (\r\n                            <Tooltip>\r\n                              <TooltipTrigger asChild>\r\n                                <Button\r\n                                  variant=\"ghost\"\r\n                                  size=\"sm\"\r\n                                  onClick={() => {\r\n                                    if (pngUrl) openInNewTab(apiBaseUrl, pngUrl);\r\n                                  }}\r\n                                >\r\n                                  PNG\r\n                                </Button>\r\n                              </TooltipTrigger>\r\n                              <TooltipContent>Tải ảnh PNG của báo cáo</TooltipContent>\r\n                            </Tooltip>\r\n                          )}\r\n                        </div>\r\n                      </TableCell>\r\n                    </TableRow>\r\n                  );\r\n                })}\r\n              </TableBody>\r\n            </Table>\r\n          </div>\r\n\r\n          <div className=\"flex items-center justify-between\">\r\n            <p className=\"text-xs text-muted-foreground\">\r\n              {total > 0 ? `Tổng ${total} bản ghi` : ''}\r\n              {refreshing ? ' · đang làm mới...' : ''}\r\n            </p>\r\n            {renderPagination()}\r\n          </div>\r\n        </div>\r\n\r\n        <Dialog\r\n          open={errorDetail !== null}\r\n          onOpenChange={(open) => {\r\n            if (!open) setErrorDetail(null);\r\n          }}\r\n        >\r\n          <DialogContent className=\"max-w-2xl\">\r\n            <DialogHeader>\r\n              <DialogTitle>Lỗi tạo báo cáo</DialogTitle>\r\n              <DialogDescription>\r\n                {errorDetail\r\n                  ? `${formatBldPeriodLabel(errorDetail.periodType, errorDetail.periodKey)} · ${\r\n                      formatBldDateTime(errorDetail.startedAt) ?? errorDetail.startedAt\r\n                    }`\r\n                  : ''}\r\n              </DialogDescription>\r\n            </DialogHeader>\r\n            <pre className=\"max-h-[60vh] overflow-auto whitespace-pre-wrap break-words rounded-md bg-muted p-3 text-xs\">\r\n              {errorDetail?.errorMessage ?? ''}\r\n            </pre>\r\n            <DialogFooter>\r\n              <Button variant=\"outline\" onClick={() => setErrorDetail(null)}>\r\n                Đóng\r\n              </Button>\r\n            </DialogFooter>\r\n          </DialogContent>\r\n        </Dialog>\r\n\r\n        <Dialog\r\n          open={testOpen}\r\n          onOpenChange={(open) => {\r\n            setTestOpen(open);\r\n            if (!open) {\r\n              setTestResult(null);\r\n              setTestError(null);\r\n            }\r\n          }}\r\n        >\r\n          <DialogContent className=\"max-h-[90vh] min-h-[60vh] max-w-4xl overflow-y-auto\">\r\n            <DialogHeader>\r\n              <DialogTitle>Chạy test nhanh</DialogTitle>\r\n              <DialogDescription>\r\n                Chạy thử pipeline tạo báo cáo với dữ liệu SharePoint.{' '}\r\n                {testPersist\r\n                  ? 'Lượt chạy và báo cáo (HTML/PNG) sẽ được lưu vào DB/S3 để kiểm tra API.'\r\n                  : 'Chạy thử: không lưu báo cáo/ảnh, không gửi Teams — lượt chạy vẫn hiện trong lịch sử với nhãn \"chạy thử\".'}\r\n              </DialogDescription>\r\n            </DialogHeader>\r\n\r\n            <div className=\"grid grid-cols-1 gap-3 sm:grid-cols-2\">\r\n              <div className=\"space-y-1 flex justify-end flex-col\">\r\n                <Label htmlFor=\"bld-test-period\">Theo</Label>\r\n                <Select\r\n                  value={testPeriod.periodType}\r\n                  onValueChange={(value) =>\r\n                    setTestPeriod(getDefaultPeriodSelection(value as BldPeriodType, getTodayInVietnam()))\r\n                  }\r\n                >\r\n                  <SelectTrigger id=\"bld-test-period\">\r\n                    <SelectValue />\r\n                  </SelectTrigger>\r\n                  <SelectContent>\r\n                    {BLD_PERIOD_TYPE_OPTIONS.map((option) => (\r\n                      <SelectItem key={option} value={option}>\r\n                        {BLD_PERIOD_TYPE_LABELS[option]}\r\n                      </SelectItem>\r\n                    ))}\r\n                  </SelectContent>\r\n                </Select>\r\n              </div>\r\n\r\n              <BldPeriodPicker value={testPeriod} onChange={setTestPeriod} today={getTodayInVietnam()} className='flex flex-col justify-end sapce-y-1'/>\r\n            </div>\r\n\r\n            <div className=\"space-y-2\">\r\n              <Label>Nguồn dữ liệu</Label>\r\n              <div className=\"grid grid-cols-1 gap-2 sm:grid-cols-2\">\r\n                {BLD_SOURCE_KEYS.map((key) => (\r\n                  <label\r\n                    key={key}\r\n                    className=\"flex items-center gap-2 rounded-md border p-2 text-sm\"\r\n                    htmlFor={`bld-test-source-${key}`}\r\n                  >\r\n                    <Checkbox\r\n                      id={`bld-test-source-${key}`}\r\n                      checked={testSources[key]}\r\n                      onCheckedChange={(checked) =>\r\n                        setTestSources((previous) => ({ ...previous, [key]: checked === true }))\r\n                      }\r\n                    />\r\n                    <span>{BLD_SOURCE_LABELS[key]}</span>\r\n                  </label>\r\n                ))}\r\n              </div>\r\n            </div>\r\n\r\n            <label\r\n              className=\"flex items-start gap-2 rounded-md border p-2 text-sm\"\r\n              htmlFor=\"bld-test-persist\"\r\n            >\r\n              <Checkbox\r\n                id=\"bld-test-persist\"\r\n                checked={testPersist}\r\n                onCheckedChange={(checked) => setTestPersist(checked === true)}\r\n              />\r\n              <span>\r\n                Lưu báo cáo vào DB/S3 (persist = true)\r\n                <span className=\"block text-xs text-muted-foreground\">\r\n                  Ghi run + HTML/PNG vào DB/S3 để kiểm tra API xem báo cáo đã lưu; không chọn:\r\n                  chỉ chạy thử (lượt chạy vẫn hiện trong lịch sử với nhãn \"chạy thử\"). Nếu cấu\r\n                  hình đang bật gửi Teams, báo cáo test cũng sẽ được gửi.\r\n                </span>\r\n              </span>\r\n            </label>\r\n\r\n            {testError && (\r\n              <div className=\"rounded-md border border-red-300 bg-red-50 p-3 text-sm text-red-700\">\r\n                {testError}\r\n              </div>\r\n            )}\r\n\r\n            {testResult && (\r\n              <div className=\"space-y-3 rounded-md border p-3\">\r\n                <div className=\"flex flex-wrap items-center justify-between gap-2\">\r\n                  <div className=\"text-sm font-medium\">\r\n                    {formatBldPeriodLabel(testResult.periodType, testResult.periodKey)}\r\n                  </div>\r\n                  <div className=\"text-xs text-muted-foreground\">\r\n                    Thời lượng: {formatBldDuration(testResult.durationMs) ?? '0ms'}\r\n                  </div>\r\n                </div>\r\n\r\n                <Table>\r\n                  <TableHeader>\r\n                    <TableRow>\r\n                      <TableHead>Nguồn</TableHead>\r\n                      <TableHead className=\"w-[80px]\">Số dòng</TableHead>\r\n                      <TableHead>Sheet bỏ qua</TableHead>\r\n                      <TableHead>Nhãn thiếu</TableHead>\r\n                    </TableRow>\r\n                  </TableHeader>\r\n                  <TableBody>\r\n                    {Object.entries(testResult.stats).map(([key, stat]) => (\r\n                      <TableRow key={key}>\r\n                        <TableCell className=\"align-top text-sm\">\r\n                          {BLD_SOURCE_LABELS[key as BldSourceKey] ?? key}\r\n                          {testResult.sourceDates[key]?.backfilled && (\r\n                            <span className=\"ml-1 text-xs text-amber-600\">\r\n                              (lấy ngày {testResult.sourceDates[key]?.dataDate})\r\n                            </span>\r\n                          )}\r\n                        </TableCell>\r\n                        <TableCell className=\"align-top text-sm\">{stat.rows}</TableCell>\r\n                        <TableCell className=\"align-top text-xs\">\r\n                          {stat.skippedSheets.length > 0 ? stat.skippedSheets.join(', ') : '—'}\r\n                        </TableCell>\r\n                        <TableCell className=\"align-top text-xs\">\r\n                          {stat.missingLabels.length > 0 ? stat.missingLabels.join(', ') : '—'}\r\n                        </TableCell>\r\n                      </TableRow>\r\n                    ))}\r\n                    {Object.keys(testResult.stats).length === 0 && (\r\n                      <TableRow>\r\n                        <TableCell colSpan={4} className=\"text-center text-muted-foreground\">\r\n                          Không có dữ liệu thống kê\r\n                        </TableCell>\r\n                      </TableRow>\r\n                    )}\r\n                  </TableBody>\r\n                </Table>\r\n\r\n                {testResult.warnings.length > 0 && (\r\n                  <div className=\"rounded-md bg-amber-50 p-2 text-xs text-amber-700\">\r\n                    <p className=\"font-medium\">Cảnh báo</p>\r\n                    <ul className=\"list-inside list-disc\">\r\n                      {testResult.warnings.map((warning, index) => (\r\n                        <li key={`${index}-${warning}`}>{warning}</li>\r\n                      ))}\r\n                    </ul>\r\n                  </div>\r\n                )}\r\n\r\n                {testResult.errors.length > 0 && (\r\n                  <div className=\"rounded-md bg-red-50 p-2 text-xs text-red-700\">\r\n                    <p className=\"font-medium\">Lỗi</p>\r\n                    <ul className=\"list-inside list-disc\">\r\n                      {testResult.errors.map((item, index) => (\r\n                        <li key={`${index}-${item}`}>{item}</li>\r\n                      ))}\r\n                    </ul>\r\n                  </div>\r\n                )}\r\n\r\n                <div className=\"space-y-2\">\r\n                  <p className=\"text-sm font-medium\">Xem trước báo cáo</p>\r\n                  {testResult.html ? (\r\n                    <iframe\r\n                      title=\"Xem trước báo cáo\"\r\n                      srcDoc={testResult.html}\r\n                      sandbox=\"\"\r\n                      className=\"h-[420px] w-full rounded-md border bg-white\"\r\n                    />\r\n                  ) : testResult.htmlPreviewUrl ? (\r\n                    <Button\r\n                      variant=\"outline\"\r\n                      size=\"sm\"\r\n                      onClick={() => {\r\n                        if (testResult.htmlPreviewUrl)\r\n                          openInNewTab(apiBaseUrl, testResult.htmlPreviewUrl);\r\n                      }}\r\n                    >\r\n                      Mở bản xem trước\r\n                    </Button>\r\n                  ) : (\r\n                    <p className=\"text-xs text-muted-foreground\">Không có bản xem trước.</p>\r\n                  )}\r\n                  {testResult.pngUrl && (\r\n                    <Button\r\n                      variant=\"ghost\"\r\n                      size=\"sm\"\r\n                      onClick={() => {\r\n                        if (testResult.pngUrl) openInNewTab(apiBaseUrl, testResult.pngUrl);\r\n                      }}\r\n                    >\r\n                      Mở ảnh PNG\r\n                    </Button>\r\n                  )}\r\n                </div>\r\n              </div>\r\n            )}\r\n\r\n            <DialogFooter>\r\n              <Button variant=\"outline\" onClick={() => setTestOpen(false)} disabled={testRunning}>\r\n                Đóng\r\n              </Button>\r\n              <Button onClick={() => void handleRunTest()} disabled={testRunning}>\r\n                {testRunning ? (\r\n                  <span className=\"flex items-center gap-2\">\r\n                    <Loader2 className=\"h-4 w-4 animate-spin\" />\r\n                    Đang chạy...\r\n                  </span>\r\n                ) : (\r\n                  'Chạy test'\r\n                )}\r\n              </Button>\r\n            </DialogFooter>\r\n          </DialogContent>\r\n        </Dialog>\r\n      </div>\r\n    </TooltipProvider>\r\n  );\r\n}\r\n","import { Dialog, DialogContent, DialogDescription, DialogTitle } from '@/components/ui/dialog';\r\nimport { API_BASE_URL } from '@/lib/config';\r\nimport { ReportHistory } from '@/pages/ReportHistory';\r\n\r\ninterface ReportHistoryModalProps {\r\n  open: boolean;\r\n  onOpenChange: (open: boolean) => void;\r\n  /** API base runtime của S3 Explorer khi nhúng vào frontend host. Mặc định `API_BASE_URL`. */\r\n  apiBaseUrl?: string;\r\n}\r\n\r\n/**\r\n * Modal \"Lịch sử tạo báo cáo\" dùng cho bản nhúng package vào frontend host.\r\n *\r\n * Package chỉ export component `S3Explorer` (không kèm router), nên route `/report-history`\r\n * của app standalone không tồn tại trên frontend host. Mở lịch sử dưới dạng modal ngay\r\n * trong `S3Explorer` để không phụ thuộc router của host.\r\n */\r\nexport function ReportHistoryModal({\r\n  open,\r\n  onOpenChange,\r\n  apiBaseUrl = API_BASE_URL,\r\n}: ReportHistoryModalProps) {\r\n  return (\r\n    <Dialog open={open} onOpenChange={onOpenChange}>\r\n      <DialogContent className=\"max-h-[92vh] w-[96vw] max-w-[1400px] overflow-hidden p-0\">\r\n        <DialogTitle className=\"sr-only\">Lịch sử tạo báo cáo</DialogTitle>\r\n        <DialogDescription className=\"sr-only\">\r\n          Theo dõi các lần tạo báo cáo Ban lãnh đạo, trạng thái gửi Teams và chạy test nhanh.\r\n        </DialogDescription>\r\n        <div className=\"max-h-[92vh] overflow-y-auto\">\r\n          <ReportHistory layout=\"embedded\" apiBaseUrl={apiBaseUrl} />\r\n        </div>\r\n      </DialogContent>\r\n    </Dialog>\r\n  );\r\n}\r\n","import { useEffect, useState } from 'react';\r\n\r\nimport { Button } from '@/components/ui/button';\r\nimport { DialogFooter } from '@/components/ui/dialog';\r\nimport { Input } from '@/components/ui/input';\r\nimport { Label } from '@/components/ui/label';\r\nimport {\r\n  Select,\r\n  SelectContent,\r\n  SelectItem,\r\n  SelectTrigger,\r\n  SelectValue,\r\n} from '@/components/ui/select';\r\nimport { Switch } from '@/components/ui/switch';\r\nimport { toast } from '@/hooks/use-toast';\r\nimport {\r\n  BLD_SOURCE_KEYS,\r\n  BLD_SOURCE_LABELS,\r\n  type BldReportsConfig,\r\n  type BldReportsConfigSnapshot,\r\n  type BldSourceKey,\r\n  type BldTeamsPrivateChannel,\r\n  getBldReportsConfig,\r\n  isMailboxAddress,\r\n  isSharePointUrl,\r\n  parseTeamsChannelUrl,\r\n  saveBldReportsConfig,\r\n} from '@/lib/bld-reports-api';\r\nimport { API_BASE_URL } from '@/lib/config';\r\n\r\nconst URL_ERROR_TEXT = 'Phải là link https thuộc *.sharepoint.com';\r\n\r\n/** Preset giờ chạy theo Asia/Ho_Chi_Minh (thứ 2 → thứ 7). */\r\nconst CRON_PRESETS: readonly { value: string; label: string }[] = [\r\n  { value: '45 9 * * *', label: '09:45 hằng ngày' },\r\n  { value: '0 8 * * *', label: '08:00 hằng ngày' },\r\n  { value: '30 9 * * *', label: '09:30 hằng ngày' },\r\n];\r\n\r\ninterface BldReportsDraft {\r\n  enabled: boolean;\r\n  scheduleCron: string;\r\n  urls: Record<BldSourceKey, string>;\r\n  teamId: string;\r\n  channelId: string;\r\n  channelUrl: string;\r\n  teamsSendEnabled: boolean;\r\n  showDevWarnings: boolean;\r\n  allowOverwriteExistingDays: boolean;\r\n  mailbox: string;\r\n}\r\n\r\nconst EMPTY_DRAFT: BldReportsDraft = {\r\n  enabled: false,\r\n  scheduleCron: '45 9 * * *',\r\n  urls: {\r\n    production_inventory: '',\r\n    electrical_structure: '',\r\n    equipment_status: '',\r\n    production_stoppage: '',\r\n  },\r\n  teamId: '',\r\n  channelId: '',\r\n  channelUrl: '',\r\n  teamsSendEnabled: false,\r\n  showDevWarnings: false,\r\n  allowOverwriteExistingDays: false,\r\n  mailbox: '',\r\n};\r\n\r\nfunction buildDraft(config: BldReportsConfig): BldReportsDraft {\r\n  const urls = { ...EMPTY_DRAFT.urls };\r\n  for (const key of BLD_SOURCE_KEYS) urls[key] = config.sharepointUrls[key] ?? '';\r\n  return {\r\n    enabled: config.enabled,\r\n    scheduleCron: config.scheduleCron,\r\n    urls,\r\n    teamId: config.teamsPrivateChannel?.teamId ?? '',\r\n    channelId: config.teamsPrivateChannel?.channelId ?? '',\r\n    channelUrl: '',\r\n    teamsSendEnabled: config.teamsSendEnabled,\r\n    showDevWarnings: config.showDevWarnings,\r\n    allowOverwriteExistingDays: config.allowOverwriteExistingDays,\r\n    mailbox: config.mailbox ?? '',\r\n  };\r\n}\r\n\r\ninterface BldReportsConfigFormProps {\r\n  className?: string;\r\n  /** Nút \"Đóng\" hiển thị cạnh nút lưu (form nằm trong Dialog). */\r\n  onClose?: () => void;\r\n  /**\r\n   * API base runtime của S3 Explorer (prop `apiBaseUrl` khi nhúng vào frontend host,\r\n   * vd `https://dev-hoaphat.cagent.cmcts.ai/s3-explorer`). Mặc định `API_BASE_URL`\r\n   * (env `VITE_APP_API_URL`, hoặc host hiện tại + `/s3-explorer` khi build không có env).\r\n   */\r\n  apiBaseUrl?: string;\r\n}\r\n\r\nexport function BldReportsConfigForm({\r\n  className,\r\n  onClose,\r\n  apiBaseUrl = API_BASE_URL,\r\n}: BldReportsConfigFormProps) {\r\n  const [draft, setDraft] = useState<BldReportsDraft>(EMPTY_DRAFT);\r\n  const [snapshot, setSnapshot] = useState<BldReportsConfigSnapshot | null>(null);\r\n  const [loading, setLoading] = useState(true);\r\n  const [saving, setSaving] = useState(false);\r\n\r\n  useEffect(() => {\r\n    let cancelled = false;\r\n    setLoading(true);\r\n    getBldReportsConfig(apiBaseUrl)\r\n      .then((data) => {\r\n        if (cancelled) return;\r\n        setSnapshot(data);\r\n        setDraft(buildDraft(data.config));\r\n      })\r\n      .catch((err: unknown) => {\r\n        if (cancelled) return;\r\n        toast({\r\n          title: 'Lỗi tải cấu hình báo cáo Ban lãnh đạo',\r\n          description: err instanceof Error ? err.message : String(err),\r\n          variant: 'destructive',\r\n        });\r\n      })\r\n      .finally(() => {\r\n        if (!cancelled) setLoading(false);\r\n      });\r\n    return () => {\r\n      cancelled = true;\r\n    };\r\n  }, [apiBaseUrl]);\r\n\r\n  const updateDraft = <K extends keyof BldReportsDraft>(key: K, value: BldReportsDraft[K]) => {\r\n    setDraft((prev) => ({ ...prev, [key]: value }));\r\n  };\r\n\r\n  const invalidUrlKeys = BLD_SOURCE_KEYS.filter((key) => {\r\n    const value = (draft.urls[key] ?? '').trim();\r\n    return value.length > 0 && !isSharePointUrl(value);\r\n  });\r\n  const emptyUrlKeys = BLD_SOURCE_KEYS.filter((key) => (draft.urls[key] ?? '').trim().length === 0);\r\n  const trimmedTeamId = draft.teamId.trim();\r\n  const trimmedChannelId = draft.channelId.trim();\r\n  const teamsChannelPartial = (trimmedTeamId.length > 0) !== (trimmedChannelId.length > 0);\r\n  const cronEmpty = draft.scheduleCron.trim().length === 0;\r\n  const trimmedMailbox = draft.mailbox.trim();\r\n  const mailboxInvalid = trimmedMailbox.length > 0 && !isMailboxAddress(trimmedMailbox);\r\n  const canSave =\r\n    !loading &&\r\n    !saving &&\r\n    invalidUrlKeys.length === 0 &&\r\n    !teamsChannelPartial &&\r\n    !cronEmpty &&\r\n    !mailboxInvalid;\r\n\r\n  const handleValidateUrls = () => {\r\n    if (invalidUrlKeys.length > 0) {\r\n      toast({\r\n        title: 'Có link SharePoint không hợp lệ',\r\n        description: invalidUrlKeys.map((key) => BLD_SOURCE_LABELS[key]).join('; '),\r\n        variant: 'destructive',\r\n      });\r\n      return;\r\n    }\r\n    if (emptyUrlKeys.length > 0) {\r\n      toast({\r\n        title: 'Còn nguồn chưa có link SharePoint',\r\n        description: emptyUrlKeys.map((key) => BLD_SOURCE_LABELS[key]).join('; '),\r\n      });\r\n      return;\r\n    }\r\n    toast({ title: 'Tất cả link SharePoint hợp lệ', description: '4/4 nguồn đã cấu hình.' });\r\n  };\r\n\r\n  const handleParseChannelUrl = () => {\r\n    const parsed = parseTeamsChannelUrl(draft.channelUrl);\r\n    if (!parsed) {\r\n      toast({\r\n        title: 'Không tách được teamId/channelId',\r\n        description: 'Dán link channel Teams dạng .../l/channel/<channelId>/<name>?groupId=<teamId>.',\r\n        variant: 'destructive',\r\n      });\r\n      return;\r\n    }\r\n    setDraft((prev) => ({ ...prev, teamId: parsed.teamId, channelId: parsed.channelId }));\r\n    toast({\r\n      title: 'Đã tách từ URL',\r\n      description: `teamId=${parsed.teamId} · channelId=${parsed.channelId}`,\r\n    });\r\n  };\r\n\r\n  const handleSave = async () => {\r\n    const teamsPrivateChannel: BldTeamsPrivateChannel | null =\r\n      trimmedTeamId && trimmedChannelId\r\n        ? { teamId: trimmedTeamId, channelId: trimmedChannelId }\r\n        : null;\r\n    const sharepointUrls: Partial<Record<BldSourceKey, string>> = {};\r\n    for (const key of BLD_SOURCE_KEYS) sharepointUrls[key] = (draft.urls[key] ?? '').trim();\r\n\r\n    setSaving(true);\r\n    try {\r\n      const saved = await saveBldReportsConfig(apiBaseUrl, {\r\n        enabled: draft.enabled,\r\n        schedule_cron: draft.scheduleCron.trim(),\r\n        sharepoint_urls: sharepointUrls,\r\n        teams_private_channel: teamsPrivateChannel,\r\n        teams_send_enabled: draft.teamsSendEnabled,\r\n        show_dev_warnings: draft.showDevWarnings,\r\n        allow_overwrite_existing_days: draft.allowOverwriteExistingDays,\r\n        mailbox: trimmedMailbox.length > 0 ? trimmedMailbox : null,\r\n      });\r\n      setDraft(buildDraft(saved));\r\n      setSnapshot((prev) => (prev ? { ...prev, config: saved, issues: [] } : prev));\r\n      toast({\r\n        title: 'Đã lưu cấu hình báo cáo Ban lãnh đạo',\r\n        description: draft.enabled ? 'Scheduler đang bật.' : 'Scheduler đang tắt.',\r\n      });\r\n      // Cập nhật lại warnings/issues (ví dụ nguồn vừa được cấu hình link).\r\n      getBldReportsConfig(apiBaseUrl)\r\n        .then((fresh) => setSnapshot(fresh))\r\n        .catch(() => undefined);\r\n    } catch (err: unknown) {\r\n      toast({\r\n        title: 'Lỗi lưu cấu hình báo cáo Ban lãnh đạo',\r\n        description: err instanceof Error ? err.message : String(err),\r\n        variant: 'destructive',\r\n      });\r\n    } finally {\r\n      setSaving(false);\r\n    }\r\n  };\r\n\r\n  if (loading) {\r\n    return (\r\n      <>\r\n        <div className={`min-h-0 overflow-y-auto py-2 pr-1 ${className ?? ''}`}>\r\n          <p className=\"text-sm text-muted-foreground\">Đang tải cấu hình...</p>\r\n        </div>\r\n        <DialogFooter>\r\n          {onClose && (\r\n            <Button variant=\"outline\" onClick={onClose}>\r\n              Đóng\r\n            </Button>\r\n          )}\r\n          <Button disabled>Lưu cấu hình</Button>\r\n        </DialogFooter>\r\n      </>\r\n    );\r\n  }\r\n\r\n  return (\r\n    <>\r\n      <div className={`min-h-0 space-y-4 overflow-y-auto py-2 pr-1 ${className ?? ''}`}>\r\n      {snapshot?.outlook.configured === false && (\r\n        <div className=\"rounded-md border border-red-300 bg-red-50 p-3\">\r\n          <p className=\"text-sm font-medium text-red-700\">\r\n            Thiếu cấu hình server (env): {snapshot.outlook.missingVars.join(', ')}\r\n          </p>\r\n          <p className=\"text-xs text-red-700\">\r\n            Cần bổ sung biến môi trường phía server trước khi scheduler đọc được SharePoint.\r\n          </p>\r\n        </div>\r\n      )}\r\n\r\n      {snapshot && snapshot.issues.length > 0 && (\r\n        <div className=\"space-y-1 rounded-md border border-red-300 bg-red-50 p-3\">\r\n          <p className=\"text-sm font-medium text-red-700\">Cấu hình đang có vấn đề</p>\r\n          <ul className=\"list-disc space-y-1 pl-4 text-xs text-red-700\">\r\n            {snapshot.issues.map((issue) => (\r\n              <li key={`${issue.key}:${issue.message}`}>\r\n                <span className=\"font-mono\">{issue.key}</span>: {issue.message}\r\n              </li>\r\n            ))}\r\n          </ul>\r\n        </div>\r\n      )}\r\n\r\n      {snapshot && snapshot.warnings.length > 0 && (\r\n        <div className=\"rounded-md border border-yellow-300 bg-yellow-50 p-3\">\r\n          <ul className=\"list-disc space-y-1 pl-4 text-xs text-yellow-800\">\r\n            {snapshot.warnings.map((warning) => (\r\n              <li key={warning}>{warning}</li>\r\n            ))}\r\n          </ul>\r\n        </div>\r\n      )}\r\n\r\n      <div className=\"flex items-center gap-2\">\r\n        <Switch\r\n          id=\"bld-enabled\"\r\n          checked={draft.enabled}\r\n          onCheckedChange={(checked) => updateDraft('enabled', checked)}\r\n          disabled={saving}\r\n        />\r\n        <Label htmlFor=\"bld-enabled\">Bật/tắt scheduler báo cáo Ban lãnh đạo</Label>\r\n      </div>\r\n\r\n      <div className=\"space-y-2\">\r\n        <Label htmlFor=\"bld-cron\" className=\"text-xs text-muted-foreground\">\r\n          Lịch chạy (cron)\r\n        </Label>\r\n        <Select\r\n          value={CRON_PRESETS.some((preset) => preset.value === draft.scheduleCron) ? draft.scheduleCron : ''}\r\n          onValueChange={(value) => updateDraft('scheduleCron', value)}\r\n          disabled={saving}\r\n        >\r\n          <SelectTrigger id=\"bld-cron-preset\">\r\n            <SelectValue placeholder=\"Chọn giờ chạy có sẵn\" />\r\n          </SelectTrigger>\r\n          <SelectContent>\r\n            {CRON_PRESETS.map((preset) => (\r\n              <SelectItem key={preset.value} value={preset.value}>\r\n                {preset.label} ({preset.value})\r\n              </SelectItem>\r\n            ))}\r\n          </SelectContent>\r\n        </Select>\r\n        <Input\r\n          id=\"bld-cron\"\r\n          value={draft.scheduleCron}\r\n          onChange={(e) => updateDraft('scheduleCron', e.target.value)}\r\n          placeholder=\"45 9 * * *\"\r\n          disabled={saving}\r\n          className={cronEmpty ? 'border-red-500' : undefined}\r\n        />\r\n        <p className=\"text-xs text-muted-foreground\">\r\n          Giờ chạy theo Asia/Ho_Chi_Minh (thứ 2 → thứ 7).\r\n        </p>\r\n        {cronEmpty && <p className=\"text-xs text-red-600\">Cron không được để trống.</p>}\r\n      </div>\r\n\r\n      <div className=\"space-y-3\">\r\n        <div className=\"flex items-center justify-between\">\r\n          <Label className=\"text-xs text-muted-foreground\">Link SharePoint (4 nguồn)</Label>\r\n          <Button variant=\"outline\" size=\"sm\" onClick={handleValidateUrls} disabled={saving}>\r\n            Kiểm tra\r\n          </Button>\r\n        </div>\r\n        {BLD_SOURCE_KEYS.map((key) => (\r\n          <div key={key} className=\"space-y-1\">\r\n            <Label htmlFor={`bld-url-${key}`} className=\"text-xs text-muted-foreground\">\r\n              {BLD_SOURCE_LABELS[key]}\r\n            </Label>\r\n            <Input\r\n              id={`bld-url-${key}`}\r\n              value={draft.urls[key] ?? ''}\r\n              onChange={(e) => updateDraft('urls', { ...draft.urls, [key]: e.target.value })}\r\n              placeholder=\"https://<tenant>.sharepoint.com/...\"\r\n              disabled={saving}\r\n              className={invalidUrlKeys.includes(key) ? 'border-red-500' : undefined}\r\n            />\r\n            {invalidUrlKeys.includes(key) && (\r\n              <p className=\"text-xs text-red-600\">{URL_ERROR_TEXT}</p>\r\n            )}\r\n          </div>\r\n        ))}\r\n        <p className=\"text-xs text-muted-foreground\">\r\n          Để trống nghĩa là chưa cấu hình nguồn đó; server sẽ bỏ qua nguồn chưa có link.\r\n        </p>\r\n      </div>\r\n\r\n      <div className=\"space-y-3 rounded-md border p-3\">\r\n        <Label className=\"text-xs text-muted-foreground\">\r\n          Teams private channel (nhận &quot;sự cố đặc biệt&quot;)\r\n        </Label>\r\n        <div className=\"space-y-1\">\r\n          <Label htmlFor=\"bld-team-id\" className=\"text-xs text-muted-foreground\">\r\n            teamId\r\n          </Label>\r\n          <Input\r\n            id=\"bld-team-id\"\r\n            value={draft.teamId}\r\n            onChange={(e) => updateDraft('teamId', e.target.value)}\r\n            placeholder=\"00000000-0000-0000-0000-000000000000\"\r\n            disabled={saving}\r\n            className={teamsChannelPartial ? 'border-red-500' : undefined}\r\n          />\r\n        </div>\r\n        <div className=\"space-y-1\">\r\n          <Label htmlFor=\"bld-channel-id\" className=\"text-xs text-muted-foreground\">\r\n            channelId\r\n          </Label>\r\n          <Input\r\n            id=\"bld-channel-id\"\r\n            value={draft.channelId}\r\n            onChange={(e) => updateDraft('channelId', e.target.value)}\r\n            placeholder=\"19:xxxxx@thread.tacv2\"\r\n            disabled={saving}\r\n            className={teamsChannelPartial ? 'border-red-500' : undefined}\r\n          />\r\n        </div>\r\n        <div className=\"space-y-1\">\r\n          <Label htmlFor=\"bld-channel-url\" className=\"text-xs text-muted-foreground\">\r\n            Link channel Teams (để tách tự động)\r\n          </Label>\r\n          <div className=\"flex items-center gap-2\">\r\n            <Input\r\n              id=\"bld-channel-url\"\r\n              value={draft.channelUrl}\r\n              onChange={(e) => updateDraft('channelUrl', e.target.value)}\r\n              placeholder=\"https://teams.microsoft.com/l/channel/...?groupId=...\"\r\n              disabled={saving}\r\n            />\r\n            <Button variant=\"outline\" size=\"sm\" onClick={handleParseChannelUrl} disabled={saving}>\r\n              Tách từ URL\r\n            </Button>\r\n          </div>\r\n        </div>\r\n        {teamsChannelPartial && (\r\n          <p className=\"text-xs text-red-600\">\r\n            Cần nhập đủ cả teamId và channelId (hoặc bỏ trống cả hai để dùng URL).\r\n          </p>\r\n        )}\r\n      </div>\r\n\r\n      <div className=\"space-y-1\">\r\n        <div className=\"flex items-center gap-2\">\r\n          <Switch\r\n            id=\"bld-teams-send\"\r\n            checked={draft.teamsSendEnabled}\r\n            onCheckedChange={(checked) => updateDraft('teamsSendEnabled', checked)}\r\n            disabled={saving}\r\n          />\r\n          <Label htmlFor=\"bld-teams-send\">Gửi báo cáo vào Teams</Label>\r\n        </div>\r\n        <p className=\"text-xs text-muted-foreground\">\r\n          Mặc định tắt. Chỉ gửi khi bật và khi chạy thật.\r\n        </p>\r\n      </div>\r\n\r\n      <div className=\"space-y-1\">\r\n        <div className=\"flex items-center gap-2\">\r\n          <Switch\r\n            id=\"bld-show-dev-warnings\"\r\n            checked={draft.showDevWarnings}\r\n            onCheckedChange={(checked) => updateDraft('showDevWarnings', checked)}\r\n            disabled={saving}\r\n          />\r\n          <Label htmlFor=\"bld-show-dev-warnings\">Hiện thông tin chẩn đoán (dev)</Label>\r\n        </div>\r\n        <p className=\"text-xs text-muted-foreground\">\r\n          Thêm chip nguồn/ngày dữ liệu và cảnh báo kỹ thuật vào HTML + card Teams. Mặc định tắt.\r\n        </p>\r\n      </div>\r\n\r\n      <div className=\"space-y-1\">\r\n        <div className=\"flex items-center gap-2\">\r\n          <Switch\r\n            id=\"bld-allow-overwrite\"\r\n            checked={draft.allowOverwriteExistingDays}\r\n            onCheckedChange={(checked) => updateDraft('allowOverwriteExistingDays', checked)}\r\n            disabled={saving}\r\n          />\r\n          <Label htmlFor=\"bld-allow-overwrite\">Cho phép ghi đè dữ liệu ngày đã có</Label>\r\n        </div>\r\n        <p className=\"text-xs text-muted-foreground\">\r\n          Mặc định tắt — ngày đã ghi (đã báo cáo) không bị sửa, chỉ ghi thêm ngày còn thiếu. Bật khi\r\n          cần refresh theo file nguồn hoặc backfill lại dữ liệu đã báo cáo.\r\n        </p>\r\n      </div>\r\n\r\n      <div className=\"space-y-1\">\r\n        <Label htmlFor=\"bld-mailbox\" className=\"text-xs text-muted-foreground\">\r\n          Mailbox Ban lãnh đạo (API CEO Assistant/MCP)\r\n        </Label>\r\n        <Input\r\n          id=\"bld-mailbox\"\r\n          type=\"email\"\r\n          value={draft.mailbox}\r\n          onChange={(e) => updateDraft('mailbox', e.target.value)}\r\n          placeholder=\"leader@hoaphat.com.vn\"\r\n          disabled={saving}\r\n          className={mailboxInvalid ? 'border-red-500' : undefined}\r\n        />\r\n        <p className=\"text-xs text-muted-foreground\">\r\n          Dùng cho 2 API app-only unread-messages/calendar khi gọi không kèm ?mailbox=.\r\n        </p>\r\n        {mailboxInvalid && (\r\n          <p className=\"text-xs text-red-600\">Phải là địa chỉ email (vd: leader@hoaphat.com.vn).</p>\r\n        )}\r\n      </div>\r\n      </div>\r\n\r\n      <DialogFooter>\r\n        {onClose && (\r\n          <Button variant=\"outline\" onClick={onClose} disabled={saving}>\r\n            Đóng\r\n          </Button>\r\n        )}\r\n        <Button onClick={() => void handleSave()} disabled={!canSave}>\r\n          {saving ? 'Đang lưu...' : 'Lưu cấu hình'}\r\n        </Button>\r\n      </DialogFooter>\r\n    </>\r\n  );\r\n}\r\n","/**\r\n * Client API cho module Email Crawler.\r\n *\r\n * Mọi hàm nhận `apiBaseUrl` (API base runtime — prop `apiBaseUrl` khi S3 Explorer được nhúng\r\n * vào frontend host, vd `https://dev-hoaphat.cagent.cmcts.ai/s3-explorer`) và ghép URL tuyệt\r\n * đối, KHÔNG dựa vào `axios.defaults.baseURL`: bundle đã build của package không biết domain\r\n * triển khai nên mặc định sẽ rơi về `http://localhost:3000` (xem `lib/config.ts`).\r\n */\r\n\r\nimport axios from './axios';\r\n\r\nexport type EmailCrawlerProcessorType = 'email_dashboard' | 'recruitment';\r\n\r\nexport interface EmailCrawlerSourceAuth {\r\n  status: string | null;\r\n  reauthReason: string | null;\r\n  authenticatedAccountEmail: string | null;\r\n  sourceMailboxAddress: string;\r\n}\r\n\r\nexport interface EmailCrawlerSource {\r\n  id: string;\r\n  sourceKey: string;\r\n  displayName: string;\r\n  mailboxAddress: string;\r\n  processorType: EmailCrawlerProcessorType;\r\n  enabled: boolean;\r\n  scheduleCron: string;\r\n  timezone: string;\r\n  lookbackMinutes: number;\r\n  maxEmailsPerRun: number;\r\n  s3Prefix: string;\r\n  uiFolderPrefix: string | null;\r\n  subjectFilters: string[];\r\n  senderFilters: string[];\r\n  settings: Record<string, unknown>;\r\n  lastDueCycleKey: string | null;\r\n  lastCompletedCycleKey: string | null;\r\n  lastRunStatus: string | null;\r\n  lastRunAt: string | null;\r\n  auth: EmailCrawlerSourceAuth | null;\r\n}\r\n\r\nexport interface EmailCrawlerRun {\r\n  id: string;\r\n  sourceId: string;\r\n  cycleKey: string;\r\n  status: string;\r\n  triggerType: string;\r\n  windowStart: string;\r\n  windowEnd: string;\r\n  stats: Record<string, number>;\r\n  errorMessage: string | null;\r\n  safeErrorCode: string | null;\r\n  startedAt: string;\r\n  completedAt: string | null;\r\n}\r\n\r\nexport interface EmailCrawlerSourceListResponse {\r\n  sources: EmailCrawlerSource[];\r\n}\r\n\r\nexport interface EmailCrawlerSourceByFolderResponse {\r\n  source: EmailCrawlerSource | null;\r\n}\r\n\r\nexport interface EmailCrawlerSourceDetailResponse {\r\n  source: EmailCrawlerSource;\r\n  runs: EmailCrawlerRun[];\r\n}\r\n\r\nexport interface EmailCrawlerRunResponse {\r\n  status: string;\r\n  run: EmailCrawlerRun;\r\n  result: 'created' | 'existing';\r\n}\r\n\r\nfunction extractError(err: unknown, fallback: string): string {\r\n  if (axios.isAxiosError(err) && err.response?.data && typeof err.response.data === 'object') {\r\n    const data = err.response.data as { error?: string; message?: string };\r\n    if (data.error) return data.error;\r\n    if (data.message) return data.message;\r\n  }\r\n  if (err instanceof Error) return err.message;\r\n  return fallback;\r\n}\r\n\r\nexport async function listEmailCrawlerSources(\r\n  apiBaseUrl: string,\r\n): Promise<EmailCrawlerSource[]> {\r\n  const response = await axios.get<EmailCrawlerSourceListResponse>(\r\n    `${apiBaseUrl}/api/email-crawler/sources`,\r\n  );\r\n  return response.data?.sources ?? [];\r\n}\r\n\r\nexport async function getEmailCrawlerSourceByKey(\r\n  apiBaseUrl: string,\r\n  sourceKey: string,\r\n): Promise<EmailCrawlerSourceDetailResponse> {\r\n  const response = await axios.get<EmailCrawlerSourceDetailResponse>(\r\n    `${apiBaseUrl}/api/email-crawler/sources/${encodeURIComponent(sourceKey)}`,\r\n  );\r\n  return response.data;\r\n}\r\n\r\nexport async function resolveEmailCrawlerSourceByFolder(\r\n  apiBaseUrl: string,\r\n  prefix: string,\r\n): Promise<EmailCrawlerSourceByFolderResponse> {\r\n  const response = await axios.get<EmailCrawlerSourceByFolderResponse>(\r\n    `${apiBaseUrl}/api/email-crawler/sources/by-folder`,\r\n    { params: { prefix } },\r\n  );\r\n  return response.data;\r\n}\r\n\r\nexport interface CreateEmailCrawlerSourceInput {\r\n  sourceKey: string;\r\n  displayName?: string;\r\n  mailboxAddress: string;\r\n  processorType: EmailCrawlerProcessorType;\r\n  enabled?: boolean;\r\n  scheduleCron?: string;\r\n  timezone?: string;\r\n  lookbackMinutes?: number;\r\n  maxEmailsPerRun?: number;\r\n  s3Prefix?: string;\r\n  uiFolderPrefix?: string | null;\r\n  subjectFilters?: string[];\r\n  senderFilters?: string[];\r\n  settings?: Record<string, unknown>;\r\n}\r\n\r\nexport interface UpdateEmailCrawlerSourceInput {\r\n  displayName?: string;\r\n  mailboxAddress?: string;\r\n  enabled?: boolean;\r\n  scheduleCron?: string;\r\n  timezone?: string;\r\n  lookbackMinutes?: number;\r\n  maxEmailsPerRun?: number;\r\n  s3Prefix?: string;\r\n  uiFolderPrefix?: string | null;\r\n  subjectFilters?: string[];\r\n  senderFilters?: string[];\r\n  settings?: Record<string, unknown>;\r\n}\r\n\r\nexport async function createEmailCrawlerSource(\r\n  apiBaseUrl: string,\r\n  input: CreateEmailCrawlerSourceInput,\r\n): Promise<EmailCrawlerSource> {\r\n  try {\r\n    const response = await axios.post<{ source: EmailCrawlerSource }>(\r\n      `${apiBaseUrl}/api/email-crawler/sources`,\r\n      input,\r\n    );\r\n    return response.data.source;\r\n  } catch (err) {\r\n    throw new Error(extractError(err, 'Failed to create crawler source'));\r\n  }\r\n}\r\n\r\nexport async function updateEmailCrawlerSource(\r\n  apiBaseUrl: string,\r\n  sourceKey: string,\r\n  input: UpdateEmailCrawlerSourceInput,\r\n): Promise<EmailCrawlerSource> {\r\n  try {\r\n    const response = await axios.put<{ source: EmailCrawlerSource }>(\r\n      `${apiBaseUrl}/api/email-crawler/sources/${encodeURIComponent(sourceKey)}`,\r\n      input,\r\n    );\r\n    return response.data.source;\r\n  } catch (err) {\r\n    throw new Error(extractError(err, 'Failed to update crawler source'));\r\n  }\r\n}\r\n\r\nexport async function runEmailCrawlerSource(\r\n  apiBaseUrl: string,\r\n  sourceKey: string,\r\n): Promise<EmailCrawlerRunResponse> {\r\n  try {\r\n    const response = await axios.post<EmailCrawlerRunResponse>(\r\n      `${apiBaseUrl}/api/email-crawler/sources/${encodeURIComponent(sourceKey)}/run`,\r\n    );\r\n    return response.data;\r\n  } catch (err) {\r\n    throw new Error(extractError(err, 'Failed to run crawler source'));\r\n  }\r\n}\r\n\r\nexport async function listEmailCrawlerSourceRuns(\r\n  apiBaseUrl: string,\r\n  sourceKey: string,\r\n  limit = 25,\r\n): Promise<EmailCrawlerRun[]> {\r\n  const response = await axios.get<{ runs: EmailCrawlerRun[] }>(\r\n    `${apiBaseUrl}/api/email-crawler/sources/${encodeURIComponent(sourceKey)}/runs`,\r\n    { params: { limit } },\r\n  );\r\n  return response.data?.runs ?? [];\r\n}\r\n\r\nexport interface RecruitmentOutlookStatus {\r\n  configured: boolean;\r\n  missingVars: string[];\r\n}\r\n\r\nexport async function getRecruitmentOutlookStatus(\r\n  apiBaseUrl: string,\r\n): Promise<RecruitmentOutlookStatus> {\r\n  const response = await axios.get<RecruitmentOutlookStatus>(\r\n    `${apiBaseUrl}/api/email-crawler/recruitment-outlook-status`,\r\n  );\r\n  return response.data;\r\n}\r\n","export const VN_TIME_OPTIONS: readonly string[] = Array.from({ length: 96 }, (_, index) => {\r\n  const totalMinutes = index * 15;\r\n  const hours = Math.floor(totalMinutes / 60)\r\n    .toString()\r\n    .padStart(2, '0');\r\n  const minutes = (totalMinutes % 60).toString().padStart(2, '0');\r\n  return `${hours}:${minutes}`;\r\n});\r\n\r\nexport function vnTimeToUtcCron(vnTime: string): string {\r\n  const [vnHour = '0', vnMinute = '0'] = vnTime.split(':');\r\n  const utcHour = (Number(vnHour) - 7 + 24) % 24;\r\n  return `${Number(vnMinute)} ${utcHour} * * *`;\r\n}\r\n\r\nexport function utcCronToVnTime(cron: string): string {\r\n  const [minute, hour] = cron.trim().split(/\\s+/);\r\n  const utcHour = Number(hour);\r\n  const utcMinute = Number(minute);\r\n\r\n  if (!Number.isInteger(utcHour) || !Number.isInteger(utcMinute)) return '';\r\n  if (utcHour < 0 || utcHour > 23 || utcMinute < 0 || utcMinute > 59) return '';\r\n  if (utcMinute % 15 !== 0) return '';\r\n\r\n  const vnHour = (utcHour + 7) % 24;\r\n  return `${vnHour.toString().padStart(2, '0')}:${utcMinute.toString().padStart(2, '0')}`;\r\n}\r\n","import { useEffect, useState } from 'react';\r\nimport { Button } from '@/components/ui/button';\r\nimport { Input } from '@/components/ui/input';\r\nimport { Label } from '@/components/ui/label';\r\nimport { Switch } from '@/components/ui/switch';\r\nimport {\r\n  Select,\r\n  SelectContent,\r\n  SelectItem,\r\n  SelectTrigger,\r\n  SelectValue,\r\n} from '@/components/ui/select';\r\nimport {\r\n  Dialog,\r\n  DialogContent,\r\n  DialogDescription,\r\n  DialogFooter,\r\n  DialogHeader,\r\n  DialogTitle,\r\n} from '@/components/ui/dialog';\r\nimport { BldReportsConfigForm } from '@/features/bld-reports/BldReportsConfigForm';\r\nimport {\r\n  type EmailCrawlerProcessorType,\r\n  type EmailCrawlerSource,\r\n  type RecruitmentOutlookStatus,\r\n  createEmailCrawlerSource,\r\n  getRecruitmentOutlookStatus,\r\n  runEmailCrawlerSource,\r\n  updateEmailCrawlerSource,\r\n} from '@/lib/email-crawler-api';\r\nimport { API_BASE_URL } from '@/lib/config';\r\nimport { VN_TIME_OPTIONS, utcCronToVnTime, vnTimeToUtcCron } from '@/lib/email-crawler-vn-time';\r\nimport { toast } from '@/hooks/use-toast';\r\n\r\nexport interface EmailCrawlerSourceCreateDefaults {\r\n  sourceKey: string;\r\n  processorType: EmailCrawlerProcessorType;\r\n  uiFolderPrefix: string;\r\n}\r\n\r\ninterface EmailCrawlerSourceModalProps {\r\n  open: boolean;\r\n  onOpenChange: (open: boolean) => void;\r\n  source: EmailCrawlerSource | null;\r\n  createDefaults?: EmailCrawlerSourceCreateDefaults | null;\r\n  /**\r\n   * Mở form cấu hình BLD Reports (nguồn SharePoint + lịch chạy + Teams) thay cho cấu hình\r\n   * crawler email — dùng khi người dùng đang ở thư mục S3 `bld-reports/`.\r\n   */\r\n  bldReports?: boolean;\r\n  /**\r\n   * API base runtime của S3 Explorer (prop `apiBaseUrl` khi nhúng vào frontend host,\r\n   * vd `https://dev-hoaphat.cagent.cmcts.ai/s3-explorer`). Dùng cho mọi call API của modal\r\n   * (crawler source, recruitment outlook, BLD Reports); mặc định `API_BASE_URL`\r\n   * (env hoặc host hiện tại).\r\n   */\r\n  apiBaseUrl?: string;\r\n  onSourceUpdated?: (source: EmailCrawlerSource) => void;\r\n  onSourceCreated?: (source: EmailCrawlerSource) => void;\r\n}\r\n\r\nconst RECRUITMENT_CRON = '* * * * *';\r\n\r\nconst DEFAULT_DRAFT = {\r\n  sourceKey: '',\r\n  displayName: '',\r\n  mailboxAddress: '',\r\n  uiFolderPrefix: '',\r\n  enabled: false,\r\n  scheduleCron: '0 * * * *',\r\n  timezone: 'Asia/Ho_Chi_Minh',\r\n  lookbackMinutes: 1440,\r\n  maxEmailsPerRun: 50,\r\n  s3Prefix: '',\r\n  subjectFilter: '',\r\n  senderFiltersText: '',\r\n};\r\n\r\ntype DraftState = typeof DEFAULT_DRAFT;\r\n\r\nfunction buildDraftFromSource(source: EmailCrawlerSource): DraftState {\r\n  return {\r\n    sourceKey: source.sourceKey,\r\n    displayName: source.displayName,\r\n    mailboxAddress: source.mailboxAddress,\r\n    uiFolderPrefix: source.uiFolderPrefix ?? '',\r\n    enabled: source.enabled,\r\n    scheduleCron: source.scheduleCron,\r\n    timezone: source.timezone,\r\n    lookbackMinutes: source.lookbackMinutes,\r\n    maxEmailsPerRun: source.maxEmailsPerRun,\r\n    s3Prefix: source.s3Prefix,\r\n    subjectFilter: source.subjectFilters.join('\\n'),\r\n    senderFiltersText: source.senderFilters.join('\\n'),\r\n  };\r\n}\r\n\r\nfunction buildDraftFromDefaults(defaults: EmailCrawlerSourceCreateDefaults): DraftState {\r\n  const sourceKey = defaults.sourceKey;\r\n  return {\r\n    ...DEFAULT_DRAFT,\r\n    sourceKey,\r\n    displayName: sourceKey,\r\n    uiFolderPrefix: defaults.uiFolderPrefix,\r\n    s3Prefix: defaults.uiFolderPrefix.replace(/\\/$/, ''),\r\n    scheduleCron:\r\n      defaults.processorType === 'recruitment'\r\n        ? RECRUITMENT_CRON\r\n        : DEFAULT_DRAFT.scheduleCron,\r\n  };\r\n}\r\n\r\nfunction normalizeUiFolder(value: string): string | null {\r\n  const trimmed = value.trim();\r\n  if (!trimmed) return null;\r\n  return trimmed.endsWith('/') ? trimmed : `${trimmed}/`;\r\n}\r\n\r\nfunction isSimplifiedProcessor(processorType: EmailCrawlerProcessorType | undefined): boolean {\r\n  return processorType !== undefined && processorType !== 'email_dashboard';\r\n}\r\n\r\nexport function EmailCrawlerSourceModal({\r\n  open,\r\n  onOpenChange,\r\n  source,\r\n  createDefaults,\r\n  bldReports = false,\r\n  apiBaseUrl = API_BASE_URL,\r\n  onSourceUpdated,\r\n  onSourceCreated,\r\n}: EmailCrawlerSourceModalProps) {\r\n  const isCreateMode = !source && !!createDefaults;\r\n  const isEditMode = !!source;\r\n  const mode: 'edit' | 'create' | 'empty' = isEditMode\r\n    ? 'edit'\r\n    : isCreateMode\r\n      ? 'create'\r\n      : 'empty';\r\n\r\n  const resolvedProcessorType: EmailCrawlerProcessorType | undefined =\r\n    mode === 'edit'\r\n      ? source?.processorType\r\n      : mode === 'create'\r\n        ? createDefaults?.processorType\r\n        : undefined;\r\n  const simplified = isSimplifiedProcessor(resolvedProcessorType);\r\n  const isRecruitment = resolvedProcessorType === 'recruitment';\r\n\r\n  const [draft, setDraft] = useState<DraftState>(DEFAULT_DRAFT);\r\n  const [saving, setSaving] = useState(false);\r\n  const [running, setRunning] = useState(false);\r\n  const [initializedKey, setInitializedKey] = useState<string | null>(null);\r\n  const [recruitmentOutlookStatus, setRecruitmentOutlookStatus] =\r\n    useState<RecruitmentOutlookStatus | null>(null);\r\n\r\n  useEffect(() => {\r\n    if (!open) {\r\n      setInitializedKey(null);\r\n      return;\r\n    }\r\n    if (mode === 'edit' && source) {\r\n      const key = source.id || source.sourceKey;\r\n      if (initializedKey !== key) {\r\n        setDraft(buildDraftFromSource(source));\r\n        setInitializedKey(key);\r\n      }\r\n    } else if (mode === 'create' && createDefaults) {\r\n      const key = `create:${createDefaults.sourceKey}:${createDefaults.uiFolderPrefix}`;\r\n      if (initializedKey !== key) {\r\n        setDraft(buildDraftFromDefaults(createDefaults));\r\n        setInitializedKey(key);\r\n      }\r\n    } else if (mode === 'empty') {\r\n      if (initializedKey !== 'empty') {\r\n        setDraft(DEFAULT_DRAFT);\r\n        setInitializedKey('empty');\r\n      }\r\n    }\r\n  }, [open, mode, source, createDefaults, initializedKey]);\r\n\r\n  const updateDraft = <K extends keyof DraftState>(key: K, value: DraftState[K]) => {\r\n    setDraft((prev) => ({ ...prev, [key]: value }));\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (!open || !isRecruitment) {\r\n      setRecruitmentOutlookStatus(null);\r\n      return;\r\n    }\r\n    let cancelled = false;\r\n    getRecruitmentOutlookStatus(apiBaseUrl)\r\n      .then((status) => {\r\n        if (!cancelled) setRecruitmentOutlookStatus(status);\r\n      })\r\n      .catch(() => {\r\n        if (!cancelled) setRecruitmentOutlookStatus(null);\r\n      });\r\n    return () => {\r\n      cancelled = true;\r\n    };\r\n  }, [apiBaseUrl, open, isRecruitment]);\r\n\r\n  const handleSave = async () => {\r\n    if (mode === 'empty') return;\r\n    setSaving(true);\r\n    try {\r\n      if (mode === 'edit' && source) {\r\n        const updated = await updateEmailCrawlerSource(apiBaseUrl, source.sourceKey, {\r\n          displayName: draft.displayName,\r\n          mailboxAddress: draft.mailboxAddress,\r\n          enabled: draft.enabled,\r\n          scheduleCron: draft.scheduleCron.trim(),\r\n          timezone: draft.timezone,\r\n          lookbackMinutes: draft.lookbackMinutes,\r\n          maxEmailsPerRun: draft.maxEmailsPerRun,\r\n          s3Prefix: draft.s3Prefix,\r\n          uiFolderPrefix: normalizeUiFolder(draft.uiFolderPrefix),\r\n          subjectFilters: splitFilterText(draft.subjectFilter),\r\n          senderFilters: splitFilterText(draft.senderFiltersText),\r\n        });\r\n        onSourceUpdated?.(updated);\r\n        toast({\r\n          title: 'Đã lưu cấu hình',\r\n          description: `Cấu hình đã được cập nhật.`,\r\n        });\r\n      } else if (mode === 'create' && createDefaults) {\r\n        const created = await createEmailCrawlerSource(apiBaseUrl, {\r\n          sourceKey: draft.sourceKey.trim(),\r\n          displayName: draft.displayName.trim() || draft.sourceKey.trim(),\r\n          mailboxAddress: draft.mailboxAddress.trim(),\r\n          processorType: createDefaults.processorType,\r\n          enabled: draft.enabled,\r\n          scheduleCron: draft.scheduleCron.trim(),\r\n          timezone: draft.timezone.trim() || 'Asia/Ho_Chi_Minh',\r\n          lookbackMinutes: draft.lookbackMinutes,\r\n          maxEmailsPerRun: draft.maxEmailsPerRun,\r\n          s3Prefix: draft.s3Prefix.trim(),\r\n          uiFolderPrefix: normalizeUiFolder(draft.uiFolderPrefix),\r\n          subjectFilters: splitFilterText(draft.subjectFilter),\r\n          senderFilters: splitFilterText(draft.senderFiltersText),\r\n        });\r\n        onSourceCreated?.(created);\r\n        toast({\r\n          title: 'Đã tạo cấu hình crawler',\r\n          description: `${created.sourceKey} đã được tạo.`,\r\n        });\r\n        onOpenChange(false);\r\n      }\r\n    } catch (err) {\r\n      toast({\r\n        title:\r\n          mode === 'create' ? 'Lỗi tạo cấu hình crawler' : 'Lỗi lưu cấu hình crawler',\r\n        description: err instanceof Error ? err.message : String(err),\r\n        variant: 'destructive',\r\n      });\r\n    } finally {\r\n      setSaving(false);\r\n    }\r\n  };\r\n\r\n  const handleRun = async () => {\r\n    if (!source) return;\r\n    setRunning(true);\r\n    try {\r\n      const result = await runEmailCrawlerSource(apiBaseUrl, source.sourceKey);\r\n      toast({\r\n        title: 'Đã gửi yêu cầu chạy crawler',\r\n        description: `Trạng thái: ${result.status} (${result.result})`,\r\n      });\r\n    } catch (err) {\r\n      toast({\r\n        title: 'Lỗi chạy crawler',\r\n        description: err instanceof Error ? err.message : String(err),\r\n        variant: 'destructive',\r\n      });\r\n    } finally {\r\n      setRunning(false);\r\n    }\r\n  };\r\n\r\n  // Thư mục S3 `bld-reports/`: chỉ có cấu hình BLD Reports, không có cấu hình crawler email.\r\n  if (bldReports) {\r\n    return (\r\n      <Dialog open={open} onOpenChange={onOpenChange}>\r\n        <DialogContent className=\"sm:max-w-2xl max-h-[90dvh] grid-rows-[auto_minmax(0,1fr)_auto] overflow-hidden\">\r\n          <DialogHeader>\r\n            <DialogTitle>Báo cáo Ban lãnh đạo</DialogTitle>\r\n            <DialogDescription>\r\n              Cấu hình nguồn dữ liệu SharePoint, lịch chạy và gửi báo cáo vào Teams.\r\n            </DialogDescription>\r\n          </DialogHeader>\r\n          <BldReportsConfigForm apiBaseUrl={apiBaseUrl} onClose={() => onOpenChange(false)} />\r\n        </DialogContent>\r\n      </Dialog>\r\n    );\r\n  }\r\n\r\n  if (mode === 'empty') {\r\n    return (\r\n      <Dialog open={open} onOpenChange={onOpenChange}>\r\n        <DialogContent className=\"sm:max-w-lg\">\r\n          <DialogHeader>\r\n            <DialogTitle>Cấu hình Email Crawler</DialogTitle>\r\n            <DialogDescription>\r\n              Không có cấu hình crawler cho thư mục hiện tại.\r\n            </DialogDescription>\r\n          </DialogHeader>\r\n          <DialogFooter>\r\n            <Button variant=\"outline\" onClick={() => onOpenChange(false)}>Đóng</Button>\r\n          </DialogFooter>\r\n        </DialogContent>\r\n      </Dialog>\r\n    );\r\n  }\r\n\r\n  const isAuthReauth = source?.auth?.status === 'reauth_required';\r\n  const isAuthConnected = source?.auth?.status === 'connected';\r\n  const runNowDisabled = !isAuthConnected || isAuthReauth || saving || running;\r\n  const canSave =\r\n    !saving && Boolean(draft.mailboxAddress.trim()) && (isRecruitment || isAuthConnected || !simplified);\r\n\r\n  return (\r\n    <Dialog open={open} onOpenChange={onOpenChange}>\r\n      <DialogContent className=\"sm:max-w-lg max-h-[90dvh] grid-rows-[auto_minmax(0,1fr)_auto] overflow-hidden\">\r\n        <DialogHeader>\r\n          <DialogTitle>\r\n            {mode === 'create'\r\n              ? simplified\r\n                ? isRecruitment\r\n                  ? 'Cấu hình tuyển dụng'\r\n                  : 'Tạo Email Scheduler'\r\n                : isRecruitment\r\n                  ? 'Cấu hình tuyển dụng'\r\n                  : 'Tạo Email Scheduler'\r\n              : simplified\r\n                ? isRecruitment\r\n                  ? 'Cấu hình tuyển dụng'\r\n                  : 'Cấu hình Email Scheduler'\r\n                : isRecruitment\r\n                  ? 'Cấu hình tuyển dụng'\r\n                  : 'Cấu hình Email Scheduler'}\r\n          </DialogTitle>\r\n          {/* <DialogDescription>\r\n            {mode === 'create' && createDefaults\r\n              ? `Source mới: ${draft.sourceKey} · Thư mục: ${createDefaults.uiFolderPrefix}`\r\n              : source\r\n                ? `Source: ${source.sourceKey} · Hộp thư: ${source.mailboxAddress}`\r\n                : ''}\r\n          </DialogDescription> */}\r\n        </DialogHeader>\r\n\r\n        <div className=\"min-h-0 space-y-4 overflow-y-auto py-2 pr-1\">\r\n          {/* Outlook auth status (always shown for the new modal) */}\r\n          {simplified && !isRecruitment && (\r\n            <div className=\"rounded-md border p-3 space-y-2\">\r\n              <p className=\"text-sm text-muted-foreground\">Chưa xác thực Outlook</p>\r\n            </div>\r\n          )}\r\n\r\n          {isRecruitment && (\r\n            <div className=\"rounded-md border p-3 space-y-2\">\r\n              {recruitmentOutlookStatus === null ? (\r\n                <p className=\"text-sm text-muted-foreground\">Đang kiểm tra cấu hình Outlook...</p>\r\n              ) : recruitmentOutlookStatus.configured ? (\r\n                <div className=\"flex items-center gap-1.5 text-sm text-green-700\">\r\n                  <span className=\"w-2 h-2 rounded-full bg-green-500 inline-block\"></span>\r\n                  Đã cấu hình\r\n                </div>\r\n              ) : (\r\n                <div className=\"space-y-1\">\r\n                  <div className=\"flex items-center gap-1.5 text-sm text-red-700\">\r\n                    <span className=\"w-2 h-2 rounded-full bg-red-500 inline-block\"></span>\r\n                    Thiếu cấu hình client_secret\r\n                  </div>\r\n                  <p className=\"text-xs text-muted-foreground\">\r\n                    Thiếu: {recruitmentOutlookStatus.missingVars.join(', ')}\r\n                  </p>\r\n                </div>\r\n              )}\r\n            </div>\r\n          )}\r\n\r\n          {isRecruitment && (\r\n            <div className=\"space-y-1\">\r\n              <Label htmlFor=\"recruitment-mailbox\" className=\"text-xs text-muted-foreground\">\r\n                Địa chỉ hộp thư\r\n              </Label>\r\n              <Input\r\n                id=\"recruitment-mailbox\"\r\n                value={draft.mailboxAddress}\r\n                onChange={(e) => updateDraft('mailboxAddress', e.target.value)}\r\n                placeholder=\"tuyendung@hoaphatdungquat.vn\"\r\n                disabled={saving}\r\n              />\r\n            </div>\r\n          )}\r\n\r\n          {/* Account status block (edit mode, any processor) */}\r\n          {mode === 'edit' && source && !simplified && (\r\n            <div className=\"rounded-md border p-3 space-y-2\">\r\n              {source.auth ? (\r\n                <div className=\"space-y-1\">\r\n                  <div className=\"flex items-center gap-1.5 text-sm\">\r\n                    <span\r\n                      className={`w-2 h-2 rounded-full inline-block ${\r\n                        isAuthReauth ? 'bg-amber-500' : 'bg-green-500'\r\n                      }`}\r\n                    ></span>\r\n                    <span>\r\n                      {source.auth.authenticatedAccountEmail ?? 'Outlook'} ·{' '}\r\n                      {isAuthReauth ? 'Cần kết nối lại' : 'Đã kết nối'}\r\n                    </span>\r\n                  </div>\r\n                  {isAuthReauth && source.auth.reauthReason && (\r\n                    <p className=\"text-xs text-muted-foreground\">\r\n                      Lý do: {source.auth.reauthReason}\r\n                    </p>\r\n                  )}\r\n                </div>\r\n              ) : (\r\n                <p className=\"text-sm text-muted-foreground\">\r\n                  Chưa có tài khoản Outlook cho source này.\r\n                </p>\r\n              )}\r\n              <Button\r\n                variant=\"outline\"\r\n                size=\"sm\"\r\n                onClick={handleRun}\r\n                disabled={runNowDisabled}\r\n              >\r\n                {running ? 'Đang chạy...' : 'Chạy ngay'}\r\n              </Button>\r\n            </div>\r\n          )}\r\n\r\n          <div className=\"flex items-center gap-2\">\r\n            <Switch\r\n              id=\"enabled\"\r\n              checked={draft.enabled}\r\n              onCheckedChange={(checked) => updateDraft('enabled', checked)}\r\n              disabled={saving}\r\n            />\r\n            <Label htmlFor=\"enabled\">Bật/Tắt</Label>\r\n          </div>\r\n\r\n          {/* Cron schedule: simplified form uses VN-time Select, dense form uses free-form Input */}\r\n          {simplified && !isRecruitment ? (\r\n            <div className=\"space-y-1\">\r\n              <Label htmlFor=\"crawler-cron\" className=\"text-xs text-muted-foreground\">\r\n                Lịch chạy hằng ngày\r\n              </Label>\r\n              <Select\r\n                value={utcCronToVnTime(draft.scheduleCron) || ''}\r\n                onValueChange={(vnTime) => updateDraft('scheduleCron', vnTimeToUtcCron(vnTime))}\r\n                disabled={saving}\r\n              >\r\n                <SelectTrigger id=\"crawler-cron\">\r\n                  <SelectValue placeholder=\"Chọn giờ chạy\" />\r\n                </SelectTrigger>\r\n                <SelectContent className=\"max-h-72\">\r\n                  {VN_TIME_OPTIONS.map((time) => (\r\n                    <SelectItem key={time} value={time}>\r\n                      {time}\r\n                    </SelectItem>\r\n                  ))}\r\n                </SelectContent>\r\n              </Select>\r\n              {utcCronToVnTime(draft.scheduleCron) && (\r\n                <p className=\"text-xs text-muted-foreground\">\r\n                  Hằng ngày lúc {utcCronToVnTime(draft.scheduleCron)} (giờ VN)\r\n                </p>\r\n              )}\r\n            </div>\r\n          ) : (\r\n            <div className=\"space-y-1\">\r\n              <Label htmlFor=\"cron\" className=\"text-xs text-muted-foreground\">Cron</Label>\r\n              <Input\r\n                id=\"cron\"\r\n                value={draft.scheduleCron}\r\n                onChange={(e) => updateDraft('scheduleCron', e.target.value)}\r\n                disabled={saving}\r\n              />\r\n              {isRecruitment && (\r\n                <p className=\"text-xs text-muted-foreground\">\r\n                  Cron 5 trường, tính theo giờ UTC. Ví dụ: * * * * * chạy mỗi phút.\r\n                </p>\r\n              )}\r\n            </div>\r\n          )}\r\n\r\n          {/* Subject filters — one filter per line, in both the simplified and the dense form */}\r\n          {simplified ? (\r\n            <div className=\"space-y-1\">\r\n              <Label htmlFor=\"crawler-subject\" className=\"text-xs text-muted-foreground\">\r\n                Bộ lọc tiêu đề hoặc nội dung (mỗi dòng một chuỗi)\r\n              </Label>\r\n              <textarea\r\n                id=\"crawler-subject\"\r\n                className=\"w-full min-h-[80px] rounded-md border border-input bg-background px-3 py-2 text-sm\"\r\n                value={draft.subjectFilter}\r\n                onChange={(e) => updateDraft('subjectFilter', e.target.value)}\r\n                placeholder=\"Ứng tuyển\"\r\n                disabled={saving}\r\n              />\r\n            </div>\r\n          ) : (\r\n            <div className=\"space-y-1\">\r\n              <Label htmlFor=\"subjects\" className=\"text-xs text-muted-foreground\">\r\n                Subject filters (mỗi dòng một chuỗi)\r\n              </Label>\r\n              <textarea\r\n                id=\"subjects\"\r\n                className=\"w-full min-h-[80px] rounded-md border border-input bg-background px-3 py-2 text-sm\"\r\n                value={draft.subjectFilter}\r\n                onChange={(e) => updateDraft('subjectFilter', e.target.value)}\r\n                disabled={saving}\r\n              />\r\n            </div>\r\n          )}\r\n\r\n          {/* Dense-form-only fields */}\r\n          {!simplified && (\r\n            <>\r\n              <div className=\"space-y-1\">\r\n                <Label htmlFor=\"sourceKey\" className=\"text-xs text-muted-foreground\">\r\n                  Source key\r\n                </Label>\r\n                <Input\r\n                  id=\"sourceKey\"\r\n                  value={draft.sourceKey}\r\n                  onChange={(e) => updateDraft('sourceKey', e.target.value)}\r\n                  disabled={saving}\r\n                />\r\n              </div>\r\n\r\n              <div className=\"space-y-1\">\r\n                <Label htmlFor=\"displayName\" className=\"text-xs text-muted-foreground\">\r\n                  Tên hiển thị\r\n                </Label>\r\n                <Input\r\n                  id=\"displayName\"\r\n                  value={draft.displayName}\r\n                  onChange={(e) => updateDraft('displayName', e.target.value)}\r\n                  disabled={saving}\r\n                />\r\n              </div>\r\n\r\n              <div className=\"space-y-1\">\r\n                <Label htmlFor=\"mailboxAddress\" className=\"text-xs text-muted-foreground\">\r\n                  Địa chỉ hộp thư\r\n                </Label>\r\n                <Input\r\n                  id=\"mailboxAddress\"\r\n                  value={draft.mailboxAddress}\r\n                  onChange={(e) => updateDraft('mailboxAddress', e.target.value)}\r\n                  disabled={saving}\r\n                />\r\n              </div>\r\n\r\n              <div className=\"space-y-1\">\r\n                <Label htmlFor=\"uiFolderPrefix\" className=\"text-xs text-muted-foreground\">\r\n                  UI folder prefix\r\n                </Label>\r\n                <Input\r\n                  id=\"uiFolderPrefix\"\r\n                  value={draft.uiFolderPrefix}\r\n                  onChange={(e) => updateDraft('uiFolderPrefix', e.target.value)}\r\n                  disabled={saving}\r\n                />\r\n              </div>\r\n\r\n              <div className=\"space-y-1\">\r\n                <Label htmlFor=\"timezone\" className=\"text-xs text-muted-foreground\">Timezone</Label>\r\n                <Input\r\n                  id=\"timezone\"\r\n                  value={draft.timezone}\r\n                  onChange={(e) => updateDraft('timezone', e.target.value)}\r\n                  disabled={saving}\r\n                />\r\n              </div>\r\n\r\n              <div className=\"grid grid-cols-2 gap-3\">\r\n                <div className=\"space-y-1\">\r\n                  <Label htmlFor=\"lookback\" className=\"text-xs text-muted-foreground\">\r\n                    Lookback (phút)\r\n                  </Label>\r\n                  <Input\r\n                    id=\"lookback\"\r\n                    type=\"number\"\r\n                    min={5}\r\n                    value={draft.lookbackMinutes}\r\n                    onChange={(e) => updateDraft('lookbackMinutes', Number(e.target.value))}\r\n                    disabled={saving}\r\n                  />\r\n                </div>\r\n                <div className=\"space-y-1\">\r\n                  <Label htmlFor=\"max\" className=\"text-xs text-muted-foreground\">\r\n                    Số email / lần\r\n                  </Label>\r\n                  <Input\r\n                    id=\"max\"\r\n                    type=\"number\"\r\n                    min={1}\r\n                    value={draft.maxEmailsPerRun}\r\n                    onChange={(e) => updateDraft('maxEmailsPerRun', Number(e.target.value))}\r\n                    disabled={saving}\r\n                  />\r\n                </div>\r\n              </div>\r\n\r\n              <div className=\"space-y-1\">\r\n                <Label htmlFor=\"prefix\" className=\"text-xs text-muted-foreground\">S3 prefix</Label>\r\n                <Input\r\n                  id=\"prefix\"\r\n                  value={draft.s3Prefix}\r\n                  onChange={(e) => updateDraft('s3Prefix', e.target.value)}\r\n                  disabled={saving}\r\n                />\r\n              </div>\r\n\r\n              <div className=\"space-y-1\">\r\n                <Label htmlFor=\"senders\" className=\"text-xs text-muted-foreground\">\r\n                  Sender filters (mỗi dòng một chuỗi)\r\n                </Label>\r\n                <textarea\r\n                  id=\"senders\"\r\n                  className=\"w-full min-h-[80px] rounded-md border border-input bg-background px-3 py-2 text-sm\"\r\n                  value={draft.senderFiltersText}\r\n                  onChange={(e) => updateDraft('senderFiltersText', e.target.value)}\r\n                  disabled={saving}\r\n                />\r\n              </div>\r\n            </>\r\n          )}\r\n        </div>\r\n\r\n        <DialogFooter>\r\n          <Button variant=\"outline\" onClick={() => onOpenChange(false)} disabled={saving}>\r\n            Đóng\r\n          </Button>\r\n          <Button onClick={handleSave} disabled={!canSave}>\r\n            {saving\r\n              ? 'Đang lưu...'\r\n              : mode === 'create'\r\n                ? 'Tạo cấu hình'\r\n                : 'Lưu cấu hình'}\r\n          </Button>\r\n        </DialogFooter>\r\n      </DialogContent>\r\n    </Dialog>\r\n  );\r\n}\r\n\r\nfunction splitFilterText(text: string): string[] {\r\n  return text\r\n    .split(/\\r?\\n/)\r\n    .map((line) => line.trim())\r\n    .filter((line) => line.length > 0);\r\n}\r\n","import { useCallback, useState } from 'react';\r\n\r\nimport axios from '@/lib/axios';\r\nimport { getAccessTokenInfoFromLocal } from '@/lib/utils';\r\nimport { IBodyDocumentPermission } from '@/pages/Dialog/DialogShare';\r\n\r\nimport { useToast } from './use-toast';\r\n\r\nexport interface User {\r\n  id: string;\r\n  username: string;\r\n  email?: string;\r\n  groupname: string;\r\n  role: string;\r\n}\r\n\r\nexport interface Group {\r\n  id: string;\r\n  groupname: string;\r\n  users: number;\r\n}\r\n\r\nexport const enum DocumentPermission {\r\n  'VIEW_DOCUMENT' = 'VIEW_DOCUMENT',\r\n  'DOWNLOAD_DOCUMENT' = 'DOWNLOAD_DOCUMENT',\r\n  'EDIT_DOCUMENT' = 'EDIT_DOCUMENT',\r\n  'OWNER_DOCUMENT' = 'OWNER_DOCUMENT',\r\n}\r\n\r\nexport const useSharingApi = (apiUrl: string, rootUrlHostApi: string) => {\r\n  const [users, setUsers] = useState<User[]>([]);\r\n  const [groups, setGroups] = useState<Group[]>([]);\r\n  const [sharedUsers, setSharedUsers] = useState<IBodyDocumentPermission[]>([]);\r\n  const [sharedGroups, setSharedGroups] = useState<IBodyDocumentPermission[]>([]);\r\n  const { toast } = useToast();\r\n\r\n  const [loading, setLoading] = useState(false);\r\n  const [loadingGrandted, setLoadingGrandted] = useState(false);\r\n\r\n  const postGranted = useCallback(\r\n    async (path: string, grandtedBy: string, data: IBodyDocumentPermission[]) => {\r\n      if (loadingGrandted) return;\r\n\r\n      setLoadingGrandted(true);\r\n      try {\r\n        const response = await axios.post(apiUrl + '/document-permission/grandted', {\r\n          path,\r\n          grandtedBy,\r\n          data,\r\n        });\r\n\r\n        if (response.status === 200) {\r\n          toast({\r\n            title: 'Phân quyền tài liệu thành công.',\r\n          });\r\n          await fetchData(path);\r\n        }\r\n\r\n        return response;\r\n      } catch (err) {\r\n        return null;\r\n      } finally {\r\n        setLoadingGrandted(false);\r\n      }\r\n    },\r\n    [],\r\n  );\r\n\r\n  const fetchAllUsers = useCallback(async () => {\r\n    try {\r\n      const accessToken = getAccessTokenInfoFromLocal();\r\n      const res = await axios.get<User[]>(rootUrlHostApi + 'admin/users/get-all', {\r\n        params: {\r\n          limit: 10000,\r\n        },\r\n        headers: {\r\n          Authorization: `Bearer ${accessToken}`,\r\n        },\r\n      });\r\n      const users = res.data;\r\n      const nonMasterAdminUsers = (users || [])?.filter((u) => u.role !== 'MASTER_ADMIN');\r\n      return nonMasterAdminUsers;\r\n    } catch (err) {\r\n      console.error('Error fetchAllUsers', err);\r\n      return [];\r\n    }\r\n  }, []);\r\n\r\n  const fetchAllGroups = useCallback(async () => {\r\n    try {\r\n      const accessToken = getAccessTokenInfoFromLocal();\r\n      const res = await axios.get<any>(rootUrlHostApi + 'admin/group-users', {\r\n        headers: {\r\n          Authorization: `Bearer ${accessToken}`,\r\n        },\r\n      });\r\n      return res.data\r\n        .filter((data: any) => `${data.groupname}`.toUpperCase() !== 'MASTER_ADMIN')\r\n        .map((data: any) => ({ ...data, users: data.users?.length || 0 }));\r\n    } catch (err) {\r\n      console.error('Error fetchAllGroups', err);\r\n      return [];\r\n    }\r\n  }, []);\r\n\r\n  const fetchShared = useCallback(async (path: string) => {\r\n    try {\r\n      const res = await axios.get<any>(apiUrl + `/document-permission/grandted`, {\r\n        params: {\r\n          path,\r\n        },\r\n      });\r\n\r\n      const data = res.data;\r\n      return {\r\n        usersShared: (data?.users as IBodyDocumentPermission[]) || [],\r\n        groupsShared: (data?.groups as IBodyDocumentPermission[]) || [],\r\n      };\r\n    } catch (err) {\r\n      console.error('Error fetchShared', err);\r\n      return {\r\n        usersShared: [],\r\n        groupsShared: [],\r\n      };\r\n    }\r\n  }, []);\r\n\r\n  const fetchData = useCallback(async (prefix: string) => {\r\n    if (loading) return;\r\n\r\n    setLoading(true);\r\n\r\n    let [users, groups, { usersShared, groupsShared }] = await Promise.all([\r\n      fetchAllUsers(),\r\n      fetchAllGroups(),\r\n      fetchShared(prefix),\r\n    ]);\r\n\r\n    users = users?.filter(\r\n      (urs) => !usersShared?.find((shared: IBodyDocumentPermission) => shared.userId === urs.id),\r\n    );\r\n    groups = groups?.filter(\r\n      (gr: any) =>\r\n        !groupsShared?.find((shared: IBodyDocumentPermission) => shared.groupname === gr.groupname),\r\n    );\r\n\r\n    Array.isArray(users) && setUsers(users);\r\n    Array.isArray(groups) && setGroups(groups as any);\r\n    Array.isArray(usersShared) && setSharedUsers(usersShared);\r\n    Array.isArray(groupsShared) && setSharedGroups(groupsShared);\r\n\r\n    setLoading(false);\r\n  }, []);\r\n\r\n  return {\r\n    // Data\r\n    users,\r\n    groups,\r\n    sharedUsers,\r\n    sharedGroups,\r\n\r\n    // Set\r\n    setUsers,\r\n    setGroups,\r\n    setSharedUsers,\r\n    setSharedGroups,\r\n\r\n    fetchData,\r\n    loading,\r\n\r\n    // Grandted\r\n    postGranted,\r\n    loadingGrandted,\r\n  };\r\n};\r\n","import type { KnownCrawlerFolder } from './email-crawler-folders';\r\n\r\nexport interface EmailSchedulerBootstrapContext {\r\n  canonicalPrefix?: string;\r\n  sourceKey?: string;\r\n}\r\n\r\nexport function buildBootstrapRequest(folder: KnownCrawlerFolder): RequestInit {\r\n  return {\r\n    method: 'POST',\r\n    headers: { 'Content-Type': 'application/json' },\r\n    body: JSON.stringify({ prefix: folder.prefix }),\r\n  };\r\n}\r\n\r\nexport function matchesBootstrapContext(\r\n  response: EmailSchedulerBootstrapContext,\r\n  folder: KnownCrawlerFolder,\r\n): boolean {\r\n  return response.canonicalPrefix === folder.prefix && response.sourceKey === folder.sourceKey;\r\n}\r\n","import type { EmailCrawlerProcessorType } from './email-crawler-api';\r\n\r\nexport interface KnownCrawlerFolder {\r\n  prefix: string;\r\n  sourceKey: string;\r\n  processorType: EmailCrawlerProcessorType;\r\n}\r\n\r\nexport const KNOWN_CRAWLER_FOLDERS: readonly KnownCrawlerFolder[] = [\r\n  {\r\n    prefix: 'kho_ban_lanh_dao/',\r\n    sourceKey: 'dashboard-main',\r\n    processorType: 'email_dashboard',\r\n  },\r\n  {\r\n    prefix: 'kho_tuyen_dung/',\r\n    sourceKey: 'recruitment-dungquat',\r\n    processorType: 'recruitment',\r\n  },\r\n] as const;\r\n\r\nexport function findKnownCrawlerFolder(prefix: string | null): KnownCrawlerFolder | null {\r\n  if (!prefix) return null;\r\n  return (\r\n    KNOWN_CRAWLER_FOLDERS.find(\r\n      (folder) => prefix === folder.prefix || prefix.startsWith(folder.prefix),\r\n    ) ?? null\r\n  );\r\n}\r\n","import { useEffect, useState } from 'react';\r\n\r\nimport {\r\n  type EmailCrawlerSource,\r\n  resolveEmailCrawlerSourceByFolder,\r\n} from './email-crawler-api';\r\nimport {\r\n  type KnownCrawlerFolder,\r\n  findKnownCrawlerFolder,\r\n} from './email-crawler-folders';\r\n\r\ninterface UseEmailCrawlerSourceResult {\r\n  source: EmailCrawlerSource | null;\r\n  knownFolder: KnownCrawlerFolder | null;\r\n  loading: boolean;\r\n  error: string | null;\r\n  refresh: () => Promise<void>;\r\n}\r\n\r\nexport function useEmailCrawlerSourceByFolder(\r\n  apiBaseUrl: string,\r\n  prefix: string | null,\r\n): UseEmailCrawlerSourceResult {\r\n  const [source, setSource] = useState<EmailCrawlerSource | null>(null);\r\n  const [loading, setLoading] = useState(false);\r\n  const [error, setError] = useState<string | null>(null);\r\n\r\n  const knownFolder = findKnownCrawlerFolder(prefix);\r\n\r\n  const refresh = async () => {\r\n    if (!prefix) {\r\n      setSource(null);\r\n      return;\r\n    }\r\n    setLoading(true);\r\n    setError(null);\r\n    try {\r\n      const result = await resolveEmailCrawlerSourceByFolder(apiBaseUrl, prefix);\r\n      setSource(result.source ?? null);\r\n    } catch (err) {\r\n      setError(err instanceof Error ? err.message : 'Failed to resolve crawler source');\r\n    } finally {\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    void refresh();\r\n  }, [apiBaseUrl, prefix]);\r\n\r\n  return { source, knownFolder, loading, error, refresh };\r\n}\r\n","import { AlertTriangle, ExternalLink, FileX } from 'lucide-react';\r\nimport React from 'react';\r\n\r\ninterface FailedFilesDisplayProps {\r\n  failureReasons: string[];\r\n  onNavigateToFile?: (filePath: string) => void;\r\n}\r\n\r\ninterface ParsedError {\r\n  errorMessage: string;\r\n  files: string[];\r\n  errorType:\r\n    | 'metadata'\r\n    | 'missing_metadata'\r\n    | 'file_size'\r\n    | 'file_format'\r\n    | 'embedding_failed'\r\n    | 'indexing_failed'\r\n    | 'access_denied'\r\n    | 'quota_exceeded'\r\n    | 'unknown';\r\n}\r\n\r\nconst FailedFilesDisplay: React.FC<FailedFilesDisplayProps> = ({\r\n  failureReasons,\r\n  onNavigateToFile,\r\n}) => {\r\n  // Helper function to handle file navigation\r\n  const handleFileClick = (filePath: string) => {\r\n    if (onNavigateToFile) {\r\n      const cleanPath = filePath.replace('s3://cts-llm-docs-bucket/', '');\r\n      onNavigateToFile(cleanPath);\r\n    }\r\n  };\r\n  const parseFailureReasons = (reasons: string[]): ParsedError[] => {\r\n    const parsedErrors: ParsedError[] = [];\r\n\r\n    reasons.forEach((reason) => {\r\n      try {\r\n        const parsedReasons = JSON.parse(reason) as string[];\r\n        parsedReasons.forEach((errorDetail) => {\r\n          const filesMatch = errorDetail.match(/\\[Files: ([^\\]]+)\\]/);\r\n          const errorMessageMatch = errorDetail.match(/^([^[]+)/);\r\n\r\n          if (filesMatch && errorMessageMatch && filesMatch[1] && errorMessageMatch[1]) {\r\n            const files = filesMatch[1].split(', ').map((file) => file.trim());\r\n            const errorMsg = errorMessageMatch[1].trim().replace('Encountered error: ', '');\r\n\r\n            let errorType: ParsedError['errorType'] = 'unknown';\r\n\r\n            // Phân loại lỗi dựa trên nội dung thông báo\r\n            if (\r\n              errorMsg.includes('invalid metadata attributes') ||\r\n              errorMsg.includes('metadata quota')\r\n            ) {\r\n              errorType = 'metadata';\r\n            } else if (\r\n              errorMsg.includes('No metadata was provided') ||\r\n              errorMsg.includes('metadata file')\r\n            ) {\r\n              errorType = 'missing_metadata';\r\n            } else if (\r\n              errorMsg.includes('file size') ||\r\n              errorMsg.includes('exceeds') ||\r\n              errorMsg.includes('100MB') ||\r\n              errorMsg.includes('100 MB')\r\n            ) {\r\n              errorType = 'file_size';\r\n            } else if (\r\n              errorMsg.includes('format not supported') ||\r\n              errorMsg.includes('unsupported format') ||\r\n              errorMsg.includes('file type')\r\n            ) {\r\n              errorType = 'file_format';\r\n            } else if (\r\n              errorMsg.includes('embedding failed') ||\r\n              errorMsg.includes('EMBEDDING_FAILED')\r\n            ) {\r\n              errorType = 'embedding_failed';\r\n            } else if (\r\n              errorMsg.includes('indexing failed') ||\r\n              errorMsg.includes('INDEXING_FAILED')\r\n            ) {\r\n              errorType = 'indexing_failed';\r\n            } else if (\r\n              errorMsg.includes('access denied') ||\r\n              errorMsg.includes('AccessDeniedException') ||\r\n              errorMsg.includes('permission')\r\n            ) {\r\n              errorType = 'access_denied';\r\n            } else if (\r\n              errorMsg.includes('quota') ||\r\n              errorMsg.includes('limit') ||\r\n              errorMsg.includes('ServiceQuotaExceededException')\r\n            ) {\r\n              errorType = 'quota_exceeded';\r\n            }\r\n\r\n            parsedErrors.push({\r\n              errorMessage: errorMsg,\r\n              files,\r\n              errorType,\r\n            });\r\n          }\r\n        });\r\n      } catch (e) {\r\n        // If parsing fails, treat as unknown error\r\n        parsedErrors.push({\r\n          errorMessage: reason,\r\n          files: [],\r\n          errorType: 'unknown',\r\n        });\r\n      }\r\n    });\r\n\r\n    return parsedErrors;\r\n  };\r\n\r\n  const getErrorIcon = (errorType: string) => {\r\n    switch (errorType) {\r\n      case 'metadata':\r\n        return <AlertTriangle className=\"h-4 w-4 text-orange-500\" />;\r\n      case 'missing_metadata':\r\n        return <FileX className=\"h-4 w-4 text-red-500\" />;\r\n      case 'file_size':\r\n        return <AlertTriangle className=\"h-4 w-4 text-yellow-500\" />;\r\n      case 'file_format':\r\n        return <FileX className=\"h-4 w-4 text-purple-500\" />;\r\n      case 'embedding_failed':\r\n        return <AlertTriangle className=\"h-4 w-4 text-red-600\" />;\r\n      case 'indexing_failed':\r\n        return <AlertTriangle className=\"h-4 w-4 text-red-600\" />;\r\n      case 'access_denied':\r\n        return <AlertTriangle className=\"h-4 w-4 text-red-700\" />;\r\n      case 'quota_exceeded':\r\n        return <AlertTriangle className=\"h-4 w-4 text-orange-600\" />;\r\n      default:\r\n        return <AlertTriangle className=\"h-4 w-4 text-red-500\" />;\r\n    }\r\n  };\r\n\r\n  const getErrorColor = (errorType: string) => {\r\n    switch (errorType) {\r\n      case 'metadata':\r\n        return 'border-orange-200 bg-orange-50';\r\n      case 'missing_metadata':\r\n        return 'border-red-200 bg-red-50';\r\n      case 'file_size':\r\n        return 'border-yellow-200 bg-yellow-50';\r\n      case 'file_format':\r\n        return 'border-purple-200 bg-purple-50';\r\n      case 'embedding_failed':\r\n        return 'border-red-300 bg-red-100';\r\n      case 'indexing_failed':\r\n        return 'border-red-300 bg-red-100';\r\n      case 'access_denied':\r\n        return 'border-red-400 bg-red-100';\r\n      case 'quota_exceeded':\r\n        return 'border-orange-300 bg-orange-100';\r\n      default:\r\n        return 'border-red-200 bg-red-50';\r\n    }\r\n  };\r\n\r\n  const getErrorTextColor = (errorType: string) => {\r\n    switch (errorType) {\r\n      case 'metadata':\r\n        return 'text-orange-800';\r\n      case 'missing_metadata':\r\n        return 'text-red-800';\r\n      case 'file_size':\r\n        return 'text-yellow-800';\r\n      case 'file_format':\r\n        return 'text-purple-800';\r\n      case 'embedding_failed':\r\n        return 'text-red-900';\r\n      case 'indexing_failed':\r\n        return 'text-red-900';\r\n      case 'access_denied':\r\n        return 'text-red-900';\r\n      case 'quota_exceeded':\r\n        return 'text-orange-900';\r\n      default:\r\n        return 'text-red-800';\r\n    }\r\n  };\r\n\r\n  const parsedErrors = parseFailureReasons(failureReasons);\r\n\r\n  if (parsedErrors.length === 0) {\r\n    return null;\r\n  }\r\n\r\n  return (\r\n    <div className=\"border-t pt-2\">\r\n      <div className=\"flex items-center gap-2 mb-3\">\r\n        <AlertTriangle className=\"h-4 w-4 text-red-500\" />\r\n        <p className=\"text-red-600 font-medium\">\r\n          Các file lỗi ({parsedErrors.reduce((total, error) => total + error.files.length, 0)} file)\r\n        </p>\r\n      </div>\r\n\r\n      <div className=\"space-y-3 max-h-80 overflow-y-auto\">\r\n        {parsedErrors.map((error, index) => (\r\n          <div key={index} className={`p-3 rounded-lg border ${getErrorColor(error.errorType)}`}>\r\n            <div className=\"flex items-start justify-between\">\r\n              <div className=\"flex items-start gap-2 flex-1\">\r\n                {getErrorIcon(error.errorType)}\r\n                <div className=\"flex-1\">\r\n                  <p className={`font-medium text-sm ${getErrorTextColor(error.errorType)}`}>\r\n                    {error.errorMessage}\r\n                  </p>\r\n                  {error.files.length > 0 && (\r\n                    <p className=\"text-xs text-gray-600 mt-1\">\r\n                      {error.files.length} file bị ảnh hưởng\r\n                    </p>\r\n                  )}\r\n                </div>\r\n              </div>\r\n            </div>\r\n\r\n            {error.files.length > 0 && (\r\n              <div className=\"mt-3 pt-2 border-t border-gray-200\">\r\n                <p className=\"text-xs font-medium text-gray-700 mb-2\">Danh sách file lỗi:</p>\r\n                <div className=\"max-h-32 overflow-y-auto space-y-1\">\r\n                  {error.files.map((file, fileIndex) => (\r\n                    <div\r\n                      key={fileIndex}\r\n                      className=\"flex items-center gap-2 text-xs p-2 bg-white/50 rounded hover:bg-white/80 transition-colors\"\r\n                    >\r\n                      <FileX className=\"h-3 w-3 text-red-400 flex-shrink-0\" />\r\n                      {onNavigateToFile ? (\r\n                        <button\r\n                          onClick={() => handleFileClick(file)}\r\n                          className=\"text-blue-600 hover:text-blue-800 underline break-all font-mono text-left flex-1 flex items-center gap-1\"\r\n                          title=\"Nhấp để điều hướng đến file\"\r\n                        >\r\n                          <span>{file.replace('s3://cts-llm-docs-bucket/', '')}</span>\r\n                          <ExternalLink className=\"h-3 w-3 flex-shrink-0\" />\r\n                        </button>\r\n                      ) : (\r\n                        <span className=\"text-gray-700 break-all font-mono\">\r\n                          {file.replace('s3://cts-llm-docs-bucket/', '')}\r\n                        </span>\r\n                      )}\r\n                    </div>\r\n                  ))}\r\n                </div>\r\n              </div>\r\n            )}\r\n          </div>\r\n        ))}\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default FailedFilesDisplay;\r\n","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","/** @license React v16.13.1\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n\n\nif (process.env.NODE_ENV !== \"production\") {\n  (function() {\n'use strict';\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\n// (unstable) APIs that have been removed. Can we remove the symbols?\n\nvar REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\nvar REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;\nvar REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;\nvar REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;\nvar REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;\n\nfunction isValidElementType(type) {\n  return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\n  type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);\n}\n\nfunction typeOf(object) {\n  if (typeof object === 'object' && object !== null) {\n    var $$typeof = object.$$typeof;\n\n    switch ($$typeof) {\n      case REACT_ELEMENT_TYPE:\n        var type = object.type;\n\n        switch (type) {\n          case REACT_ASYNC_MODE_TYPE:\n          case REACT_CONCURRENT_MODE_TYPE:\n          case REACT_FRAGMENT_TYPE:\n          case REACT_PROFILER_TYPE:\n          case REACT_STRICT_MODE_TYPE:\n          case REACT_SUSPENSE_TYPE:\n            return type;\n\n          default:\n            var $$typeofType = type && type.$$typeof;\n\n            switch ($$typeofType) {\n              case REACT_CONTEXT_TYPE:\n              case REACT_FORWARD_REF_TYPE:\n              case REACT_LAZY_TYPE:\n              case REACT_MEMO_TYPE:\n              case REACT_PROVIDER_TYPE:\n                return $$typeofType;\n\n              default:\n                return $$typeof;\n            }\n\n        }\n\n      case REACT_PORTAL_TYPE:\n        return $$typeof;\n    }\n  }\n\n  return undefined;\n} // AsyncMode is deprecated along with isAsyncMode\n\nvar AsyncMode = REACT_ASYNC_MODE_TYPE;\nvar ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;\nvar ContextConsumer = REACT_CONTEXT_TYPE;\nvar ContextProvider = REACT_PROVIDER_TYPE;\nvar Element = REACT_ELEMENT_TYPE;\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Fragment = REACT_FRAGMENT_TYPE;\nvar Lazy = REACT_LAZY_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nvar Portal = REACT_PORTAL_TYPE;\nvar Profiler = REACT_PROFILER_TYPE;\nvar StrictMode = REACT_STRICT_MODE_TYPE;\nvar Suspense = REACT_SUSPENSE_TYPE;\nvar hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated\n\nfunction isAsyncMode(object) {\n  {\n    if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n      hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n\n      console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');\n    }\n  }\n\n  return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;\n}\nfunction isConcurrentMode(object) {\n  return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;\n}\nfunction isContextConsumer(object) {\n  return typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isContextProvider(object) {\n  return typeOf(object) === REACT_PROVIDER_TYPE;\n}\nfunction isElement(object) {\n  return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nfunction isForwardRef(object) {\n  return typeOf(object) === REACT_FORWARD_REF_TYPE;\n}\nfunction isFragment(object) {\n  return typeOf(object) === REACT_FRAGMENT_TYPE;\n}\nfunction isLazy(object) {\n  return typeOf(object) === REACT_LAZY_TYPE;\n}\nfunction isMemo(object) {\n  return typeOf(object) === REACT_MEMO_TYPE;\n}\nfunction isPortal(object) {\n  return typeOf(object) === REACT_PORTAL_TYPE;\n}\nfunction isProfiler(object) {\n  return typeOf(object) === REACT_PROFILER_TYPE;\n}\nfunction isStrictMode(object) {\n  return typeOf(object) === REACT_STRICT_MODE_TYPE;\n}\nfunction isSuspense(object) {\n  return typeOf(object) === REACT_SUSPENSE_TYPE;\n}\n\nexports.AsyncMode = AsyncMode;\nexports.ConcurrentMode = ConcurrentMode;\nexports.ContextConsumer = ContextConsumer;\nexports.ContextProvider = ContextProvider;\nexports.Element = Element;\nexports.ForwardRef = ForwardRef;\nexports.Fragment = Fragment;\nexports.Lazy = Lazy;\nexports.Memo = Memo;\nexports.Portal = Portal;\nexports.Profiler = Profiler;\nexports.StrictMode = StrictMode;\nexports.Suspense = Suspense;\nexports.isAsyncMode = isAsyncMode;\nexports.isConcurrentMode = isConcurrentMode;\nexports.isContextConsumer = isContextConsumer;\nexports.isContextProvider = isContextProvider;\nexports.isElement = isElement;\nexports.isForwardRef = isForwardRef;\nexports.isFragment = isFragment;\nexports.isLazy = isLazy;\nexports.isMemo = isMemo;\nexports.isPortal = isPortal;\nexports.isProfiler = isProfiler;\nexports.isStrictMode = isStrictMode;\nexports.isSuspense = isSuspense;\nexports.isValidElementType = isValidElementType;\nexports.typeOf = typeOf;\n  })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-is.production.min.js');\n} else {\n  module.exports = require('./cjs/react-is.development.js');\n}\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc');  // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","module.exports = Function.call.bind(Object.prototype.hasOwnProperty);\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar printWarning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n  var ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n  var loggedTypeFailures = {};\n  var has = require('./lib/has');\n\n  printWarning = function(text) {\n    var message = 'Warning: ' + text;\n    if (typeof console !== 'undefined') {\n      console.error(message);\n    }\n    try {\n      // --- Welcome to debugging React ---\n      // This error was thrown as a convenience so that you can use this stack\n      // to find the callsite that caused this warning to fire.\n      throw new Error(message);\n    } catch (x) { /**/ }\n  };\n}\n\n/**\n * Assert that the values match with the type specs.\n * Error messages are memorized and will only be shown once.\n *\n * @param {object} typeSpecs Map of name to a ReactPropType\n * @param {object} values Runtime values that need to be type-checked\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @param {string} componentName Name of the component for error messages.\n * @param {?Function} getStack Returns the component stack.\n * @private\n */\nfunction checkPropTypes(typeSpecs, values, location, componentName, getStack) {\n  if (process.env.NODE_ENV !== 'production') {\n    for (var typeSpecName in typeSpecs) {\n      if (has(typeSpecs, typeSpecName)) {\n        var error;\n        // Prop type validation may throw. In case they do, we don't want to\n        // fail the render phase where it didn't fail before. So we log it.\n        // After these have been cleaned up, we'll let them throw.\n        try {\n          // This is intentionally an invariant that gets caught. It's the same\n          // behavior as without this statement except with a better message.\n          if (typeof typeSpecs[typeSpecName] !== 'function') {\n            var err = Error(\n              (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +\n              'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' +\n              'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'\n            );\n            err.name = 'Invariant Violation';\n            throw err;\n          }\n          error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\n        } catch (ex) {\n          error = ex;\n        }\n        if (error && !(error instanceof Error)) {\n          printWarning(\n            (componentName || 'React class') + ': type specification of ' +\n            location + ' `' + typeSpecName + '` is invalid; the type checker ' +\n            'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +\n            'You may have forgotten to pass an argument to the type checker ' +\n            'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +\n            'shape all require an argument).'\n          );\n        }\n        if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n          // Only monitor this failure once because there tends to be a lot of the\n          // same error.\n          loggedTypeFailures[error.message] = true;\n\n          var stack = getStack ? getStack() : '';\n\n          printWarning(\n            'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')\n          );\n        }\n      }\n    }\n  }\n}\n\n/**\n * Resets warning cache when testing.\n *\n * @private\n */\ncheckPropTypes.resetWarningCache = function() {\n  if (process.env.NODE_ENV !== 'production') {\n    loggedTypeFailures = {};\n  }\n}\n\nmodule.exports = checkPropTypes;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactIs = require('react-is');\nvar assign = require('object-assign');\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\nvar has = require('./lib/has');\nvar checkPropTypes = require('./checkPropTypes');\n\nvar printWarning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n  printWarning = function(text) {\n    var message = 'Warning: ' + text;\n    if (typeof console !== 'undefined') {\n      console.error(message);\n    }\n    try {\n      // --- Welcome to debugging React ---\n      // This error was thrown as a convenience so that you can use this stack\n      // to find the callsite that caused this warning to fire.\n      throw new Error(message);\n    } catch (x) {}\n  };\n}\n\nfunction emptyFunctionThatReturnsNull() {\n  return null;\n}\n\nmodule.exports = function(isValidElement, throwOnDirectAccess) {\n  /* global Symbol */\n  var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\n  var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n  /**\n   * Returns the iterator method function contained on the iterable object.\n   *\n   * Be sure to invoke the function with the iterable as context:\n   *\n   *     var iteratorFn = getIteratorFn(myIterable);\n   *     if (iteratorFn) {\n   *       var iterator = iteratorFn.call(myIterable);\n   *       ...\n   *     }\n   *\n   * @param {?object} maybeIterable\n   * @return {?function}\n   */\n  function getIteratorFn(maybeIterable) {\n    var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n    if (typeof iteratorFn === 'function') {\n      return iteratorFn;\n    }\n  }\n\n  /**\n   * Collection of methods that allow declaration and validation of props that are\n   * supplied to React components. Example usage:\n   *\n   *   var Props = require('ReactPropTypes');\n   *   var MyArticle = React.createClass({\n   *     propTypes: {\n   *       // An optional string prop named \"description\".\n   *       description: Props.string,\n   *\n   *       // A required enum prop named \"category\".\n   *       category: Props.oneOf(['News','Photos']).isRequired,\n   *\n   *       // A prop named \"dialog\" that requires an instance of Dialog.\n   *       dialog: Props.instanceOf(Dialog).isRequired\n   *     },\n   *     render: function() { ... }\n   *   });\n   *\n   * A more formal specification of how these methods are used:\n   *\n   *   type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n   *   decl := ReactPropTypes.{type}(.isRequired)?\n   *\n   * Each and every declaration produces a function with the same signature. This\n   * allows the creation of custom validation functions. For example:\n   *\n   *  var MyLink = React.createClass({\n   *    propTypes: {\n   *      // An optional string or URI prop named \"href\".\n   *      href: function(props, propName, componentName) {\n   *        var propValue = props[propName];\n   *        if (propValue != null && typeof propValue !== 'string' &&\n   *            !(propValue instanceof URI)) {\n   *          return new Error(\n   *            'Expected a string or an URI for ' + propName + ' in ' +\n   *            componentName\n   *          );\n   *        }\n   *      }\n   *    },\n   *    render: function() {...}\n   *  });\n   *\n   * @internal\n   */\n\n  var ANONYMOUS = '<<anonymous>>';\n\n  // Important!\n  // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.\n  var ReactPropTypes = {\n    array: createPrimitiveTypeChecker('array'),\n    bigint: createPrimitiveTypeChecker('bigint'),\n    bool: createPrimitiveTypeChecker('boolean'),\n    func: createPrimitiveTypeChecker('function'),\n    number: createPrimitiveTypeChecker('number'),\n    object: createPrimitiveTypeChecker('object'),\n    string: createPrimitiveTypeChecker('string'),\n    symbol: createPrimitiveTypeChecker('symbol'),\n\n    any: createAnyTypeChecker(),\n    arrayOf: createArrayOfTypeChecker,\n    element: createElementTypeChecker(),\n    elementType: createElementTypeTypeChecker(),\n    instanceOf: createInstanceTypeChecker,\n    node: createNodeChecker(),\n    objectOf: createObjectOfTypeChecker,\n    oneOf: createEnumTypeChecker,\n    oneOfType: createUnionTypeChecker,\n    shape: createShapeTypeChecker,\n    exact: createStrictShapeTypeChecker,\n  };\n\n  /**\n   * inlined Object.is polyfill to avoid requiring consumers ship their own\n   * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n   */\n  /*eslint-disable no-self-compare*/\n  function is(x, y) {\n    // SameValue algorithm\n    if (x === y) {\n      // Steps 1-5, 7-10\n      // Steps 6.b-6.e: +0 != -0\n      return x !== 0 || 1 / x === 1 / y;\n    } else {\n      // Step 6.a: NaN == NaN\n      return x !== x && y !== y;\n    }\n  }\n  /*eslint-enable no-self-compare*/\n\n  /**\n   * We use an Error-like object for backward compatibility as people may call\n   * PropTypes directly and inspect their output. However, we don't use real\n   * Errors anymore. We don't inspect their stack anyway, and creating them\n   * is prohibitively expensive if they are created too often, such as what\n   * happens in oneOfType() for any type before the one that matched.\n   */\n  function PropTypeError(message, data) {\n    this.message = message;\n    this.data = data && typeof data === 'object' ? data: {};\n    this.stack = '';\n  }\n  // Make `instanceof Error` still work for returned errors.\n  PropTypeError.prototype = Error.prototype;\n\n  function createChainableTypeChecker(validate) {\n    if (process.env.NODE_ENV !== 'production') {\n      var manualPropTypeCallCache = {};\n      var manualPropTypeWarningCount = 0;\n    }\n    function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\n      componentName = componentName || ANONYMOUS;\n      propFullName = propFullName || propName;\n\n      if (secret !== ReactPropTypesSecret) {\n        if (throwOnDirectAccess) {\n          // New behavior only for users of `prop-types` package\n          var err = new Error(\n            'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n            'Use `PropTypes.checkPropTypes()` to call them. ' +\n            'Read more at http://fb.me/use-check-prop-types'\n          );\n          err.name = 'Invariant Violation';\n          throw err;\n        } else if (process.env.NODE_ENV !== 'production' && typeof console !== 'undefined') {\n          // Old behavior for people using React.PropTypes\n          var cacheKey = componentName + ':' + propName;\n          if (\n            !manualPropTypeCallCache[cacheKey] &&\n            // Avoid spamming the console because they are often not actionable except for lib authors\n            manualPropTypeWarningCount < 3\n          ) {\n            printWarning(\n              'You are manually calling a React.PropTypes validation ' +\n              'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' +\n              'and will throw in the standalone `prop-types` package. ' +\n              'You may be seeing this warning due to a third-party PropTypes ' +\n              'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'\n            );\n            manualPropTypeCallCache[cacheKey] = true;\n            manualPropTypeWarningCount++;\n          }\n        }\n      }\n      if (props[propName] == null) {\n        if (isRequired) {\n          if (props[propName] === null) {\n            return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));\n          }\n          return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));\n        }\n        return null;\n      } else {\n        return validate(props, propName, componentName, location, propFullName);\n      }\n    }\n\n    var chainedCheckType = checkType.bind(null, false);\n    chainedCheckType.isRequired = checkType.bind(null, true);\n\n    return chainedCheckType;\n  }\n\n  function createPrimitiveTypeChecker(expectedType) {\n    function validate(props, propName, componentName, location, propFullName, secret) {\n      var propValue = props[propName];\n      var propType = getPropType(propValue);\n      if (propType !== expectedType) {\n        // `propValue` being instance of, say, date/regexp, pass the 'object'\n        // check, but we can offer a more precise error message here rather than\n        // 'of type `object`'.\n        var preciseType = getPreciseType(propValue);\n\n        return new PropTypeError(\n          'Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'),\n          {expectedType: expectedType}\n        );\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createAnyTypeChecker() {\n    return createChainableTypeChecker(emptyFunctionThatReturnsNull);\n  }\n\n  function createArrayOfTypeChecker(typeChecker) {\n    function validate(props, propName, componentName, location, propFullName) {\n      if (typeof typeChecker !== 'function') {\n        return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\n      }\n      var propValue = props[propName];\n      if (!Array.isArray(propValue)) {\n        var propType = getPropType(propValue);\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n      }\n      for (var i = 0; i < propValue.length; i++) {\n        var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);\n        if (error instanceof Error) {\n          return error;\n        }\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createElementTypeChecker() {\n    function validate(props, propName, componentName, location, propFullName) {\n      var propValue = props[propName];\n      if (!isValidElement(propValue)) {\n        var propType = getPropType(propValue);\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createElementTypeTypeChecker() {\n    function validate(props, propName, componentName, location, propFullName) {\n      var propValue = props[propName];\n      if (!ReactIs.isValidElementType(propValue)) {\n        var propType = getPropType(propValue);\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.'));\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createInstanceTypeChecker(expectedClass) {\n    function validate(props, propName, componentName, location, propFullName) {\n      if (!(props[propName] instanceof expectedClass)) {\n        var expectedClassName = expectedClass.name || ANONYMOUS;\n        var actualClassName = getClassName(props[propName]);\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createEnumTypeChecker(expectedValues) {\n    if (!Array.isArray(expectedValues)) {\n      if (process.env.NODE_ENV !== 'production') {\n        if (arguments.length > 1) {\n          printWarning(\n            'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' +\n            'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).'\n          );\n        } else {\n          printWarning('Invalid argument supplied to oneOf, expected an array.');\n        }\n      }\n      return emptyFunctionThatReturnsNull;\n    }\n\n    function validate(props, propName, componentName, location, propFullName) {\n      var propValue = props[propName];\n      for (var i = 0; i < expectedValues.length; i++) {\n        if (is(propValue, expectedValues[i])) {\n          return null;\n        }\n      }\n\n      var valuesString = JSON.stringify(expectedValues, function replacer(key, value) {\n        var type = getPreciseType(value);\n        if (type === 'symbol') {\n          return String(value);\n        }\n        return value;\n      });\n      return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createObjectOfTypeChecker(typeChecker) {\n    function validate(props, propName, componentName, location, propFullName) {\n      if (typeof typeChecker !== 'function') {\n        return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\n      }\n      var propValue = props[propName];\n      var propType = getPropType(propValue);\n      if (propType !== 'object') {\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n      }\n      for (var key in propValue) {\n        if (has(propValue, key)) {\n          var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n          if (error instanceof Error) {\n            return error;\n          }\n        }\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createUnionTypeChecker(arrayOfTypeCheckers) {\n    if (!Array.isArray(arrayOfTypeCheckers)) {\n      process.env.NODE_ENV !== 'production' ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : void 0;\n      return emptyFunctionThatReturnsNull;\n    }\n\n    for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n      var checker = arrayOfTypeCheckers[i];\n      if (typeof checker !== 'function') {\n        printWarning(\n          'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +\n          'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'\n        );\n        return emptyFunctionThatReturnsNull;\n      }\n    }\n\n    function validate(props, propName, componentName, location, propFullName) {\n      var expectedTypes = [];\n      for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n        var checker = arrayOfTypeCheckers[i];\n        var checkerResult = checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret);\n        if (checkerResult == null) {\n          return null;\n        }\n        if (checkerResult.data && has(checkerResult.data, 'expectedType')) {\n          expectedTypes.push(checkerResult.data.expectedType);\n        }\n      }\n      var expectedTypesMessage = (expectedTypes.length > 0) ? ', expected one of type [' + expectedTypes.join(', ') + ']': '';\n      return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`' + expectedTypesMessage + '.'));\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createNodeChecker() {\n    function validate(props, propName, componentName, location, propFullName) {\n      if (!isNode(props[propName])) {\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function invalidValidatorError(componentName, location, propFullName, key, type) {\n    return new PropTypeError(\n      (componentName || 'React class') + ': ' + location + ' type `' + propFullName + '.' + key + '` is invalid; ' +\n      'it must be a function, usually from the `prop-types` package, but received `' + type + '`.'\n    );\n  }\n\n  function createShapeTypeChecker(shapeTypes) {\n    function validate(props, propName, componentName, location, propFullName) {\n      var propValue = props[propName];\n      var propType = getPropType(propValue);\n      if (propType !== 'object') {\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n      }\n      for (var key in shapeTypes) {\n        var checker = shapeTypes[key];\n        if (typeof checker !== 'function') {\n          return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));\n        }\n        var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n        if (error) {\n          return error;\n        }\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createStrictShapeTypeChecker(shapeTypes) {\n    function validate(props, propName, componentName, location, propFullName) {\n      var propValue = props[propName];\n      var propType = getPropType(propValue);\n      if (propType !== 'object') {\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n      }\n      // We need to check all keys in case some are required but missing from props.\n      var allKeys = assign({}, props[propName], shapeTypes);\n      for (var key in allKeys) {\n        var checker = shapeTypes[key];\n        if (has(shapeTypes, key) && typeof checker !== 'function') {\n          return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));\n        }\n        if (!checker) {\n          return new PropTypeError(\n            'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +\n            '\\nBad object: ' + JSON.stringify(props[propName], null, '  ') +\n            '\\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, '  ')\n          );\n        }\n        var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n        if (error) {\n          return error;\n        }\n      }\n      return null;\n    }\n\n    return createChainableTypeChecker(validate);\n  }\n\n  function isNode(propValue) {\n    switch (typeof propValue) {\n      case 'number':\n      case 'string':\n      case 'undefined':\n        return true;\n      case 'boolean':\n        return !propValue;\n      case 'object':\n        if (Array.isArray(propValue)) {\n          return propValue.every(isNode);\n        }\n        if (propValue === null || isValidElement(propValue)) {\n          return true;\n        }\n\n        var iteratorFn = getIteratorFn(propValue);\n        if (iteratorFn) {\n          var iterator = iteratorFn.call(propValue);\n          var step;\n          if (iteratorFn !== propValue.entries) {\n            while (!(step = iterator.next()).done) {\n              if (!isNode(step.value)) {\n                return false;\n              }\n            }\n          } else {\n            // Iterator will provide entry [k,v] tuples rather than values.\n            while (!(step = iterator.next()).done) {\n              var entry = step.value;\n              if (entry) {\n                if (!isNode(entry[1])) {\n                  return false;\n                }\n              }\n            }\n          }\n        } else {\n          return false;\n        }\n\n        return true;\n      default:\n        return false;\n    }\n  }\n\n  function isSymbol(propType, propValue) {\n    // Native Symbol.\n    if (propType === 'symbol') {\n      return true;\n    }\n\n    // falsy value can't be a Symbol\n    if (!propValue) {\n      return false;\n    }\n\n    // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n    if (propValue['@@toStringTag'] === 'Symbol') {\n      return true;\n    }\n\n    // Fallback for non-spec compliant Symbols which are polyfilled.\n    if (typeof Symbol === 'function' && propValue instanceof Symbol) {\n      return true;\n    }\n\n    return false;\n  }\n\n  // Equivalent of `typeof` but with special handling for array and regexp.\n  function getPropType(propValue) {\n    var propType = typeof propValue;\n    if (Array.isArray(propValue)) {\n      return 'array';\n    }\n    if (propValue instanceof RegExp) {\n      // Old webkits (at least until Android 4.0) return 'function' rather than\n      // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n      // passes PropTypes.object.\n      return 'object';\n    }\n    if (isSymbol(propType, propValue)) {\n      return 'symbol';\n    }\n    return propType;\n  }\n\n  // This handles more types than `getPropType`. Only used for error messages.\n  // See `createPrimitiveTypeChecker`.\n  function getPreciseType(propValue) {\n    if (typeof propValue === 'undefined' || propValue === null) {\n      return '' + propValue;\n    }\n    var propType = getPropType(propValue);\n    if (propType === 'object') {\n      if (propValue instanceof Date) {\n        return 'date';\n      } else if (propValue instanceof RegExp) {\n        return 'regexp';\n      }\n    }\n    return propType;\n  }\n\n  // Returns a string that is postfixed to a warning about an invalid type.\n  // For example, \"undefined\" or \"of type array\"\n  function getPostfixForTypeWarning(value) {\n    var type = getPreciseType(value);\n    switch (type) {\n      case 'array':\n      case 'object':\n        return 'an ' + type;\n      case 'boolean':\n      case 'date':\n      case 'regexp':\n        return 'a ' + type;\n      default:\n        return type;\n    }\n  }\n\n  // Returns class name of the object, if any.\n  function getClassName(propValue) {\n    if (!propValue.constructor || !propValue.constructor.name) {\n      return ANONYMOUS;\n    }\n    return propValue.constructor.name;\n  }\n\n  ReactPropTypes.checkPropTypes = checkPropTypes;\n  ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache;\n  ReactPropTypes.PropTypes = ReactPropTypes;\n\n  return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n  function shim(props, propName, componentName, location, propFullName, secret) {\n    if (secret === ReactPropTypesSecret) {\n      // It is still safe when called from React.\n      return;\n    }\n    var err = new Error(\n      'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n      'Use PropTypes.checkPropTypes() to call them. ' +\n      'Read more at http://fb.me/use-check-prop-types'\n    );\n    err.name = 'Invariant Violation';\n    throw err;\n  };\n  shim.isRequired = shim;\n  function getShim() {\n    return shim;\n  };\n  // Important!\n  // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n  var ReactPropTypes = {\n    array: shim,\n    bigint: shim,\n    bool: shim,\n    func: shim,\n    number: shim,\n    object: shim,\n    string: shim,\n    symbol: shim,\n\n    any: shim,\n    arrayOf: getShim,\n    element: shim,\n    elementType: shim,\n    instanceOf: getShim,\n    node: shim,\n    objectOf: getShim,\n    oneOf: getShim,\n    oneOfType: getShim,\n    shape: getShim,\n    exact: getShim,\n\n    checkPropTypes: emptyFunctionWithReset,\n    resetWarningCache: emptyFunction\n  };\n\n  ReactPropTypes.PropTypes = ReactPropTypes;\n\n  return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n  var ReactIs = require('react-is');\n\n  // By explicitly using `prop-types` you are opting into new development behavior.\n  // http://fb.me/prop-types-in-prod\n  var throwOnDirectAccess = true;\n  module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n  // By explicitly using `prop-types` you are opting into new production behavior.\n  // http://fb.me/prop-types-in-prod\n  module.exports = require('./factoryWithThrowingShims')();\n}\n","export const COMMON_MIME_TYPES = new Map([\n    // https://github.com/guzzle/psr7/blob/2d9260799e713f1c475d3c5fdc3d6561ff7441b2/src/MimeType.php\n    ['1km', 'application/vnd.1000minds.decision-model+xml'],\n    ['3dml', 'text/vnd.in3d.3dml'],\n    ['3ds', 'image/x-3ds'],\n    ['3g2', 'video/3gpp2'],\n    ['3gp', 'video/3gp'],\n    ['3gpp', 'video/3gpp'],\n    ['3mf', 'model/3mf'],\n    ['7z', 'application/x-7z-compressed'],\n    ['7zip', 'application/x-7z-compressed'],\n    ['123', 'application/vnd.lotus-1-2-3'],\n    ['aab', 'application/x-authorware-bin'],\n    ['aac', 'audio/x-acc'],\n    ['aam', 'application/x-authorware-map'],\n    ['aas', 'application/x-authorware-seg'],\n    ['abw', 'application/x-abiword'],\n    ['ac', 'application/vnd.nokia.n-gage.ac+xml'],\n    ['ac3', 'audio/ac3'],\n    ['acc', 'application/vnd.americandynamics.acc'],\n    ['ace', 'application/x-ace-compressed'],\n    ['acu', 'application/vnd.acucobol'],\n    ['acutc', 'application/vnd.acucorp'],\n    ['adp', 'audio/adpcm'],\n    ['aep', 'application/vnd.audiograph'],\n    ['afm', 'application/x-font-type1'],\n    ['afp', 'application/vnd.ibm.modcap'],\n    ['ahead', 'application/vnd.ahead.space'],\n    ['ai', 'application/pdf'],\n    ['aif', 'audio/x-aiff'],\n    ['aifc', 'audio/x-aiff'],\n    ['aiff', 'audio/x-aiff'],\n    ['air', 'application/vnd.adobe.air-application-installer-package+zip'],\n    ['ait', 'application/vnd.dvb.ait'],\n    ['ami', 'application/vnd.amiga.ami'],\n    ['amr', 'audio/amr'],\n    ['apk', 'application/vnd.android.package-archive'],\n    ['apng', 'image/apng'],\n    ['appcache', 'text/cache-manifest'],\n    ['application', 'application/x-ms-application'],\n    ['apr', 'application/vnd.lotus-approach'],\n    ['arc', 'application/x-freearc'],\n    ['arj', 'application/x-arj'],\n    ['asc', 'application/pgp-signature'],\n    ['asf', 'video/x-ms-asf'],\n    ['asm', 'text/x-asm'],\n    ['aso', 'application/vnd.accpac.simply.aso'],\n    ['asx', 'video/x-ms-asf'],\n    ['atc', 'application/vnd.acucorp'],\n    ['atom', 'application/atom+xml'],\n    ['atomcat', 'application/atomcat+xml'],\n    ['atomdeleted', 'application/atomdeleted+xml'],\n    ['atomsvc', 'application/atomsvc+xml'],\n    ['atx', 'application/vnd.antix.game-component'],\n    ['au', 'audio/x-au'],\n    ['avi', 'video/x-msvideo'],\n    ['avif', 'image/avif'],\n    ['aw', 'application/applixware'],\n    ['azf', 'application/vnd.airzip.filesecure.azf'],\n    ['azs', 'application/vnd.airzip.filesecure.azs'],\n    ['azv', 'image/vnd.airzip.accelerator.azv'],\n    ['azw', 'application/vnd.amazon.ebook'],\n    ['b16', 'image/vnd.pco.b16'],\n    ['bat', 'application/x-msdownload'],\n    ['bcpio', 'application/x-bcpio'],\n    ['bdf', 'application/x-font-bdf'],\n    ['bdm', 'application/vnd.syncml.dm+wbxml'],\n    ['bdoc', 'application/x-bdoc'],\n    ['bed', 'application/vnd.realvnc.bed'],\n    ['bh2', 'application/vnd.fujitsu.oasysprs'],\n    ['bin', 'application/octet-stream'],\n    ['blb', 'application/x-blorb'],\n    ['blorb', 'application/x-blorb'],\n    ['bmi', 'application/vnd.bmi'],\n    ['bmml', 'application/vnd.balsamiq.bmml+xml'],\n    ['bmp', 'image/bmp'],\n    ['book', 'application/vnd.framemaker'],\n    ['box', 'application/vnd.previewsystems.box'],\n    ['boz', 'application/x-bzip2'],\n    ['bpk', 'application/octet-stream'],\n    ['bpmn', 'application/octet-stream'],\n    ['bsp', 'model/vnd.valve.source.compiled-map'],\n    ['btif', 'image/prs.btif'],\n    ['buffer', 'application/octet-stream'],\n    ['bz', 'application/x-bzip'],\n    ['bz2', 'application/x-bzip2'],\n    ['c', 'text/x-c'],\n    ['c4d', 'application/vnd.clonk.c4group'],\n    ['c4f', 'application/vnd.clonk.c4group'],\n    ['c4g', 'application/vnd.clonk.c4group'],\n    ['c4p', 'application/vnd.clonk.c4group'],\n    ['c4u', 'application/vnd.clonk.c4group'],\n    ['c11amc', 'application/vnd.cluetrust.cartomobile-config'],\n    ['c11amz', 'application/vnd.cluetrust.cartomobile-config-pkg'],\n    ['cab', 'application/vnd.ms-cab-compressed'],\n    ['caf', 'audio/x-caf'],\n    ['cap', 'application/vnd.tcpdump.pcap'],\n    ['car', 'application/vnd.curl.car'],\n    ['cat', 'application/vnd.ms-pki.seccat'],\n    ['cb7', 'application/x-cbr'],\n    ['cba', 'application/x-cbr'],\n    ['cbr', 'application/x-cbr'],\n    ['cbt', 'application/x-cbr'],\n    ['cbz', 'application/x-cbr'],\n    ['cc', 'text/x-c'],\n    ['cco', 'application/x-cocoa'],\n    ['cct', 'application/x-director'],\n    ['ccxml', 'application/ccxml+xml'],\n    ['cdbcmsg', 'application/vnd.contact.cmsg'],\n    ['cda', 'application/x-cdf'],\n    ['cdf', 'application/x-netcdf'],\n    ['cdfx', 'application/cdfx+xml'],\n    ['cdkey', 'application/vnd.mediastation.cdkey'],\n    ['cdmia', 'application/cdmi-capability'],\n    ['cdmic', 'application/cdmi-container'],\n    ['cdmid', 'application/cdmi-domain'],\n    ['cdmio', 'application/cdmi-object'],\n    ['cdmiq', 'application/cdmi-queue'],\n    ['cdr', 'application/cdr'],\n    ['cdx', 'chemical/x-cdx'],\n    ['cdxml', 'application/vnd.chemdraw+xml'],\n    ['cdy', 'application/vnd.cinderella'],\n    ['cer', 'application/pkix-cert'],\n    ['cfs', 'application/x-cfs-compressed'],\n    ['cgm', 'image/cgm'],\n    ['chat', 'application/x-chat'],\n    ['chm', 'application/vnd.ms-htmlhelp'],\n    ['chrt', 'application/vnd.kde.kchart'],\n    ['cif', 'chemical/x-cif'],\n    ['cii', 'application/vnd.anser-web-certificate-issue-initiation'],\n    ['cil', 'application/vnd.ms-artgalry'],\n    ['cjs', 'application/node'],\n    ['cla', 'application/vnd.claymore'],\n    ['class', 'application/octet-stream'],\n    ['clkk', 'application/vnd.crick.clicker.keyboard'],\n    ['clkp', 'application/vnd.crick.clicker.palette'],\n    ['clkt', 'application/vnd.crick.clicker.template'],\n    ['clkw', 'application/vnd.crick.clicker.wordbank'],\n    ['clkx', 'application/vnd.crick.clicker'],\n    ['clp', 'application/x-msclip'],\n    ['cmc', 'application/vnd.cosmocaller'],\n    ['cmdf', 'chemical/x-cmdf'],\n    ['cml', 'chemical/x-cml'],\n    ['cmp', 'application/vnd.yellowriver-custom-menu'],\n    ['cmx', 'image/x-cmx'],\n    ['cod', 'application/vnd.rim.cod'],\n    ['coffee', 'text/coffeescript'],\n    ['com', 'application/x-msdownload'],\n    ['conf', 'text/plain'],\n    ['cpio', 'application/x-cpio'],\n    ['cpp', 'text/x-c'],\n    ['cpt', 'application/mac-compactpro'],\n    ['crd', 'application/x-mscardfile'],\n    ['crl', 'application/pkix-crl'],\n    ['crt', 'application/x-x509-ca-cert'],\n    ['crx', 'application/x-chrome-extension'],\n    ['cryptonote', 'application/vnd.rig.cryptonote'],\n    ['csh', 'application/x-csh'],\n    ['csl', 'application/vnd.citationstyles.style+xml'],\n    ['csml', 'chemical/x-csml'],\n    ['csp', 'application/vnd.commonspace'],\n    ['csr', 'application/octet-stream'],\n    ['css', 'text/css'],\n    ['cst', 'application/x-director'],\n    ['csv', 'text/csv'],\n    ['cu', 'application/cu-seeme'],\n    ['curl', 'text/vnd.curl'],\n    ['cww', 'application/prs.cww'],\n    ['cxt', 'application/x-director'],\n    ['cxx', 'text/x-c'],\n    ['dae', 'model/vnd.collada+xml'],\n    ['daf', 'application/vnd.mobius.daf'],\n    ['dart', 'application/vnd.dart'],\n    ['dataless', 'application/vnd.fdsn.seed'],\n    ['davmount', 'application/davmount+xml'],\n    ['dbf', 'application/vnd.dbf'],\n    ['dbk', 'application/docbook+xml'],\n    ['dcr', 'application/x-director'],\n    ['dcurl', 'text/vnd.curl.dcurl'],\n    ['dd2', 'application/vnd.oma.dd2+xml'],\n    ['ddd', 'application/vnd.fujixerox.ddd'],\n    ['ddf', 'application/vnd.syncml.dmddf+xml'],\n    ['dds', 'image/vnd.ms-dds'],\n    ['deb', 'application/x-debian-package'],\n    ['def', 'text/plain'],\n    ['deploy', 'application/octet-stream'],\n    ['der', 'application/x-x509-ca-cert'],\n    ['dfac', 'application/vnd.dreamfactory'],\n    ['dgc', 'application/x-dgc-compressed'],\n    ['dic', 'text/x-c'],\n    ['dir', 'application/x-director'],\n    ['dis', 'application/vnd.mobius.dis'],\n    ['disposition-notification', 'message/disposition-notification'],\n    ['dist', 'application/octet-stream'],\n    ['distz', 'application/octet-stream'],\n    ['djv', 'image/vnd.djvu'],\n    ['djvu', 'image/vnd.djvu'],\n    ['dll', 'application/octet-stream'],\n    ['dmg', 'application/x-apple-diskimage'],\n    ['dmn', 'application/octet-stream'],\n    ['dmp', 'application/vnd.tcpdump.pcap'],\n    ['dms', 'application/octet-stream'],\n    ['dna', 'application/vnd.dna'],\n    ['doc', 'application/msword'],\n    ['docm', 'application/vnd.ms-word.template.macroEnabled.12'],\n    ['docx', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'],\n    ['dot', 'application/msword'],\n    ['dotm', 'application/vnd.ms-word.template.macroEnabled.12'],\n    ['dotx', 'application/vnd.openxmlformats-officedocument.wordprocessingml.template'],\n    ['dp', 'application/vnd.osgi.dp'],\n    ['dpg', 'application/vnd.dpgraph'],\n    ['dra', 'audio/vnd.dra'],\n    ['drle', 'image/dicom-rle'],\n    ['dsc', 'text/prs.lines.tag'],\n    ['dssc', 'application/dssc+der'],\n    ['dtb', 'application/x-dtbook+xml'],\n    ['dtd', 'application/xml-dtd'],\n    ['dts', 'audio/vnd.dts'],\n    ['dtshd', 'audio/vnd.dts.hd'],\n    ['dump', 'application/octet-stream'],\n    ['dvb', 'video/vnd.dvb.file'],\n    ['dvi', 'application/x-dvi'],\n    ['dwd', 'application/atsc-dwd+xml'],\n    ['dwf', 'model/vnd.dwf'],\n    ['dwg', 'image/vnd.dwg'],\n    ['dxf', 'image/vnd.dxf'],\n    ['dxp', 'application/vnd.spotfire.dxp'],\n    ['dxr', 'application/x-director'],\n    ['ear', 'application/java-archive'],\n    ['ecelp4800', 'audio/vnd.nuera.ecelp4800'],\n    ['ecelp7470', 'audio/vnd.nuera.ecelp7470'],\n    ['ecelp9600', 'audio/vnd.nuera.ecelp9600'],\n    ['ecma', 'application/ecmascript'],\n    ['edm', 'application/vnd.novadigm.edm'],\n    ['edx', 'application/vnd.novadigm.edx'],\n    ['efif', 'application/vnd.picsel'],\n    ['ei6', 'application/vnd.pg.osasli'],\n    ['elc', 'application/octet-stream'],\n    ['emf', 'image/emf'],\n    ['eml', 'message/rfc822'],\n    ['emma', 'application/emma+xml'],\n    ['emotionml', 'application/emotionml+xml'],\n    ['emz', 'application/x-msmetafile'],\n    ['eol', 'audio/vnd.digital-winds'],\n    ['eot', 'application/vnd.ms-fontobject'],\n    ['eps', 'application/postscript'],\n    ['epub', 'application/epub+zip'],\n    ['es', 'application/ecmascript'],\n    ['es3', 'application/vnd.eszigno3+xml'],\n    ['esa', 'application/vnd.osgi.subsystem'],\n    ['esf', 'application/vnd.epson.esf'],\n    ['et3', 'application/vnd.eszigno3+xml'],\n    ['etx', 'text/x-setext'],\n    ['eva', 'application/x-eva'],\n    ['evy', 'application/x-envoy'],\n    ['exe', 'application/octet-stream'],\n    ['exi', 'application/exi'],\n    ['exp', 'application/express'],\n    ['exr', 'image/aces'],\n    ['ext', 'application/vnd.novadigm.ext'],\n    ['ez', 'application/andrew-inset'],\n    ['ez2', 'application/vnd.ezpix-album'],\n    ['ez3', 'application/vnd.ezpix-package'],\n    ['f', 'text/x-fortran'],\n    ['f4v', 'video/mp4'],\n    ['f77', 'text/x-fortran'],\n    ['f90', 'text/x-fortran'],\n    ['fbs', 'image/vnd.fastbidsheet'],\n    ['fcdt', 'application/vnd.adobe.formscentral.fcdt'],\n    ['fcs', 'application/vnd.isac.fcs'],\n    ['fdf', 'application/vnd.fdf'],\n    ['fdt', 'application/fdt+xml'],\n    ['fe_launch', 'application/vnd.denovo.fcselayout-link'],\n    ['fg5', 'application/vnd.fujitsu.oasysgp'],\n    ['fgd', 'application/x-director'],\n    ['fh', 'image/x-freehand'],\n    ['fh4', 'image/x-freehand'],\n    ['fh5', 'image/x-freehand'],\n    ['fh7', 'image/x-freehand'],\n    ['fhc', 'image/x-freehand'],\n    ['fig', 'application/x-xfig'],\n    ['fits', 'image/fits'],\n    ['flac', 'audio/x-flac'],\n    ['fli', 'video/x-fli'],\n    ['flo', 'application/vnd.micrografx.flo'],\n    ['flv', 'video/x-flv'],\n    ['flw', 'application/vnd.kde.kivio'],\n    ['flx', 'text/vnd.fmi.flexstor'],\n    ['fly', 'text/vnd.fly'],\n    ['fm', 'application/vnd.framemaker'],\n    ['fnc', 'application/vnd.frogans.fnc'],\n    ['fo', 'application/vnd.software602.filler.form+xml'],\n    ['for', 'text/x-fortran'],\n    ['fpx', 'image/vnd.fpx'],\n    ['frame', 'application/vnd.framemaker'],\n    ['fsc', 'application/vnd.fsc.weblaunch'],\n    ['fst', 'image/vnd.fst'],\n    ['ftc', 'application/vnd.fluxtime.clip'],\n    ['fti', 'application/vnd.anser-web-funds-transfer-initiation'],\n    ['fvt', 'video/vnd.fvt'],\n    ['fxp', 'application/vnd.adobe.fxp'],\n    ['fxpl', 'application/vnd.adobe.fxp'],\n    ['fzs', 'application/vnd.fuzzysheet'],\n    ['g2w', 'application/vnd.geoplan'],\n    ['g3', 'image/g3fax'],\n    ['g3w', 'application/vnd.geospace'],\n    ['gac', 'application/vnd.groove-account'],\n    ['gam', 'application/x-tads'],\n    ['gbr', 'application/rpki-ghostbusters'],\n    ['gca', 'application/x-gca-compressed'],\n    ['gdl', 'model/vnd.gdl'],\n    ['gdoc', 'application/vnd.google-apps.document'],\n    ['geo', 'application/vnd.dynageo'],\n    ['geojson', 'application/geo+json'],\n    ['gex', 'application/vnd.geometry-explorer'],\n    ['ggb', 'application/vnd.geogebra.file'],\n    ['ggt', 'application/vnd.geogebra.tool'],\n    ['ghf', 'application/vnd.groove-help'],\n    ['gif', 'image/gif'],\n    ['gim', 'application/vnd.groove-identity-message'],\n    ['glb', 'model/gltf-binary'],\n    ['gltf', 'model/gltf+json'],\n    ['gml', 'application/gml+xml'],\n    ['gmx', 'application/vnd.gmx'],\n    ['gnumeric', 'application/x-gnumeric'],\n    ['gpg', 'application/gpg-keys'],\n    ['gph', 'application/vnd.flographit'],\n    ['gpx', 'application/gpx+xml'],\n    ['gqf', 'application/vnd.grafeq'],\n    ['gqs', 'application/vnd.grafeq'],\n    ['gram', 'application/srgs'],\n    ['gramps', 'application/x-gramps-xml'],\n    ['gre', 'application/vnd.geometry-explorer'],\n    ['grv', 'application/vnd.groove-injector'],\n    ['grxml', 'application/srgs+xml'],\n    ['gsf', 'application/x-font-ghostscript'],\n    ['gsheet', 'application/vnd.google-apps.spreadsheet'],\n    ['gslides', 'application/vnd.google-apps.presentation'],\n    ['gtar', 'application/x-gtar'],\n    ['gtm', 'application/vnd.groove-tool-message'],\n    ['gtw', 'model/vnd.gtw'],\n    ['gv', 'text/vnd.graphviz'],\n    ['gxf', 'application/gxf'],\n    ['gxt', 'application/vnd.geonext'],\n    ['gz', 'application/gzip'],\n    ['gzip', 'application/gzip'],\n    ['h', 'text/x-c'],\n    ['h261', 'video/h261'],\n    ['h263', 'video/h263'],\n    ['h264', 'video/h264'],\n    ['hal', 'application/vnd.hal+xml'],\n    ['hbci', 'application/vnd.hbci'],\n    ['hbs', 'text/x-handlebars-template'],\n    ['hdd', 'application/x-virtualbox-hdd'],\n    ['hdf', 'application/x-hdf'],\n    ['heic', 'image/heic'],\n    ['heics', 'image/heic-sequence'],\n    ['heif', 'image/heif'],\n    ['heifs', 'image/heif-sequence'],\n    ['hej2', 'image/hej2k'],\n    ['held', 'application/atsc-held+xml'],\n    ['hh', 'text/x-c'],\n    ['hjson', 'application/hjson'],\n    ['hlp', 'application/winhlp'],\n    ['hpgl', 'application/vnd.hp-hpgl'],\n    ['hpid', 'application/vnd.hp-hpid'],\n    ['hps', 'application/vnd.hp-hps'],\n    ['hqx', 'application/mac-binhex40'],\n    ['hsj2', 'image/hsj2'],\n    ['htc', 'text/x-component'],\n    ['htke', 'application/vnd.kenameaapp'],\n    ['htm', 'text/html'],\n    ['html', 'text/html'],\n    ['hvd', 'application/vnd.yamaha.hv-dic'],\n    ['hvp', 'application/vnd.yamaha.hv-voice'],\n    ['hvs', 'application/vnd.yamaha.hv-script'],\n    ['i2g', 'application/vnd.intergeo'],\n    ['icc', 'application/vnd.iccprofile'],\n    ['ice', 'x-conference/x-cooltalk'],\n    ['icm', 'application/vnd.iccprofile'],\n    ['ico', 'image/x-icon'],\n    ['ics', 'text/calendar'],\n    ['ief', 'image/ief'],\n    ['ifb', 'text/calendar'],\n    ['ifm', 'application/vnd.shana.informed.formdata'],\n    ['iges', 'model/iges'],\n    ['igl', 'application/vnd.igloader'],\n    ['igm', 'application/vnd.insors.igm'],\n    ['igs', 'model/iges'],\n    ['igx', 'application/vnd.micrografx.igx'],\n    ['iif', 'application/vnd.shana.informed.interchange'],\n    ['img', 'application/octet-stream'],\n    ['imp', 'application/vnd.accpac.simply.imp'],\n    ['ims', 'application/vnd.ms-ims'],\n    ['in', 'text/plain'],\n    ['ini', 'text/plain'],\n    ['ink', 'application/inkml+xml'],\n    ['inkml', 'application/inkml+xml'],\n    ['install', 'application/x-install-instructions'],\n    ['iota', 'application/vnd.astraea-software.iota'],\n    ['ipfix', 'application/ipfix'],\n    ['ipk', 'application/vnd.shana.informed.package'],\n    ['irm', 'application/vnd.ibm.rights-management'],\n    ['irp', 'application/vnd.irepository.package+xml'],\n    ['iso', 'application/x-iso9660-image'],\n    ['itp', 'application/vnd.shana.informed.formtemplate'],\n    ['its', 'application/its+xml'],\n    ['ivp', 'application/vnd.immervision-ivp'],\n    ['ivu', 'application/vnd.immervision-ivu'],\n    ['jad', 'text/vnd.sun.j2me.app-descriptor'],\n    ['jade', 'text/jade'],\n    ['jam', 'application/vnd.jam'],\n    ['jar', 'application/java-archive'],\n    ['jardiff', 'application/x-java-archive-diff'],\n    ['java', 'text/x-java-source'],\n    ['jhc', 'image/jphc'],\n    ['jisp', 'application/vnd.jisp'],\n    ['jls', 'image/jls'],\n    ['jlt', 'application/vnd.hp-jlyt'],\n    ['jng', 'image/x-jng'],\n    ['jnlp', 'application/x-java-jnlp-file'],\n    ['joda', 'application/vnd.joost.joda-archive'],\n    ['jp2', 'image/jp2'],\n    ['jpe', 'image/jpeg'],\n    ['jpeg', 'image/jpeg'],\n    ['jpf', 'image/jpx'],\n    ['jpg', 'image/jpeg'],\n    ['jpg2', 'image/jp2'],\n    ['jpgm', 'video/jpm'],\n    ['jpgv', 'video/jpeg'],\n    ['jph', 'image/jph'],\n    ['jpm', 'video/jpm'],\n    ['jpx', 'image/jpx'],\n    ['js', 'application/javascript'],\n    ['json', 'application/json'],\n    ['json5', 'application/json5'],\n    ['jsonld', 'application/ld+json'],\n    // https://jsonlines.org/\n    ['jsonl', 'application/jsonl'],\n    ['jsonml', 'application/jsonml+json'],\n    ['jsx', 'text/jsx'],\n    ['jxr', 'image/jxr'],\n    ['jxra', 'image/jxra'],\n    ['jxrs', 'image/jxrs'],\n    ['jxs', 'image/jxs'],\n    ['jxsc', 'image/jxsc'],\n    ['jxsi', 'image/jxsi'],\n    ['jxss', 'image/jxss'],\n    ['kar', 'audio/midi'],\n    ['karbon', 'application/vnd.kde.karbon'],\n    ['kdb', 'application/octet-stream'],\n    ['kdbx', 'application/x-keepass2'],\n    ['key', 'application/x-iwork-keynote-sffkey'],\n    ['kfo', 'application/vnd.kde.kformula'],\n    ['kia', 'application/vnd.kidspiration'],\n    ['kml', 'application/vnd.google-earth.kml+xml'],\n    ['kmz', 'application/vnd.google-earth.kmz'],\n    ['kne', 'application/vnd.kinar'],\n    ['knp', 'application/vnd.kinar'],\n    ['kon', 'application/vnd.kde.kontour'],\n    ['kpr', 'application/vnd.kde.kpresenter'],\n    ['kpt', 'application/vnd.kde.kpresenter'],\n    ['kpxx', 'application/vnd.ds-keypoint'],\n    ['ksp', 'application/vnd.kde.kspread'],\n    ['ktr', 'application/vnd.kahootz'],\n    ['ktx', 'image/ktx'],\n    ['ktx2', 'image/ktx2'],\n    ['ktz', 'application/vnd.kahootz'],\n    ['kwd', 'application/vnd.kde.kword'],\n    ['kwt', 'application/vnd.kde.kword'],\n    ['lasxml', 'application/vnd.las.las+xml'],\n    ['latex', 'application/x-latex'],\n    ['lbd', 'application/vnd.llamagraphics.life-balance.desktop'],\n    ['lbe', 'application/vnd.llamagraphics.life-balance.exchange+xml'],\n    ['les', 'application/vnd.hhe.lesson-player'],\n    ['less', 'text/less'],\n    ['lgr', 'application/lgr+xml'],\n    ['lha', 'application/octet-stream'],\n    ['link66', 'application/vnd.route66.link66+xml'],\n    ['list', 'text/plain'],\n    ['list3820', 'application/vnd.ibm.modcap'],\n    ['listafp', 'application/vnd.ibm.modcap'],\n    ['litcoffee', 'text/coffeescript'],\n    ['lnk', 'application/x-ms-shortcut'],\n    ['log', 'text/plain'],\n    ['lostxml', 'application/lost+xml'],\n    ['lrf', 'application/octet-stream'],\n    ['lrm', 'application/vnd.ms-lrm'],\n    ['ltf', 'application/vnd.frogans.ltf'],\n    ['lua', 'text/x-lua'],\n    ['luac', 'application/x-lua-bytecode'],\n    ['lvp', 'audio/vnd.lucent.voice'],\n    ['lwp', 'application/vnd.lotus-wordpro'],\n    ['lzh', 'application/octet-stream'],\n    ['m1v', 'video/mpeg'],\n    ['m2a', 'audio/mpeg'],\n    ['m2v', 'video/mpeg'],\n    ['m3a', 'audio/mpeg'],\n    ['m3u', 'text/plain'],\n    ['m3u8', 'application/vnd.apple.mpegurl'],\n    ['m4a', 'audio/x-m4a'],\n    ['m4p', 'application/mp4'],\n    ['m4s', 'video/iso.segment'],\n    ['m4u', 'application/vnd.mpegurl'],\n    ['m4v', 'video/x-m4v'],\n    ['m13', 'application/x-msmediaview'],\n    ['m14', 'application/x-msmediaview'],\n    ['m21', 'application/mp21'],\n    ['ma', 'application/mathematica'],\n    ['mads', 'application/mads+xml'],\n    ['maei', 'application/mmt-aei+xml'],\n    ['mag', 'application/vnd.ecowin.chart'],\n    ['maker', 'application/vnd.framemaker'],\n    ['man', 'text/troff'],\n    ['manifest', 'text/cache-manifest'],\n    ['map', 'application/json'],\n    ['mar', 'application/octet-stream'],\n    ['markdown', 'text/markdown'],\n    ['mathml', 'application/mathml+xml'],\n    ['mb', 'application/mathematica'],\n    ['mbk', 'application/vnd.mobius.mbk'],\n    ['mbox', 'application/mbox'],\n    ['mc1', 'application/vnd.medcalcdata'],\n    ['mcd', 'application/vnd.mcd'],\n    ['mcurl', 'text/vnd.curl.mcurl'],\n    ['md', 'text/markdown'],\n    ['mdb', 'application/x-msaccess'],\n    ['mdi', 'image/vnd.ms-modi'],\n    ['mdx', 'text/mdx'],\n    ['me', 'text/troff'],\n    ['mesh', 'model/mesh'],\n    ['meta4', 'application/metalink4+xml'],\n    ['metalink', 'application/metalink+xml'],\n    ['mets', 'application/mets+xml'],\n    ['mfm', 'application/vnd.mfmp'],\n    ['mft', 'application/rpki-manifest'],\n    ['mgp', 'application/vnd.osgeo.mapguide.package'],\n    ['mgz', 'application/vnd.proteus.magazine'],\n    ['mid', 'audio/midi'],\n    ['midi', 'audio/midi'],\n    ['mie', 'application/x-mie'],\n    ['mif', 'application/vnd.mif'],\n    ['mime', 'message/rfc822'],\n    ['mj2', 'video/mj2'],\n    ['mjp2', 'video/mj2'],\n    ['mjs', 'application/javascript'],\n    ['mk3d', 'video/x-matroska'],\n    ['mka', 'audio/x-matroska'],\n    ['mkd', 'text/x-markdown'],\n    ['mks', 'video/x-matroska'],\n    ['mkv', 'video/x-matroska'],\n    ['mlp', 'application/vnd.dolby.mlp'],\n    ['mmd', 'application/vnd.chipnuts.karaoke-mmd'],\n    ['mmf', 'application/vnd.smaf'],\n    ['mml', 'text/mathml'],\n    ['mmr', 'image/vnd.fujixerox.edmics-mmr'],\n    ['mng', 'video/x-mng'],\n    ['mny', 'application/x-msmoney'],\n    ['mobi', 'application/x-mobipocket-ebook'],\n    ['mods', 'application/mods+xml'],\n    ['mov', 'video/quicktime'],\n    ['movie', 'video/x-sgi-movie'],\n    ['mp2', 'audio/mpeg'],\n    ['mp2a', 'audio/mpeg'],\n    ['mp3', 'audio/mpeg'],\n    ['mp4', 'video/mp4'],\n    ['mp4a', 'audio/mp4'],\n    ['mp4s', 'application/mp4'],\n    ['mp4v', 'video/mp4'],\n    ['mp21', 'application/mp21'],\n    ['mpc', 'application/vnd.mophun.certificate'],\n    ['mpd', 'application/dash+xml'],\n    ['mpe', 'video/mpeg'],\n    ['mpeg', 'video/mpeg'],\n    ['mpg', 'video/mpeg'],\n    ['mpg4', 'video/mp4'],\n    ['mpga', 'audio/mpeg'],\n    ['mpkg', 'application/vnd.apple.installer+xml'],\n    ['mpm', 'application/vnd.blueice.multipass'],\n    ['mpn', 'application/vnd.mophun.application'],\n    ['mpp', 'application/vnd.ms-project'],\n    ['mpt', 'application/vnd.ms-project'],\n    ['mpy', 'application/vnd.ibm.minipay'],\n    ['mqy', 'application/vnd.mobius.mqy'],\n    ['mrc', 'application/marc'],\n    ['mrcx', 'application/marcxml+xml'],\n    ['ms', 'text/troff'],\n    ['mscml', 'application/mediaservercontrol+xml'],\n    ['mseed', 'application/vnd.fdsn.mseed'],\n    ['mseq', 'application/vnd.mseq'],\n    ['msf', 'application/vnd.epson.msf'],\n    ['msg', 'application/vnd.ms-outlook'],\n    ['msh', 'model/mesh'],\n    ['msi', 'application/x-msdownload'],\n    ['msl', 'application/vnd.mobius.msl'],\n    ['msm', 'application/octet-stream'],\n    ['msp', 'application/octet-stream'],\n    ['msty', 'application/vnd.muvee.style'],\n    ['mtl', 'model/mtl'],\n    ['mts', 'model/vnd.mts'],\n    ['mus', 'application/vnd.musician'],\n    ['musd', 'application/mmt-usd+xml'],\n    ['musicxml', 'application/vnd.recordare.musicxml+xml'],\n    ['mvb', 'application/x-msmediaview'],\n    ['mvt', 'application/vnd.mapbox-vector-tile'],\n    ['mwf', 'application/vnd.mfer'],\n    ['mxf', 'application/mxf'],\n    ['mxl', 'application/vnd.recordare.musicxml'],\n    ['mxmf', 'audio/mobile-xmf'],\n    ['mxml', 'application/xv+xml'],\n    ['mxs', 'application/vnd.triscape.mxs'],\n    ['mxu', 'video/vnd.mpegurl'],\n    ['n-gage', 'application/vnd.nokia.n-gage.symbian.install'],\n    ['n3', 'text/n3'],\n    ['nb', 'application/mathematica'],\n    ['nbp', 'application/vnd.wolfram.player'],\n    ['nc', 'application/x-netcdf'],\n    ['ncx', 'application/x-dtbncx+xml'],\n    ['nfo', 'text/x-nfo'],\n    ['ngdat', 'application/vnd.nokia.n-gage.data'],\n    ['nitf', 'application/vnd.nitf'],\n    ['nlu', 'application/vnd.neurolanguage.nlu'],\n    ['nml', 'application/vnd.enliven'],\n    ['nnd', 'application/vnd.noblenet-directory'],\n    ['nns', 'application/vnd.noblenet-sealer'],\n    ['nnw', 'application/vnd.noblenet-web'],\n    ['npx', 'image/vnd.net-fpx'],\n    ['nq', 'application/n-quads'],\n    ['nsc', 'application/x-conference'],\n    ['nsf', 'application/vnd.lotus-notes'],\n    ['nt', 'application/n-triples'],\n    ['ntf', 'application/vnd.nitf'],\n    ['numbers', 'application/x-iwork-numbers-sffnumbers'],\n    ['nzb', 'application/x-nzb'],\n    ['oa2', 'application/vnd.fujitsu.oasys2'],\n    ['oa3', 'application/vnd.fujitsu.oasys3'],\n    ['oas', 'application/vnd.fujitsu.oasys'],\n    ['obd', 'application/x-msbinder'],\n    ['obgx', 'application/vnd.openblox.game+xml'],\n    ['obj', 'model/obj'],\n    ['oda', 'application/oda'],\n    ['odb', 'application/vnd.oasis.opendocument.database'],\n    ['odc', 'application/vnd.oasis.opendocument.chart'],\n    ['odf', 'application/vnd.oasis.opendocument.formula'],\n    ['odft', 'application/vnd.oasis.opendocument.formula-template'],\n    ['odg', 'application/vnd.oasis.opendocument.graphics'],\n    ['odi', 'application/vnd.oasis.opendocument.image'],\n    ['odm', 'application/vnd.oasis.opendocument.text-master'],\n    ['odp', 'application/vnd.oasis.opendocument.presentation'],\n    ['ods', 'application/vnd.oasis.opendocument.spreadsheet'],\n    ['odt', 'application/vnd.oasis.opendocument.text'],\n    ['oga', 'audio/ogg'],\n    ['ogex', 'model/vnd.opengex'],\n    ['ogg', 'audio/ogg'],\n    ['ogv', 'video/ogg'],\n    ['ogx', 'application/ogg'],\n    ['omdoc', 'application/omdoc+xml'],\n    ['onepkg', 'application/onenote'],\n    ['onetmp', 'application/onenote'],\n    ['onetoc', 'application/onenote'],\n    ['onetoc2', 'application/onenote'],\n    ['opf', 'application/oebps-package+xml'],\n    ['opml', 'text/x-opml'],\n    ['oprc', 'application/vnd.palm'],\n    ['opus', 'audio/ogg'],\n    ['org', 'text/x-org'],\n    ['osf', 'application/vnd.yamaha.openscoreformat'],\n    ['osfpvg', 'application/vnd.yamaha.openscoreformat.osfpvg+xml'],\n    ['osm', 'application/vnd.openstreetmap.data+xml'],\n    ['otc', 'application/vnd.oasis.opendocument.chart-template'],\n    ['otf', 'font/otf'],\n    ['otg', 'application/vnd.oasis.opendocument.graphics-template'],\n    ['oth', 'application/vnd.oasis.opendocument.text-web'],\n    ['oti', 'application/vnd.oasis.opendocument.image-template'],\n    ['otp', 'application/vnd.oasis.opendocument.presentation-template'],\n    ['ots', 'application/vnd.oasis.opendocument.spreadsheet-template'],\n    ['ott', 'application/vnd.oasis.opendocument.text-template'],\n    ['ova', 'application/x-virtualbox-ova'],\n    ['ovf', 'application/x-virtualbox-ovf'],\n    ['owl', 'application/rdf+xml'],\n    ['oxps', 'application/oxps'],\n    ['oxt', 'application/vnd.openofficeorg.extension'],\n    ['p', 'text/x-pascal'],\n    ['p7a', 'application/x-pkcs7-signature'],\n    ['p7b', 'application/x-pkcs7-certificates'],\n    ['p7c', 'application/pkcs7-mime'],\n    ['p7m', 'application/pkcs7-mime'],\n    ['p7r', 'application/x-pkcs7-certreqresp'],\n    ['p7s', 'application/pkcs7-signature'],\n    ['p8', 'application/pkcs8'],\n    ['p10', 'application/x-pkcs10'],\n    ['p12', 'application/x-pkcs12'],\n    ['pac', 'application/x-ns-proxy-autoconfig'],\n    ['pages', 'application/x-iwork-pages-sffpages'],\n    ['pas', 'text/x-pascal'],\n    ['paw', 'application/vnd.pawaafile'],\n    ['pbd', 'application/vnd.powerbuilder6'],\n    ['pbm', 'image/x-portable-bitmap'],\n    ['pcap', 'application/vnd.tcpdump.pcap'],\n    ['pcf', 'application/x-font-pcf'],\n    ['pcl', 'application/vnd.hp-pcl'],\n    ['pclxl', 'application/vnd.hp-pclxl'],\n    ['pct', 'image/x-pict'],\n    ['pcurl', 'application/vnd.curl.pcurl'],\n    ['pcx', 'image/x-pcx'],\n    ['pdb', 'application/x-pilot'],\n    ['pde', 'text/x-processing'],\n    ['pdf', 'application/pdf'],\n    ['pem', 'application/x-x509-user-cert'],\n    ['pfa', 'application/x-font-type1'],\n    ['pfb', 'application/x-font-type1'],\n    ['pfm', 'application/x-font-type1'],\n    ['pfr', 'application/font-tdpfr'],\n    ['pfx', 'application/x-pkcs12'],\n    ['pgm', 'image/x-portable-graymap'],\n    ['pgn', 'application/x-chess-pgn'],\n    ['pgp', 'application/pgp'],\n    ['php', 'application/x-httpd-php'],\n    ['php3', 'application/x-httpd-php'],\n    ['php4', 'application/x-httpd-php'],\n    ['phps', 'application/x-httpd-php-source'],\n    ['phtml', 'application/x-httpd-php'],\n    ['pic', 'image/x-pict'],\n    ['pkg', 'application/octet-stream'],\n    ['pki', 'application/pkixcmp'],\n    ['pkipath', 'application/pkix-pkipath'],\n    ['pkpass', 'application/vnd.apple.pkpass'],\n    ['pl', 'application/x-perl'],\n    ['plb', 'application/vnd.3gpp.pic-bw-large'],\n    ['plc', 'application/vnd.mobius.plc'],\n    ['plf', 'application/vnd.pocketlearn'],\n    ['pls', 'application/pls+xml'],\n    ['pm', 'application/x-perl'],\n    ['pml', 'application/vnd.ctc-posml'],\n    ['png', 'image/png'],\n    ['pnm', 'image/x-portable-anymap'],\n    ['portpkg', 'application/vnd.macports.portpkg'],\n    ['pot', 'application/vnd.ms-powerpoint'],\n    ['potm', 'application/vnd.ms-powerpoint.presentation.macroEnabled.12'],\n    ['potx', 'application/vnd.openxmlformats-officedocument.presentationml.template'],\n    ['ppa', 'application/vnd.ms-powerpoint'],\n    ['ppam', 'application/vnd.ms-powerpoint.addin.macroEnabled.12'],\n    ['ppd', 'application/vnd.cups-ppd'],\n    ['ppm', 'image/x-portable-pixmap'],\n    ['pps', 'application/vnd.ms-powerpoint'],\n    ['ppsm', 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12'],\n    ['ppsx', 'application/vnd.openxmlformats-officedocument.presentationml.slideshow'],\n    ['ppt', 'application/powerpoint'],\n    ['pptm', 'application/vnd.ms-powerpoint.presentation.macroEnabled.12'],\n    ['pptx', 'application/vnd.openxmlformats-officedocument.presentationml.presentation'],\n    ['pqa', 'application/vnd.palm'],\n    ['prc', 'application/x-pilot'],\n    ['pre', 'application/vnd.lotus-freelance'],\n    ['prf', 'application/pics-rules'],\n    ['provx', 'application/provenance+xml'],\n    ['ps', 'application/postscript'],\n    ['psb', 'application/vnd.3gpp.pic-bw-small'],\n    ['psd', 'application/x-photoshop'],\n    ['psf', 'application/x-font-linux-psf'],\n    ['pskcxml', 'application/pskc+xml'],\n    ['pti', 'image/prs.pti'],\n    ['ptid', 'application/vnd.pvi.ptid1'],\n    ['pub', 'application/x-mspublisher'],\n    ['pvb', 'application/vnd.3gpp.pic-bw-var'],\n    ['pwn', 'application/vnd.3m.post-it-notes'],\n    ['pya', 'audio/vnd.ms-playready.media.pya'],\n    ['pyv', 'video/vnd.ms-playready.media.pyv'],\n    ['qam', 'application/vnd.epson.quickanime'],\n    ['qbo', 'application/vnd.intu.qbo'],\n    ['qfx', 'application/vnd.intu.qfx'],\n    ['qps', 'application/vnd.publishare-delta-tree'],\n    ['qt', 'video/quicktime'],\n    ['qwd', 'application/vnd.quark.quarkxpress'],\n    ['qwt', 'application/vnd.quark.quarkxpress'],\n    ['qxb', 'application/vnd.quark.quarkxpress'],\n    ['qxd', 'application/vnd.quark.quarkxpress'],\n    ['qxl', 'application/vnd.quark.quarkxpress'],\n    ['qxt', 'application/vnd.quark.quarkxpress'],\n    ['ra', 'audio/x-realaudio'],\n    ['ram', 'audio/x-pn-realaudio'],\n    ['raml', 'application/raml+yaml'],\n    ['rapd', 'application/route-apd+xml'],\n    ['rar', 'application/x-rar'],\n    ['ras', 'image/x-cmu-raster'],\n    ['rcprofile', 'application/vnd.ipunplugged.rcprofile'],\n    ['rdf', 'application/rdf+xml'],\n    ['rdz', 'application/vnd.data-vision.rdz'],\n    ['relo', 'application/p2p-overlay+xml'],\n    ['rep', 'application/vnd.businessobjects'],\n    ['res', 'application/x-dtbresource+xml'],\n    ['rgb', 'image/x-rgb'],\n    ['rif', 'application/reginfo+xml'],\n    ['rip', 'audio/vnd.rip'],\n    ['ris', 'application/x-research-info-systems'],\n    ['rl', 'application/resource-lists+xml'],\n    ['rlc', 'image/vnd.fujixerox.edmics-rlc'],\n    ['rld', 'application/resource-lists-diff+xml'],\n    ['rm', 'audio/x-pn-realaudio'],\n    ['rmi', 'audio/midi'],\n    ['rmp', 'audio/x-pn-realaudio-plugin'],\n    ['rms', 'application/vnd.jcp.javame.midlet-rms'],\n    ['rmvb', 'application/vnd.rn-realmedia-vbr'],\n    ['rnc', 'application/relax-ng-compact-syntax'],\n    ['rng', 'application/xml'],\n    ['roa', 'application/rpki-roa'],\n    ['roff', 'text/troff'],\n    ['rp9', 'application/vnd.cloanto.rp9'],\n    ['rpm', 'audio/x-pn-realaudio-plugin'],\n    ['rpss', 'application/vnd.nokia.radio-presets'],\n    ['rpst', 'application/vnd.nokia.radio-preset'],\n    ['rq', 'application/sparql-query'],\n    ['rs', 'application/rls-services+xml'],\n    ['rsa', 'application/x-pkcs7'],\n    ['rsat', 'application/atsc-rsat+xml'],\n    ['rsd', 'application/rsd+xml'],\n    ['rsheet', 'application/urc-ressheet+xml'],\n    ['rss', 'application/rss+xml'],\n    ['rtf', 'text/rtf'],\n    ['rtx', 'text/richtext'],\n    ['run', 'application/x-makeself'],\n    ['rusd', 'application/route-usd+xml'],\n    ['rv', 'video/vnd.rn-realvideo'],\n    ['s', 'text/x-asm'],\n    ['s3m', 'audio/s3m'],\n    ['saf', 'application/vnd.yamaha.smaf-audio'],\n    ['sass', 'text/x-sass'],\n    ['sbml', 'application/sbml+xml'],\n    ['sc', 'application/vnd.ibm.secure-container'],\n    ['scd', 'application/x-msschedule'],\n    ['scm', 'application/vnd.lotus-screencam'],\n    ['scq', 'application/scvp-cv-request'],\n    ['scs', 'application/scvp-cv-response'],\n    ['scss', 'text/x-scss'],\n    ['scurl', 'text/vnd.curl.scurl'],\n    ['sda', 'application/vnd.stardivision.draw'],\n    ['sdc', 'application/vnd.stardivision.calc'],\n    ['sdd', 'application/vnd.stardivision.impress'],\n    ['sdkd', 'application/vnd.solent.sdkm+xml'],\n    ['sdkm', 'application/vnd.solent.sdkm+xml'],\n    ['sdp', 'application/sdp'],\n    ['sdw', 'application/vnd.stardivision.writer'],\n    ['sea', 'application/octet-stream'],\n    ['see', 'application/vnd.seemail'],\n    ['seed', 'application/vnd.fdsn.seed'],\n    ['sema', 'application/vnd.sema'],\n    ['semd', 'application/vnd.semd'],\n    ['semf', 'application/vnd.semf'],\n    ['senmlx', 'application/senml+xml'],\n    ['sensmlx', 'application/sensml+xml'],\n    ['ser', 'application/java-serialized-object'],\n    ['setpay', 'application/set-payment-initiation'],\n    ['setreg', 'application/set-registration-initiation'],\n    ['sfd-hdstx', 'application/vnd.hydrostatix.sof-data'],\n    ['sfs', 'application/vnd.spotfire.sfs'],\n    ['sfv', 'text/x-sfv'],\n    ['sgi', 'image/sgi'],\n    ['sgl', 'application/vnd.stardivision.writer-global'],\n    ['sgm', 'text/sgml'],\n    ['sgml', 'text/sgml'],\n    ['sh', 'application/x-sh'],\n    ['shar', 'application/x-shar'],\n    ['shex', 'text/shex'],\n    ['shf', 'application/shf+xml'],\n    ['shtml', 'text/html'],\n    ['sid', 'image/x-mrsid-image'],\n    ['sieve', 'application/sieve'],\n    ['sig', 'application/pgp-signature'],\n    ['sil', 'audio/silk'],\n    ['silo', 'model/mesh'],\n    ['sis', 'application/vnd.symbian.install'],\n    ['sisx', 'application/vnd.symbian.install'],\n    ['sit', 'application/x-stuffit'],\n    ['sitx', 'application/x-stuffitx'],\n    ['siv', 'application/sieve'],\n    ['skd', 'application/vnd.koan'],\n    ['skm', 'application/vnd.koan'],\n    ['skp', 'application/vnd.koan'],\n    ['skt', 'application/vnd.koan'],\n    ['sldm', 'application/vnd.ms-powerpoint.slide.macroenabled.12'],\n    ['sldx', 'application/vnd.openxmlformats-officedocument.presentationml.slide'],\n    ['slim', 'text/slim'],\n    ['slm', 'text/slim'],\n    ['sls', 'application/route-s-tsid+xml'],\n    ['slt', 'application/vnd.epson.salt'],\n    ['sm', 'application/vnd.stepmania.stepchart'],\n    ['smf', 'application/vnd.stardivision.math'],\n    ['smi', 'application/smil'],\n    ['smil', 'application/smil'],\n    ['smv', 'video/x-smv'],\n    ['smzip', 'application/vnd.stepmania.package'],\n    ['snd', 'audio/basic'],\n    ['snf', 'application/x-font-snf'],\n    ['so', 'application/octet-stream'],\n    ['spc', 'application/x-pkcs7-certificates'],\n    ['spdx', 'text/spdx'],\n    ['spf', 'application/vnd.yamaha.smaf-phrase'],\n    ['spl', 'application/x-futuresplash'],\n    ['spot', 'text/vnd.in3d.spot'],\n    ['spp', 'application/scvp-vp-response'],\n    ['spq', 'application/scvp-vp-request'],\n    ['spx', 'audio/ogg'],\n    ['sql', 'application/x-sql'],\n    ['src', 'application/x-wais-source'],\n    ['srt', 'application/x-subrip'],\n    ['sru', 'application/sru+xml'],\n    ['srx', 'application/sparql-results+xml'],\n    ['ssdl', 'application/ssdl+xml'],\n    ['sse', 'application/vnd.kodak-descriptor'],\n    ['ssf', 'application/vnd.epson.ssf'],\n    ['ssml', 'application/ssml+xml'],\n    ['sst', 'application/octet-stream'],\n    ['st', 'application/vnd.sailingtracker.track'],\n    ['stc', 'application/vnd.sun.xml.calc.template'],\n    ['std', 'application/vnd.sun.xml.draw.template'],\n    ['stf', 'application/vnd.wt.stf'],\n    ['sti', 'application/vnd.sun.xml.impress.template'],\n    ['stk', 'application/hyperstudio'],\n    ['stl', 'model/stl'],\n    ['stpx', 'model/step+xml'],\n    ['stpxz', 'model/step-xml+zip'],\n    ['stpz', 'model/step+zip'],\n    ['str', 'application/vnd.pg.format'],\n    ['stw', 'application/vnd.sun.xml.writer.template'],\n    ['styl', 'text/stylus'],\n    ['stylus', 'text/stylus'],\n    ['sub', 'text/vnd.dvb.subtitle'],\n    ['sus', 'application/vnd.sus-calendar'],\n    ['susp', 'application/vnd.sus-calendar'],\n    ['sv4cpio', 'application/x-sv4cpio'],\n    ['sv4crc', 'application/x-sv4crc'],\n    ['svc', 'application/vnd.dvb.service'],\n    ['svd', 'application/vnd.svd'],\n    ['svg', 'image/svg+xml'],\n    ['svgz', 'image/svg+xml'],\n    ['swa', 'application/x-director'],\n    ['swf', 'application/x-shockwave-flash'],\n    ['swi', 'application/vnd.aristanetworks.swi'],\n    ['swidtag', 'application/swid+xml'],\n    ['sxc', 'application/vnd.sun.xml.calc'],\n    ['sxd', 'application/vnd.sun.xml.draw'],\n    ['sxg', 'application/vnd.sun.xml.writer.global'],\n    ['sxi', 'application/vnd.sun.xml.impress'],\n    ['sxm', 'application/vnd.sun.xml.math'],\n    ['sxw', 'application/vnd.sun.xml.writer'],\n    ['t', 'text/troff'],\n    ['t3', 'application/x-t3vm-image'],\n    ['t38', 'image/t38'],\n    ['taglet', 'application/vnd.mynfc'],\n    ['tao', 'application/vnd.tao.intent-module-archive'],\n    ['tap', 'image/vnd.tencent.tap'],\n    ['tar', 'application/x-tar'],\n    ['tcap', 'application/vnd.3gpp2.tcap'],\n    ['tcl', 'application/x-tcl'],\n    ['td', 'application/urc-targetdesc+xml'],\n    ['teacher', 'application/vnd.smart.teacher'],\n    ['tei', 'application/tei+xml'],\n    ['teicorpus', 'application/tei+xml'],\n    ['tex', 'application/x-tex'],\n    ['texi', 'application/x-texinfo'],\n    ['texinfo', 'application/x-texinfo'],\n    ['text', 'text/plain'],\n    ['tfi', 'application/thraud+xml'],\n    ['tfm', 'application/x-tex-tfm'],\n    ['tfx', 'image/tiff-fx'],\n    ['tga', 'image/x-tga'],\n    ['tgz', 'application/x-tar'],\n    ['thmx', 'application/vnd.ms-officetheme'],\n    ['tif', 'image/tiff'],\n    ['tiff', 'image/tiff'],\n    ['tk', 'application/x-tcl'],\n    ['tmo', 'application/vnd.tmobile-livetv'],\n    ['toml', 'application/toml'],\n    ['torrent', 'application/x-bittorrent'],\n    ['tpl', 'application/vnd.groove-tool-template'],\n    ['tpt', 'application/vnd.trid.tpt'],\n    ['tr', 'text/troff'],\n    ['tra', 'application/vnd.trueapp'],\n    ['trig', 'application/trig'],\n    ['trm', 'application/x-msterminal'],\n    ['ts', 'video/mp2t'],\n    ['tsd', 'application/timestamped-data'],\n    ['tsv', 'text/tab-separated-values'],\n    ['ttc', 'font/collection'],\n    ['ttf', 'font/ttf'],\n    ['ttl', 'text/turtle'],\n    ['ttml', 'application/ttml+xml'],\n    ['twd', 'application/vnd.simtech-mindmapper'],\n    ['twds', 'application/vnd.simtech-mindmapper'],\n    ['txd', 'application/vnd.genomatix.tuxedo'],\n    ['txf', 'application/vnd.mobius.txf'],\n    ['txt', 'text/plain'],\n    ['u8dsn', 'message/global-delivery-status'],\n    ['u8hdr', 'message/global-headers'],\n    ['u8mdn', 'message/global-disposition-notification'],\n    ['u8msg', 'message/global'],\n    ['u32', 'application/x-authorware-bin'],\n    ['ubj', 'application/ubjson'],\n    ['udeb', 'application/x-debian-package'],\n    ['ufd', 'application/vnd.ufdl'],\n    ['ufdl', 'application/vnd.ufdl'],\n    ['ulx', 'application/x-glulx'],\n    ['umj', 'application/vnd.umajin'],\n    ['unityweb', 'application/vnd.unity'],\n    ['uoml', 'application/vnd.uoml+xml'],\n    ['uri', 'text/uri-list'],\n    ['uris', 'text/uri-list'],\n    ['urls', 'text/uri-list'],\n    ['usdz', 'model/vnd.usdz+zip'],\n    ['ustar', 'application/x-ustar'],\n    ['utz', 'application/vnd.uiq.theme'],\n    ['uu', 'text/x-uuencode'],\n    ['uva', 'audio/vnd.dece.audio'],\n    ['uvd', 'application/vnd.dece.data'],\n    ['uvf', 'application/vnd.dece.data'],\n    ['uvg', 'image/vnd.dece.graphic'],\n    ['uvh', 'video/vnd.dece.hd'],\n    ['uvi', 'image/vnd.dece.graphic'],\n    ['uvm', 'video/vnd.dece.mobile'],\n    ['uvp', 'video/vnd.dece.pd'],\n    ['uvs', 'video/vnd.dece.sd'],\n    ['uvt', 'application/vnd.dece.ttml+xml'],\n    ['uvu', 'video/vnd.uvvu.mp4'],\n    ['uvv', 'video/vnd.dece.video'],\n    ['uvva', 'audio/vnd.dece.audio'],\n    ['uvvd', 'application/vnd.dece.data'],\n    ['uvvf', 'application/vnd.dece.data'],\n    ['uvvg', 'image/vnd.dece.graphic'],\n    ['uvvh', 'video/vnd.dece.hd'],\n    ['uvvi', 'image/vnd.dece.graphic'],\n    ['uvvm', 'video/vnd.dece.mobile'],\n    ['uvvp', 'video/vnd.dece.pd'],\n    ['uvvs', 'video/vnd.dece.sd'],\n    ['uvvt', 'application/vnd.dece.ttml+xml'],\n    ['uvvu', 'video/vnd.uvvu.mp4'],\n    ['uvvv', 'video/vnd.dece.video'],\n    ['uvvx', 'application/vnd.dece.unspecified'],\n    ['uvvz', 'application/vnd.dece.zip'],\n    ['uvx', 'application/vnd.dece.unspecified'],\n    ['uvz', 'application/vnd.dece.zip'],\n    ['vbox', 'application/x-virtualbox-vbox'],\n    ['vbox-extpack', 'application/x-virtualbox-vbox-extpack'],\n    ['vcard', 'text/vcard'],\n    ['vcd', 'application/x-cdlink'],\n    ['vcf', 'text/x-vcard'],\n    ['vcg', 'application/vnd.groove-vcard'],\n    ['vcs', 'text/x-vcalendar'],\n    ['vcx', 'application/vnd.vcx'],\n    ['vdi', 'application/x-virtualbox-vdi'],\n    ['vds', 'model/vnd.sap.vds'],\n    ['vhd', 'application/x-virtualbox-vhd'],\n    ['vis', 'application/vnd.visionary'],\n    ['viv', 'video/vnd.vivo'],\n    ['vlc', 'application/videolan'],\n    ['vmdk', 'application/x-virtualbox-vmdk'],\n    ['vob', 'video/x-ms-vob'],\n    ['vor', 'application/vnd.stardivision.writer'],\n    ['vox', 'application/x-authorware-bin'],\n    ['vrml', 'model/vrml'],\n    ['vsd', 'application/vnd.visio'],\n    ['vsf', 'application/vnd.vsf'],\n    ['vss', 'application/vnd.visio'],\n    ['vst', 'application/vnd.visio'],\n    ['vsw', 'application/vnd.visio'],\n    ['vtf', 'image/vnd.valve.source.texture'],\n    ['vtt', 'text/vtt'],\n    ['vtu', 'model/vnd.vtu'],\n    ['vxml', 'application/voicexml+xml'],\n    ['w3d', 'application/x-director'],\n    ['wad', 'application/x-doom'],\n    ['wadl', 'application/vnd.sun.wadl+xml'],\n    ['war', 'application/java-archive'],\n    ['wasm', 'application/wasm'],\n    ['wav', 'audio/x-wav'],\n    ['wax', 'audio/x-ms-wax'],\n    ['wbmp', 'image/vnd.wap.wbmp'],\n    ['wbs', 'application/vnd.criticaltools.wbs+xml'],\n    ['wbxml', 'application/wbxml'],\n    ['wcm', 'application/vnd.ms-works'],\n    ['wdb', 'application/vnd.ms-works'],\n    ['wdp', 'image/vnd.ms-photo'],\n    ['weba', 'audio/webm'],\n    ['webapp', 'application/x-web-app-manifest+json'],\n    ['webm', 'video/webm'],\n    ['webmanifest', 'application/manifest+json'],\n    ['webp', 'image/webp'],\n    ['wg', 'application/vnd.pmi.widget'],\n    ['wgt', 'application/widget'],\n    ['wks', 'application/vnd.ms-works'],\n    ['wm', 'video/x-ms-wm'],\n    ['wma', 'audio/x-ms-wma'],\n    ['wmd', 'application/x-ms-wmd'],\n    ['wmf', 'image/wmf'],\n    ['wml', 'text/vnd.wap.wml'],\n    ['wmlc', 'application/wmlc'],\n    ['wmls', 'text/vnd.wap.wmlscript'],\n    ['wmlsc', 'application/vnd.wap.wmlscriptc'],\n    ['wmv', 'video/x-ms-wmv'],\n    ['wmx', 'video/x-ms-wmx'],\n    ['wmz', 'application/x-msmetafile'],\n    ['woff', 'font/woff'],\n    ['woff2', 'font/woff2'],\n    ['word', 'application/msword'],\n    ['wpd', 'application/vnd.wordperfect'],\n    ['wpl', 'application/vnd.ms-wpl'],\n    ['wps', 'application/vnd.ms-works'],\n    ['wqd', 'application/vnd.wqd'],\n    ['wri', 'application/x-mswrite'],\n    ['wrl', 'model/vrml'],\n    ['wsc', 'message/vnd.wfa.wsc'],\n    ['wsdl', 'application/wsdl+xml'],\n    ['wspolicy', 'application/wspolicy+xml'],\n    ['wtb', 'application/vnd.webturbo'],\n    ['wvx', 'video/x-ms-wvx'],\n    ['x3d', 'model/x3d+xml'],\n    ['x3db', 'model/x3d+fastinfoset'],\n    ['x3dbz', 'model/x3d+binary'],\n    ['x3dv', 'model/x3d-vrml'],\n    ['x3dvz', 'model/x3d+vrml'],\n    ['x3dz', 'model/x3d+xml'],\n    ['x32', 'application/x-authorware-bin'],\n    ['x_b', 'model/vnd.parasolid.transmit.binary'],\n    ['x_t', 'model/vnd.parasolid.transmit.text'],\n    ['xaml', 'application/xaml+xml'],\n    ['xap', 'application/x-silverlight-app'],\n    ['xar', 'application/vnd.xara'],\n    ['xav', 'application/xcap-att+xml'],\n    ['xbap', 'application/x-ms-xbap'],\n    ['xbd', 'application/vnd.fujixerox.docuworks.binder'],\n    ['xbm', 'image/x-xbitmap'],\n    ['xca', 'application/xcap-caps+xml'],\n    ['xcs', 'application/calendar+xml'],\n    ['xdf', 'application/xcap-diff+xml'],\n    ['xdm', 'application/vnd.syncml.dm+xml'],\n    ['xdp', 'application/vnd.adobe.xdp+xml'],\n    ['xdssc', 'application/dssc+xml'],\n    ['xdw', 'application/vnd.fujixerox.docuworks'],\n    ['xel', 'application/xcap-el+xml'],\n    ['xenc', 'application/xenc+xml'],\n    ['xer', 'application/patch-ops-error+xml'],\n    ['xfdf', 'application/vnd.adobe.xfdf'],\n    ['xfdl', 'application/vnd.xfdl'],\n    ['xht', 'application/xhtml+xml'],\n    ['xhtml', 'application/xhtml+xml'],\n    ['xhvml', 'application/xv+xml'],\n    ['xif', 'image/vnd.xiff'],\n    ['xl', 'application/excel'],\n    ['xla', 'application/vnd.ms-excel'],\n    ['xlam', 'application/vnd.ms-excel.addin.macroEnabled.12'],\n    ['xlc', 'application/vnd.ms-excel'],\n    ['xlf', 'application/xliff+xml'],\n    ['xlm', 'application/vnd.ms-excel'],\n    ['xls', 'application/vnd.ms-excel'],\n    ['xlsb', 'application/vnd.ms-excel.sheet.binary.macroEnabled.12'],\n    ['xlsm', 'application/vnd.ms-excel.sheet.macroEnabled.12'],\n    ['xlsx', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'],\n    ['xlt', 'application/vnd.ms-excel'],\n    ['xltm', 'application/vnd.ms-excel.template.macroEnabled.12'],\n    ['xltx', 'application/vnd.openxmlformats-officedocument.spreadsheetml.template'],\n    ['xlw', 'application/vnd.ms-excel'],\n    ['xm', 'audio/xm'],\n    ['xml', 'application/xml'],\n    ['xns', 'application/xcap-ns+xml'],\n    ['xo', 'application/vnd.olpc-sugar'],\n    ['xop', 'application/xop+xml'],\n    ['xpi', 'application/x-xpinstall'],\n    ['xpl', 'application/xproc+xml'],\n    ['xpm', 'image/x-xpixmap'],\n    ['xpr', 'application/vnd.is-xpr'],\n    ['xps', 'application/vnd.ms-xpsdocument'],\n    ['xpw', 'application/vnd.intercon.formnet'],\n    ['xpx', 'application/vnd.intercon.formnet'],\n    ['xsd', 'application/xml'],\n    ['xsl', 'application/xml'],\n    ['xslt', 'application/xslt+xml'],\n    ['xsm', 'application/vnd.syncml+xml'],\n    ['xspf', 'application/xspf+xml'],\n    ['xul', 'application/vnd.mozilla.xul+xml'],\n    ['xvm', 'application/xv+xml'],\n    ['xvml', 'application/xv+xml'],\n    ['xwd', 'image/x-xwindowdump'],\n    ['xyz', 'chemical/x-xyz'],\n    ['xz', 'application/x-xz'],\n    ['yaml', 'text/yaml'],\n    ['yang', 'application/yang'],\n    ['yin', 'application/yin+xml'],\n    ['yml', 'text/yaml'],\n    ['ymp', 'text/x-suse-ymp'],\n    ['z', 'application/x-compress'],\n    ['z1', 'application/x-zmachine'],\n    ['z2', 'application/x-zmachine'],\n    ['z3', 'application/x-zmachine'],\n    ['z4', 'application/x-zmachine'],\n    ['z5', 'application/x-zmachine'],\n    ['z6', 'application/x-zmachine'],\n    ['z7', 'application/x-zmachine'],\n    ['z8', 'application/x-zmachine'],\n    ['zaz', 'application/vnd.zzazz.deck+xml'],\n    ['zip', 'application/zip'],\n    ['zir', 'application/vnd.zul'],\n    ['zirz', 'application/vnd.zul'],\n    ['zmm', 'application/vnd.handheld-entertainment+xml'],\n    ['zsh', 'text/x-scriptzsh']\n]);\nexport function toFileWithPath(file, path, h) {\n    const f = withMimeType(file);\n    const { webkitRelativePath } = file;\n    const p = typeof path === 'string'\n        ? path\n        // If <input webkitdirectory> is set,\n        // the File will have a {webkitRelativePath} property\n        // https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/webkitdirectory\n        : typeof webkitRelativePath === 'string' && webkitRelativePath.length > 0\n            ? webkitRelativePath\n            : `./${file.name}`;\n    if (typeof f.path !== 'string') { // on electron, path is already set to the absolute path\n        setObjProp(f, 'path', p);\n    }\n    if (h !== undefined) {\n        Object.defineProperty(f, 'handle', {\n            value: h,\n            writable: false,\n            configurable: false,\n            enumerable: true\n        });\n    }\n    // Always populate a relative path so that even electron apps have access to a relativePath value\n    setObjProp(f, 'relativePath', p);\n    return f;\n}\nfunction withMimeType(file) {\n    const { name } = file;\n    const hasExtension = name && name.lastIndexOf('.') !== -1;\n    if (hasExtension && !file.type) {\n        const ext = name.split('.')\n            .pop().toLowerCase();\n        const type = COMMON_MIME_TYPES.get(ext);\n        if (type) {\n            Object.defineProperty(file, 'type', {\n                value: type,\n                writable: false,\n                configurable: false,\n                enumerable: true\n            });\n        }\n    }\n    return file;\n}\nfunction setObjProp(f, key, value) {\n    Object.defineProperty(f, key, {\n        value,\n        writable: false,\n        configurable: false,\n        enumerable: true\n    });\n}\n//# sourceMappingURL=file.js.map","import { __awaiter } from \"tslib\";\nimport { toFileWithPath } from './file';\nconst FILES_TO_IGNORE = [\n    // Thumbnail cache files for macOS and Windows\n    '.DS_Store', // macOs\n    'Thumbs.db' // Windows\n];\n/**\n * Convert a DragEvent's DataTrasfer object to a list of File objects\n * NOTE: If some of the items are folders,\n * everything will be flattened and placed in the same list but the paths will be kept as a {path} property.\n *\n * EXPERIMENTAL: A list of https://developer.mozilla.org/en-US/docs/Web/API/FileSystemHandle objects can also be passed as an arg\n * and a list of File objects will be returned.\n *\n * @param evt\n */\nexport function fromEvent(evt) {\n    return __awaiter(this, void 0, void 0, function* () {\n        if (isObject(evt) && isDataTransfer(evt.dataTransfer)) {\n            return getDataTransferFiles(evt.dataTransfer, evt.type);\n        }\n        else if (isChangeEvt(evt)) {\n            return getInputFiles(evt);\n        }\n        else if (Array.isArray(evt) && evt.every(item => 'getFile' in item && typeof item.getFile === 'function')) {\n            return getFsHandleFiles(evt);\n        }\n        return [];\n    });\n}\nfunction isDataTransfer(value) {\n    return isObject(value);\n}\nfunction isChangeEvt(value) {\n    return isObject(value) && isObject(value.target);\n}\nfunction isObject(v) {\n    return typeof v === 'object' && v !== null;\n}\nfunction getInputFiles(evt) {\n    return fromList(evt.target.files).map(file => toFileWithPath(file));\n}\n// Ee expect each handle to be https://developer.mozilla.org/en-US/docs/Web/API/FileSystemFileHandle\nfunction getFsHandleFiles(handles) {\n    return __awaiter(this, void 0, void 0, function* () {\n        const files = yield Promise.all(handles.map(h => h.getFile()));\n        return files.map(file => toFileWithPath(file));\n    });\n}\nfunction getDataTransferFiles(dt, type) {\n    return __awaiter(this, void 0, void 0, function* () {\n        // IE11 does not support dataTransfer.items\n        // See https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/items#Browser_compatibility\n        if (dt.items) {\n            const items = fromList(dt.items)\n                .filter(item => item.kind === 'file');\n            // According to https://html.spec.whatwg.org/multipage/dnd.html#dndevents,\n            // only 'dragstart' and 'drop' has access to the data (source node)\n            if (type !== 'drop') {\n                return items;\n            }\n            const files = yield Promise.all(items.map(toFilePromises));\n            return noIgnoredFiles(flatten(files));\n        }\n        return noIgnoredFiles(fromList(dt.files)\n            .map(file => toFileWithPath(file)));\n    });\n}\nfunction noIgnoredFiles(files) {\n    return files.filter(file => FILES_TO_IGNORE.indexOf(file.name) === -1);\n}\n// IE11 does not support Array.from()\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from#Browser_compatibility\n// https://developer.mozilla.org/en-US/docs/Web/API/FileList\n// https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItemList\nfunction fromList(items) {\n    if (items === null) {\n        return [];\n    }\n    const files = [];\n    // tslint:disable: prefer-for-of\n    for (let i = 0; i < items.length; i++) {\n        const file = items[i];\n        files.push(file);\n    }\n    return files;\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItem\nfunction toFilePromises(item) {\n    if (typeof item.webkitGetAsEntry !== 'function') {\n        return fromDataTransferItem(item);\n    }\n    const entry = item.webkitGetAsEntry();\n    // Safari supports dropping an image node from a different window and can be retrieved using\n    // the DataTransferItem.getAsFile() API\n    // NOTE: FileSystemEntry.file() throws if trying to get the file\n    if (entry && entry.isDirectory) {\n        return fromDirEntry(entry);\n    }\n    return fromDataTransferItem(item, entry);\n}\nfunction flatten(items) {\n    return items.reduce((acc, files) => [\n        ...acc,\n        ...(Array.isArray(files) ? flatten(files) : [files])\n    ], []);\n}\nfunction fromDataTransferItem(item, entry) {\n    return __awaiter(this, void 0, void 0, function* () {\n        var _a;\n        // Check if we're in a secure context; due to a bug in Chrome (as far as we know)\n        // the browser crashes when calling this API (yet to be confirmed as a consistent behaviour).\n        //\n        // See:\n        // - https://issues.chromium.org/issues/40186242\n        // - https://github.com/react-dropzone/react-dropzone/issues/1397\n        if (globalThis.isSecureContext && typeof item.getAsFileSystemHandle === 'function') {\n            const h = yield item.getAsFileSystemHandle();\n            if (h === null) {\n                throw new Error(`${item} is not a File`);\n            }\n            // It seems that the handle can be `undefined` (see https://github.com/react-dropzone/file-selector/issues/120),\n            // so we check if it isn't; if it is, the code path continues to the next API (`getAsFile`).\n            if (h !== undefined) {\n                const file = yield h.getFile();\n                file.handle = h;\n                return toFileWithPath(file);\n            }\n        }\n        const file = item.getAsFile();\n        if (!file) {\n            throw new Error(`${item} is not a File`);\n        }\n        const fwp = toFileWithPath(file, (_a = entry === null || entry === void 0 ? void 0 : entry.fullPath) !== null && _a !== void 0 ? _a : undefined);\n        return fwp;\n    });\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/FileSystemEntry\nfunction fromEntry(entry) {\n    return __awaiter(this, void 0, void 0, function* () {\n        return entry.isDirectory ? fromDirEntry(entry) : fromFileEntry(entry);\n    });\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryEntry\nfunction fromDirEntry(entry) {\n    const reader = entry.createReader();\n    return new Promise((resolve, reject) => {\n        const entries = [];\n        function readEntries() {\n            // https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryEntry/createReader\n            // https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryReader/readEntries\n            reader.readEntries((batch) => __awaiter(this, void 0, void 0, function* () {\n                if (!batch.length) {\n                    // Done reading directory\n                    try {\n                        const files = yield Promise.all(entries);\n                        resolve(files);\n                    }\n                    catch (err) {\n                        reject(err);\n                    }\n                }\n                else {\n                    const items = Promise.all(batch.map(fromEntry));\n                    entries.push(items);\n                    // Continue reading\n                    readEntries();\n                }\n            }), (err) => {\n                reject(err);\n            });\n        }\n        readEntries();\n    });\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/FileSystemFileEntry\nfunction fromFileEntry(entry) {\n    return __awaiter(this, void 0, void 0, function* () {\n        return new Promise((resolve, reject) => {\n            entry.file((file) => {\n                const fwp = toFileWithPath(file, entry.fullPath);\n                resolve(fwp);\n            }, (err) => {\n                reject(err);\n            });\n        });\n    });\n}\n//# sourceMappingURL=file-selector.js.map","\"use strict\";\n\nexports.__esModule = true;\n\nexports.default = function (file, acceptedFiles) {\n  if (file && acceptedFiles) {\n    var acceptedFilesArray = Array.isArray(acceptedFiles) ? acceptedFiles : acceptedFiles.split(',');\n\n    if (acceptedFilesArray.length === 0) {\n      return true;\n    }\n\n    var fileName = file.name || '';\n    var mimeType = (file.type || '').toLowerCase();\n    var baseMimeType = mimeType.replace(/\\/.*$/, '');\n    return acceptedFilesArray.some(function (type) {\n      var validType = type.trim().toLowerCase();\n\n      if (validType.charAt(0) === '.') {\n        return fileName.toLowerCase().endsWith(validType);\n      } else if (validType.endsWith('/*')) {\n        // This is something like a image/* mime type\n        return baseMimeType === validType.replace(/\\/.*$/, '');\n      }\n\n      return mimeType === validType;\n    });\n  }\n\n  return true;\n};","function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport _accepts from \"attr-accept\";\nvar accepts = typeof _accepts === \"function\" ? _accepts : _accepts.default; // Error codes\n\nexport var FILE_INVALID_TYPE = \"file-invalid-type\";\nexport var FILE_TOO_LARGE = \"file-too-large\";\nexport var FILE_TOO_SMALL = \"file-too-small\";\nexport var TOO_MANY_FILES = \"too-many-files\";\nexport var ErrorCode = {\n  FileInvalidType: FILE_INVALID_TYPE,\n  FileTooLarge: FILE_TOO_LARGE,\n  FileTooSmall: FILE_TOO_SMALL,\n  TooManyFiles: TOO_MANY_FILES\n};\n/**\n *\n * @param {string} accept\n */\n\nexport var getInvalidTypeRejectionErr = function getInvalidTypeRejectionErr() {\n  var accept = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"\";\n  var acceptArr = accept.split(\",\");\n  var msg = acceptArr.length > 1 ? \"one of \".concat(acceptArr.join(\", \")) : acceptArr[0];\n  return {\n    code: FILE_INVALID_TYPE,\n    message: \"File type must be \".concat(msg)\n  };\n};\nexport var getTooLargeRejectionErr = function getTooLargeRejectionErr(maxSize) {\n  return {\n    code: FILE_TOO_LARGE,\n    message: \"File is larger than \".concat(maxSize, \" \").concat(maxSize === 1 ? \"byte\" : \"bytes\")\n  };\n};\nexport var getTooSmallRejectionErr = function getTooSmallRejectionErr(minSize) {\n  return {\n    code: FILE_TOO_SMALL,\n    message: \"File is smaller than \".concat(minSize, \" \").concat(minSize === 1 ? \"byte\" : \"bytes\")\n  };\n};\nexport var TOO_MANY_FILES_REJECTION = {\n  code: TOO_MANY_FILES,\n  message: \"Too many files\"\n};\n/**\n * Check if the given file is a DataTransferItem with an empty type.\n *\n * During drag events, browsers may return DataTransferItem objects instead of File objects.\n * Some browsers (e.g., Chrome) return an empty MIME type for certain file types (like .md files)\n * on DataTransferItem during drag events, even though the type is correctly set during drop.\n *\n * This function detects such cases by checking for:\n * 1. Empty type string\n * 2. Presence of getAsFile method (indicates it's a DataTransferItem, not a File)\n *\n * We accept these during drag to provide proper UI feedback, while maintaining\n * strict validation during drop when real File objects are available.\n *\n * @param {File | DataTransferItem} file\n * @returns {boolean}\n */\n\nexport function isDataTransferItemWithEmptyType(file) {\n  return file.type === \"\" && typeof file.getAsFile === \"function\";\n}\n/**\n * Check if file is accepted.\n *\n * Firefox versions prior to 53 return a bogus MIME type for every file drag,\n * so dragovers with that MIME type will always be accepted.\n *\n * Chrome/other browsers may return an empty MIME type for files during drag events,\n * so we accept those as well (we'll validate properly on drop).\n *\n * @param {File} file\n * @param {string} accept\n * @returns\n */\n\nexport function fileAccepted(file, accept) {\n  var isAcceptable = file.type === \"application/x-moz-file\" || accepts(file, accept) || isDataTransferItemWithEmptyType(file);\n  return [isAcceptable, isAcceptable ? null : getInvalidTypeRejectionErr(accept)];\n}\nexport function fileMatchSize(file, minSize, maxSize) {\n  if (isDefined(file.size)) {\n    if (isDefined(minSize) && isDefined(maxSize)) {\n      if (file.size > maxSize) return [false, getTooLargeRejectionErr(maxSize)];\n      if (file.size < minSize) return [false, getTooSmallRejectionErr(minSize)];\n    } else if (isDefined(minSize) && file.size < minSize) return [false, getTooSmallRejectionErr(minSize)];else if (isDefined(maxSize) && file.size > maxSize) return [false, getTooLargeRejectionErr(maxSize)];\n  }\n\n  return [true, null];\n}\n\nfunction isDefined(value) {\n  return value !== undefined && value !== null;\n}\n/**\n *\n * @param {object} options\n * @param {File[]} options.files\n * @param {string} [options.accept]\n * @param {number} [options.minSize]\n * @param {number} [options.maxSize]\n * @param {boolean} [options.multiple]\n * @param {number} [options.maxFiles]\n * @param {(f: File) => FileError|FileError[]|null} [options.validator]\n * @returns\n */\n\n\nexport function allFilesAccepted(_ref) {\n  var files = _ref.files,\n      accept = _ref.accept,\n      minSize = _ref.minSize,\n      maxSize = _ref.maxSize,\n      multiple = _ref.multiple,\n      maxFiles = _ref.maxFiles,\n      validator = _ref.validator;\n\n  if (!multiple && files.length > 1 || multiple && maxFiles >= 1 && files.length > maxFiles) {\n    return false;\n  }\n\n  return files.every(function (file) {\n    var _fileAccepted = fileAccepted(file, accept),\n        _fileAccepted2 = _slicedToArray(_fileAccepted, 1),\n        accepted = _fileAccepted2[0];\n\n    var _fileMatchSize = fileMatchSize(file, minSize, maxSize),\n        _fileMatchSize2 = _slicedToArray(_fileMatchSize, 1),\n        sizeMatch = _fileMatchSize2[0];\n\n    var customErrors = validator ? validator(file) : null;\n    return accepted && sizeMatch && !customErrors;\n  });\n} // React's synthetic events has event.isPropagationStopped,\n// but to remain compatibility with other libs (Preact) fall back\n// to check event.cancelBubble\n\nexport function isPropagationStopped(event) {\n  if (typeof event.isPropagationStopped === \"function\") {\n    return event.isPropagationStopped();\n  } else if (typeof event.cancelBubble !== \"undefined\") {\n    return event.cancelBubble;\n  }\n\n  return false;\n}\nexport function isEvtWithFiles(event) {\n  if (!event.dataTransfer) {\n    return !!event.target && !!event.target.files;\n  } // https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/types\n  // https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Recommended_drag_types#file\n\n\n  return Array.prototype.some.call(event.dataTransfer.types, function (type) {\n    return type === \"Files\" || type === \"application/x-moz-file\";\n  });\n}\nexport function isKindFile(item) {\n  return _typeof(item) === \"object\" && item !== null && item.kind === \"file\";\n} // allow the entire document to be a drag target\n\nexport function onDocumentDragOver(event) {\n  event.preventDefault();\n}\n\nfunction isIe(userAgent) {\n  return userAgent.indexOf(\"MSIE\") !== -1 || userAgent.indexOf(\"Trident/\") !== -1;\n}\n\nfunction isEdge(userAgent) {\n  return userAgent.indexOf(\"Edge/\") !== -1;\n}\n\nexport function isIeOrEdge() {\n  var userAgent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.navigator.userAgent;\n  return isIe(userAgent) || isEdge(userAgent);\n}\n/**\n * This is intended to be used to compose event handlers\n * They are executed in order until one of them calls `event.isPropagationStopped()`.\n * Note that the check is done on the first invoke too,\n * meaning that if propagation was stopped before invoking the fns,\n * no handlers will be executed.\n *\n * @param {Function} fns the event hanlder functions\n * @return {Function} the event handler to add to an element\n */\n\nexport function composeEventHandlers() {\n  for (var _len = arguments.length, fns = new Array(_len), _key = 0; _key < _len; _key++) {\n    fns[_key] = arguments[_key];\n  }\n\n  return function (event) {\n    for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n      args[_key2 - 1] = arguments[_key2];\n    }\n\n    return fns.some(function (fn) {\n      if (!isPropagationStopped(event) && fn) {\n        fn.apply(void 0, [event].concat(args));\n      }\n\n      return isPropagationStopped(event);\n    });\n  };\n}\n/**\n * canUseFileSystemAccessAPI checks if the [File System Access API](https://developer.mozilla.org/en-US/docs/Web/API/File_System_Access_API)\n * is supported by the browser.\n * @returns {boolean}\n */\n\nexport function canUseFileSystemAccessAPI() {\n  return \"showOpenFilePicker\" in window;\n}\n/**\n * Convert the `{accept}` dropzone prop to the\n * `{types}` option for https://developer.mozilla.org/en-US/docs/Web/API/window/showOpenFilePicker\n *\n * @param {AcceptProp} accept\n * @returns {{accept: string[]}[]}\n */\n\nexport function pickerOptionsFromAccept(accept) {\n  if (isDefined(accept)) {\n    var acceptForPicker = Object.entries(accept).filter(function (_ref2) {\n      var _ref3 = _slicedToArray(_ref2, 2),\n          mimeType = _ref3[0],\n          ext = _ref3[1];\n\n      var ok = true;\n\n      if (!isMIMEType(mimeType)) {\n        console.warn(\"Skipped \\\"\".concat(mimeType, \"\\\" because it is not a valid MIME type. Check https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types for a list of valid MIME types.\"));\n        ok = false;\n      }\n\n      if (!Array.isArray(ext) || !ext.every(isExt)) {\n        console.warn(\"Skipped \\\"\".concat(mimeType, \"\\\" because an invalid file extension was provided.\"));\n        ok = false;\n      }\n\n      return ok;\n    }).reduce(function (agg, _ref4) {\n      var _ref5 = _slicedToArray(_ref4, 2),\n          mimeType = _ref5[0],\n          ext = _ref5[1];\n\n      return _objectSpread(_objectSpread({}, agg), {}, _defineProperty({}, mimeType, ext));\n    }, {});\n    return [{\n      // description is required due to https://crbug.com/1264708\n      description: \"Files\",\n      accept: acceptForPicker\n    }];\n  }\n\n  return accept;\n}\n/**\n * Convert the `{accept}` dropzone prop to an array of MIME types/extensions.\n * @param {AcceptProp} accept\n * @returns {string}\n */\n\nexport function acceptPropAsAcceptAttr(accept) {\n  if (isDefined(accept)) {\n    return Object.entries(accept).reduce(function (a, _ref6) {\n      var _ref7 = _slicedToArray(_ref6, 2),\n          mimeType = _ref7[0],\n          ext = _ref7[1];\n\n      return [].concat(_toConsumableArray(a), [mimeType], _toConsumableArray(ext));\n    }, []) // Silently discard invalid entries as pickerOptionsFromAccept warns about these\n    .filter(function (v) {\n      return isMIMEType(v) || isExt(v);\n    }).join(\",\");\n  }\n\n  return undefined;\n}\n/**\n * Check if v is an exception caused by aborting a request (e.g window.showOpenFilePicker()).\n *\n * See https://developer.mozilla.org/en-US/docs/Web/API/DOMException.\n * @param {any} v\n * @returns {boolean} True if v is an abort exception.\n */\n\nexport function isAbort(v) {\n  return v instanceof DOMException && (v.name === \"AbortError\" || v.code === v.ABORT_ERR);\n}\n/**\n * Check if v is a security error.\n *\n * See https://developer.mozilla.org/en-US/docs/Web/API/DOMException.\n * @param {any} v\n * @returns {boolean} True if v is a security error.\n */\n\nexport function isSecurityError(v) {\n  return v instanceof DOMException && (v.name === \"SecurityError\" || v.code === v.SECURITY_ERR);\n}\n/**\n * Check if v is a MIME type string.\n *\n * See accepted format: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#unique_file_type_specifiers.\n *\n * @param {string} v\n */\n\nexport function isMIMEType(v) {\n  return v === \"audio/*\" || v === \"video/*\" || v === \"image/*\" || v === \"text/*\" || v === \"application/*\" || /\\w+\\/[-+.\\w]+/g.test(v);\n}\n/**\n * Check if v is a file extension.\n * @param {string} v\n */\n\nexport function isExt(v) {\n  return /^.*\\.[\\w]+$/.test(v);\n}\n/**\n * @typedef {Object.<string, string[]>} AcceptProp\n */\n\n/**\n * @typedef {object} FileError\n * @property {string} message\n * @property {ErrorCode|string} code\n */\n\n/**\n * @typedef {\"file-invalid-type\"|\"file-too-large\"|\"file-too-small\"|\"too-many-files\"} ErrorCode\n */","var _excluded = [\"children\"],\n    _excluded2 = [\"open\"],\n    _excluded3 = [\"refKey\", \"role\", \"onKeyDown\", \"onFocus\", \"onBlur\", \"onClick\", \"onDragEnter\", \"onDragOver\", \"onDragLeave\", \"onDrop\"],\n    _excluded4 = [\"refKey\", \"onChange\", \"onClick\"];\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* eslint prefer-template: 0 */\nimport React, { forwardRef, Fragment, useCallback, useEffect, useImperativeHandle, useMemo, useReducer, useRef } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { fromEvent } from \"file-selector\";\nimport { acceptPropAsAcceptAttr, allFilesAccepted, composeEventHandlers, fileAccepted, fileMatchSize, canUseFileSystemAccessAPI, isAbort, isEvtWithFiles, isIeOrEdge, isPropagationStopped, isSecurityError, onDocumentDragOver, pickerOptionsFromAccept, TOO_MANY_FILES_REJECTION } from \"./utils/index.js\";\n/**\n * Convenience wrapper component for the `useDropzone` hook\n *\n * ```jsx\n * <Dropzone>\n *   {({getRootProps, getInputProps}) => (\n *     <div {...getRootProps()}>\n *       <input {...getInputProps()} />\n *       <p>Drag 'n' drop some files here, or click to select files</p>\n *     </div>\n *   )}\n * </Dropzone>\n * ```\n */\n\nvar Dropzone = /*#__PURE__*/forwardRef(function (_ref, ref) {\n  var children = _ref.children,\n      params = _objectWithoutProperties(_ref, _excluded);\n\n  var _useDropzone = useDropzone(params),\n      open = _useDropzone.open,\n      props = _objectWithoutProperties(_useDropzone, _excluded2);\n\n  useImperativeHandle(ref, function () {\n    return {\n      open: open\n    };\n  }, [open]); // TODO: Figure out why react-styleguidist cannot create docs if we don't return a jsx element\n\n  return /*#__PURE__*/React.createElement(Fragment, null, children(_objectSpread(_objectSpread({}, props), {}, {\n    open: open\n  })));\n});\nDropzone.displayName = \"Dropzone\"; // Add default props for react-docgen\n\nvar defaultProps = {\n  disabled: false,\n  getFilesFromEvent: fromEvent,\n  maxSize: Infinity,\n  minSize: 0,\n  multiple: true,\n  maxFiles: 0,\n  preventDropOnDocument: true,\n  noClick: false,\n  noKeyboard: false,\n  noDrag: false,\n  noDragEventsBubbling: false,\n  validator: null,\n  useFsAccessApi: false,\n  autoFocus: false\n};\nDropzone.defaultProps = defaultProps;\nDropzone.propTypes = {\n  /**\n   * Render function that exposes the dropzone state and prop getter fns\n   *\n   * @param {object} params\n   * @param {Function} params.getRootProps Returns the props you should apply to the root drop container you render\n   * @param {Function} params.getInputProps Returns the props you should apply to hidden file input you render\n   * @param {Function} params.open Open the native file selection dialog\n   * @param {boolean} params.isFocused Dropzone area is in focus\n   * @param {boolean} params.isFileDialogActive File dialog is opened\n   * @param {boolean} params.isDragActive Active drag is in progress\n   * @param {boolean} params.isDragAccept Dragged files are accepted\n   * @param {boolean} params.isDragReject Some dragged files are rejected\n   * @param {boolean} params.isDragGlobal Files are being dragged anywhere on the document\n   * @param {File[]} params.acceptedFiles Accepted files\n   * @param {FileRejection[]} params.fileRejections Rejected files and why they were rejected\n   */\n  children: PropTypes.func,\n\n  /**\n   * Set accepted file types.\n   * Checkout https://developer.mozilla.org/en-US/docs/Web/API/window/showOpenFilePicker types option for more information.\n   * Keep in mind that mime type determination is not reliable across platforms. CSV files,\n   * for example, are reported as text/plain under macOS but as application/vnd.ms-excel under\n   * Windows. In some cases there might not be a mime type set at all (https://github.com/react-dropzone/react-dropzone/issues/276).\n   */\n  accept: PropTypes.objectOf(PropTypes.arrayOf(PropTypes.string)),\n\n  /**\n   * Allow drag 'n' drop (or selection from the file dialog) of multiple files\n   */\n  multiple: PropTypes.bool,\n\n  /**\n   * If false, allow dropped items to take over the current browser window\n   */\n  preventDropOnDocument: PropTypes.bool,\n\n  /**\n   * If true, disables click to open the native file selection dialog\n   */\n  noClick: PropTypes.bool,\n\n  /**\n   * If true, disables SPACE/ENTER to open the native file selection dialog.\n   * Note that it also stops tracking the focus state.\n   */\n  noKeyboard: PropTypes.bool,\n\n  /**\n   * If true, disables drag 'n' drop\n   */\n  noDrag: PropTypes.bool,\n\n  /**\n   * If true, stops drag event propagation to parents\n   */\n  noDragEventsBubbling: PropTypes.bool,\n\n  /**\n   * Minimum file size (in bytes)\n   */\n  minSize: PropTypes.number,\n\n  /**\n   * Maximum file size (in bytes)\n   */\n  maxSize: PropTypes.number,\n\n  /**\n   * Maximum accepted number of files\n   * The default value is 0 which means there is no limitation to how many files are accepted.\n   */\n  maxFiles: PropTypes.number,\n\n  /**\n   * Enable/disable the dropzone\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * Use this to provide a custom file aggregator\n   *\n   * @param {(DragEvent|Event|Array<FileSystemFileHandle>)} event A drag event or input change event (if files were selected via the file dialog)\n   */\n  getFilesFromEvent: PropTypes.func,\n\n  /**\n   * Cb for when closing the file dialog with no selection\n   */\n  onFileDialogCancel: PropTypes.func,\n\n  /**\n   * Cb for when opening the file dialog\n   */\n  onFileDialogOpen: PropTypes.func,\n\n  /**\n   * Set to true to use the https://developer.mozilla.org/en-US/docs/Web/API/File_System_Access_API\n   * to open the file picker instead of using an `<input type=\"file\">` click event.\n   */\n  useFsAccessApi: PropTypes.bool,\n\n  /**\n   * Set to true to focus the root element on render\n   */\n  autoFocus: PropTypes.bool,\n\n  /**\n   * Cb for when the `dragenter` event occurs.\n   *\n   * @param {DragEvent} event\n   */\n  onDragEnter: PropTypes.func,\n\n  /**\n   * Cb for when the `dragleave` event occurs\n   *\n   * @param {DragEvent} event\n   */\n  onDragLeave: PropTypes.func,\n\n  /**\n   * Cb for when the `dragover` event occurs\n   *\n   * @param {DragEvent} event\n   */\n  onDragOver: PropTypes.func,\n\n  /**\n   * Cb for when the `drop` event occurs.\n   * Note that this callback is invoked after the `getFilesFromEvent` callback is done.\n   *\n   * Files are accepted or rejected based on the `accept`, `multiple`, `minSize` and `maxSize` props.\n   * `accept` must be a valid [MIME type](http://www.iana.org/assignments/media-types/media-types.xhtml) according to [input element specification](https://www.w3.org/wiki/HTML/Elements/input/file) or a valid file extension.\n   * If `multiple` is set to false and additional files are dropped,\n   * all files besides the first will be rejected.\n   * Any file which does not have a size in the [`minSize`, `maxSize`] range, will be rejected as well.\n   *\n   * Note that the `onDrop` callback will always be invoked regardless if the dropped files were accepted or rejected.\n   * If you'd like to react to a specific scenario, use the `onDropAccepted`/`onDropRejected` props.\n   *\n   * `onDrop` will provide you with an array of [File](https://developer.mozilla.org/en-US/docs/Web/API/File) objects which you can then process and send to a server.\n   * For example, with [SuperAgent](https://github.com/visionmedia/superagent) as a http/ajax library:\n   *\n   * ```js\n   * function onDrop(acceptedFiles) {\n   *   const req = request.post('/upload')\n   *   acceptedFiles.forEach(file => {\n   *     req.attach(file.name, file)\n   *   })\n   *   req.end(callback)\n   * }\n   * ```\n   *\n   * @param {File[]} acceptedFiles\n   * @param {FileRejection[]} fileRejections\n   * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n   */\n  onDrop: PropTypes.func,\n\n  /**\n   * Cb for when the `drop` event occurs.\n   * Note that if no files are accepted, this callback is not invoked.\n   *\n   * @param {File[]} files\n   * @param {(DragEvent|Event)} event\n   */\n  onDropAccepted: PropTypes.func,\n\n  /**\n   * Cb for when the `drop` event occurs.\n   * Note that if no files are rejected, this callback is not invoked.\n   *\n   * @param {FileRejection[]} fileRejections\n   * @param {(DragEvent|Event)} event\n   */\n  onDropRejected: PropTypes.func,\n\n  /**\n   * Cb for when there's some error from any of the promises.\n   *\n   * @param {Error} error\n   */\n  onError: PropTypes.func,\n\n  /**\n   * Custom validation function. It must return null if there's no errors.\n   * @param {File} file\n   * @returns {FileError|FileError[]|null}\n   */\n  validator: PropTypes.func\n};\nexport default Dropzone;\n/**\n * A function that is invoked for the `dragenter`,\n * `dragover` and `dragleave` events.\n * It is not invoked if the items are not files (such as link, text, etc.).\n *\n * @callback dragCb\n * @param {DragEvent} event\n */\n\n/**\n * A function that is invoked for the `drop` or input change event.\n * It is not invoked if the items are not files (such as link, text, etc.).\n *\n * @callback dropCb\n * @param {File[]} acceptedFiles List of accepted files\n * @param {FileRejection[]} fileRejections List of rejected files and why they were rejected\n * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n */\n\n/**\n * A function that is invoked for the `drop` or input change event.\n * It is not invoked if the items are files (such as link, text, etc.).\n *\n * @callback dropAcceptedCb\n * @param {File[]} files List of accepted files that meet the given criteria\n * (`accept`, `multiple`, `minSize`, `maxSize`)\n * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n */\n\n/**\n * A function that is invoked for the `drop` or input change event.\n *\n * @callback dropRejectedCb\n * @param {File[]} files List of rejected files that do not meet the given criteria\n * (`accept`, `multiple`, `minSize`, `maxSize`)\n * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n */\n\n/**\n * A function that is used aggregate files,\n * in a asynchronous fashion, from drag or input change events.\n *\n * @callback getFilesFromEvent\n * @param {(DragEvent|Event|Array<FileSystemFileHandle>)} event A drag event or input change event (if files were selected via the file dialog)\n * @returns {(File[]|Promise<File[]>)}\n */\n\n/**\n * An object with the current dropzone state.\n *\n * @typedef {object} DropzoneState\n * @property {boolean} isFocused Dropzone area is in focus\n * @property {boolean} isFileDialogActive File dialog is opened\n * @property {boolean} isDragActive Active drag is in progress\n * @property {boolean} isDragAccept Dragged files are accepted\n * @property {boolean} isDragReject Some dragged files are rejected\n * @property {boolean} isDragGlobal Files are being dragged anywhere on the document\n * @property {File[]} acceptedFiles Accepted files\n * @property {FileRejection[]} fileRejections Rejected files and why they were rejected\n */\n\n/**\n * An object with the dropzone methods.\n *\n * @typedef {object} DropzoneMethods\n * @property {Function} getRootProps Returns the props you should apply to the root drop container you render\n * @property {Function} getInputProps Returns the props you should apply to hidden file input you render\n * @property {Function} open Open the native file selection dialog\n */\n\nvar initialState = {\n  isFocused: false,\n  isFileDialogActive: false,\n  isDragActive: false,\n  isDragAccept: false,\n  isDragReject: false,\n  isDragGlobal: false,\n  acceptedFiles: [],\n  fileRejections: []\n};\n/**\n * A React hook that creates a drag 'n' drop area.\n *\n * ```jsx\n * function MyDropzone(props) {\n *   const {getRootProps, getInputProps} = useDropzone({\n *     onDrop: acceptedFiles => {\n *       // do something with the File objects, e.g. upload to some server\n *     }\n *   });\n *   return (\n *     <div {...getRootProps()}>\n *       <input {...getInputProps()} />\n *       <p>Drag and drop some files here, or click to select files</p>\n *     </div>\n *   )\n * }\n * ```\n *\n * @function useDropzone\n *\n * @param {object} props\n * @param {import(\"./utils\").AcceptProp} [props.accept] Set accepted file types.\n * Checkout https://developer.mozilla.org/en-US/docs/Web/API/window/showOpenFilePicker types option for more information.\n * Keep in mind that mime type determination is not reliable across platforms. CSV files,\n * for example, are reported as text/plain under macOS but as application/vnd.ms-excel under\n * Windows. In some cases there might not be a mime type set at all (https://github.com/react-dropzone/react-dropzone/issues/276).\n * @param {boolean} [props.multiple=true] Allow drag 'n' drop (or selection from the file dialog) of multiple files\n * @param {boolean} [props.preventDropOnDocument=true] If false, allow dropped items to take over the current browser window\n * @param {boolean} [props.noClick=false] If true, disables click to open the native file selection dialog\n * @param {boolean} [props.noKeyboard=false] If true, disables SPACE/ENTER to open the native file selection dialog.\n * Note that it also stops tracking the focus state.\n * @param {boolean} [props.noDrag=false] If true, disables drag 'n' drop\n * @param {boolean} [props.noDragEventsBubbling=false] If true, stops drag event propagation to parents\n * @param {number} [props.minSize=0] Minimum file size (in bytes)\n * @param {number} [props.maxSize=Infinity] Maximum file size (in bytes)\n * @param {boolean} [props.disabled=false] Enable/disable the dropzone\n * @param {getFilesFromEvent} [props.getFilesFromEvent] Use this to provide a custom file aggregator\n * @param {Function} [props.onFileDialogCancel] Cb for when closing the file dialog with no selection\n * @param {boolean} [props.useFsAccessApi] Set to true to use the https://developer.mozilla.org/en-US/docs/Web/API/File_System_Access_API\n * to open the file picker instead of using an `<input type=\"file\">` click event.\n * @param {boolean} autoFocus Set to true to auto focus the root element.\n * @param {Function} [props.onFileDialogOpen] Cb for when opening the file dialog\n * @param {dragCb} [props.onDragEnter] Cb for when the `dragenter` event occurs.\n * @param {dragCb} [props.onDragLeave] Cb for when the `dragleave` event occurs\n * @param {dragCb} [props.onDragOver] Cb for when the `dragover` event occurs\n * @param {dropCb} [props.onDrop] Cb for when the `drop` event occurs.\n * Note that this callback is invoked after the `getFilesFromEvent` callback is done.\n *\n * Files are accepted or rejected based on the `accept`, `multiple`, `minSize` and `maxSize` props.\n * `accept` must be an object with keys as a valid [MIME type](http://www.iana.org/assignments/media-types/media-types.xhtml) according to [input element specification](https://www.w3.org/wiki/HTML/Elements/input/file) and the value an array of file extensions (optional).\n * If `multiple` is set to false and additional files are dropped,\n * all files besides the first will be rejected.\n * Any file which does not have a size in the [`minSize`, `maxSize`] range, will be rejected as well.\n *\n * Note that the `onDrop` callback will always be invoked regardless if the dropped files were accepted or rejected.\n * If you'd like to react to a specific scenario, use the `onDropAccepted`/`onDropRejected` props.\n *\n * `onDrop` will provide you with an array of [File](https://developer.mozilla.org/en-US/docs/Web/API/File) objects which you can then process and send to a server.\n * For example, with [SuperAgent](https://github.com/visionmedia/superagent) as a http/ajax library:\n *\n * ```js\n * function onDrop(acceptedFiles) {\n *   const req = request.post('/upload')\n *   acceptedFiles.forEach(file => {\n *     req.attach(file.name, file)\n *   })\n *   req.end(callback)\n * }\n * ```\n * @param {dropAcceptedCb} [props.onDropAccepted]\n * @param {dropRejectedCb} [props.onDropRejected]\n * @param {(error: Error) => void} [props.onError]\n *\n * @returns {DropzoneState & DropzoneMethods}\n */\n\nexport function useDropzone() {\n  var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n  var _defaultProps$props = _objectSpread(_objectSpread({}, defaultProps), props),\n      accept = _defaultProps$props.accept,\n      disabled = _defaultProps$props.disabled,\n      getFilesFromEvent = _defaultProps$props.getFilesFromEvent,\n      maxSize = _defaultProps$props.maxSize,\n      minSize = _defaultProps$props.minSize,\n      multiple = _defaultProps$props.multiple,\n      maxFiles = _defaultProps$props.maxFiles,\n      onDragEnter = _defaultProps$props.onDragEnter,\n      onDragLeave = _defaultProps$props.onDragLeave,\n      onDragOver = _defaultProps$props.onDragOver,\n      onDrop = _defaultProps$props.onDrop,\n      onDropAccepted = _defaultProps$props.onDropAccepted,\n      onDropRejected = _defaultProps$props.onDropRejected,\n      onFileDialogCancel = _defaultProps$props.onFileDialogCancel,\n      onFileDialogOpen = _defaultProps$props.onFileDialogOpen,\n      useFsAccessApi = _defaultProps$props.useFsAccessApi,\n      autoFocus = _defaultProps$props.autoFocus,\n      preventDropOnDocument = _defaultProps$props.preventDropOnDocument,\n      noClick = _defaultProps$props.noClick,\n      noKeyboard = _defaultProps$props.noKeyboard,\n      noDrag = _defaultProps$props.noDrag,\n      noDragEventsBubbling = _defaultProps$props.noDragEventsBubbling,\n      onError = _defaultProps$props.onError,\n      validator = _defaultProps$props.validator;\n\n  var acceptAttr = useMemo(function () {\n    return acceptPropAsAcceptAttr(accept);\n  }, [accept]);\n  var pickerTypes = useMemo(function () {\n    return pickerOptionsFromAccept(accept);\n  }, [accept]);\n  var onFileDialogOpenCb = useMemo(function () {\n    return typeof onFileDialogOpen === \"function\" ? onFileDialogOpen : noop;\n  }, [onFileDialogOpen]);\n  var onFileDialogCancelCb = useMemo(function () {\n    return typeof onFileDialogCancel === \"function\" ? onFileDialogCancel : noop;\n  }, [onFileDialogCancel]);\n  /**\n   * @constant\n   * @type {React.MutableRefObject<HTMLElement>}\n   */\n\n  var rootRef = useRef(null);\n  var inputRef = useRef(null);\n\n  var _useReducer = useReducer(reducer, initialState),\n      _useReducer2 = _slicedToArray(_useReducer, 2),\n      state = _useReducer2[0],\n      dispatch = _useReducer2[1];\n\n  var isFocused = state.isFocused,\n      isFileDialogActive = state.isFileDialogActive;\n  var fsAccessApiWorksRef = useRef(typeof window !== \"undefined\" && window.isSecureContext && useFsAccessApi && canUseFileSystemAccessAPI()); // Update file dialog active state when the window is focused on\n\n  var onWindowFocus = function onWindowFocus() {\n    // Execute the timeout only if the file dialog is opened in the browser\n    if (!fsAccessApiWorksRef.current && isFileDialogActive) {\n      setTimeout(function () {\n        if (inputRef.current) {\n          var files = inputRef.current.files;\n\n          if (!files.length) {\n            dispatch({\n              type: \"closeDialog\"\n            });\n            onFileDialogCancelCb();\n          }\n        }\n      }, 300);\n    }\n  };\n\n  useEffect(function () {\n    window.addEventListener(\"focus\", onWindowFocus, false);\n    return function () {\n      window.removeEventListener(\"focus\", onWindowFocus, false);\n    };\n  }, [inputRef, isFileDialogActive, onFileDialogCancelCb, fsAccessApiWorksRef]);\n  var dragTargetsRef = useRef([]);\n  var globalDragTargetsRef = useRef([]);\n\n  var onDocumentDrop = function onDocumentDrop(event) {\n    if (rootRef.current && rootRef.current.contains(event.target)) {\n      // If we intercepted an event for our instance, let it propagate down to the instance's onDrop handler\n      return;\n    }\n\n    event.preventDefault();\n    dragTargetsRef.current = [];\n  };\n\n  useEffect(function () {\n    if (preventDropOnDocument) {\n      document.addEventListener(\"dragover\", onDocumentDragOver, false);\n      document.addEventListener(\"drop\", onDocumentDrop, false);\n    }\n\n    return function () {\n      if (preventDropOnDocument) {\n        document.removeEventListener(\"dragover\", onDocumentDragOver);\n        document.removeEventListener(\"drop\", onDocumentDrop);\n      }\n    };\n  }, [rootRef, preventDropOnDocument]); // Track global drag state for document-level drag events\n\n  useEffect(function () {\n    var onDocumentDragEnter = function onDocumentDragEnter(event) {\n      globalDragTargetsRef.current = [].concat(_toConsumableArray(globalDragTargetsRef.current), [event.target]);\n\n      if (isEvtWithFiles(event)) {\n        dispatch({\n          isDragGlobal: true,\n          type: \"setDragGlobal\"\n        });\n      }\n    };\n\n    var onDocumentDragLeave = function onDocumentDragLeave(event) {\n      // Only deactivate once we've left all children\n      globalDragTargetsRef.current = globalDragTargetsRef.current.filter(function (el) {\n        return el !== event.target && el !== null;\n      });\n\n      if (globalDragTargetsRef.current.length > 0) {\n        return;\n      }\n\n      dispatch({\n        isDragGlobal: false,\n        type: \"setDragGlobal\"\n      });\n    };\n\n    var onDocumentDragEnd = function onDocumentDragEnd() {\n      globalDragTargetsRef.current = [];\n      dispatch({\n        isDragGlobal: false,\n        type: \"setDragGlobal\"\n      });\n    };\n\n    var onDocumentDropGlobal = function onDocumentDropGlobal() {\n      globalDragTargetsRef.current = [];\n      dispatch({\n        isDragGlobal: false,\n        type: \"setDragGlobal\"\n      });\n    };\n\n    document.addEventListener(\"dragenter\", onDocumentDragEnter, false);\n    document.addEventListener(\"dragleave\", onDocumentDragLeave, false);\n    document.addEventListener(\"dragend\", onDocumentDragEnd, false);\n    document.addEventListener(\"drop\", onDocumentDropGlobal, false);\n    return function () {\n      document.removeEventListener(\"dragenter\", onDocumentDragEnter);\n      document.removeEventListener(\"dragleave\", onDocumentDragLeave);\n      document.removeEventListener(\"dragend\", onDocumentDragEnd);\n      document.removeEventListener(\"drop\", onDocumentDropGlobal);\n    };\n  }, [rootRef]); // Auto focus the root when autoFocus is true\n\n  useEffect(function () {\n    if (!disabled && autoFocus && rootRef.current) {\n      rootRef.current.focus();\n    }\n\n    return function () {};\n  }, [rootRef, autoFocus, disabled]);\n  var onErrCb = useCallback(function (e) {\n    if (onError) {\n      onError(e);\n    } else {\n      // Let the user know something's gone wrong if they haven't provided the onError cb.\n      console.error(e);\n    }\n  }, [onError]);\n  var onDragEnterCb = useCallback(function (event) {\n    event.preventDefault(); // Persist here because we need the event later after getFilesFromEvent() is done\n\n    event.persist();\n    stopPropagation(event);\n    dragTargetsRef.current = [].concat(_toConsumableArray(dragTargetsRef.current), [event.target]);\n\n    if (isEvtWithFiles(event)) {\n      Promise.resolve(getFilesFromEvent(event)).then(function (files) {\n        if (isPropagationStopped(event) && !noDragEventsBubbling) {\n          return;\n        }\n\n        var fileCount = files.length;\n        var isDragAccept = fileCount > 0 && allFilesAccepted({\n          files: files,\n          accept: acceptAttr,\n          minSize: minSize,\n          maxSize: maxSize,\n          multiple: multiple,\n          maxFiles: maxFiles,\n          validator: validator\n        });\n        var isDragReject = fileCount > 0 && !isDragAccept;\n        dispatch({\n          isDragAccept: isDragAccept,\n          isDragReject: isDragReject,\n          isDragActive: true,\n          type: \"setDraggedFiles\"\n        });\n\n        if (onDragEnter) {\n          onDragEnter(event);\n        }\n      }).catch(function (e) {\n        return onErrCb(e);\n      });\n    }\n  }, [getFilesFromEvent, onDragEnter, onErrCb, noDragEventsBubbling, acceptAttr, minSize, maxSize, multiple, maxFiles, validator]);\n  var onDragOverCb = useCallback(function (event) {\n    event.preventDefault();\n    event.persist();\n    stopPropagation(event);\n    var hasFiles = isEvtWithFiles(event);\n\n    if (hasFiles && event.dataTransfer) {\n      try {\n        event.dataTransfer.dropEffect = \"copy\";\n      } catch (_unused) {}\n      /* eslint-disable-line no-empty */\n\n    }\n\n    if (hasFiles && onDragOver) {\n      onDragOver(event);\n    }\n\n    return false;\n  }, [onDragOver, noDragEventsBubbling]);\n  var onDragLeaveCb = useCallback(function (event) {\n    event.preventDefault();\n    event.persist();\n    stopPropagation(event); // Only deactivate once the dropzone and all children have been left\n\n    var targets = dragTargetsRef.current.filter(function (target) {\n      return rootRef.current && rootRef.current.contains(target);\n    }); // Make sure to remove a target present multiple times only once\n    // (Firefox may fire dragenter/dragleave multiple times on the same element)\n\n    var targetIdx = targets.indexOf(event.target);\n\n    if (targetIdx !== -1) {\n      targets.splice(targetIdx, 1);\n    }\n\n    dragTargetsRef.current = targets;\n\n    if (targets.length > 0) {\n      return;\n    }\n\n    dispatch({\n      type: \"setDraggedFiles\",\n      isDragActive: false,\n      isDragAccept: false,\n      isDragReject: false\n    });\n\n    if (isEvtWithFiles(event) && onDragLeave) {\n      onDragLeave(event);\n    }\n  }, [rootRef, onDragLeave, noDragEventsBubbling]);\n  var setFiles = useCallback(function (files, event) {\n    var acceptedFiles = [];\n    var fileRejections = [];\n    files.forEach(function (file) {\n      var _fileAccepted = fileAccepted(file, acceptAttr),\n          _fileAccepted2 = _slicedToArray(_fileAccepted, 2),\n          accepted = _fileAccepted2[0],\n          acceptError = _fileAccepted2[1];\n\n      var _fileMatchSize = fileMatchSize(file, minSize, maxSize),\n          _fileMatchSize2 = _slicedToArray(_fileMatchSize, 2),\n          sizeMatch = _fileMatchSize2[0],\n          sizeError = _fileMatchSize2[1];\n\n      var customErrors = validator ? validator(file) : null;\n\n      if (accepted && sizeMatch && !customErrors) {\n        acceptedFiles.push(file);\n      } else {\n        var errors = [acceptError, sizeError];\n\n        if (customErrors) {\n          errors = errors.concat(customErrors);\n        }\n\n        fileRejections.push({\n          file: file,\n          errors: errors.filter(function (e) {\n            return e;\n          })\n        });\n      }\n    });\n\n    if (!multiple && acceptedFiles.length > 1 || multiple && maxFiles >= 1 && acceptedFiles.length > maxFiles) {\n      // Reject everything and empty accepted files\n      acceptedFiles.forEach(function (file) {\n        fileRejections.push({\n          file: file,\n          errors: [TOO_MANY_FILES_REJECTION]\n        });\n      });\n      acceptedFiles.splice(0);\n    }\n\n    dispatch({\n      acceptedFiles: acceptedFiles,\n      fileRejections: fileRejections,\n      isDragReject: fileRejections.length > 0,\n      type: \"setFiles\"\n    });\n\n    if (onDrop) {\n      onDrop(acceptedFiles, fileRejections, event);\n    }\n\n    if (fileRejections.length > 0 && onDropRejected) {\n      onDropRejected(fileRejections, event);\n    }\n\n    if (acceptedFiles.length > 0 && onDropAccepted) {\n      onDropAccepted(acceptedFiles, event);\n    }\n  }, [dispatch, multiple, acceptAttr, minSize, maxSize, maxFiles, onDrop, onDropAccepted, onDropRejected, validator]);\n  var onDropCb = useCallback(function (event) {\n    event.preventDefault(); // Persist here because we need the event later after getFilesFromEvent() is done\n\n    event.persist();\n    stopPropagation(event);\n    dragTargetsRef.current = [];\n\n    if (isEvtWithFiles(event)) {\n      Promise.resolve(getFilesFromEvent(event)).then(function (files) {\n        if (isPropagationStopped(event) && !noDragEventsBubbling) {\n          return;\n        }\n\n        setFiles(files, event);\n      }).catch(function (e) {\n        return onErrCb(e);\n      });\n    }\n\n    dispatch({\n      type: \"reset\"\n    });\n  }, [getFilesFromEvent, setFiles, onErrCb, noDragEventsBubbling]); // Fn for opening the file dialog programmatically\n\n  var openFileDialog = useCallback(function () {\n    // No point to use FS access APIs if context is not secure\n    // https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts#feature_detection\n    if (fsAccessApiWorksRef.current) {\n      dispatch({\n        type: \"openDialog\"\n      });\n      onFileDialogOpenCb(); // https://developer.mozilla.org/en-US/docs/Web/API/window/showOpenFilePicker\n\n      var opts = {\n        multiple: multiple,\n        types: pickerTypes\n      };\n      window.showOpenFilePicker(opts).then(function (handles) {\n        return getFilesFromEvent(handles);\n      }).then(function (files) {\n        setFiles(files, null);\n        dispatch({\n          type: \"closeDialog\"\n        });\n      }).catch(function (e) {\n        // AbortError means the user canceled\n        if (isAbort(e)) {\n          onFileDialogCancelCb(e);\n          dispatch({\n            type: \"closeDialog\"\n          });\n        } else if (isSecurityError(e)) {\n          fsAccessApiWorksRef.current = false; // CORS, so cannot use this API\n          // Try using the input\n\n          if (inputRef.current) {\n            inputRef.current.value = null;\n            inputRef.current.click();\n          } else {\n            onErrCb(new Error(\"Cannot open the file picker because the https://developer.mozilla.org/en-US/docs/Web/API/File_System_Access_API is not supported and no <input> was provided.\"));\n          }\n        } else {\n          onErrCb(e);\n        }\n      });\n      return;\n    }\n\n    if (inputRef.current) {\n      dispatch({\n        type: \"openDialog\"\n      });\n      onFileDialogOpenCb();\n      inputRef.current.value = null;\n      inputRef.current.click();\n    }\n  }, [dispatch, onFileDialogOpenCb, onFileDialogCancelCb, useFsAccessApi, setFiles, onErrCb, pickerTypes, multiple]); // Cb to open the file dialog when SPACE/ENTER occurs on the dropzone\n\n  var onKeyDownCb = useCallback(function (event) {\n    // Ignore keyboard events bubbling up the DOM tree\n    if (!rootRef.current || !rootRef.current.isEqualNode(event.target)) {\n      return;\n    }\n\n    if (event.key === \" \" || event.key === \"Enter\" || event.keyCode === 32 || event.keyCode === 13) {\n      event.preventDefault();\n      openFileDialog();\n    }\n  }, [rootRef, openFileDialog]); // Update focus state for the dropzone\n\n  var onFocusCb = useCallback(function () {\n    dispatch({\n      type: \"focus\"\n    });\n  }, []);\n  var onBlurCb = useCallback(function () {\n    dispatch({\n      type: \"blur\"\n    });\n  }, []); // Cb to open the file dialog when click occurs on the dropzone\n\n  var onClickCb = useCallback(function () {\n    if (noClick) {\n      return;\n    } // In IE11/Edge the file-browser dialog is blocking, therefore, use setTimeout()\n    // to ensure React can handle state changes\n    // See: https://github.com/react-dropzone/react-dropzone/issues/450\n\n\n    if (isIeOrEdge()) {\n      setTimeout(openFileDialog, 0);\n    } else {\n      openFileDialog();\n    }\n  }, [noClick, openFileDialog]);\n\n  var composeHandler = function composeHandler(fn) {\n    return disabled ? null : fn;\n  };\n\n  var composeKeyboardHandler = function composeKeyboardHandler(fn) {\n    return noKeyboard ? null : composeHandler(fn);\n  };\n\n  var composeDragHandler = function composeDragHandler(fn) {\n    return noDrag ? null : composeHandler(fn);\n  };\n\n  var stopPropagation = function stopPropagation(event) {\n    if (noDragEventsBubbling) {\n      event.stopPropagation();\n    }\n  };\n\n  var getRootProps = useMemo(function () {\n    return function () {\n      var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n          _ref2$refKey = _ref2.refKey,\n          refKey = _ref2$refKey === void 0 ? \"ref\" : _ref2$refKey,\n          role = _ref2.role,\n          onKeyDown = _ref2.onKeyDown,\n          onFocus = _ref2.onFocus,\n          onBlur = _ref2.onBlur,\n          onClick = _ref2.onClick,\n          onDragEnter = _ref2.onDragEnter,\n          onDragOver = _ref2.onDragOver,\n          onDragLeave = _ref2.onDragLeave,\n          onDrop = _ref2.onDrop,\n          rest = _objectWithoutProperties(_ref2, _excluded3);\n\n      return _objectSpread(_objectSpread(_defineProperty({\n        onKeyDown: composeKeyboardHandler(composeEventHandlers(onKeyDown, onKeyDownCb)),\n        onFocus: composeKeyboardHandler(composeEventHandlers(onFocus, onFocusCb)),\n        onBlur: composeKeyboardHandler(composeEventHandlers(onBlur, onBlurCb)),\n        onClick: composeHandler(composeEventHandlers(onClick, onClickCb)),\n        onDragEnter: composeDragHandler(composeEventHandlers(onDragEnter, onDragEnterCb)),\n        onDragOver: composeDragHandler(composeEventHandlers(onDragOver, onDragOverCb)),\n        onDragLeave: composeDragHandler(composeEventHandlers(onDragLeave, onDragLeaveCb)),\n        onDrop: composeDragHandler(composeEventHandlers(onDrop, onDropCb)),\n        role: typeof role === \"string\" && role !== \"\" ? role : \"presentation\"\n      }, refKey, rootRef), !disabled && !noKeyboard ? {\n        tabIndex: 0\n      } : {}), rest);\n    };\n  }, [rootRef, onKeyDownCb, onFocusCb, onBlurCb, onClickCb, onDragEnterCb, onDragOverCb, onDragLeaveCb, onDropCb, noKeyboard, noDrag, disabled]);\n  var onInputElementClick = useCallback(function (event) {\n    event.stopPropagation();\n  }, []);\n  var getInputProps = useMemo(function () {\n    return function () {\n      var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n          _ref3$refKey = _ref3.refKey,\n          refKey = _ref3$refKey === void 0 ? \"ref\" : _ref3$refKey,\n          onChange = _ref3.onChange,\n          onClick = _ref3.onClick,\n          rest = _objectWithoutProperties(_ref3, _excluded4);\n\n      var inputProps = _defineProperty({\n        accept: acceptAttr,\n        multiple: multiple,\n        type: \"file\",\n        style: {\n          border: 0,\n          clip: \"rect(0, 0, 0, 0)\",\n          clipPath: \"inset(50%)\",\n          height: \"1px\",\n          margin: \"0 -1px -1px 0\",\n          overflow: \"hidden\",\n          padding: 0,\n          position: \"absolute\",\n          width: \"1px\",\n          whiteSpace: \"nowrap\"\n        },\n        onChange: composeHandler(composeEventHandlers(onChange, onDropCb)),\n        onClick: composeHandler(composeEventHandlers(onClick, onInputElementClick)),\n        tabIndex: -1\n      }, refKey, inputRef);\n\n      return _objectSpread(_objectSpread({}, inputProps), rest);\n    };\n  }, [inputRef, accept, multiple, onDropCb, disabled]);\n  return _objectSpread(_objectSpread({}, state), {}, {\n    isFocused: isFocused && !disabled,\n    getRootProps: getRootProps,\n    getInputProps: getInputProps,\n    rootRef: rootRef,\n    inputRef: inputRef,\n    open: composeHandler(openFileDialog)\n  });\n}\n/**\n * @param {DropzoneState} state\n * @param {{type: string} & DropzoneState} action\n * @returns {DropzoneState}\n */\n\nfunction reducer(state, action) {\n  /* istanbul ignore next */\n  switch (action.type) {\n    case \"focus\":\n      return _objectSpread(_objectSpread({}, state), {}, {\n        isFocused: true\n      });\n\n    case \"blur\":\n      return _objectSpread(_objectSpread({}, state), {}, {\n        isFocused: false\n      });\n\n    case \"openDialog\":\n      return _objectSpread(_objectSpread({}, initialState), {}, {\n        isFileDialogActive: true\n      });\n\n    case \"closeDialog\":\n      return _objectSpread(_objectSpread({}, state), {}, {\n        isFileDialogActive: false\n      });\n\n    case \"setDraggedFiles\":\n      return _objectSpread(_objectSpread({}, state), {}, {\n        isDragActive: action.isDragActive,\n        isDragAccept: action.isDragAccept,\n        isDragReject: action.isDragReject\n      });\n\n    case \"setFiles\":\n      return _objectSpread(_objectSpread({}, state), {}, {\n        acceptedFiles: action.acceptedFiles,\n        fileRejections: action.fileRejections,\n        isDragReject: action.isDragReject\n      });\n\n    case \"setDragGlobal\":\n      return _objectSpread(_objectSpread({}, state), {}, {\n        isDragGlobal: action.isDragGlobal\n      });\n\n    case \"reset\":\n      return _objectSpread({}, initialState);\n\n    default:\n      return state;\n  }\n}\n\nfunction noop() {}\n\nexport { ErrorCode } from \"./utils/index.js\";","import React, { ReactNode, useEffect, useState } from 'react';\r\nimport { useDropzone } from 'react-dropzone';\r\n\r\ninterface FileUploadProps {\r\n  onFilesSelected: (files: File[], typeUpload: 'folder' | 'files') => void;\r\n  children?: ReactNode;\r\n}\r\n\r\nconst FileUpload: React.FC<FileUploadProps> = ({ onFilesSelected, children }) => {\r\n  const [isDragging, setIsDragging] = useState(false);\r\n\r\n  const { getRootProps, getInputProps } = useDropzone({\r\n    noClick: true,\r\n    onDrop: (acceptedFiles: any) => {\r\n      if (acceptedFiles && acceptedFiles.length > 0) {\r\n        const isFolder = acceptedFiles[0].path.split('/').length > 2 ? true : false;\r\n\r\n        if (isFolder) {\r\n          const processedFiles = acceptedFiles.map(\r\n            (file: File & { path?: string; relativePath?: string }) => {\r\n              const pathValue = file.path || file.relativePath || '';\r\n              const pathValueCustom = pathValue.split('/').slice(1).join('/');\r\n              if (!file.webkitRelativePath || file.webkitRelativePath === '') {\r\n                Object.defineProperty(file, 'webkitRelativePath', {\r\n                  writable: true,\r\n                  value: pathValueCustom,\r\n                  enumerable: true,\r\n                  configurable: true,\r\n                });\r\n              }\r\n              return file;\r\n            },\r\n          );\r\n\r\n          onFilesSelected(processedFiles, 'folder');\r\n        } else {\r\n          onFilesSelected(acceptedFiles, 'files');\r\n        }\r\n      }\r\n      setIsDragging(false);\r\n    },\r\n    onDragOver: (e) => {\r\n      e.preventDefault();\r\n      if (!isDragging) {\r\n        setIsDragging(true);\r\n      }\r\n    },\r\n    multiple: true,\r\n  });\r\n\r\n  useEffect(() => {\r\n    const handleDragLeave = (e: DragEvent) => {\r\n      if (e.clientX === 0 && e.clientY === 0) {\r\n        setIsDragging(false);\r\n      }\r\n    };\r\n    document.addEventListener('dragleave', handleDragLeave);\r\n    return () => {\r\n      document.removeEventListener('dragleave', handleDragLeave);\r\n    };\r\n  }, []);\r\n\r\n  return (\r\n    <div {...getRootProps()} className=\"transition-opacity min-h-[600px]\">\r\n      {isDragging ? (\r\n        <div className=\"flex flex-col items-center justify-center p-4 border-2 border-dashed border-gray-300 rounded-lg bg-gray-50 h-screen\"></div>\r\n      ) : (\r\n        children\r\n      )}\r\n      <input {...getInputProps()} />\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default FileUpload;\r\n","import { AlertCircle, CheckCircle2, Loader2, XCircle } from 'lucide-react';\r\nimport { useEffect, useState } from 'react';\r\n\r\nimport { Button } from '@/components/ui/button';\r\nimport {\r\n  Dialog,\r\n  DialogContent,\r\n  DialogFooter,\r\n  DialogHeader,\r\n  DialogTitle,\r\n} from '@/components/ui/dialog';\r\nimport { cn } from '@/lib/utils';\r\n\r\ninterface CrawledPage {\r\n  url: string;\r\n  title: string;\r\n  status: number;\r\n  depth: number;\r\n  linksCount: number;\r\n}\r\n\r\ntype CrawlJobStatus = {\r\n  success: boolean;\r\n  status: 'scraping' | 'completed' | 'failed' | 'blocked';\r\n  completed: number;\r\n  total: number;\r\n  creditsUsed: number;\r\n  expiresAt: string;\r\n  startTime?: number;\r\n  isProcessing?: boolean;\r\n  error?: string;\r\n  message?: string;\r\n  pages?: CrawledPage[];\r\n};\r\n\r\ninterface CrawlProgressDialogProps {\r\n  open: boolean;\r\n  onClose: () => void;\r\n  currentJob: {\r\n    id: string;\r\n    url: string;\r\n    limit: number;\r\n    prefix: string;\r\n    startTime?: number;\r\n    status?: CrawlJobStatus;\r\n    taskId: string;\r\n  } | null;\r\n  elapsedTime: number;\r\n  onStop: () => Promise<void>;\r\n  pages?: CrawledPage[];\r\n}\r\n\r\nexport default function CrawlProgressDialog({\r\n  open,\r\n  onClose,\r\n  currentJob,\r\n  elapsedTime,\r\n  onStop,\r\n  pages: pagesProp = [],\r\n}: CrawlProgressDialogProps) {\r\n  // Use pages from prop (real-time from API) - this is the authoritative source\r\n  // If pagesProp is explicitly empty [], trust it (backend cleared pages)\r\n  const pages = pagesProp || [];\r\n  // Early return MUST come before any hooks\r\n  if (!currentJob) return null;\r\n\r\n  const [showStopConfirm, setShowStopConfirm] = useState(false);\r\n  const [isStopping, setIsStopping] = useState(false);\r\n  const [virtualProgress, setVirtualProgress] = useState(0);\r\n  const [virtualUploadProgress, setVirtualUploadProgress] = useState(0);\r\n\r\n  // Auto-close on completion after 5 seconds\r\n  useEffect(() => {\r\n    if (currentJob?.status?.status === 'completed' && !currentJob?.status?.isProcessing) {\r\n      const timer = setTimeout(() => {\r\n        onClose();\r\n      }, 5000);\r\n      return () => clearTimeout(timer);\r\n    }\r\n    return undefined;\r\n  }, [currentJob?.status?.status, currentJob?.status?.isProcessing, onClose]);\r\n\r\n  const status = currentJob.status;\r\n  const completed = status?.completed || 0;\r\n  const total = status?.total || 0;\r\n\r\n  // For progress display, we use pages from real-time API polling\r\n  // CRITICAL: Only count pages that are actually present in this response\r\n  // The pages array should reflect real-time crawled pages\r\n  const crawledCount = pages.length;\r\n  const totalCount = total > 0 ? total : 0;\r\n\r\n  // Determine if we should use virtual progress\r\n  // isInitializing = no status yet OR no pages and no completed count\r\n  // Key fix: Don't count completed from API - only count actual pages in array\r\n  const isInitializing = !status || crawledCount === 0;\r\n  const isUploadPhase = status?.status === 'completed' && status?.isProcessing;\r\n  const realProgress =\r\n    totalCount > 0 && crawledCount > 0 ? Math.round((crawledCount / totalCount) * 100) : 0;\r\n\r\n  // Use virtual progress during initialization (when pages is empty but job just started)\r\n  // Once pages start arriving, switch to real progress based on pages.length\r\n  // During upload phase, use max of real progress and virtual upload progress\r\n  // When upload completes (isProcessing becomes false), show 100%\r\n  const displayProgress = isInitializing\r\n    ? virtualProgress // Show virtual progress while no data yet\r\n    : isUploadPhase\r\n      ? Math.max(realProgress, virtualUploadProgress)\r\n      : status?.status === 'completed' && !status?.isProcessing\r\n        ? 100\r\n        : crawledCount > 0\r\n          ? realProgress // Show real progress once pages arrive\r\n          : virtualProgress; // Keep showing virtual progress until pages arrive\r\n\r\n  // Animate virtual progress - never freezes, always moving\r\n  useEffect(() => {\r\n    if (!open) {\r\n      setVirtualProgress(0);\r\n      return;\r\n    }\r\n\r\n    const interval = setInterval(() => {\r\n      setVirtualProgress((prev) => {\r\n        // Slow down as we approach limits\r\n        // During init: go up to 30%\r\n        // During processing: go up to 90% (real progress takes over after)\r\n        const limit = isInitializing ? 30 : 90;\r\n        if (prev >= limit) return prev;\r\n\r\n        // Slower increments as we get higher\r\n        const increment = prev < 20 ? 0.5 : prev < 50 ? 0.3 : 0.1;\r\n        return Math.min(prev + increment, limit);\r\n      });\r\n    }, 200);\r\n\r\n    return () => clearInterval(interval);\r\n  }, [open, isInitializing]);\r\n\r\n  // Animate virtual upload progress during S3 upload phase\r\n  useEffect(() => {\r\n    if (!open || !isUploadPhase) {\r\n      setVirtualUploadProgress(0);\r\n      return;\r\n    }\r\n\r\n    // Initialize virtual upload progress from current real progress\r\n    if (virtualUploadProgress === 0 && realProgress > 0) {\r\n      setVirtualUploadProgress(realProgress);\r\n    }\r\n\r\n    const interval = setInterval(() => {\r\n      setVirtualUploadProgress((prev) => {\r\n        // Cap at 95% to avoid false completion indication\r\n        const limit = 95;\r\n        if (prev >= limit) return prev;\r\n\r\n        // Exponential decay: increment slows down as we approach limit\r\n        const increment = (limit - prev) * 0.05; // 5% of remaining distance\r\n        return Math.min(prev + Math.max(increment, 0.1), limit);\r\n      });\r\n    }, 200);\r\n\r\n    return () => clearInterval(interval);\r\n  }, [open, isUploadPhase, realProgress, virtualUploadProgress]);\r\n\r\n  // Format time as human-readable (e.g., \"5s\", \"1m30s\", \"1h1m1s\")\r\n  const formatTime = (seconds: number) => {\r\n    const hours = Math.floor(seconds / 3600);\r\n    const mins = Math.floor((seconds % 3600) / 60);\r\n    const secs = seconds % 60;\r\n\r\n    if (hours > 0) {\r\n      return `${hours}h${mins}m${secs}s`;\r\n    } else if (mins > 0) {\r\n      return `${mins}m${secs}s`;\r\n    } else {\r\n      return `${secs}s`;\r\n    }\r\n  };\r\n\r\n  // Get status display info\r\n  const getStatusDisplay = () => {\r\n    // Calculate progress percentage based on actual crawled pages\r\n    // Only show percentage when we have real pages data\r\n    const percentage =\r\n      crawledCount > 0 && totalCount > 0 ? Math.round((crawledCount / totalCount) * 100) : 0;\r\n    const progressText = crawledCount > 0 ? ` ${Math.min(percentage, 100)}%` : '';\r\n\r\n    if (!status || (status.total === 0 && status.completed === 0)) {\r\n      return {\r\n        text: 'Đang khởi tạo và phân tích website...',\r\n        icon: <Loader2 className=\"h-5 w-5 animate-spin text-blue-500\" />,\r\n        color: 'text-blue-600',\r\n      };\r\n    }\r\n\r\n    // Check for S3 upload phase (completed crawl but still processing)\r\n    if (status.status === 'completed' && status.isProcessing) {\r\n      const uploadProgress =\r\n        status.completed && status.total ? ` (${status.completed}/${status.total} tệp)` : '';\r\n      return {\r\n        text: `Đang lưu dữ liệu...${uploadProgress}${progressText}`,\r\n        icon: <Loader2 className=\"h-5 w-5 animate-spin text-blue-500\" />,\r\n        color: 'text-blue-600',\r\n      };\r\n    }\r\n\r\n    switch (status.status) {\r\n      case 'scraping':\r\n        return {\r\n          text: status.isProcessing\r\n            ? `Đang thu thập nội dung trang...${progressText}`\r\n            : `Đang quét cấu trúc website...${progressText}`,\r\n          icon: <Loader2 className=\"h-5 w-5 animate-spin text-blue-500\" />,\r\n          color: 'text-blue-600',\r\n        };\r\n      case 'completed':\r\n        return {\r\n          text: 'Hoàn thành!',\r\n          icon: <CheckCircle2 className=\"h-5 w-5 text-green-500\" />,\r\n          color: 'text-green-600',\r\n        };\r\n      case 'failed':\r\n        return {\r\n          text: `Đã xảy ra lỗi${status.error ? `: ${status.error}` : ''}`,\r\n          icon: <XCircle className=\"h-5 w-5 text-red-500\" />,\r\n          color: 'text-red-600',\r\n        };\r\n      case 'blocked':\r\n        return {\r\n          text: 'Website đã chặn truy cập',\r\n          icon: <AlertCircle className=\"h-5 w-5 text-orange-500\" />,\r\n          color: 'text-orange-600',\r\n        };\r\n      default:\r\n        return {\r\n          text: `Đang xử lý...${progressText}`,\r\n          icon: <Loader2 className=\"h-5 w-5 animate-spin text-blue-500\" />,\r\n          color: 'text-blue-600',\r\n        };\r\n    }\r\n  };\r\n\r\n  const handleStop = async () => {\r\n    setIsStopping(true);\r\n    try {\r\n      await onStop();\r\n      onClose();\r\n    } finally {\r\n      setIsStopping(false);\r\n      setShowStopConfirm(false);\r\n    }\r\n  };\r\n\r\n  const statusDisplay = getStatusDisplay();\r\n  const isInProgress =\r\n    status?.status === 'scraping' ||\r\n    !status ||\r\n    (status?.status === 'completed' && status?.isProcessing);\r\n  const isTerminal =\r\n    (status?.status === 'completed' && !status?.isProcessing) ||\r\n    status?.status === 'failed' ||\r\n    status?.status === 'blocked';\r\n\r\n  return (\r\n    <Dialog open={open} onOpenChange={(isOpen) => !isOpen && onClose()}>\r\n      <DialogContent className=\"sm:max-w-[480px] s3-explr-crawl-progress-dialog\">\r\n        <DialogHeader className=\"flex flex-row items-center justify-between\">\r\n          <DialogTitle>Thu thập website</DialogTitle>\r\n        </DialogHeader>\r\n\r\n        <div className=\"space-y-4 py-4\">\r\n          {/* Status message */}\r\n          <div className=\"flex items-center gap-3\">\r\n            {statusDisplay.icon}\r\n            <span className={cn('font-medium', statusDisplay.color)}>{statusDisplay.text}</span>\r\n          </div>\r\n\r\n          {/* Progress bar - always show */}\r\n          <div className=\"space-y-2 s3-explr-crawl-progress-bar\">\r\n            <div className=\"w-full bg-gray-200 rounded-full h-3 overflow-hidden\">\r\n              <div\r\n                className={cn(\r\n                  'h-3 rounded-full transition-all duration-300 s3-explr-crawl-progress-fill',\r\n                  status?.status === 'completed'\r\n                    ? 'bg-green-500'\r\n                    : status?.status === 'failed'\r\n                      ? 'bg-red-500'\r\n                      : status?.status === 'blocked'\r\n                        ? 'bg-orange-500'\r\n                        : 'bg-blue-600',\r\n                  isInitializing && 's3-explr-crawl-progress-indeterminate',\r\n                )}\r\n                style={{ width: `${displayProgress}%` }}\r\n              />\r\n            </div>\r\n            <div className=\"text-right text-sm text-gray-600\">{displayProgress}%</div>\r\n          </div>\r\n\r\n          {/* Details */}\r\n          <div className=\"space-y-2 text-sm text-gray-700\">\r\n            <p className=\"break-all\">\r\n              <span className=\"font-medium\">URL:</span> {currentJob.url}\r\n            </p>\r\n            <p>\r\n              <span className=\"font-medium\">Đã thu thập:</span>{' '}\r\n              {crawledCount === 0 && completed === 0\r\n                ? 'Đang khởi tạo...'\r\n                : `${crawledCount}/${totalCount} trang`}\r\n            </p>\r\n            <p>\r\n              <span className=\"font-medium\">Thời gian:</span> {formatTime(elapsedTime)}\r\n            </p>\r\n          </div>\r\n\r\n          {/* Real-time crawled pages list */}\r\n          {pages.length > 0 && (\r\n            <div className=\"space-y-2\">\r\n              <div className=\"flex items-center justify-between\">\r\n                <span className=\"text-sm font-medium text-gray-700\">\r\n                  Trang đã thu thập ({pages.length})\r\n                </span>\r\n              </div>\r\n              <div className=\"max-h-40 overflow-auto rounded-md border border-gray-200 bg-gray-50\">\r\n                {pages.map((page, index) => (\r\n                  <div\r\n                    key={index}\r\n                    className=\"flex flex-col gap-0.5 px-2 py-1.5 border-b border-gray-100 last:border-b-0 hover:bg-gray-50 w-[400px]\"\r\n                  >\r\n                    <div className=\"flex items-center gap-1\">\r\n                      <span className=\"text-[10px] font-medium text-gray-500 flex-shrink-0 w-5 text-right\">\r\n                        #{index + 1}\r\n                      </span>\r\n                      <p\r\n                        className=\"text-[10px] font-medium text-gray-700 flex-1 min-w-0\"\r\n                        title={page.title}\r\n                      >\r\n                        {page.title.length > 60 ? page.title.substring(0, 60) + '...' : page.title}\r\n                      </p>\r\n                      <span\r\n                        className={`text-[9px] flex-shrink-0 ${page.status >= 200 && page.status < 300 ? 'text-green-500' : 'text-red-500'}`}\r\n                      >\r\n                        {page.status}\r\n                      </span>\r\n                      <span className=\"text-[9px] text-gray-400 flex-shrink-0\">D:{page.depth}</span>\r\n                    </div>\r\n                    <p className=\"text-[9px] text-gray-500\" title={page.url}>\r\n                      {page.url.length > 60 ? page.url.substring(0, 60) + '...' : page.url}\r\n                    </p>\r\n                  </div>\r\n                ))}\r\n              </div>\r\n            </div>\r\n          )}\r\n        </div>\r\n\r\n        <DialogFooter>\r\n          {showStopConfirm ? (\r\n            <div className=\"flex items-center gap-2 w-full justify-end\">\r\n              <span className=\"text-sm text-gray-600 mr-2\">Xác nhận dừng?</span>\r\n              <Button\r\n                variant=\"outline\"\r\n                size=\"sm\"\r\n                onClick={() => setShowStopConfirm(false)}\r\n                disabled={isStopping}\r\n              >\r\n                Hủy\r\n              </Button>\r\n              <Button variant=\"destructive\" size=\"sm\" onClick={handleStop} disabled={isStopping}>\r\n                {isStopping ? (\r\n                  <>\r\n                    <Loader2 className=\"h-4 w-4 animate-spin mr-2\" />\r\n                    Đang dừng...\r\n                  </>\r\n                ) : (\r\n                  'Xác nhận'\r\n                )}\r\n              </Button>\r\n            </div>\r\n          ) : (\r\n            isInProgress && (\r\n              <Button variant=\"destructive\" onClick={() => setShowStopConfirm(true)}>\r\n                Dừng thu thập\r\n              </Button>\r\n            )\r\n          )}\r\n          {isTerminal && (\r\n            <Button variant=\"outline\" onClick={onClose}>\r\n              Đóng\r\n            </Button>\r\n          )}\r\n        </DialogFooter>\r\n      </DialogContent>\r\n    </Dialog>\r\n  );\r\n}\r\n","import axios from 'axios';\r\nimport React, { Dispatch, SetStateAction, useEffect, useState } from 'react';\r\n\r\nimport { Button } from '@/components/ui/button';\r\nimport {\r\n  Dialog,\r\n  DialogContent,\r\n  DialogDescription,\r\n  DialogFooter,\r\n  DialogHeader,\r\n  DialogTitle,\r\n} from '@/components/ui/dialog';\r\nimport { useToast } from '@/hooks/use-toast.ts';\r\n\r\ninterface DialogRemoveFilesProps {\r\n  apiBaseUrl?: string;\r\n  openDialogRename: boolean;\r\n  setOpenDialogRename: Dispatch<SetStateAction<boolean>>;\r\n  setFileToMove: Dispatch<SetStateAction<any>>;\r\n  fileToMove: any;\r\n  refreshFiles: () => Promise<void>;\r\n  ignoreCache: {\r\n    current: boolean;\r\n  };\r\n  autoSyncAfterFileOperation?: (operationType: string) => Promise<void>;\r\n}\r\n\r\nconst DialogRemoveFiles: React.FC<DialogRemoveFilesProps> = ({\r\n  openDialogRename,\r\n  setOpenDialogRename,\r\n  apiBaseUrl,\r\n  setFileToMove,\r\n  fileToMove,\r\n  refreshFiles,\r\n  ignoreCache,\r\n  autoSyncAfterFileOperation,\r\n}) => {\r\n  const [structureMap, setStructureMap] = useState<Record<string, any>>({});\r\n  const [isRemoving, setIsRemoving] = useState(false);\r\n  const [isLoading, setIsLoading] = useState(false);\r\n  const [selectPath, setSelectPath] = useState('');\r\n\r\n  const { toast } = useToast();\r\n\r\n  useEffect(() => {\r\n    if (openDialogRename) {\r\n      fetchS3Folders(selectPath);\r\n    }\r\n  }, [selectPath, openDialogRename]);\r\n\r\n  const fetchS3Folders = async (path: string) => {\r\n    try {\r\n      setIsLoading(true);\r\n      const response = await axios.get(`${apiBaseUrl}/api/list-s3-folders?prefix=${path}`);\r\n      setStructureMap(response?.data);\r\n    } catch (error) {\r\n      toast({\r\n        title: 'Error',\r\n        description: 'Unable to load S3 folder list',\r\n        variant: 'destructive',\r\n      });\r\n    } finally {\r\n      setIsLoading(false);\r\n    }\r\n  };\r\n\r\n  const handleMoveFile = async () => {\r\n    setIsRemoving(true);\r\n    try {\r\n      const oldPath = fileToMove.key;\r\n      // Check if the oldPath is the same as the new path (considering trailing slash)\r\n      const normalizedOldPath = oldPath.endsWith('/') ? oldPath : `${oldPath}/`;\r\n      const normalizedNewPath = selectPath.endsWith('/') ? selectPath : `${selectPath}/`;\r\n\r\n      if (normalizedOldPath === normalizedNewPath || oldPath === selectPath) {\r\n        toast({\r\n          title: 'Lỗi',\r\n          description: 'Không thể di chuyển file đến cùng vị trí',\r\n          variant: 'destructive',\r\n        });\r\n        setIsRemoving(false);\r\n        return;\r\n      }\r\n      await axios.post(`${apiBaseUrl}/api/move`, {\r\n        oldPath,\r\n        newPath: selectPath,\r\n      });\r\n\r\n      // Refresh the file list\r\n      ignoreCache.current = true;\r\n      await refreshFiles();\r\n\r\n      // Show success toast\r\n      toast({\r\n        title: 'Đã di chuyển',\r\n        description: `Đã di chuyển thành công \"${fileToMove.name}\" đến \"${selectPath}\"`,\r\n      });\r\n      setOpenDialogRename(false);\r\n      setFileToMove(null);\r\n      setSelectPath('');\r\n\r\n      // Auto sync knowledge base after move\r\n      if (autoSyncAfterFileOperation) {\r\n        await autoSyncAfterFileOperation('move');\r\n      }\r\n    } catch (error) {\r\n      console.error('Error renaming item:', error);\r\n      toast({\r\n        title: 'Lỗi',\r\n        description: 'Không thể đổi tên',\r\n        variant: 'destructive',\r\n      });\r\n    } finally {\r\n      setIsRemoving(false);\r\n    }\r\n  };\r\n\r\n  return (\r\n    <Dialog\r\n      open={openDialogRename}\r\n      onOpenChange={(e) => {\r\n        if (!e) {\r\n          setOpenDialogRename(false);\r\n          setFileToMove(null);\r\n          setSelectPath('');\r\n        }\r\n      }}\r\n    >\r\n      <DialogContent className=\"max-h-[700px] pb-3 px-1 s3-explr-input-group max-w-5xl w-[90%] p-6 bg-white rounded-lg shadow-lg\">\r\n        <DialogHeader className=\"mb-4 w-full h-full\">\r\n          <nav className=\"mb-4\">\r\n            <ul className=\"flex items-center space-x-2 text-sm text-gray-600\">\r\n              <li\r\n                className=\"cursor-pointer hover:text-blue-600 transition-colors\"\r\n                onClick={() => setSelectPath('')}\r\n              >\r\n                Root\r\n              </li>\r\n              {selectPath.split('/').map((path, index, array) => (\r\n                <li\r\n                  key={index}\r\n                  className=\"cursor-pointer hover:text-blue-600 transition-colors\"\r\n                  onClick={() =>\r\n                    setSelectPath(path === 'Root' ? '' : array.slice(0, index + 1).join('/') + '/')\r\n                  }\r\n                >\r\n                  {path.length > 50 ? `${path.slice(0, 50)}...` : path}\r\n                </li>\r\n              ))}\r\n            </ul>\r\n          </nav>\r\n          <DialogTitle className=\"text-xl font-semibold text-gray-800\">\r\n            Di chuyển{' '}\r\n            <span className=\"text-sm text-gray-500\">\r\n              ( file hoặc folder sẽ được di chuyển đến thư mục{' '}\r\n              {selectPath === '' ? 'Root' : selectPath} )\r\n            </span>\r\n          </DialogTitle>\r\n          <DialogDescription className=\"text-gray-600 w-full h-[50dvh] max-h-[500px] overflow-hidden overflow-y-auto\">\r\n            {isLoading ? (\r\n              <div className=\"flex justify-center items-center py-4\">\r\n                <div className=\"loader ease-linear rounded-full border-4 border-t-4 border-gray-200 h-12 w-12\"></div>\r\n              </div>\r\n            ) : (\r\n              <ul className=\"space-y-2\">\r\n                {Object.keys(structureMap)?.map((folder) => (\r\n                  <li\r\n                    className=\"cursor-pointer hover:bg-gray-100 p-2 rounded transition-colors\"\r\n                    onClick={() => setSelectPath(folder)}\r\n                    key={folder}\r\n                  >\r\n                    {folder.length > 50 ? `${folder.slice(0, 50)}...` : folder}\r\n                  </li>\r\n                ))}\r\n              </ul>\r\n            )}\r\n          </DialogDescription>\r\n        </DialogHeader>\r\n        <DialogFooter className=\"flex justify-end space-x-2\">\r\n          <Button\r\n            variant=\"outline\"\r\n            onClick={() => setOpenDialogRename(false)}\r\n            className=\"px-4 py-2 rounded border border-gray-300 text-gray-700 hover:bg-gray-100 transition-colors\"\r\n          >\r\n            Cancel\r\n          </Button>\r\n          <Button onClick={handleMoveFile} disabled={isRemoving} className=\"s3-explr-crawl-btn\">\r\n            Move\r\n          </Button>\r\n        </DialogFooter>\r\n      </DialogContent>\r\n    </Dialog>\r\n  );\r\n};\r\n\r\nexport default DialogRemoveFiles;\r\n","import { Loader2 } from 'lucide-react';\r\nimport { useEffect, useState } from 'react';\r\n\r\nimport { Button } from '@/components/ui/button';\r\nimport { Checkbox } from '@/components/ui/checkbox';\r\nimport {\r\n  Dialog,\r\n  DialogContent,\r\n  DialogFooter,\r\n  DialogHeader,\r\n  DialogTitle,\r\n} from '@/components/ui/dialog';\r\nimport { Input } from '@/components/ui/input';\r\nimport { Label } from '@/components/ui/label';\r\nimport {\r\n  Select,\r\n  SelectContent,\r\n  SelectItem,\r\n  SelectTrigger,\r\n  SelectValue,\r\n} from '@/components/ui/select';\r\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';\r\nimport { DocumentPermission, Group, useSharingApi } from '@/hooks/use-shareing-api';\r\nimport { getUserInfoFromLocal } from '@/lib/utils';\r\n\r\nimport { S3File } from '../Home';\r\n\r\ninterface DialogShareProps {\r\n  open: boolean;\r\n  onClose: () => void;\r\n  file: S3File | null;\r\n  apiBaseUrl: string;\r\n  rootUrlHostApi: string;\r\n}\r\nexport interface IBodyDocumentPermission {\r\n  id?: string;\r\n  path: string;\r\n  isFolder?: boolean;\r\n  isPublic?: boolean;\r\n  permissions: DocumentPermission;\r\n  userId?: string;\r\n  groupId?: string;\r\n  groupname?: string;\r\n  grandtedBy: string;\r\n  username?: string;\r\n  email?: string;\r\n  users?: number;\r\n}\r\n\r\nconst permissionOptions = [\r\n  // { value: 'VIEW_DOCUMENT', label: 'Chỉ xem' },\r\n  { value: 'EDIT_DOCUMENT', label: 'Chỉnh sửa' },\r\n  // { value: 'DOWNLOAD_DOCUMENT', label: 'Tải xuống' },\r\n];\r\n\r\nexport default function DialogShare({\r\n  onClose,\r\n  open,\r\n  file,\r\n  apiBaseUrl,\r\n  rootUrlHostApi,\r\n}: DialogShareProps) {\r\n  const [mode, setMode] = useState('users');\r\n  const [searchUser, setSearchUser] = useState('');\r\n  const [searchGroup, setSearchGroup] = useState('');\r\n  const [searchSharedUser, setSearchSharedUser] = useState('');\r\n  const [searchSharedGroup, setSearchSharedGroup] = useState('');\r\n  const [permission, setPermission] = useState<DocumentPermission>(\r\n    DocumentPermission.VIEW_DOCUMENT,\r\n  );\r\n  const [docPermissions, setDocPermissions] = useState<IBodyDocumentPermission[]>([]);\r\n\r\n  const {\r\n    users,\r\n    groups,\r\n    sharedUsers,\r\n    sharedGroups,\r\n    fetchData,\r\n    loading,\r\n    postGranted,\r\n    loadingGrandted,\r\n    setSharedGroups,\r\n    setSharedUsers,\r\n  } = useSharingApi(apiBaseUrl, rootUrlHostApi);\r\n\r\n  const currentUser = getUserInfoFromLocal();\r\n\r\n  const filePath = file ? file.key : '';\r\n\r\n  const filteredUsers = users.filter(\r\n    (u) =>\r\n      currentUser?.id !== u.id &&\r\n      (u.username.toLowerCase().includes(searchUser.toLowerCase()) ||\r\n        u.email?.toLowerCase().includes(searchUser.toLowerCase())),\r\n  );\r\n  const filteredGroups = groups.filter((g) =>\r\n    g.groupname.toLowerCase().includes(searchGroup.toLowerCase()),\r\n  );\r\n  const filteredSharedUsers = sharedUsers.filter(\r\n    (u) =>\r\n      u.username?.toLowerCase().includes(searchSharedUser.toLowerCase()) ||\r\n      u.email?.toLowerCase().includes(searchSharedUser.toLowerCase()),\r\n  );\r\n  const filteredSharedGroups = sharedGroups.filter((g) =>\r\n    g.groupname?.toLowerCase().includes(searchSharedGroup.toLowerCase()),\r\n  );\r\n\r\n  // const handleChangePermission = (v: DocumentPermission) => {\r\n  //   setPermission(v);\r\n\r\n  //   setDocPermissions((prev) => prev.map((data) => ({ ...data, permissions: v })));\r\n  // };\r\n\r\n  const handleClearSelection = () => {\r\n    if (mode === 'users') {\r\n      setSearchUser('');\r\n      setSearchSharedUser('');\r\n    } else {\r\n      setSearchGroup('');\r\n      setSearchSharedGroup('');\r\n\r\n      setMode('users');\r\n    }\r\n\r\n    setDocPermissions([]);\r\n    setPermission(DocumentPermission.EDIT_DOCUMENT);\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (open) {\r\n      fetchData(filePath);\r\n    } else {\r\n      handleClearSelection();\r\n    }\r\n  }, [open, filePath]);\r\n\r\n  const handleChangeTab = (value: 'users' | 'groups') => {\r\n    if (value !== mode) {\r\n      if (mode === 'users') {\r\n        setSearchUser('');\r\n        setSearchSharedUser('');\r\n      } else {\r\n        setSearchGroup('');\r\n        setSearchSharedGroup('');\r\n      }\r\n    }\r\n    setMode(value);\r\n  };\r\n\r\n  const handleToggleUser = (userId: string) => {\r\n    if (!file) return;\r\n\r\n    setDocPermissions((prev) => {\r\n      const existed = prev.find((docPermission) => docPermission.userId === userId);\r\n\r\n      if (existed) {\r\n        return prev.filter((docPermission) => docPermission.userId !== userId);\r\n      }\r\n\r\n      const filePath = file.key + file.name;\r\n      const newDocPermission: IBodyDocumentPermission = {\r\n        path: filePath,\r\n        permissions: permission,\r\n        userId,\r\n        grandtedBy: currentUser?.id,\r\n      };\r\n\r\n      return [...prev, newDocPermission];\r\n    });\r\n  };\r\n\r\n  const handleToggleGroup = (group: Group) => {\r\n    if (!file) return;\r\n\r\n    const groupname = group.groupname;\r\n\r\n    setDocPermissions((prev) => {\r\n      const existed = prev.find((docPermission) => docPermission.groupname === groupname);\r\n\r\n      if (existed) {\r\n        return prev.filter((docPermission) => docPermission.groupname !== groupname);\r\n      }\r\n\r\n      const filePath = file.key + file.name;\r\n      const newDocPermission: IBodyDocumentPermission = {\r\n        path: filePath,\r\n        permissions: permission,\r\n        groupname,\r\n        groupId: group.id,\r\n        grandtedBy: currentUser?.id,\r\n        users: group.users,\r\n      };\r\n\r\n      return [...prev, newDocPermission];\r\n    });\r\n  };\r\n\r\n  const handleChangeShared = async (\r\n    shared: IBodyDocumentPermission,\r\n    newPermission: DocumentPermission,\r\n    type: 'users' | 'groups',\r\n  ) => {\r\n    const newShared = { ...shared, permissions: newPermission };\r\n\r\n    setDocPermissions((prev) => {\r\n      const updated = prev.map((item) => (item.id === newShared.id ? newShared : item));\r\n\r\n      const exists = prev.some((item) => item.id === newShared.id);\r\n      if (!exists) {\r\n        updated.push(newShared);\r\n      }\r\n\r\n      return updated;\r\n    });\r\n\r\n    if (type === 'users') {\r\n      setSharedUsers((prev) => prev.map((user) => (user.id === shared.id ? newShared : user)));\r\n    } else {\r\n      setSharedGroups((prev) => prev.map((group) => (group.id === shared.id ? newShared : group)));\r\n    }\r\n  };\r\n\r\n  const handleShare = async () => {\r\n    if (file) {\r\n      const filePath = file?.key || '' + file?.name;\r\n      const resposne = await postGranted(filePath, currentUser?.id, docPermissions);\r\n\r\n      if (resposne?.status == 200) {\r\n        setDocPermissions([]);\r\n      }\r\n    }\r\n  };\r\n\r\n  const listContainerStyle =\r\n    'flex-1 min-h-0 overflow-y-auto border rounded-lg px-3 py-2 bg-background shadow-sm';\r\n\r\n  if (!file) {\r\n    return null;\r\n  }\r\n\r\n  return (\r\n    <Dialog open={open} onOpenChange={onClose}>\r\n      <DialogContent className=\"max-w-5xl h-[80vh] flex flex-col overflow-hidden\">\r\n        <DialogHeader>\r\n          <DialogTitle className=\"text-lg font-semibold\">Chia sẻ tài liệu: {file.name}</DialogTitle>\r\n        </DialogHeader>\r\n\r\n        <Tabs defaultValue=\"users\" className=\"flex-1 flex flex-col overflow-hidden\">\r\n          <TabsList className=\"grid grid-cols-2 w-1/2 mx-auto mb-4 bg-muted rounded-lg\">\r\n            <TabsTrigger value=\"users\" className=\"py-2\" onClick={() => handleChangeTab('users')}>\r\n              Người dùng\r\n            </TabsTrigger>\r\n            <TabsTrigger value=\"groups\" className=\"py-2\" onClick={() => handleChangeTab('groups')}>\r\n              Nhóm\r\n            </TabsTrigger>\r\n          </TabsList>\r\n\r\n          <TabsContent value=\"users\" className=\"flex-1 h-full min-h-0 overflow-hidden\">\r\n            <div className=\"grid grid-cols-2 gap-6 h-full\">\r\n              <div className=\"flex flex-col flex-1 min-h-0\">\r\n                <p className=\"text-sm font-semibold mb-2\">Chia sẻ với người dùng:</p>\r\n                <Input\r\n                  placeholder=\"Tìm người dùng...\"\r\n                  className=\"mb-3 border-input bg-background shadow-sm\"\r\n                  value={searchUser}\r\n                  onChange={(e) => setSearchUser(e.target.value)}\r\n                />\r\n                <div className={listContainerStyle}>\r\n                  {loading ? (\r\n                    <div className=\"flex items-center justify-center h-full\">\r\n                      <Loader2 className=\"h-10 w-10 animate-spin text-muted-foreground\" />\r\n                    </div>\r\n                  ) : filteredUsers.length === 0 ? (\r\n                    <p className=\"text-muted-foreground italic text-center h-full flex items-center justify-center\">\r\n                      Không tìm thấy người dùng.\r\n                    </p>\r\n                  ) : (\r\n                    <ul className=\"space-y-2\">\r\n                      {filteredUsers.map((user) => (\r\n                        <li\r\n                          key={user.id}\r\n                          onClick={() => handleToggleUser(user.id)}\r\n                          className=\"flex flex-col space-y-1 cursor-pointer hover:bg-accent p-2 rounded-md transition-colors\"\r\n                        >\r\n                          <div className=\"flex items-center space-x-3\">\r\n                            <Checkbox\r\n                              id={`user-${user.id}`}\r\n                              checked={!!docPermissions.find((dp) => dp.userId === user.id)}\r\n                            />\r\n                            <Label className=\"flex-1\">\r\n                              <p className=\"font-medium\">{user.username}</p>\r\n                              <p className=\"text-xs text-muted-foreground\">{user.email}</p>\r\n                              <p className=\"text-xs text-muted-foreground\">{user.groupname}</p>\r\n                            </Label>\r\n                          </div>\r\n                        </li>\r\n                      ))}\r\n                    </ul>\r\n                  )}\r\n                </div>\r\n              </div>\r\n\r\n              <div className=\"flex flex-col flex-1 min-h-0\">\r\n                <p className=\"text-sm font-semibold mb-2\">Đã chia sẻ với người dùng:</p>\r\n                <Input\r\n                  placeholder=\"Tìm người dùng đã chia sẻ...\"\r\n                  className=\"mb-3 border-input bg-background shadow-sm\"\r\n                  value={searchSharedUser}\r\n                  onChange={(e) => setSearchSharedUser(e.target.value)}\r\n                />\r\n                <div className={listContainerStyle}>\r\n                  {loading ? (\r\n                    <div className=\"flex items-center justify-center h-full\">\r\n                      <Loader2 className=\"h-10 w-10 animate-spin text-muted-foreground\" />\r\n                    </div>\r\n                  ) : filteredSharedUsers.length === 0 ? (\r\n                    <p className=\"text-muted-foreground italic text-center h-full flex items-center justify-center\">\r\n                      Chưa chia sẻ với người dùng nào.\r\n                    </p>\r\n                  ) : (\r\n                    <ul className=\"space-y-2\">\r\n                      {filteredSharedUsers.map((user) => (\r\n                        <li\r\n                          key={user.id}\r\n                          className=\"flex items-center justify-between gap-4 hover:bg-accent p-2 rounded-md transition-colors\"\r\n                        >\r\n                          <div className=\"flex flex-col\">\r\n                            <p className=\"font-medium\">{user.username}</p>\r\n                            <p className=\"text-xs text-muted-foreground\">{user.email}</p>\r\n                            <p className=\"text-xs text-muted-foreground\">{user.groupname}</p>\r\n                          </div>\r\n\r\n                          <Select\r\n                            value={user.permissions}\r\n                            onValueChange={(v: DocumentPermission) =>\r\n                              handleChangeShared(user, v, 'users')\r\n                            }\r\n                            disabled={user.permissions === DocumentPermission.OWNER_DOCUMENT}\r\n                          >\r\n                            <SelectTrigger className=\"w-[120px]\">\r\n                              <SelectValue placeholder=\"Chọn quyền\" />\r\n                            </SelectTrigger>\r\n                            <SelectContent>\r\n                              {permissionOptions.map((option) => (\r\n                                <SelectItem key={option.value} value={option.value}>\r\n                                  {option.label}\r\n                                </SelectItem>\r\n                              ))}\r\n                              {user.permissions === DocumentPermission.OWNER_DOCUMENT && (\r\n                                <SelectItem\r\n                                  key={DocumentPermission.OWNER_DOCUMENT}\r\n                                  value={DocumentPermission.OWNER_DOCUMENT}\r\n                                >\r\n                                  Chủ sở hữu\r\n                                </SelectItem>\r\n                              )}\r\n                              <SelectItem key={'None'} value={'None'}>\r\n                                Thu hồi\r\n                              </SelectItem>\r\n                            </SelectContent>\r\n                          </Select>\r\n                        </li>\r\n                      ))}\r\n                    </ul>\r\n                  )}\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </TabsContent>\r\n\r\n          <TabsContent value=\"groups\" className=\"flex-1 h-full min-h-0 overflow-hidden\">\r\n            <div className=\"grid grid-cols-2 gap-6 h-full\">\r\n              <div className=\"flex flex-col flex-1 min-h-0\">\r\n                <p className=\"text-sm font-semibold mb-2\">Chia sẻ với nhóm:</p>\r\n                <Input\r\n                  placeholder=\"Tìm nhóm...\"\r\n                  className=\"mb-3 border-input bg-background shadow-sm\"\r\n                  value={searchGroup}\r\n                  onChange={(e) => setSearchGroup(e.target.value)}\r\n                />\r\n                <div className={listContainerStyle}>\r\n                  {loading ? (\r\n                    <div className=\"flex items-center justify-center h-full\">\r\n                      <Loader2 className=\"h-10 w-10 animate-spin text-muted-foreground\" />\r\n                    </div>\r\n                  ) : filteredGroups.length === 0 ? (\r\n                    <p className=\"text-muted-foreground italic text-center h-full flex items-center justify-center\">\r\n                      Không tìm thấy nhóm.\r\n                    </p>\r\n                  ) : (\r\n                    <ul className=\"space-y-2\">\r\n                      {filteredGroups.map((group) => (\r\n                        <li\r\n                          key={group.groupname}\r\n                          onClick={() => handleToggleGroup(group)}\r\n                          className=\"flex items-center space-x-3 cursor-pointer hover:bg-accent p-2 rounded-md transition-colors\"\r\n                        >\r\n                          <Checkbox\r\n                            id={`group-${group.groupname}`}\r\n                            checked={\r\n                              !!docPermissions.find((dp) => dp.groupname === group.groupname)\r\n                            }\r\n                          />\r\n                          <Label className=\"font-medium\">\r\n                            <p className=\"font-medium\">{group.groupname}</p>\r\n                            <p className=\"text-xs text-muted-foreground\">\r\n                              Số lượng: {group.users || 0}\r\n                            </p>\r\n                          </Label>\r\n                        </li>\r\n                      ))}\r\n                    </ul>\r\n                  )}\r\n                </div>\r\n              </div>\r\n\r\n              <div className=\"flex flex-col flex-1 min-h-0\">\r\n                <p className=\"text-sm font-semibold mb-2\">Đã chia sẻ với nhóm:</p>\r\n                <Input\r\n                  placeholder=\"Tìm nhóm đã chia sẻ...\"\r\n                  className=\"mb-3 border-input bg-background shadow-sm\"\r\n                  value={searchSharedGroup}\r\n                  onChange={(e) => setSearchSharedGroup(e.target.value)}\r\n                />\r\n                <div className={listContainerStyle}>\r\n                  {loading ? (\r\n                    <div className=\"flex items-center justify-center h-full\">\r\n                      <Loader2 className=\"h-10 w-10 animate-spin text-muted-foreground\" />\r\n                    </div>\r\n                  ) : filteredSharedGroups.length === 0 ? (\r\n                    <p className=\"text-muted-foreground italic text-center h-full flex items-center justify-center\">\r\n                      Chưa chia sẻ với nhóm nào.\r\n                    </p>\r\n                  ) : (\r\n                    <ul className=\"space-y-2\">\r\n                      {filteredSharedGroups.map((group) => (\r\n                        <li\r\n                          key={group.groupname}\r\n                          className=\"flex items-center justify-between gap-4 hover:bg-accent p-2 rounded-md transition-colors\"\r\n                        >\r\n                          <div className=\"flex flex-col\">\r\n                            <p className=\"font-medium\">{group.groupname}</p>\r\n                            <p className=\"text-xs text-muted-foreground\">\r\n                              Số lượng: {group.users || 0}\r\n                            </p>\r\n                          </div>\r\n\r\n                          <Select\r\n                            value={group.permissions}\r\n                            onValueChange={(v: DocumentPermission) =>\r\n                              handleChangeShared(group, v, 'groups')\r\n                            }\r\n                          >\r\n                            <SelectTrigger className=\"w-[120px]\">\r\n                              <SelectValue placeholder=\"Chọn quyền\" />\r\n                            </SelectTrigger>\r\n                            <SelectContent>\r\n                              {permissionOptions.map((option) => (\r\n                                <SelectItem key={option.value} value={option.value}>\r\n                                  {option.label}\r\n                                </SelectItem>\r\n                              ))}\r\n                              <SelectItem key={'None'} value={'None'}>\r\n                                Thu hồi\r\n                              </SelectItem>\r\n                            </SelectContent>\r\n                          </Select>\r\n                        </li>\r\n                      ))}\r\n                    </ul>\r\n                  )}\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </TabsContent>\r\n        </Tabs>\r\n\r\n        {/* <div className=\"mt-4 bg-muted/50 p-4 rounded-lg\">\r\n          <Label className=\"font-medium mb-2 block\">Phân quyền:</Label>\r\n          <Select value={permission} onValueChange={handleChangePermission}>\r\n            <SelectTrigger className=\"w-1/2 border border-input bg-background shadow-sm hover:bg-accent\">\r\n              <SelectValue placeholder=\"Chọn quyền truy cập\" />\r\n            </SelectTrigger>\r\n            <SelectContent>\r\n              {permissionOptions.map((option) => (\r\n                <SelectItem value={option.value} className=\"flex items-center gap-2\">\r\n                  {option.label}\r\n                </SelectItem>\r\n              ))}\r\n            </SelectContent>\r\n          </Select>\r\n        </div> */}\r\n\r\n        <DialogFooter>\r\n          <Button variant=\"outline\" onClick={onClose}>\r\n            Huỷ\r\n          </Button>\r\n          <Button\r\n            variant=\"default\"\r\n            onClick={handleShare}\r\n            disabled={docPermissions.length === 0 || loadingGrandted}\r\n            className=\"w-[120px] justify-center\"\r\n          >\r\n            {loadingGrandted ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : 'Lưu thay đổi'}\r\n          </Button>\r\n        </DialogFooter>\r\n      </DialogContent>\r\n    </Dialog>\r\n  );\r\n}\r\n","import { Globe, Lock } from 'lucide-react';\r\nimport { useEffect, useState } from 'react';\r\n\r\nimport ToggleButton from '@/components/buttons/toggle-button/ToggleButton';\r\nimport { Button } from '@/components/ui/button';\r\nimport {\r\n  Dialog,\r\n  DialogContent,\r\n  DialogDescription,\r\n  DialogFooter,\r\n  DialogHeader,\r\n  DialogTitle,\r\n} from '@/components/ui/dialog';\r\nimport { Label } from '@/components/ui/label';\r\n\r\nimport { S3File } from '../Home';\r\n\r\ninterface IPrivacyDialog {\r\n  open: boolean;\r\n  onClose: () => void;\r\n  onSave: (key: string, enabled: boolean) => void;\r\n  file: (S3File & { isPublic?: boolean }) | null;\r\n}\r\n\r\nexport default function PrivacyDialog({ open, onClose, onSave, file }: IPrivacyDialog) {\r\n  const [enabled, setEnabled] = useState(!!file?.isPublic);\r\n\r\n  useEffect(() => {\r\n    setEnabled(!!file?.isPublic);\r\n  }, [file?.isPublic]);\r\n\r\n  const handleSave = async () => {\r\n    onSave(file?.key || '', enabled);\r\n    onClose();\r\n  };\r\n\r\n  if (!file) return null;\r\n\r\n  return (\r\n    <Dialog open={open} onOpenChange={onClose}>\r\n      <DialogContent className=\"sm:max-w-[400px]\">\r\n        <DialogHeader>\r\n          <DialogTitle>Chỉnh sửa quyền riêng tư</DialogTitle>\r\n        </DialogHeader>\r\n\r\n        <DialogDescription className=\"s3-explr-dialog-description break-all whitespace-normal\">\r\n          Tài liệu: {file.key}\r\n        </DialogDescription>\r\n\r\n        <div className=\"flex items-center justify-between py-4\">\r\n          <div className=\"flex items-center gap-2\">\r\n            {enabled ? (\r\n              <Globe className=\"text-green-500\" size={20} />\r\n            ) : (\r\n              <Lock className=\"text-gray-500\" size={20} />\r\n            )}\r\n            <Label>{enabled ? 'Công khai' : 'Riêng tư'}</Label>\r\n          </div>\r\n          <ToggleButton enabled={enabled} onChange={() => setEnabled((prev) => !prev)} />\r\n        </div>\r\n\r\n        <DialogFooter>\r\n          <Button variant=\"outline\" onClick={onClose}>\r\n            Hủy\r\n          </Button>\r\n          <Button onClick={handleSave}>Lưu thay đổi</Button>\r\n        </DialogFooter>\r\n      </DialogContent>\r\n    </Dialog>\r\n  );\r\n}\r\n","import axios from 'axios';\r\nimport React, { useEffect, useState } from 'react';\r\n\r\nimport { Input } from '@/components/ui/input';\r\nimport { Label } from '@/components/ui/label';\r\nimport { useToast } from '@/hooks/use-toast.ts';\r\n\r\n// Tree node for folder hierarchy\r\ninterface TreeNode {\r\n  name: string;\r\n  key: string;\r\n  children: TreeNode[];\r\n  hasMoreChildren: boolean;\r\n  isLoading: boolean;\r\n  apiPrefix: string;\r\n  hasFetched: boolean;\r\n}\r\n\r\ninterface S3FolderTreeSelectorProps {\r\n  apiBaseUrl?: string;\r\n  value?: string;\r\n  onChange?: (value: string) => void;\r\n  placeholder?: string;\r\n  disabled?: boolean;\r\n  label?: string;\r\n  required?: boolean;\r\n  showSelectedInfo?: boolean;\r\n}\r\n\r\nconst S3FolderTreeSelector: React.FC<S3FolderTreeSelectorProps> = ({\r\n  apiBaseUrl,\r\n  value = '',\r\n  onChange,\r\n  placeholder = 'Tìm kiếm thư mục...',\r\n  disabled = false,\r\n  label = 'Thư mục lưu trữ trong S3',\r\n  required = false,\r\n  showSelectedInfo = true,\r\n}) => {\r\n  const [treeData, setTreeData] = useState<TreeNode[]>([]);\r\n  const [searchQuery, setSearchQuery] = useState('');\r\n  const [expandedFolders, setExpandedFolders] = useState<Set<string>>(new Set());\r\n  const [isInitialLoading, setIsInitialLoading] = useState(false);\r\n\r\n  const { toast } = useToast();\r\n\r\n  // Fetch S3 folders for a given prefix and update a specific node in the tree\r\n  const fetchFoldersAndUpdate = async (targetNodeKey: string, apiPrefix: string) => {\r\n    try {\r\n      setTreeData((prev) =>\r\n        prev.map((node) => (node.key === targetNodeKey ? { ...node, isLoading: true } : node)),\r\n      );\r\n\r\n      const response = await axios.get(`${apiBaseUrl}/api/list-s3-folders`, {\r\n        params: { prefix: apiPrefix },\r\n      });\r\n      const folders = response.data || {};\r\n      const newNodes = convertToTree(folders, apiPrefix);\r\n\r\n      setTreeData((prev) => {\r\n        const updateNode = (nodes: TreeNode[]): TreeNode[] => {\r\n          return nodes.map((node) => {\r\n            if (node.key === targetNodeKey) {\r\n              return {\r\n                ...node,\r\n                children: newNodes,\r\n                isLoading: false,\r\n                hasMoreChildren: node.hasMoreChildren,\r\n                hasFetched: true,\r\n              };\r\n            }\r\n            if (node.children.length > 0) {\r\n              return { ...node, children: updateNode(node.children) };\r\n            }\r\n            return node;\r\n          });\r\n        };\r\n        return updateNode(prev);\r\n      });\r\n    } catch (error) {\r\n      console.error('Error fetching S3 folders:', error);\r\n      toast({\r\n        title: 'Error',\r\n        description: 'Không thể tải danh sách thư mục S3',\r\n        variant: 'destructive',\r\n      });\r\n      setTreeData((prev) =>\r\n        prev.map((node) => (node.key === targetNodeKey ? { ...node, isLoading: false } : node)),\r\n      );\r\n    }\r\n  };\r\n\r\n  // Convert flat folder map to tree structure\r\n  const convertToTree = (\r\n    folderMap: Record<string, any>,\r\n    prefixForChildren: string = '',\r\n  ): TreeNode[] => {\r\n    const result: TreeNode[] = [];\r\n    const seen = new Set<string>();\r\n\r\n    Object.keys(folderMap).forEach((key) => {\r\n      const cleanKey = key.endsWith('/') ? key.slice(0, -1) : key;\r\n      const fullKey = cleanKey.endsWith('/') ? cleanKey : cleanKey + '/';\r\n      let folderName: string;\r\n      let childPrefix: string;\r\n\r\n      if (prefixForChildren) {\r\n        let relativeKey = fullKey;\r\n        const prefixStripped = prefixForChildren.replace(/\\/$/, '');\r\n        if (relativeKey.startsWith(prefixStripped + '/')) {\r\n          relativeKey = relativeKey.slice((prefixStripped + '/').length);\r\n        } else if (relativeKey.startsWith(prefixStripped)) {\r\n          relativeKey = relativeKey.slice(prefixStripped.length);\r\n        }\r\n        const relativeParts = relativeKey.split('/').filter((s) => s.length > 0);\r\n        if (relativeParts.length === 0) return;\r\n\r\n        folderName = relativeParts[0] || '';\r\n        childPrefix = fullKey;\r\n      } else {\r\n        const parts = cleanKey.split('/').filter((s) => s.length > 0);\r\n        if (parts.length === 0) return;\r\n        folderName = parts[0] || '';\r\n        childPrefix = fullKey;\r\n      }\r\n\r\n      if (seen.has(folderName)) return;\r\n      seen.add(folderName);\r\n\r\n      result.push({\r\n        name: folderName,\r\n        key: fullKey,\r\n        children: [],\r\n        hasMoreChildren: false,\r\n        isLoading: false,\r\n        apiPrefix: childPrefix,\r\n        hasFetched: false,\r\n      });\r\n    });\r\n\r\n    return result;\r\n  };\r\n\r\n  // Load root level folders on mount\r\n  useEffect(() => {\r\n    const loadRootFolders = async () => {\r\n      setIsInitialLoading(true);\r\n      try {\r\n        const response = await axios.get(`${apiBaseUrl}/api/list-s3-folders`, {\r\n          params: { prefix: '' },\r\n        });\r\n        const folders = response.data || {};\r\n        setTreeData(convertToTree(folders));\r\n      } catch (error) {\r\n        console.error('Error loading root folders:', error);\r\n      } finally {\r\n        setIsInitialLoading(false);\r\n      }\r\n    };\r\n    loadRootFolders();\r\n  }, []);\r\n\r\n  // Handle folder expansion - load children when expanded\r\n  const handleExpand = async (nodeKey: string) => {\r\n    setExpandedFolders((prev) => {\r\n      const next = new Set(prev);\r\n      next.add(nodeKey);\r\n      return next;\r\n    });\r\n\r\n    const findNode = (nodes: TreeNode[], key: string): TreeNode | undefined => {\r\n      for (const node of nodes) {\r\n        if (node.key === key) return node;\r\n        if (node.children.length > 0) {\r\n          const found = findNode(node.children, key);\r\n          if (found) return found;\r\n        }\r\n      }\r\n      return undefined;\r\n    };\r\n\r\n    const node = findNode(treeData, nodeKey);\r\n    if (node && !node.hasFetched && node.children.length === 0 && !node.isLoading) {\r\n      await fetchFoldersAndUpdate(nodeKey, node.apiPrefix);\r\n    }\r\n  };\r\n\r\n  // Handle folder collapse\r\n  const handleCollapse = (folderKey: string) => {\r\n    setExpandedFolders((prev) => {\r\n      const next = new Set(prev);\r\n      next.delete(folderKey);\r\n      return next;\r\n    });\r\n  };\r\n\r\n  // Select a folder\r\n  const handleSelectFolder = (folderKey: string) => {\r\n    onChange?.(folderKey);\r\n  };\r\n\r\n  // Check if a node should be visible based on search\r\n  const isNodeMatchingSearch = (node: TreeNode, query: string): boolean => {\r\n    if (!query) return true;\r\n    const lowerQuery = query.toLowerCase();\r\n    if (node.name.toLowerCase().includes(lowerQuery)) return true;\r\n    return node.children.some((child) => isNodeMatchingSearch(child, query));\r\n  };\r\n\r\n  // Filter tree by search query\r\n  const filterTreeBySearch = (nodes: TreeNode[], query: string): TreeNode[] => {\r\n    if (!query) return nodes;\r\n    return nodes\r\n      .map((node) => ({\r\n        ...node,\r\n        children: filterTreeBySearch(node.children, query),\r\n      }))\r\n      .filter((node) => isNodeMatchingSearch(node, query));\r\n  };\r\n\r\n  // Expand all nodes matching search\r\n  const expandAllMatchingNodes = (nodes: TreeNode[], query: string): Set<string> => {\r\n    const expanded = new Set(expandedFolders);\r\n    const processNode = (node: TreeNode) => {\r\n      if (isNodeMatchingSearch(node, query) || node.children.length > 0) {\r\n        expanded.add(node.key);\r\n        node.children.forEach(processNode);\r\n      }\r\n    };\r\n    nodes.forEach(processNode);\r\n    return expanded;\r\n  };\r\n\r\n  // Auto-expand matching nodes when searching\r\n  useEffect(() => {\r\n    if (searchQuery) {\r\n      setExpandedFolders(expandAllMatchingNodes(treeData, searchQuery));\r\n    }\r\n  }, [searchQuery, treeData]);\r\n\r\n  // Render tree node\r\n  const renderTreeNode = (node: TreeNode, depth: number = 0) => {\r\n    const isExpanded = expandedFolders.has(node.key);\r\n    const isSelected = value === node.key;\r\n    const isFolder = node.key !== '';\r\n\r\n    return (\r\n      <div key={node.key}>\r\n        <div\r\n          className={`flex items-center gap-1 py-1 px-2 cursor-pointer rounded transition-colors ${\r\n            isSelected ? 'bg-blue-50 text-blue-700 font-medium' : 'hover:bg-gray-100 text-gray-700'\r\n          }`}\r\n          style={{ paddingLeft: `${depth * 16 + 8}px` }}\r\n          onClick={() => isFolder && handleSelectFolder(node.key)}\r\n        >\r\n          {/* Expand/Collapse toggle */}\r\n          {isFolder && (\r\n            <span\r\n              className=\"w-4 h-4 flex items-center justify-center flex-shrink-0\"\r\n              onClick={(e) => {\r\n                e.stopPropagation();\r\n                if (isExpanded) {\r\n                  handleCollapse(node.key);\r\n                } else {\r\n                  handleExpand(node.key);\r\n                }\r\n              }}\r\n            >\r\n              {/* Always show arrow by default, only show gray dot after fetch returns no children */}\r\n              {node.hasFetched && node.children.length === 0 ? (\r\n                <span className=\"w-2 h-2 rounded-full bg-gray-300\"></span>\r\n              ) : (\r\n                <svg\r\n                  className={`w-4 h-4 transition-transform ${\r\n                    isExpanded ? 'rotate-90' : ''\r\n                  } ${node.isLoading ? 'animate-spin' : ''}`}\r\n                  fill=\"none\"\r\n                  viewBox=\"0 0 24 24\"\r\n                  stroke=\"currentColor\"\r\n                >\r\n                  <path\r\n                    strokeLinecap=\"round\"\r\n                    strokeLinejoin=\"round\"\r\n                    strokeWidth={2}\r\n                    d=\"M9 5l7 7-7 7\"\r\n                  />\r\n                </svg>\r\n              )}\r\n            </span>\r\n          )}\r\n\r\n          {/* Folder Icon */}\r\n          {isFolder ? (\r\n            <svg\r\n              className=\"w-4 h-4 text-blue-500 flex-shrink-0\"\r\n              fill=\"currentColor\"\r\n              viewBox=\"0 0 20 20\"\r\n            >\r\n              <path d=\"M2 6a2 2 0 012-2h5l2 2h5a2 2 0 012 2v6a2 2 0 01-2 2H4a2 2 0 01-2-2V6z\" />\r\n            </svg>\r\n          ) : (\r\n            <svg\r\n              className=\"w-4 h-4 text-green-500 flex-shrink-0\"\r\n              fill=\"currentColor\"\r\n              viewBox=\"0 0 20 20\"\r\n            >\r\n              <path\r\n                fillRule=\"evenodd\"\r\n                d=\"M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.348 3.37A1 1 0 0012 8.215a1 1 0 01.948.684L14.282 12.6A1 1 0 0015.148 14H16a2 2 0 002-2V8.824a2 2 0 00-.422-1.303L13.136 3.1A2 2 0 0011.718 2H5a2 2 0 00-2 2v2z\"\r\n                clipRule=\"evenodd\"\r\n              />\r\n            </svg>\r\n          )}\r\n\r\n          {/* Name */}\r\n          <span className=\"text-sm truncate\">\r\n            {node.name || <span className=\"text-gray-400 italic\">Root</span>}\r\n          </span>\r\n\r\n          {/* Selection indicator */}\r\n          {isSelected && (\r\n            <svg\r\n              className=\"w-4 h-4 text-blue-500 ml-auto flex-shrink-0\"\r\n              fill=\"currentColor\"\r\n              viewBox=\"0 0 20 20\"\r\n            >\r\n              <path\r\n                fillRule=\"evenodd\"\r\n                d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 9.586 6.707 7.293a1 1 0 00-1.414 1.414l4 4a1 1 0 001.414 0l4-4z\"\r\n                clipRule=\"evenodd\"\r\n              />\r\n            </svg>\r\n          )}\r\n        </div>\r\n\r\n        {/* Children - render when expanded */}\r\n        {isExpanded && (\r\n          <div>\r\n            {node.isLoading && node.children.length === 0 ? (\r\n              <div className=\"py-1 px-2 text-sm text-gray-500\" style={{ paddingLeft: '16px' }}>\r\n                <svg className=\"animate-spin h-3 w-3 inline mr-1\" fill=\"none\" viewBox=\"0 0 24 24\">\r\n                  <circle\r\n                    className=\"opacity-25\"\r\n                    cx=\"12\"\r\n                    cy=\"12\"\r\n                    r=\"10\"\r\n                    stroke=\"currentColor\"\r\n                    strokeWidth=\"4\"\r\n                  />\r\n                  <path\r\n                    className=\"opacity-75\"\r\n                    fill=\"currentColor\"\r\n                    d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\r\n                  />\r\n                </svg>\r\n                Đang tải...\r\n              </div>\r\n            ) : (\r\n              node.children.map((child) => renderTreeNode(child, depth + 1))\r\n            )}\r\n          </div>\r\n        )}\r\n      </div>\r\n    );\r\n  };\r\n\r\n  // Filtered tree data\r\n  const filteredTree = filterTreeBySearch(treeData, searchQuery);\r\n\r\n  return (\r\n    <div className=\"space-y-2\">\r\n      {label && (\r\n        <div className=\"flex items-center gap-1\">\r\n          <Label className=\"text-sm font-medium\">{label}</Label>\r\n          {required && <span className=\"text-red-500\">*</span>}\r\n        </div>\r\n      )}\r\n\r\n      {/* Search input */}\r\n      <Input\r\n        placeholder={placeholder}\r\n        value={searchQuery}\r\n        onChange={(e) => setSearchQuery(e.target.value)}\r\n        disabled={disabled}\r\n        className=\"text-sm\"\r\n      />\r\n\r\n      {/* Tree container */}\r\n      <div className=\"max-h-64 overflow-y-auto border rounded-md p-1 space-y-0.5\">\r\n        {isInitialLoading ? (\r\n          <div className=\"flex items-center justify-center p-4 text-sm text-gray-500\">\r\n            <svg className=\"animate-spin h-4 w-4 mr-2\" fill=\"none\" viewBox=\"0 0 24 24\">\r\n              <circle\r\n                className=\"opacity-25\"\r\n                cx=\"12\"\r\n                cy=\"12\"\r\n                r=\"10\"\r\n                stroke=\"currentColor\"\r\n                strokeWidth=\"4\"\r\n              />\r\n              <path\r\n                className=\"opacity-75\"\r\n                fill=\"currentColor\"\r\n                d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\r\n              />\r\n            </svg>\r\n            Đang tải thư mục...\r\n          </div>\r\n        ) : filteredTree.length === 0 ? (\r\n          <div className=\"flex items-center justify-center p-4 text-sm text-gray-500\">\r\n            Không có thư mục nào\r\n          </div>\r\n        ) : (\r\n          <>\r\n            {/* Root folder option (select entire S3 bucket) */}\r\n            <div\r\n              className={`flex items-center gap-1 py-1 px-2 cursor-pointer rounded transition-colors ${\r\n                value === ''\r\n                  ? 'bg-blue-50 text-blue-700 font-medium'\r\n                  : 'hover:bg-gray-100 text-gray-700'\r\n              }`}\r\n              onClick={() => handleSelectFolder('')}\r\n            >\r\n              <span className=\"w-4 h-4 flex items-center justify-center flex-shrink-0\"></span>\r\n              <svg\r\n                className=\"w-4 h-4 text-green-500 flex-shrink-0\"\r\n                fill=\"currentColor\"\r\n                viewBox=\"0 0 20 20\"\r\n              >\r\n                <path\r\n                  fillRule=\"evenodd\"\r\n                  d=\"M3 5a2 2 0 012-2h7.5a2 2 0 012 2v1a2 2 0 01-2 2H5a2 2 0 01-2-2V5zm4 4h7a2 2 0 012 2v7a2 2 0 01-2 2H7a2 2 0 01-2-2V9a2 2 0 012-2z\"\r\n                  clipRule=\"evenodd\"\r\n                />\r\n              </svg>\r\n              <span className=\"text-sm\">Root (/)</span>\r\n              {value === '' && (\r\n                <svg\r\n                  className=\"w-4 h-4 text-blue-500 ml-auto flex-shrink-0\"\r\n                  fill=\"currentColor\"\r\n                  viewBox=\"0 0 20 20\"\r\n                >\r\n                  <path\r\n                    fillRule=\"evenodd\"\r\n                    d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 9.586 6.707 7.293a1 1 0 00-1.414 1.414l4 4a1 1 0 001.414 0l4-4z\"\r\n                    clipRule=\"evenodd\"\r\n                  />\r\n                </svg>\r\n              )}\r\n            </div>\r\n            {filteredTree.map((node) => renderTreeNode(node))}\r\n          </>\r\n        )}\r\n      </div>\r\n\r\n      {/* Selected folder info */}\r\n      {showSelectedInfo && value && (\r\n        <div className=\"space-y-1\">\r\n          <p className=\"text-xs text-green-600 font-medium\">✓ Đã chọn: {value}</p>\r\n          <p className=\"text-xs text-gray-500\">Dữ liệu sẽ được lưu vào thư mục S3 này.</p>\r\n        </div>\r\n      )}\r\n\r\n      {!value && showSelectedInfo && (\r\n        <p className=\"text-xs text-red-500 font-medium\">Vui lòng chọn thư mục để lưu dữ liệu</p>\r\n      )}\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default S3FolderTreeSelector;\r\n","import { PublicClientApplication } from '@azure/msal-browser';\r\nimport {\r\n  ArrowDownTrayIcon,\r\n  ArrowPathIcon,\r\n  ArrowUpTrayIcon,\r\n  CircleStackIcon,\r\n  ClockIcon,\r\n  FolderIcon,\r\n  FolderPlusIcon,\r\n  GlobeAltIcon,\r\n  PencilIcon,\r\n  PlusIcon,\r\n  ShareIcon,\r\n  StopIcon,\r\n  TrashIcon,\r\n} from '@heroicons/react/24/outline';\r\nimport * as Modal from '@radix-ui/react-dialog';\r\nimport { GoogleOAuthProvider, useGoogleLogin } from '@react-oauth/google';\r\nimport {\r\n  ColumnDef,\r\n  SortingState,\r\n  flexRender,\r\n  getCoreRowModel,\r\n  getSortedRowModel,\r\n  useReactTable,\r\n} from '@tanstack/react-table';\r\nimport dayjs from 'dayjs';\r\nimport { findIndex, forEach } from 'lodash';\r\nimport { ArrowUpDown, EyeIcon, Loader2, MoveUpRight, PenOff } from 'lucide-react';\r\nimport {\r\n  Dispatch,\r\n  MutableRefObject,\r\n  SetStateAction,\r\n  memo,\r\n  useEffect,\r\n  useMemo,\r\n  useRef,\r\n  useState,\r\n} from 'react';\r\nimport { toast as hotToast } from 'react-toastify';\r\nimport { ToastContainer } from 'react-toastify';\r\nimport 'react-toastify/dist/ReactToastify.css';\r\n\r\nimport {\r\n  checkConditionUploadFiles,\r\n  getSyncStatusInVietnamese,\r\n  isDisableField,\r\n  isTextarea,\r\n  keyMapMetadata,\r\n  normalizeMetadataForDisplay,\r\n  stripServerOwnedMetadata,\r\n} from '@/common/utils';\r\nimport ToggleButton from '@/components/buttons/toggle-button/ToggleButton';\r\nimport { PendingApprovalPage } from '@/components/external-document-approval/PendingApprovalPage';\r\nimport {\r\n  Breadcrumb,\r\n  BreadcrumbItem,\r\n  BreadcrumbLink,\r\n  BreadcrumbList,\r\n  BreadcrumbSeparator,\r\n} from '@/components/ui/breadcrumb';\r\nimport { Button } from '@/components/ui/button';\r\nimport { Checkbox } from '@/components/ui/checkbox';\r\nimport {\r\n  Dialog,\r\n  DialogContent,\r\n  DialogDescription,\r\n  DialogFooter,\r\n  DialogHeader,\r\n  DialogTitle,\r\n  DialogTrigger,\r\n} from '@/components/ui/dialog';\r\nimport { Input } from '@/components/ui/input';\r\nimport { Label } from '@/components/ui/label';\r\nimport {\r\n  Pagination,\r\n  PaginationContent,\r\n  PaginationEllipsis,\r\n  PaginationItem,\r\n  PaginationLink,\r\n  PaginationNext,\r\n  PaginationPrevious,\r\n} from '@/components/ui/pagination';\r\nimport {\r\n  Select,\r\n  SelectContent,\r\n  SelectItem,\r\n  SelectTrigger,\r\n  SelectValue,\r\n} from '@/components/ui/select';\r\nimport { Switch } from '@/components/ui/switch';\r\nimport {\r\n  Table,\r\n  TableBody,\r\n  TableCell,\r\n  TableHead,\r\n  TableHeader,\r\n  TableRow,\r\n} from '@/components/ui/table';\r\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';\r\nimport { Textarea } from '@/components/ui/textarea';\r\nimport { Toaster } from '@/components/ui/toaster';\r\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\r\nimport SearchBox from '@/components/utils/SearchBox.tsx';\r\nimport { ReportHistoryModal } from '@/features/bld-reports/ReportHistoryModal';\r\nimport {\r\n  type EmailCrawlerSourceCreateDefaults,\r\n  EmailCrawlerSourceModal,\r\n} from '@/features/email-crawler/EmailCrawlerSourceModal';\r\nimport { DocumentPermission } from '@/hooks/use-shareing-api';\r\nimport { useToast } from '@/hooks/use-toast.ts';\r\nimport axios from '@/lib/axios';\r\nimport { isBldReportsFolderPrefix } from '@/lib/bld-reports-api';\r\nimport { API_BASE_URL } from '@/lib/config';\r\nimport { type EmailCrawlerSource } from '@/lib/email-crawler-api';\r\nimport { type KnownCrawlerFolder } from '@/lib/email-crawler-folders';\r\nimport { buildBootstrapRequest, matchesBootstrapContext } from '@/lib/email-scheduler-auth-api';\r\nimport { useEmailCrawlerSourceByFolder } from '@/lib/use-email-crawler-source';\r\nimport { getAccessTokenInfoFromLocal, getUserInfoFromLocal } from '@/lib/utils.ts';\r\n\r\nimport FailedFilesDisplay from '../components/FailedFilesDisplay';\r\nimport FileUpload from '../components/utils/DragDrop';\r\nimport CrawlProgressDialog from './Dialog/CrawlProgressDialog';\r\nimport DialogRemoveFiles from './Dialog/DialogRemoveFiles';\r\nimport DialogShare from './Dialog/DialogShare';\r\nimport PrivacyDialog from './Dialog/PrivacyDialog';\r\nimport S3FolderTreeSelector from './Dialog/S3FolderTreeSelector';\r\n\r\n// Type definitions for upload metadata form (English field names matching backend storage)\r\ninterface UploadMetadataForm {\r\n  creator: string;\r\n  modifier: string;\r\n  modifiedDate: string;\r\n  summary: string;\r\n  effectiveDate: string;\r\n  expirationDate: string;\r\n  issueDate: string;\r\n  processingStatus: string;\r\n  status: string;\r\n  // Additional fields for kho_doi_ngoai/ only\r\n  documentType: string; // Loại văn bản\r\n  field: string; // Lĩnh vực\r\n  dataSource: string; // Nguồn dữ liệu\r\n}\r\n\r\nconst defaultUploadMetadata: UploadMetadataForm = {\r\n  creator: '',\r\n  modifier: '',\r\n  modifiedDate: '',\r\n  summary: '',\r\n  effectiveDate: '',\r\n  expirationDate: '',\r\n  issueDate: '',\r\n  processingStatus: 'phat_hanh', // Phát hành (default)\r\n  status: 'hieu_luc', // Hiệu lực (default)\r\n  documentType: '', // Loại văn bản\r\n  field: '', // Lĩnh vực\r\n  dataSource: '', // Nguồn dữ liệu\r\n};\r\n\r\n// Giới hạn định dạng tệp được phép tải lên theo từng kho (prefix).\r\n// Key là prefix gốc của kho, value là danh sách phần mở rộng cho phép (viết thường, không dấu chấm).\r\n// Kho không khai báo ở đây thì không bị giới hạn định dạng.\r\nconst UPLOAD_EXTENSION_RULES: Record<string, string[]> = {\r\n  'kho_ncc/': ['docx', 'pdf'],\r\n  'kho_chat_cn/quy_dinh_phap_luat/': ['pdf'],\r\n  'kho_nguyen_lieu/bo_chi_tieu/': ['png', 'jpg', 'jpeg', 'webp', 'gif', 'bmp'],\r\n};\r\n\r\n// Kho tự động trích xuất PDF -> JSON có cấu trúc (structured OCR).\r\nconst CHAT_CN_LEGAL_PREFIX = 'kho_chat_cn/quy_dinh_phap_luat/';\r\n\r\n// Kho bộ chỉ tiêu chỉ nhận ảnh ở đúng thư mục gốc và tự động tạo JSON structured.\r\nconst BO_CHI_TIEU_PREFIX = 'kho_nguyen_lieu/bo_chi_tieu/';\r\n\r\n// Trạng thái parse PDF trả về từ server (khớp với StructuredPdfOcrStatus phía backend).\r\ntype PdfParseStatus = 'queued' | 'processing' | 'succeeded' | 'failed';\r\ntype PdfParseStatusRecord = {\r\n  status: PdfParseStatus;\r\n  progress?: number;\r\n  jsonKey?: string;\r\n  error?: string;\r\n  updatedAt?: string;\r\n};\r\n\r\nconst mergePdfParseStatuses = (\r\n  previous: Record<string, PdfParseStatusRecord>,\r\n  incoming: Record<string, PdfParseStatusRecord>,\r\n): Record<string, PdfParseStatusRecord> => {\r\n  const next = { ...previous };\r\n  for (const [key, candidate] of Object.entries(incoming)) {\r\n    const current = next[key];\r\n    if (!current) {\r\n      next[key] = candidate;\r\n      continue;\r\n    }\r\n\r\n    const currentTime = current.updatedAt ? Date.parse(current.updatedAt) : 0;\r\n    const candidateTime = candidate.updatedAt ? Date.parse(candidate.updatedAt) : 0;\r\n    const currentIsTerminal = current.status === 'succeeded' || current.status === 'failed';\r\n    const candidateIsActive = candidate.status === 'queued' || candidate.status === 'processing';\r\n\r\n    // Do not let a delayed poll response move a completed job back to an active state.\r\n    if (currentIsTerminal && candidateIsActive) continue;\r\n    if (candidateTime > 0 && currentTime > candidateTime) continue;\r\n    next[key] = candidate;\r\n  }\r\n  return next;\r\n};\r\n\r\ntype BoChiTieuOcrStatus = 'queued' | 'processing' | 'succeeded' | 'failed';\r\ntype BoChiTieuOcrStatusRecord = {\r\n  status: BoChiTieuOcrStatus;\r\n  progress?: number;\r\n  jsonKey?: string;\r\n  error?: string;\r\n};\r\n\r\n// Key localStorage để giữ trạng thái parse qua các lần reload trang.\r\nconst PDF_PARSE_STATE_KEY = 'chat-cn-legal:pdf-parse-state';\r\nconst BO_CHI_TIEU_OCR_STATE_KEY = 'bo-chi-tieu:ocr-state';\r\n\r\n// S3 key có thuộc kho auto-parse không.\r\nconst isChatCnLegalKey = (key: string): boolean =>\r\n  `${key || ''}`.replace(/^\\/+/, '').startsWith(CHAT_CN_LEGAL_PREFIX);\r\n\r\nconst isBoChiTieuPrefix = (prefix: string): boolean =>\r\n  `${prefix || ''}`.replace(/^\\/+/, '') === BO_CHI_TIEU_PREFIX;\r\n\r\nconst isBoChiTieuImageName = (fileName: string): boolean =>\r\n  ['.png', '.jpg', '.jpeg', '.webp', '.gif', '.bmp'].some((extension) =>\r\n    `${fileName || ''}`.toLowerCase().endsWith(extension),\r\n  );\r\n\r\nconst isBoChiTieuImageKey = (key: string): boolean => {\r\n  const normalizedKey = `${key || ''}`.replace(/^\\/+/, '');\r\n  if (!normalizedKey.startsWith(BO_CHI_TIEU_PREFIX)) return false;\r\n  const fileName = normalizedKey.slice(BO_CHI_TIEU_PREFIX.length);\r\n  return Boolean(fileName) && !fileName.includes('/') && isBoChiTieuImageName(fileName);\r\n};\r\n\r\n// Tên file có phải PDF không.\r\nconst isPdfName = (fileName: string): boolean => `${fileName || ''}`.toLowerCase().endsWith('.pdf');\r\n\r\n// Tìm quy tắc định dạng áp dụng cho prefix hiện tại (bao gồm mọi thư mục con).\r\nconst getUploadExtensionRule = (prefix: string): { key: string; allowed: string[] } | null => {\r\n  const normalizedPrefix = `${prefix || ''}`.replace(/^\\/+/, '');\r\n\r\n  for (const [key, allowed] of Object.entries(UPLOAD_EXTENSION_RULES)) {\r\n    const keyWithoutSlash = key.replace(/\\/+$/, '');\r\n    const isExactOnlyRule = key === BO_CHI_TIEU_PREFIX;\r\n    if (\r\n      normalizedPrefix === key ||\r\n      normalizedPrefix === keyWithoutSlash ||\r\n      (!isExactOnlyRule && normalizedPrefix.startsWith(key))\r\n    ) {\r\n      return { key, allowed };\r\n    }\r\n  }\r\n\r\n  return null;\r\n};\r\n\r\nconst getFileExtension = (fileName: string): string =>\r\n  `${fileName || ''}`.split('.').pop()?.toLowerCase() ?? '';\r\n\r\n// Tạo một FileList từ mảng File để tương thích với các hàm upload đang nhận FileList.\r\n// Không dùng DataTransfer vì nó tạo lại File mới và làm mất webkitRelativePath khi upload thư mục.\r\nconst toFileList = (files: File[]): FileList => {\r\n  const list: Record<number, File> & {\r\n    length: number;\r\n    item: (index: number) => File | null;\r\n    [Symbol.iterator]: () => IterableIterator<File>;\r\n  } = {\r\n    length: files.length,\r\n    item: (index: number) => files[index] ?? null,\r\n    [Symbol.iterator]: () => files[Symbol.iterator](),\r\n  };\r\n\r\n  files.forEach((file, index) => {\r\n    list[index] = file;\r\n  });\r\n\r\n  return list as unknown as FileList;\r\n};\r\n\r\n// Lọc danh sách tệp theo định dạng cho phép của kho.\r\n// validFiles: các tệp được giữ lại để upload; invalidFiles: tên tệp bị loại (để báo cho người dùng).\r\n// Khi kho không có quy tắc (hasRule = false) thì giữ nguyên toàn bộ tệp.\r\nconst validateFilesForAllowedExtensions = (\r\n  files: FileList | File[],\r\n  prefix: string,\r\n): { hasRule: boolean; validFiles: File[]; invalidFiles: string[]; allowed: string[] } => {\r\n  const fileArray = Array.from(files).filter(Boolean);\r\n  const rule = getUploadExtensionRule(prefix);\r\n\r\n  if (!rule) {\r\n    return { hasRule: false, validFiles: fileArray, invalidFiles: [], allowed: [] };\r\n  }\r\n\r\n  const validFiles: File[] = [];\r\n  const invalidFiles: string[] = [];\r\n\r\n  fileArray.forEach((file) => {\r\n    if (rule.allowed.includes(getFileExtension(file.name))) {\r\n      validFiles.push(file);\r\n    } else {\r\n      // Với upload thư mục, hiển thị đường dẫn tương đối để người dùng biết tệp nằm ở đâu\r\n      invalidFiles.push(file.webkitRelativePath || file.name);\r\n    }\r\n  });\r\n\r\n  return { hasRule: true, validFiles, invalidFiles, allowed: rule.allowed };\r\n};\r\n\r\n// Real-time expiration date validation\r\nconst validateExpirationDate = (effectiveDate: string, expirationDate: string): string => {\r\n  if (!effectiveDate || !expirationDate) return '';\r\n  const dateEffective = new Date(effectiveDate);\r\n  const dateExpiration = new Date(expirationDate);\r\n  if (dateExpiration <= dateEffective) {\r\n    return 'Ngày hết hiệu lực phải lớn hơn ngày hiệu lực';\r\n  }\r\n  return '';\r\n};\r\n\r\n// Form validation for upload metadata\r\nconst validateUploadForm = (form: UploadMetadataForm): string[] => {\r\n  const errors: string[] = [];\r\n\r\n  // Required fields\r\n  if (!form.summary?.trim()) errors.push('Trích yếu là bắt buộc');\r\n  if (!form.effectiveDate) errors.push('Ngày hiệu lực là bắt buộc');\r\n  if (!form.issueDate) errors.push('Ngày ban hành là bắt buộc');\r\n  if (!form.processingStatus) errors.push('Trạng thái xử lý là bắt buộc');\r\n  if (!form.status) errors.push('Tình trạng là bắt buộc');\r\n\r\n  // Date validation: expirationDate > effectiveDate\r\n  if (form.effectiveDate && form.expirationDate) {\r\n    const dateEffective = new Date(form.effectiveDate);\r\n    const dateExpiration = new Date(form.expirationDate);\r\n    if (dateExpiration <= dateEffective) {\r\n      errors.push('Ngày hết hiệu lực phải lớn hơn ngày hiệu lực');\r\n    }\r\n  }\r\n\r\n  return errors;\r\n};\r\n\r\n// Type definitions\r\ninterface Group {\r\n  id: string;\r\n  groupname: string;\r\n  displayPrefixes: string;\r\n}\r\n\r\ninterface User {\r\n  id: string;\r\n  username: string;\r\n  email: string;\r\n  active: boolean;\r\n  createdDate: string;\r\n  displayPrefixes: string;\r\n  group: Group;\r\n  password: string;\r\n  role: string;\r\n  updatedDate: string;\r\n}\r\n\r\nconst PICKER_BUILDER_DEVELOPER_KEY = 'AIzaSyBI8KiTWudkw8iR5cjH7ZsA4JBN1NqJw8A';\r\nconst CLIENT_ID = '726815747852-5deq413t8kd8j3mgj48d46eatjauapq5.apps.googleusercontent.com';\r\nconst SCOPES = 'https://www.googleapis.com/auth/drive';\r\n\r\ndeclare global {\r\n  interface Window {\r\n    gapi: any;\r\n    google: any;\r\n  }\r\n}\r\n\r\ntype OneDriveFile = {\r\n  id: string;\r\n  name: string;\r\n  size: number;\r\n  lastModified: Date;\r\n  contentType?: string;\r\n  isFolder: boolean;\r\n  parentId?: string;\r\n};\r\n\r\ntype OneDriveSelectedItem = OneDriveFile & {\r\n  ancestorIds: string[];\r\n};\r\n\r\ntype SharePointFile = {\r\n  id: string;\r\n  name: string;\r\n  size: number;\r\n  lastModified: Date;\r\n  contentType?: string;\r\n  isFolder: boolean;\r\n  parentId?: string;\r\n};\r\n\r\ntype SharePointSelectedItem = SharePointFile & {\r\n  ancestorIds: string[];\r\n};\r\n\r\ntype SharePointSite = {\r\n  id: string;\r\n  name: string;\r\n  description?: string;\r\n  hostname?: string;\r\n  sitePath?: string;\r\n};\r\n\r\n// Cache entry for SharePoint folder contents - stores minimal data needed for selection logic\r\ntype SharePointCacheItem = {\r\n  id: string;\r\n  name: string;\r\n  isFolder: boolean;\r\n  parentId: string;\r\n};\r\n\r\n// Cache keyed by folderId, storing the items (children) of that folder\r\ntype SharePointFolderCache = Map<string, SharePointCacheItem[]>;\r\n\r\nexport type S3File = {\r\n  key: string;\r\n  name: string;\r\n  size: number;\r\n  lastModified: Date;\r\n  contentType?: string;\r\n  isFolder: boolean;\r\n  etag?: string;\r\n  permission?: DocumentPermission;\r\n  /** Người thực hiện lần sửa đổi gần nhất, đọc từ metadata sidecar. */\r\n  modifier?: string;\r\n};\r\n\r\ninterface SyncJobStatus {\r\n  status: string;\r\n  created_date: string;\r\n  dataSourceId: string;\r\n  ingestionJobId: string;\r\n  knowledgeBaseId: string;\r\n  user_name: string;\r\n  user_id: string;\r\n  is_still_in_stock: boolean;\r\n  node?: string;\r\n  index_name?: string;\r\n  errorMessage?: string;\r\n  statistics?: {\r\n    numberOfDocumentsDeleted: number;\r\n    numberOfDocumentsFailed: number;\r\n    numberOfDocumentsScanned: number;\r\n    numberOfMetadataDocumentsModified: number;\r\n    numberOfMetadataDocumentsScanned: number;\r\n    numberOfModifiedDocumentsIndexed: number;\r\n    numberOfNewDocumentsIndexed: number;\r\n  };\r\n  failureReasons?: string[];\r\n}\r\n\r\nconst ignoreCache = { current: false };\r\n\r\nlet runNowPollInterval: ReturnType<typeof setInterval> | null = null;\r\n\r\nconst CRAWL_JOBS_KEY = 'crawl:jobs';\r\nconst CURRENT_CRAWL_JOB_KEY = 'crawl:current_job';\r\n\r\ninterface CrawledPage {\r\n  url: string;\r\n  title: string;\r\n  status: number;\r\n  depth: number;\r\n  linksCount: number;\r\n}\r\n\r\ntype CrawlJobStatus = {\r\n  success: boolean;\r\n  status: 'scraping' | 'completed' | 'failed' | 'blocked';\r\n  completed: number;\r\n  total: number;\r\n  creditsUsed: number;\r\n  expiresAt: string;\r\n  startTime?: number;\r\n  isProcessing?: boolean;\r\n  error?: string;\r\n  message?: string;\r\n  pages?: CrawledPage[];\r\n};\r\n\r\ntype DailyReportSourceType =\r\n  'production_inventory' | 'equipment_status' | 'electrical_structure' | 'production_stoppage';\r\n\r\ntype LegacyDailyReportSourceType = 'equipment' | 'planning';\r\n\r\ntype DailyReportSubjectFilters = Record<DailyReportSourceType, string>;\r\n\r\nconst DAILY_REPORT_FILTER_FIELDS: Array<{\r\n  key: DailyReportSourceType;\r\n  label: string;\r\n  placeholder: string;\r\n}> = [\r\n  {\r\n    key: 'production_inventory',\r\n    label: 'Tồn kho sản xuất',\r\n    placeholder: 'Báo cáo tồn kho sản xuất ngày',\r\n  },\r\n  {\r\n    key: 'equipment_status',\r\n    label: 'Tình trạng thiết bị',\r\n    placeholder: 'Báo cáo tình trạng thiết bị ngày',\r\n  },\r\n  {\r\n    key: 'electrical_structure',\r\n    label: 'Cơ cấu điện',\r\n    placeholder: 'Báo cáo cơ cấu điện ngày',\r\n  },\r\n  {\r\n    key: 'production_stoppage',\r\n    label: 'Hạng mục dừng sản xuất',\r\n    placeholder: 'Báo cáo các hạng mục dừng sản xuất ngày',\r\n  },\r\n];\r\n\r\nconst normalizeDailyReportSubjectFilters = (raw: unknown): DailyReportSubjectFilters => {\r\n  const normalized = createEmptyDailyReportSubjectFilters();\r\n\r\n  if (typeof raw === 'string') {\r\n    normalized.equipment_status = raw;\r\n    return normalized;\r\n  }\r\n\r\n  if (Array.isArray(raw)) {\r\n    normalized.equipment_status = typeof raw[0] === 'string' ? raw[0] : '';\r\n    normalized.production_inventory =\r\n      typeof raw[1] === 'string' ? raw[1] : typeof raw[0] === 'string' ? raw[0] : '';\r\n    return normalized;\r\n  }\r\n\r\n  if (raw && typeof raw === 'object') {\r\n    const candidate = raw as Partial<\r\n      Record<DailyReportSourceType | LegacyDailyReportSourceType, unknown>\r\n    >;\r\n\r\n    for (const field of DAILY_REPORT_FILTER_FIELDS) {\r\n      const value = candidate[field.key];\r\n      normalized[field.key] = typeof value === 'string' ? value : '';\r\n    }\r\n\r\n    if (!normalized.equipment_status && typeof candidate.equipment === 'string') {\r\n      normalized.equipment_status = candidate.equipment;\r\n    }\r\n    if (!normalized.production_inventory && typeof candidate.planning === 'string') {\r\n      normalized.production_inventory = candidate.planning;\r\n    }\r\n\r\n    return normalized;\r\n  }\r\n\r\n  return normalized;\r\n};\r\n\r\nconst createEmptyDailyReportSubjectFilters = (): DailyReportSubjectFilters => ({\r\n  production_inventory: '',\r\n  equipment_status: '',\r\n  electrical_structure: '',\r\n  production_stoppage: '',\r\n});\r\n\r\nconst useCurrentCrawlJob = (apiBaseUrl: string) => {\r\n  const [currentJob, setCurrentJob] = useState<{\r\n    id: string;\r\n    url: string;\r\n    limit: number;\r\n    prefix: string;\r\n    startTime?: number;\r\n    status?: CrawlJobStatus;\r\n    taskId: string;\r\n  } | null>(null);\r\n  const [elapsedTime, setElapsedTime] = useState<number>(0);\r\n  const [pages, setPages] = useState<CrawledPage[]>([]);\r\n\r\n  // Load current job from localStorage on mount\r\n  useEffect(() => {\r\n    const savedJob = localStorage.getItem(CURRENT_CRAWL_JOB_KEY);\r\n    if (savedJob) {\r\n      const parsedJob = JSON.parse(savedJob) as typeof currentJob;\r\n      setCurrentJob(parsedJob);\r\n\r\n      // Initialize elapsed time from the job's start time\r\n      if (parsedJob?.startTime) {\r\n        setElapsedTime(Math.floor((Date.now() - parsedJob!.startTime) / 1000));\r\n      }\r\n    }\r\n  }, []);\r\n\r\n  // Update elapsed time every second while job exists\r\n  useEffect(() => {\r\n    if (!currentJob?.startTime) return;\r\n\r\n    const interval = setInterval(() => {\r\n      setElapsedTime(Math.floor((Date.now() - currentJob.startTime!) / 1000));\r\n    }, 1000);\r\n\r\n    return () => clearInterval(interval);\r\n  }, [currentJob?.startTime]);\r\n\r\n  // Poll for job status\r\n  useEffect(() => {\r\n    if (!currentJob?.id) return;\r\n\r\n    const pollStatus = async () => {\r\n      try {\r\n        const response = await axios.get(\r\n          `${apiBaseUrl}/api/crawl/${currentJob.id}?taskId=${currentJob.taskId}`,\r\n        );\r\n        const data = response.data as CrawlJobStatus & { pages?: CrawledPage[] };\r\n        const status = data as CrawlJobStatus;\r\n\r\n        // Store pages separately for real-time display\r\n        // Always update pages - even if empty (to clear stale data)\r\n        setPages(data.pages || []);\r\n\r\n        setCurrentJob((prev) => {\r\n          if (!prev) return null;\r\n          const updated = { ...prev, status };\r\n\r\n          // Update localStorage with latest status\r\n          localStorage.setItem(CURRENT_CRAWL_JOB_KEY, JSON.stringify(updated));\r\n\r\n          // If job is completed, failed, or blocked, clear the job\r\n          // BUT: if status is 'completed' and isProcessing is true, keep polling\r\n          if (\r\n            (status.status === 'completed' && !status.isProcessing) ||\r\n            status.status === 'failed' ||\r\n            status.status === 'blocked'\r\n          ) {\r\n            // Use setTimeout to clear the job after the status update is processed\r\n            setTimeout(() => {\r\n              setCurrentJob(null);\r\n              localStorage.removeItem(CURRENT_CRAWL_JOB_KEY);\r\n              setPages([]);\r\n            }, 3000);\r\n          }\r\n\r\n          return updated;\r\n        });\r\n      } catch (error) {\r\n        console.error('Error polling job status:', error);\r\n      }\r\n    };\r\n\r\n    // Poll every 10 seconds (reduced from 3s to avoid excessive polling)\r\n    const interval = setInterval(pollStatus, 10000);\r\n    void pollStatus(); // Initial poll\r\n\r\n    return () => clearInterval(interval);\r\n  }, [currentJob?.id, apiBaseUrl]);\r\n\r\n  return {\r\n    currentJob,\r\n    elapsedTime,\r\n    pages,\r\n    setCurrentJob: (job: typeof currentJob) => {\r\n      if (job && !job.startTime) {\r\n        job.startTime = Date.now();\r\n      }\r\n      setCurrentJob(job);\r\n      if (job) {\r\n        localStorage.setItem(CURRENT_CRAWL_JOB_KEY, JSON.stringify(job));\r\n      } else {\r\n        localStorage.removeItem(CURRENT_CRAWL_JOB_KEY);\r\n      }\r\n    },\r\n  };\r\n};\r\n\r\nconst getAllFilesUnderFolder = (fileSystem: Record<string, S3File[]>, prefix: string): string[] => {\r\n  const files: string[] = [];\r\n  const searchInPrefix = (currentPrefix: string) => {\r\n    const currentFiles = fileSystem[currentPrefix] || [];\r\n    currentFiles.forEach((file) => {\r\n      files.push(file.key);\r\n      if (file.isFolder) {\r\n        searchInPrefix(file.key);\r\n      }\r\n    });\r\n  };\r\n  searchInPrefix(prefix);\r\n  return files;\r\n};\r\n\r\nconst getAllFilesInCurrentView = (\r\n  fileSystem: Record<string, S3File[]>,\r\n  prefix: string,\r\n): string[] => {\r\n  const files: string[] = [];\r\n  // Add current level files\r\n  const currentFiles = fileSystem[prefix] || [];\r\n  currentFiles.forEach((file) => {\r\n    files.push(file.key);\r\n    // If it's a folder, add all files under it\r\n    if (file.isFolder) {\r\n      files.push(...getAllFilesUnderFolder(fileSystem, file.key));\r\n    }\r\n  });\r\n  return files;\r\n};\r\n\r\n/**\r\n * Đọc người sửa đổi gần nhất cho danh sách tệp qua `/api/files/metadata-batch`.\r\n * Tài liệu chưa từng được sửa thì mặc định lấy theo người tạo.\r\n * Lỗi đọc metadata không làm hỏng danh sách -> trả về map rỗng.\r\n */\r\nconst fetchModifierByKey = async (\r\n  apiBaseUrl: string,\r\n  keys: string[],\r\n): Promise<Record<string, string>> => {\r\n  if (keys.length === 0) return {};\r\n\r\n  try {\r\n    // Server giới hạn 200 key mỗi lần gọi.\r\n    const response = await axios.post(`${apiBaseUrl}/api/files/metadata-batch`, {\r\n      keys: keys.slice(0, 200),\r\n    });\r\n\r\n    const metadataMap = (response?.data || {}) as Record<string, any>;\r\n    const result: Record<string, string> = {};\r\n\r\n    for (const [key, attrs] of Object.entries(metadataMap)) {\r\n      if (!attrs || typeof attrs !== 'object') continue;\r\n\r\n      const modifier = `${(attrs as Record<string, any>)['modifier'] ?? ''}`.trim();\r\n      const creator = `${(attrs as Record<string, any>)['creator'] ?? ''}`.trim();\r\n      const value = modifier && modifier !== '---' ? modifier : creator;\r\n\r\n      if (value && value !== '---') {\r\n        result[key] = value;\r\n      }\r\n    }\r\n\r\n    return result;\r\n  } catch {\r\n    return {};\r\n  }\r\n};\r\n\r\n/** Thu thập key của các tệp (bỏ qua thư mục) trong dữ liệu danh sách. */\r\nconst collectFileKeys = (fileData: Record<string, any>): string[] => {\r\n  const keys: string[] = [];\r\n  for (const files of Object.values(fileData)) {\r\n    if (!Array.isArray(files)) continue;\r\n    for (const file of files as S3File[]) {\r\n      if (file && !file.isFolder && file.key) keys.push(file.key);\r\n    }\r\n  }\r\n  return keys;\r\n};\r\n\r\n/** Gắn người sửa đổi vào từng tệp trong dữ liệu danh sách. */\r\nconst attachModifiers = (\r\n  fileData: Record<string, S3File[]>,\r\n  modifierByKey: Record<string, string>,\r\n): Record<string, S3File[]> => {\r\n  const result: Record<string, S3File[]> = {};\r\n\r\n  for (const [folderKey, files] of Object.entries(fileData)) {\r\n    if (!Array.isArray(files)) {\r\n      result[folderKey] = files;\r\n      continue;\r\n    }\r\n\r\n    result[folderKey] = files.map((file) =>\r\n      !file?.isFolder && modifierByKey[file?.key]\r\n        ? { ...file, modifier: modifierByKey[file.key] }\r\n        : file,\r\n    );\r\n  }\r\n\r\n  return result;\r\n};\r\n\r\nconst useFiles = (\r\n  apiBaseUrl: string,\r\n  rootPrefix: string,\r\n  displayPrefixes: string[] = [],\r\n  searchQuery: string,\r\n  currentPage: number,\r\n  browsePage: number,\r\n  setSearchQuery: Dispatch<SetStateAction<string>>,\r\n  _idCreator: string | undefined,\r\n  selectedKeys?: Set<string>,\r\n  selectStates?: MutableRefObject<Record<string, boolean>>,\r\n  setSelectedKeys?: any,\r\n) => {\r\n  console.log('1.0.181-hoaphat');\r\n  const [data, setData] = useState<Record<string, S3File[]>>({});\r\n  const [isLoading, setIsLoading] = useState(false);\r\n  const [error, setError] = useState<Error | null>(null);\r\n  const [estimatedTotalHits, setEstimatedTotalHits] = useState(0);\r\n  const [viewOnly, setViewOnly] = useState(false);\r\n  const [pagination, setPagination] = useState<{\r\n    currentPage: number;\r\n    totalItems: number;\r\n    totalPages: number;\r\n    pageSize: number;\r\n    hasMore: boolean;\r\n  } | null>(null);\r\n\r\n  const rootPrefixRef = useRef(rootPrefix);\r\n  useEffect(() => {\r\n    rootPrefixRef.current = rootPrefix;\r\n  }, [rootPrefix]);\r\n\r\n  const fetchData = async () => {\r\n    setIsLoading(true);\r\n    try {\r\n      const user = getUserInfoFromLocal();\r\n      const response = await axios.get(`${apiBaseUrl}/api/files`, {\r\n        params: {\r\n          cache: false,\r\n          displayPrefixes: JSON.stringify(displayPrefixes),\r\n          prefix: rootPrefixRef.current,\r\n          userId: user?.id || '',\r\n          groupId: user?.group?.id || '',\r\n          groupIds: JSON.stringify(user?.GroupIds || []),\r\n          groupname: user?.groupname || '',\r\n          page: browsePage,\r\n          limit: 100,\r\n        },\r\n        timeout: 300000,\r\n      });\r\n\r\n      const newSelectedKeys: string[] = [];\r\n\r\n      const { pagination: paginationData, viewOnly: viewOnlyData, ...fileData } = response.data;\r\n      setPagination(paginationData || null);\r\n      setViewOnly(!!viewOnlyData);\r\n\r\n      forEach(fileData, (files, folderKey) => {\r\n        if (selectedKeys?.has(folderKey)) {\r\n          forEach(files, (file) => {\r\n            if (!(selectStates?.current[file.key] === false)) {\r\n              newSelectedKeys.push(file.key);\r\n            }\r\n          });\r\n        }\r\n      });\r\n\r\n      // console.log('newSelectedKeys', newSelectedKeys);\r\n\r\n      if (newSelectedKeys.length) {\r\n        setSelectedKeys?.((prev: any) => {\r\n          const merged = new Set(prev);\r\n          newSelectedKeys.forEach((key) => merged.add(key));\r\n          return merged;\r\n        });\r\n      }\r\n\r\n      setData(fileData);\r\n      setError(null);\r\n\r\n      // Người sửa đổi nằm trong metadata sidecar nên phải lấy riêng.\r\n      // Hiển thị danh sách trước, bổ sung cột người sửa đổi sau để không làm chậm màn hình.\r\n      const fileKeys = collectFileKeys(fileData);\r\n      if (fileKeys.length > 0) {\r\n        const modifierByKey = await fetchModifierByKey(apiBaseUrl, fileKeys);\r\n        if (Object.keys(modifierByKey).length > 0) {\r\n          setData((prev) => attachModifiers(prev, modifierByKey));\r\n        }\r\n      }\r\n    } catch (err) {\r\n      setError(err instanceof Error ? err : new Error('Failed to fetch files'));\r\n    } finally {\r\n      setIsLoading(false);\r\n      setEstimatedTotalHits(0);\r\n      setSearchQuery('');\r\n    }\r\n  };\r\n\r\n  const handleSearch = async (query: string) => {\r\n    try {\r\n      if (!query) {\r\n        return;\r\n      }\r\n      setIsLoading(true);\r\n      const user = getUserInfoFromLocal();\r\n      const response: any = await axios.get(`${apiBaseUrl}/api/search-db`, {\r\n        params: {\r\n          query,\r\n          rootPrefix,\r\n          offset: (currentPage - 1) * 20,\r\n          limit: 20,\r\n          userId: user?.id || '',\r\n          groupId: user?.group?.id || '',\r\n          groupIds: JSON.stringify(user?.GroupIds || []),\r\n          groupname: user?.groupname || '',\r\n        },\r\n        timeout: 300000,\r\n      });\r\n      const searchData = { [rootPrefix]: response?.data?.result || [] };\r\n      setData(searchData);\r\n      setEstimatedTotalHits(response?.data?.estimatedTotalHits || 0);\r\n      setPagination(null); // Clear pagination for search results\r\n\r\n      // Kết quả tìm kiếm cũng hiển thị người sửa đổi.\r\n      const fileKeys = collectFileKeys(searchData);\r\n      if (fileKeys.length > 0) {\r\n        const modifierByKey = await fetchModifierByKey(apiBaseUrl, fileKeys);\r\n        if (Object.keys(modifierByKey).length > 0) {\r\n          setData((prev) => attachModifiers(prev, modifierByKey));\r\n        }\r\n      }\r\n\r\n      return response;\r\n    } catch (err) {\r\n      setError(err instanceof Error ? err : new Error('Failed to fetch files'));\r\n    } finally {\r\n      setIsLoading(false);\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (!searchQuery && !isLoading) {\r\n      void fetchData();\r\n    }\r\n\r\n    if (searchQuery && !isLoading) {\r\n      void handleSearch(searchQuery);\r\n    }\r\n  }, [searchQuery, currentPage, browsePage]);\r\n\r\n  return { data, isLoading, error, estimatedTotalHits, pagination, viewOnly, refetch: fetchData };\r\n};\r\n\r\n// Add isTextFile function\r\nconst isTextFile = (file: S3File): boolean => {\r\n  const extension = file?.name?.split('.')?.pop()?.toLowerCase() ?? '';\r\n  const textExtensions = [\r\n    'txt',\r\n    'md',\r\n    'json',\r\n    'js',\r\n    'ts',\r\n    'jsx',\r\n    'tsx',\r\n    'css',\r\n    'html',\r\n    'xml',\r\n    'yaml',\r\n    'yml',\r\n  ];\r\n  return textExtensions.includes(extension || '');\r\n};\r\n\r\n// Check if file is an image\r\nconst isImageFile = (file: S3File | null): boolean => {\r\n  if (!file) return false;\r\n  const extension = file?.name?.split('.')?.pop()?.toLowerCase() ?? '';\r\n  const imageExtensions = ['png', 'jpg', 'jpeg', 'gif', 'webp', 'bmp'];\r\n  return imageExtensions.includes(extension || '');\r\n};\r\n\r\n// Get OCR file path for an image\r\nconst getOcrFilePath = (file: S3File): string => {\r\n  return `${file.key}.ocr.txt`;\r\n};\r\n\r\nconst msalConfig = {\r\n  auth: {\r\n    clientId: '584d5fa9-5123-4602-a1a5-a3746a83745f',\r\n    authority: 'https://login.microsoftonline.com/consumers',\r\n    redirectUri:\r\n      import.meta.env['VITE_ONE_DRIVE_REDIRECT_URI'] ||\r\n      'https://s3-explorer.cmcts1.studio.ai.vn/sharepoint/redirect',\r\n  },\r\n};\r\n\r\nconst msalInstance = new PublicClientApplication(msalConfig);\r\n\r\nconst weightPermission = {\r\n  [DocumentPermission.VIEW_DOCUMENT]: 1,\r\n  [DocumentPermission.DOWNLOAD_DOCUMENT]: 2,\r\n  [DocumentPermission.EDIT_DOCUMENT]: 10,\r\n  [DocumentPermission.OWNER_DOCUMENT]: 100,\r\n};\r\n\r\nlet isViewOnlyMode = false;\r\nexport const setViewOnlyMode = (value: boolean) => {\r\n  isViewOnlyMode = value;\r\n};\r\n\r\n// const isAdmin = () => {\r\n//   const user = getUserInfoFromLocal();\r\n\r\n//   return (\r\n//     `${user?.groupname}`.toUpperCase() === 'MASTER_ADMIN' ||\r\n//     `${user?.role}`.toUpperCase() === 'ADMIN' ||\r\n//     `${user?.role}`.toUpperCase() === 'SITE_ADMIN'\r\n//   );\r\n// };\r\n\r\nconst canEditDocument = (permission?: DocumentPermission) => {\r\n  if (isViewOnlyMode || !permission) return false;\r\n  return weightPermission[permission] >= weightPermission[DocumentPermission.EDIT_DOCUMENT];\r\n};\r\n\r\nconst canDownloadDocument = (permission?: DocumentPermission) => {\r\n  if (!permission) return false;\r\n  return weightPermission[permission] >= weightPermission[DocumentPermission.DOWNLOAD_DOCUMENT];\r\n};\r\n\r\nconst canViewDocument = (permission?: DocumentPermission) => {\r\n  if (!permission) return false;\r\n  return weightPermission[permission] >= weightPermission[DocumentPermission.VIEW_DOCUMENT];\r\n};\r\n\r\nconst HomeWithoutContext = memo<{\r\n  homeLabel?: string;\r\n  apiBaseUrl?: string;\r\n  rootUrlHostApi?: string;\r\n  rootPrefix?: string;\r\n  hiddenSynchronization?: boolean;\r\n  asSelector?: boolean;\r\n  onSelected?: (selectedFiles: S3File[]) => void;\r\n  displayPrefixes?: string[];\r\n  preSelectedFiles?: string[];\r\n  idCreator?: string;\r\n}>(\r\n  ({\r\n    homeLabel = 'Kho tài liệu',\r\n    apiBaseUrl = API_BASE_URL,\r\n    rootPrefix = '',\r\n    rootUrlHostApi = 'https://hoaphat.cagent.cmcts.ai/api/v1/',\r\n    hiddenSynchronization = true,\r\n    asSelector = false,\r\n    onSelected = (files) => console.log('Đã chọn:', files),\r\n    displayPrefixes,\r\n    preSelectedFiles,\r\n    idCreator,\r\n  }) => {\r\n    const [sorting, setSorting] = useState<SortingState>([]);\r\n    const [searchQuery, setSearchQuery] = useState('');\r\n    const [selectedKeys, setSelectedKeys] = useState<Set<string>>(new Set(preSelectedFiles));\r\n    const [currentPrefix, setCurrentPrefix] = useState(rootPrefix);\r\n    const [forcePrefix, setForcePrefix] = useState<string | null>('');\r\n    const [isCreateFolderOpen, setIsCreateFolderOpen] = useState(false);\r\n    const [newFolderName, setNewFolderName] = useState('');\r\n    const [isCreatingFolder, setIsCreatingFolder] = useState(false);\r\n    const [fileToDelete, setFileToDelete] = useState<S3File | null>(null);\r\n    const [fileToMove, setFileToMove] = useState<S3File | null>(null);\r\n    const [isBulkDeleting, setIsBulkDeleting] = useState(false);\r\n    const [showBulkDeleteDialog, setShowBulkDeleteDialog] = useState(false);\r\n    const [, setUploadType] = useState<'files' | 'folder' | null>(null);\r\n    const searchBoxRef = useRef<any>(null);\r\n    const { toast } = useToast();\r\n    const [fileToRename, setFileToRename] = useState<S3File | null>(null);\r\n    const [fileToView, setFileToView] = useState<S3File | null>(null);\r\n    const [metadataForEdit, setMetadataForEdit] = useState<any>(null);\r\n    const [newName, setNewName] = useState('');\r\n    const [openDialogRename, setOpenDialogRename] = useState(false);\r\n    const [isRenaming, setIsRenaming] = useState(false);\r\n    const [downloadingItems, setDownloadingItems] = useState<Set<string>>(new Set());\r\n    const [fileContent, setFileContent] = useState<string>('');\r\n    const [isLoadingContent, setIsLoadingContent] = useState(false);\r\n    const [isSavingContent, setIsSavingContent] = useState(false);\r\n    const [activeTab, setActiveTab] = useState<'rename' | 'edit' | 'edit-metadata'>('rename');\r\n    const [isWebsiteDialogOpen, setIsWebsiteDialogOpen] = useState(false);\r\n    const [websiteUrl, setWebsiteUrl] = useState('');\r\n    const [websiteUrlError, setWebsiteUrlError] = useState('');\r\n    const [crawlLimit, setCrawlLimit] = useState('10');\r\n    const [maxDepth, setMaxDepth] = useState('2');\r\n    const [isCrawling, setIsCrawling] = useState(false);\r\n    // Pagination support - crawl multiple pages with page=1, page=2, etc.\r\n    const [maxPagesToCrawl, setMaxPagesToCrawl] = useState('10');\r\n    // S3 folder selection states\r\n    const [selectedS3Folder, setSelectedS3Folder] = useState<string>('');\r\n    const [isFetchingFolders, setIsFetchingFolders] = useState(false);\r\n    const [isSyncing, setIsSyncing] = useState(false);\r\n    const [_isUploading, setIsUploading] = useState(false);\r\n    const [isDeleting, setIsDeleting] = useState(false);\r\n    const [currentPage, setCurrentPage] = useState(1);\r\n    const [browsePage, setBrowsePage] = useState(1);\r\n    const [isFolderClicking, setIsFolderClicking] = useState(false);\r\n    const { currentJob, elapsedTime, pages, setCurrentJob } = useCurrentCrawlJob(apiBaseUrl);\r\n    const [duplicateFiles, setDuplicateFiles] = useState<FileList | null>(null);\r\n    const [folderExist, setFolderExist] = useState<string>('');\r\n    const [showDuplicateDialog, setShowDuplicateDialog] = useState(false);\r\n    const [folderToShowFlow, setFolderToShowFlow] = useState('');\r\n    const [showInfoFlowsDialogs, setShowInfoFlowsDialogs] = useState(false);\r\n    const [loadingFlowsDialogs, setLoadingFlowsDialogs] = useState(false);\r\n    const [dataFlowModels, setDataFlowModels] = useState([]);\r\n    const [isLoadingHandleExportReport, setIsLoadingHandleExportReport] = useState(false);\r\n    const [rootFolderName, setRootFolderName] = useState('');\r\n    const selectStates = useRef<Record<string, boolean>>({});\r\n    const [fileToShare, setFileToShare] = useState<S3File | null>(null);\r\n    const [fileToEditPrivacy, setFileToEditPrivacy] = useState<S3File | null>(null);\r\n    const [isCrawlProgressDialogOpen, setIsCrawlProgressDialogOpen] = useState(false);\r\n    const [outlookEmailsBySource, setOutlookEmailsBySource] = useState<\r\n      Record<string, string | null>\r\n    >({});\r\n    const [outlookDialogOpen, setOutlookDialogOpen] = useState(false);\r\n    const [bootstrapContext, setBootstrapContext] = useState<KnownCrawlerFolder | null>(null);\r\n    const [outlookDialogContext, setOutlookDialogContext] = useState<KnownCrawlerFolder | null>(\r\n      null,\r\n    );\r\n    const [bootstrapId, setBootstrapId] = useState<string | null>(null);\r\n    const [bootstrapInfo, setBootstrapInfo] = useState<{\r\n      userCode?: string;\r\n      verificationUri?: string;\r\n      message?: string;\r\n    } | null>(null);\r\n    const [bootstrapStatus, setBootstrapStatus] = useState<string | null>(null);\r\n    const [bootstrapError, setBootstrapError] = useState<string | null>(null);\r\n    const [bootstrapLoading, setBootstrapLoading] = useState(false);\r\n    const [copied, setCopied] = useState(false);\r\n\r\n    // Email scheduler settings popup state\r\n    const [outlookSettingsOpen, setOutlookSettingsOpen] = useState(false);\r\n    const [emailConfig, setEmailConfig] = useState<Record<string, unknown> | null>(null);\r\n    const [configLoading, setConfigLoading] = useState(false);\r\n    const [configSaving, setConfigSaving] = useState(false);\r\n    const [formCron, setFormCron] = useState('');\r\n    const vnTimeOptions = useMemo(\r\n      () =>\r\n        Array.from({ length: 96 }, (_, index) => {\r\n          const totalMinutes = index * 15;\r\n          const hours = Math.floor(totalMinutes / 60)\r\n            .toString()\r\n            .padStart(2, '0');\r\n          const minutes = (totalMinutes % 60).toString().padStart(2, '0');\r\n\r\n          return `${hours}:${minutes}`;\r\n        }),\r\n      [],\r\n    );\r\n    const vnTimeToUtcCron = (vnTime: string): string => {\r\n      const [vnHour = '0', vnMinute = '0'] = vnTime.split(':');\r\n      // const utcHour = (Number(vnHour) - 7 + 24) % 24;\r\n      // đã lưu timezone  nên không cần sửa\r\n      const utcHour = (Number(vnHour) + 24) % 24;\r\n\r\n      return `${Number(vnMinute)} ${utcHour} * * *`;\r\n    };\r\n    const utcCronToVnTime = (cron: string): string => {\r\n      const [minute, hour] = cron.trim().split(/\\s+/);\r\n      const utcHour = Number(hour);\r\n      const utcMinute = Number(minute);\r\n\r\n      if (!Number.isInteger(utcHour) || !Number.isInteger(utcMinute)) return '';\r\n      if (utcHour < 0 || utcHour > 23 || utcMinute < 0 || utcMinute > 59) return '';\r\n      if (utcMinute % 15 !== 0) return '';\r\n\r\n      // đã lưu timezone nên ko cần sửa\r\n      // const vnHour = (utcHour + 7) % 24;\r\n      const vnHour = (utcHour + 0) % 24;\r\n\r\n      return `${vnHour.toString().padStart(2, '0')}:${utcMinute.toString().padStart(2, '0')}`;\r\n    };\r\n    const formVnTime = utcCronToVnTime(formCron);\r\n    // const [formPrefix, setFormPrefix] = useState('');\r\n    // const [formMaxEmails, setFormMaxEmails] = useState(50);\r\n    // const [formClientId, setFormClientId] = useState('');\r\n    // const [formAuthority, setFormAuthority] = useState('');\r\n    const [formEnabled, setFormEnabled] = useState(false);\r\n    const [formFilters, setFormFilters] = useState<DailyReportSubjectFilters>(\r\n      createEmptyDailyReportSubjectFilters,\r\n    );\r\n    const [formFiltersWeek, setFormFiltersWeek] = useState<DailyReportSubjectFilters>(\r\n      createEmptyDailyReportSubjectFilters,\r\n    );\r\n    const [formFiltersMonth, setFormFiltersMonth] = useState<DailyReportSubjectFilters>(\r\n      createEmptyDailyReportSubjectFilters,\r\n    );\r\n    const [formFiltersQuarter, setFormFiltersQuarter] = useState<DailyReportSubjectFilters>(\r\n      createEmptyDailyReportSubjectFilters,\r\n    );\r\n    const [settingsRunResult, setSettingsRunResult] = useState<string | null>(null);\r\n    const [settingsRunning, setSettingsRunning] = useState(false);\r\n    const [crawlerSourceModalOpen, setCrawlerSourceModalOpen] = useState(false);\r\n    // Modal lịch sử báo cáo: mở ngay trong S3Explorer để chạy được khi package được nhúng\r\n    // vào frontend host (host không có route `/report-history` của app standalone).\r\n    const [reportHistoryOpen, setReportHistoryOpen] = useState(false);\r\n    const [crawlerSource, setCrawlerSource] = useState<EmailCrawlerSource | null>(null);\r\n    const [crawlerCreateDefaults, setCrawlerCreateDefaults] =\r\n      useState<EmailCrawlerSourceCreateDefaults | null>(null);\r\n    const [crawlerBldReports, setCrawlerBldReports] = useState(false);\r\n    const {\r\n      source: resolvedCrawlerSource,\r\n      knownFolder: resolvedCrawlerKnownFolder,\r\n      loading: resolvedCrawlerSourceLoading,\r\n      refresh: refreshResolvedCrawlerSource,\r\n    } = useEmailCrawlerSourceByFolder(apiBaseUrl, currentPrefix);\r\n    const activeCrawlerFolder = resolvedCrawlerKnownFolder;\r\n    const displayedOutlookFolder = outlookDialogContext ?? activeCrawlerFolder;\r\n    const outlookEmail = displayedOutlookFolder\r\n      ? (outlookEmailsBySource[displayedOutlookFolder.sourceKey] ?? null)\r\n      : null;\r\n    const crawlerProcessorType =\r\n      resolvedCrawlerSource?.processorType ?? resolvedCrawlerKnownFolder?.processorType;\r\n    // Thư mục `bld-reports/` là nơi duy nhất mở cấu hình BLD Reports + lịch sử báo cáo.\r\n    const isBldReportsFolder = isBldReportsFolderPrefix(currentPrefix);\r\n    // Nút bánh răng: `bld-reports/` (cấu hình BLD Reports) hoặc các crawler còn lại\r\n    // (vd tuyển dụng). Cấu hình BLD không còn mở từ `kho_ban_lanh_dao/`.\r\n    const showCrawlerSettingsButton =\r\n      isBldReportsFolder ||\r\n      (crawlerProcessorType !== undefined && crawlerProcessorType !== 'email_dashboard');\r\n    const openCrawlerSettingsModal = () => {\r\n      // Chờ resolve xong nguồn đã tồn tại trước khi mở modal, tránh mở nhầm\r\n      // create-mode (gọi POST -> duplicate key) khi source thật ra đã có trong DB.\r\n      if (resolvedCrawlerSourceLoading) return;\r\n      // Dialog cấu hình Outlook bên dưới là legacy (không còn đường mở), giữ lại\r\n      // nguyên trạng để tham chiếu.\r\n      setCrawlerBldReports(isBldReportsFolder);\r\n      if (isBldReportsFolder) {\r\n        setCrawlerSource(null);\r\n        setCrawlerCreateDefaults(null);\r\n      } else if (resolvedCrawlerSource) {\r\n        setCrawlerSource(resolvedCrawlerSource);\r\n        setCrawlerCreateDefaults(null);\r\n      } else if (resolvedCrawlerKnownFolder) {\r\n        setCrawlerSource(null);\r\n        setCrawlerCreateDefaults({\r\n          sourceKey: resolvedCrawlerKnownFolder.sourceKey,\r\n          processorType: resolvedCrawlerKnownFolder.processorType,\r\n          uiFolderPrefix: resolvedCrawlerKnownFolder.prefix,\r\n        });\r\n      }\r\n      setCrawlerSourceModalOpen(true);\r\n    };\r\n\r\n    // Upload metadata form states\r\n    const [uploadMetadataForm, setUploadMetadataForm] =\r\n      useState<UploadMetadataForm>(defaultUploadMetadata);\r\n    const [showUploadFormDialog, setShowUploadFormDialog] = useState(false);\r\n    const [pendingUploadInfo, setPendingUploadInfo] = useState<{\r\n      files: FileList;\r\n      prefix: string;\r\n      type: 'files' | 'folder';\r\n    } | null>(null);\r\n    const [uploadFormErrors, setUploadFormErrors] = useState<string[]>([]);\r\n    const [expirationDateError, setExpirationDateError] = useState<string>('');\r\n\r\n    // Trạng thái parse PDF -> JSON cho kho kho_chat_cn/quy_dinh_phap_luat/.\r\n    // Map theo S3 key của file PDF gốc. Khôi phục từ localStorage để giữ qua reload.\r\n    const [pdfParseStatus, setPdfParseStatus] = useState<Record<string, PdfParseStatusRecord>>(\r\n      () => {\r\n        try {\r\n          const saved = localStorage.getItem(PDF_PARSE_STATE_KEY);\r\n          if (!saved) return {};\r\n          const parsed = JSON.parse(saved) as {\r\n            statuses?: Record<string, PdfParseStatusRecord>;\r\n          };\r\n          return parsed.statuses || {};\r\n        } catch {\r\n          return {};\r\n        }\r\n      },\r\n    );\r\n    // Các key đang được theo dõi (poll). Khi rỗng thì dừng poll.\r\n    // Khôi phục các key chưa hoàn tất (queued/processing) để tiếp tục poll sau reload.\r\n    const [trackedPdfKeys, setTrackedPdfKeys] = useState<string[]>(() => {\r\n      try {\r\n        const saved = localStorage.getItem(PDF_PARSE_STATE_KEY);\r\n        if (!saved) return [];\r\n        const parsed = JSON.parse(saved) as {\r\n          statuses?: Record<string, PdfParseStatusRecord>;\r\n        };\r\n        return Object.entries(parsed.statuses || {})\r\n          .filter(([, record]) => record.status === 'queued' || record.status === 'processing')\r\n          .map(([key]) => key);\r\n      } catch {\r\n        return [];\r\n      }\r\n    });\r\n    // Lưu status đã toast để tránh toast lặp khi poll nhiều lần.\r\n    const toastedPdfKeysRef = useRef<Record<string, PdfParseStatus>>({});\r\n\r\n    const [boChiTieuOcrStatus, setBoChiTieuOcrStatus] = useState<\r\n      Record<string, BoChiTieuOcrStatusRecord>\r\n    >(() => {\r\n      try {\r\n        const saved = localStorage.getItem(BO_CHI_TIEU_OCR_STATE_KEY);\r\n        return saved\r\n          ? (JSON.parse(saved) as { statuses?: Record<string, BoChiTieuOcrStatusRecord> })\r\n              .statuses || {}\r\n          : {};\r\n      } catch {\r\n        return {};\r\n      }\r\n    });\r\n    const [trackedBoChiTieuKeys, setTrackedBoChiTieuKeys] = useState<string[]>(() => {\r\n      try {\r\n        const saved = localStorage.getItem(BO_CHI_TIEU_OCR_STATE_KEY);\r\n        const statuses = saved\r\n          ? (JSON.parse(saved) as { statuses?: Record<string, BoChiTieuOcrStatusRecord> })\r\n              .statuses || {}\r\n          : {};\r\n        return Object.entries(statuses)\r\n          .filter(([, record]) => record.status === 'queued' || record.status === 'processing')\r\n          .map(([key]) => key);\r\n      } catch {\r\n        return [];\r\n      }\r\n    });\r\n    const toastedBoChiTieuKeysRef = useRef<Record<string, BoChiTieuOcrStatus>>({});\r\n\r\n    useEffect(() => {\r\n      try {\r\n        localStorage.setItem(\r\n          BO_CHI_TIEU_OCR_STATE_KEY,\r\n          JSON.stringify({ statuses: boChiTieuOcrStatus }),\r\n        );\r\n      } catch {\r\n        /* bỏ qua lỗi quota localStorage */\r\n      }\r\n    }, [boChiTieuOcrStatus]);\r\n\r\n    // Lưu trạng thái parse vào localStorage mỗi khi thay đổi để chịu được reload trang.\r\n    useEffect(() => {\r\n      try {\r\n        localStorage.setItem(PDF_PARSE_STATE_KEY, JSON.stringify({ statuses: pdfParseStatus }));\r\n      } catch {\r\n        /* bỏ qua lỗi quota localStorage */\r\n      }\r\n    }, [pdfParseStatus]);\r\n\r\n    // Bắt đầu theo dõi tiến trình parse cho danh sách S3 key PDF.\r\n    const trackPdfParseKeys = (keys: string[]) => {\r\n      const legalKeys = keys.filter((key) => isChatCnLegalKey(key) && isPdfName(key));\r\n      if (legalKeys.length === 0) return;\r\n\r\n      setPdfParseStatus((prev) => {\r\n        const next = { ...prev };\r\n        for (const key of legalKeys) {\r\n          if (!next[key]) next[key] = { status: 'queued' };\r\n        }\r\n        return next;\r\n      });\r\n      setTrackedPdfKeys((prev) => Array.from(new Set([...prev, ...legalKeys])));\r\n    };\r\n\r\n    // Tính S3 key kỳ vọng cho các file PDF vừa upload rồi bắt đầu theo dõi.\r\n    // Key backend dùng là `${prefix}${fileName}` (kho này không bị redirect prefix).\r\n    const trackUploadedPdfParse = (uploadedFiles: FileList | File[], prefix: string) => {\r\n      const normalizedPrefix = `${prefix || ''}`.replace(/^\\/+/, '');\r\n      if (!normalizedPrefix.startsWith(CHAT_CN_LEGAL_PREFIX)) return;\r\n\r\n      const base = normalizedPrefix.endsWith('/') ? normalizedPrefix : `${normalizedPrefix}/`;\r\n      const keys = Array.from(uploadedFiles)\r\n        .filter((file) => isPdfName(file.name))\r\n        .map((file) => `${base}${file.name}`);\r\n\r\n      trackPdfParseKeys(keys);\r\n    };\r\n\r\n    // Theo dõi (poll) các key PDF mà KHÔNG giả định trạng thái \"queued\" ở local.\r\n    // Dùng khi mở kho từ tab/máy khác: trạng thái thật nằm trên server (Redis), nên\r\n    // ta chỉ thêm key vào danh sách poll; UI chỉ hiện spinner nếu server trả về trạng thái.\r\n    const observePdfParseKeys = (keys: string[]) => {\r\n      const legalKeys = keys.filter((key) => isChatCnLegalKey(key) && isPdfName(key));\r\n      if (legalKeys.length === 0) return;\r\n      setTrackedPdfKeys((prev) => {\r\n        const merged = Array.from(new Set([...prev, ...legalKeys]));\r\n        return merged.length === prev.length ? prev : merged;\r\n      });\r\n    };\r\n\r\n    const trackBoChiTieuOcrKeys = (keys: string[]) => {\r\n      const imageKeys = keys.filter(isBoChiTieuImageKey);\r\n      if (imageKeys.length === 0) return;\r\n\r\n      setBoChiTieuOcrStatus((prev) => {\r\n        const next = { ...prev };\r\n        for (const key of imageKeys) {\r\n          if (!next[key]) next[key] = { status: 'queued' };\r\n        }\r\n        return next;\r\n      });\r\n      setTrackedBoChiTieuKeys((prev) => Array.from(new Set([...prev, ...imageKeys])));\r\n    };\r\n\r\n    const trackUploadedBoChiTieuOcr = (uploadedFiles: FileList | File[], prefix: string) => {\r\n      if (!isBoChiTieuPrefix(prefix)) return;\r\n      const normalizedPrefix = `${prefix || ''}`.replace(/^\\/+/, '');\r\n      const keys = Array.from(uploadedFiles)\r\n        .filter((file) => isBoChiTieuImageName(file.name))\r\n        .map((file) => `${normalizedPrefix}${file.name}`);\r\n      trackBoChiTieuOcrKeys(keys);\r\n    };\r\n\r\n    const observeBoChiTieuOcrKeys = (keys: string[]) => {\r\n      const imageKeys = keys.filter(isBoChiTieuImageKey);\r\n      if (imageKeys.length === 0) return;\r\n      setTrackedBoChiTieuKeys((prev) => {\r\n        const merged = Array.from(new Set([...prev, ...imageKeys]));\r\n        return merged.length === prev.length ? prev : merged;\r\n      });\r\n    };\r\n\r\n    // Poll trạng thái OCR ảnh mỗi 3s cho tới khi tất cả key đã xong.\r\n    useEffect(() => {\r\n      if (trackedBoChiTieuKeys.length === 0) return;\r\n      let cancelled = false;\r\n\r\n      const poll = async () => {\r\n        try {\r\n          const res = await axios.get(`${apiBaseUrl}/api/ocr/bo-chi-tieu-status`, {\r\n            params: { keys: JSON.stringify(trackedBoChiTieuKeys) },\r\n          });\r\n          if (cancelled) return;\r\n          const statuses = (res.data?.statuses || {}) as Record<string, BoChiTieuOcrStatusRecord>;\r\n          setBoChiTieuOcrStatus((prev) => ({ ...prev, ...statuses }));\r\n\r\n          let anyFinished = false;\r\n          for (const key of trackedBoChiTieuKeys) {\r\n            const record = statuses[key];\r\n            if (!record) continue;\r\n            if (\r\n              (record.status === 'succeeded' || record.status === 'failed') &&\r\n              toastedBoChiTieuKeysRef.current[key] !== record.status\r\n            ) {\r\n              toastedBoChiTieuKeysRef.current[key] = record.status;\r\n              anyFinished = true;\r\n              const fileName = key.split('/').pop() || key;\r\n              if (record.status === 'succeeded') {\r\n                toast({\r\n                  title: 'Trích xuất JSON thành công',\r\n                  description: `Đã tạo JSON từ ${fileName}.`,\r\n                });\r\n              } else {\r\n                toast({\r\n                  title: 'Trích xuất JSON thất bại',\r\n                  description: `Không thể trích xuất ${fileName}${record.error ? `: ${record.error}` : ''}.`,\r\n                  variant: 'destructive',\r\n                });\r\n              }\r\n            }\r\n          }\r\n          if (anyFinished) void refreshFiles();\r\n\r\n          const remaining = trackedBoChiTieuKeys.filter((key) => {\r\n            const record = statuses[key];\r\n            return !record || (record.status !== 'succeeded' && record.status !== 'failed');\r\n          });\r\n          if (remaining.length !== trackedBoChiTieuKeys.length) setTrackedBoChiTieuKeys(remaining);\r\n        } catch (error) {\r\n          console.error('Error polling bo chi tieu OCR status:', error);\r\n        }\r\n      };\r\n\r\n      void poll();\r\n      const interval = setInterval(poll, 3000);\r\n      return () => {\r\n        cancelled = true;\r\n        clearInterval(interval);\r\n      };\r\n    }, [trackedBoChiTieuKeys, apiBaseUrl]);\r\n\r\n    // Poll trạng thái parse mỗi 3s cho tới khi tất cả key đã xong (succeeded/failed).\r\n    useEffect(() => {\r\n      if (trackedPdfKeys.length === 0) return;\r\n\r\n      let cancelled = false;\r\n\r\n      const poll = async () => {\r\n        try {\r\n          const res = await axios.get(`${apiBaseUrl}/api/ocr/pdf-parse-status`, {\r\n            params: { keys: JSON.stringify(trackedPdfKeys) },\r\n          });\r\n          const statuses = (res.data?.statuses || {}) as Record<string, PdfParseStatusRecord>;\r\n          if (cancelled) return;\r\n\r\n          setPdfParseStatus((prev) => mergePdfParseStatuses(prev, statuses));\r\n\r\n          // Toast khi có key vừa hoàn tất/lỗi (chỉ toast một lần cho mỗi trạng thái cuối).\r\n          let anyFinished = false;\r\n          for (const key of trackedPdfKeys) {\r\n            const record = statuses[key];\r\n            if (!record) continue;\r\n            if (\r\n              (record.status === 'succeeded' || record.status === 'failed') &&\r\n              toastedPdfKeysRef.current[key] !== record.status\r\n            ) {\r\n              toastedPdfKeysRef.current[key] = record.status;\r\n              anyFinished = true;\r\n              const fileName = key.split('/').pop() || key;\r\n              if (record.status === 'succeeded') {\r\n                toast({\r\n                  title: 'Trích xuất JSON thành công',\r\n                  description: `Đã trích xuất dữ liệu từ ${fileName}.`,\r\n                });\r\n              } else {\r\n                toast({\r\n                  title: 'Trích xuất JSON thất bại',\r\n                  description: `Không thể trích xuất ${fileName}${record.error ? `: ${record.error}` : ''}. Bạn có thể tải lên lại để thử lại.`,\r\n                  variant: 'destructive',\r\n                });\r\n              }\r\n            }\r\n          }\r\n\r\n          // Nếu có file JSON mới xuất hiện, làm mới danh sách để hiển thị.\r\n          if (anyFinished) {\r\n            void refreshFiles();\r\n          }\r\n\r\n          // Bỏ theo dõi các key đã xong.\r\n          const remaining = trackedPdfKeys.filter((key) => {\r\n            const record = statuses[key];\r\n            return !record || (record.status !== 'succeeded' && record.status !== 'failed');\r\n          });\r\n          if (remaining.length !== trackedPdfKeys.length) {\r\n            setTrackedPdfKeys(remaining);\r\n          }\r\n        } catch (error) {\r\n          console.error('Error polling PDF parse status:', error);\r\n        }\r\n      };\r\n\r\n      void poll();\r\n      const interval = setInterval(poll, 3000);\r\n      return () => {\r\n        cancelled = true;\r\n        clearInterval(interval);\r\n      };\r\n    }, [trackedPdfKeys, apiBaseUrl]);\r\n\r\n    // Auto-open crawl progress dialog when job starts\r\n    useEffect(() => {\r\n      if (currentJob && currentJob.status) {\r\n        setIsCrawlProgressDialogOpen(true);\r\n      }\r\n    }, [currentJob?.id]);\r\n\r\n    useEffect(() => {\r\n      if (\r\n        !bootstrapId ||\r\n        bootstrapStatus === 'success' ||\r\n        bootstrapStatus === 'error' ||\r\n        bootstrapStatus === 'timeout'\r\n      )\r\n        return;\r\n\r\n      const interval = setInterval(() => {\r\n        fetch(`${apiBaseUrl}/api/email-scheduler/bootstrap/${bootstrapId}/status`)\r\n          .then((res) =>\r\n            res.ok\r\n              ? (res.json() as Promise<{\r\n                  status?: string;\r\n                  userCode?: string;\r\n                  verificationUri?: string;\r\n                  message?: string;\r\n                  authenticatedAs?: string;\r\n                  canonicalPrefix?: string;\r\n                  sourceKey?: string;\r\n                  error?: string;\r\n                }>)\r\n              : null,\r\n          )\r\n          .then((data) => {\r\n            if (!data) return;\r\n            if (data.userCode && !bootstrapInfo?.userCode) {\r\n              setBootstrapInfo({\r\n                userCode: data.userCode,\r\n                verificationUri: data.verificationUri,\r\n                message: data.message,\r\n              });\r\n            }\r\n            if (data.status === 'success') {\r\n              if (!bootstrapContext || !matchesBootstrapContext(data, bootstrapContext)) {\r\n                setBootstrapStatus('error');\r\n                setBootstrapError('Authentication context changed. Please start again.');\r\n                return;\r\n              }\r\n              setBootstrapStatus('success');\r\n              setOutlookEmailsBySource((current) => ({\r\n                ...current,\r\n                [bootstrapContext.sourceKey]: data.authenticatedAs ?? null,\r\n              }));\r\n              void refreshResolvedCrawlerSource();\r\n              // Không đóng modal \"Cấu hình tuyển dụng\" ở đây: đóng modal đúng lúc\r\n              // Outlook vừa kết nối khiến người dùng không kịp thấy nút \"Tạo cấu\r\n              // hình\" đã được bật (mailboxAddress vừa được đồng bộ từ outlookEmail).\r\n              setTimeout(() => setOutlookDialogOpen(false), 2000);\r\n            } else if (data.status === 'error') {\r\n              setBootstrapStatus('error');\r\n              setBootstrapError(data.error || 'Authentication failed');\r\n            } else if (data.status === 'timeout') {\r\n              setBootstrapStatus('timeout');\r\n            }\r\n          })\r\n          .catch(() => {\r\n            setBootstrapStatus('error');\r\n            setBootstrapError('Unable to poll authentication status. Please try again.');\r\n          });\r\n      }, 3000);\r\n\r\n      return () => clearInterval(interval);\r\n    }, [\r\n      bootstrapId,\r\n      bootstrapStatus,\r\n      apiBaseUrl,\r\n      bootstrapInfo?.userCode,\r\n      bootstrapContext,\r\n      refreshResolvedCrawlerSource,\r\n    ]);\r\n\r\n    const handleBootstrap = async (folder: KnownCrawlerFolder | null = activeCrawlerFolder) => {\r\n      if (!folder) {\r\n        setBootstrapError('Unsupported crawler folder.');\r\n        return;\r\n      }\r\n      setBootstrapLoading(true);\r\n      setBootstrapStatus(null);\r\n      setBootstrapError(null);\r\n      setBootstrapInfo(null);\r\n      setCopied(false);\r\n      setBootstrapContext(folder);\r\n\r\n      try {\r\n        const res = await fetch(\r\n          `${apiBaseUrl}/api/email-scheduler/bootstrap`,\r\n          buildBootstrapRequest(folder),\r\n        );\r\n        if (!res.ok) {\r\n          const err = (await res.json().catch(() => ({ error: 'Failed to start bootstrap' }))) as {\r\n            error?: string;\r\n          };\r\n          setBootstrapError(err.error || 'Failed to start bootstrap');\r\n          setBootstrapStatus('error');\r\n          setBootstrapLoading(false);\r\n          return;\r\n        }\r\n        const data = (await res.json()) as {\r\n          bootstrapId?: string;\r\n          userCode?: string;\r\n          verificationUri?: string;\r\n          message?: string;\r\n          canonicalPrefix?: string;\r\n          sourceKey?: string;\r\n        };\r\n        if (!matchesBootstrapContext(data, folder)) {\r\n          setBootstrapError('Authentication context changed. Please start again.');\r\n          setBootstrapStatus('error');\r\n          setBootstrapLoading(false);\r\n          return;\r\n        }\r\n        setBootstrapId(data.bootstrapId ?? null);\r\n        if (data.userCode) {\r\n          setBootstrapInfo({\r\n            userCode: data.userCode,\r\n            verificationUri: data.verificationUri,\r\n            message: data.message,\r\n          });\r\n        }\r\n        setBootstrapStatus('pending');\r\n      } catch {\r\n        setBootstrapError('Network error');\r\n        setBootstrapStatus('error');\r\n      }\r\n      setBootstrapLoading(false);\r\n    };\r\n\r\n    const handleCopyCode = () => {\r\n      if (bootstrapInfo?.userCode) {\r\n        navigator.clipboard.writeText(bootstrapInfo.userCode);\r\n        setCopied(true);\r\n        setTimeout(() => setCopied(false), 2000);\r\n      }\r\n    };\r\n\r\n    const loadEmailConfig = async () => {\r\n      setConfigLoading(true);\r\n      try {\r\n        const res = await fetch(`${apiBaseUrl}/api/system-config?category=email_scheduler`);\r\n        if (!res.ok) throw new Error('Failed');\r\n        const raw = (await res.json()) as Record<string, { value: unknown }>;\r\n        const cfg: Record<string, unknown> = {};\r\n        for (const [k, v] of Object.entries(raw)) cfg[k] = v.value;\r\n        setEmailConfig(cfg);\r\n        setFormCron((cfg['schedule_cron'] as string) ?? '');\r\n        // setFormPrefix((cfg['s3_prefix'] as string) ?? '');\r\n        // setFormMaxEmails((cfg['max_emails_per_run'] as number) ?? 50);\r\n        // setFormClientId((cfg['outlook_client_id'] as string) ?? '');\r\n        // setFormAuthority((cfg['outlook_authority'] as string) ?? '');\r\n        setFormEnabled(!!(cfg['enabled'] as boolean));\r\n        setFormFilters(normalizeDailyReportSubjectFilters(cfg['subject_filters']));\r\n        setFormFiltersWeek(normalizeDailyReportSubjectFilters(cfg['subject_filters_week']));\r\n        setFormFiltersMonth(normalizeDailyReportSubjectFilters(cfg['subject_filters_month']));\r\n        setFormFiltersQuarter(normalizeDailyReportSubjectFilters(cfg['subject_filters_quarter']));\r\n      } catch {\r\n        /* silently fail */\r\n      }\r\n      setConfigLoading(false);\r\n    };\r\n\r\n    const saveConfig = async (key: string, value: unknown) => {\r\n      setConfigSaving(true);\r\n      try {\r\n        await fetch(`${apiBaseUrl}/api/system-config`, {\r\n          method: 'PUT',\r\n          headers: { 'Content-Type': 'application/json' },\r\n          body: JSON.stringify({ category: 'email_scheduler', key, value }),\r\n        });\r\n      } catch {\r\n        /* silently fail */\r\n      }\r\n      setConfigSaving(false);\r\n    };\r\n\r\n    const renderSubjectFilterInput = (params: {\r\n      id: string;\r\n      label: string;\r\n      value: string;\r\n      placeholder: string;\r\n      onChange: (value: string) => void;\r\n      onBlur: () => void;\r\n    }) => (\r\n      <div className=\"space-y-1\" key={params.id}>\r\n        <Label htmlFor={params.id} className=\"text-xs text-muted-foreground\">\r\n          {params.label}\r\n        </Label>\r\n        <Input\r\n          id={params.id}\r\n          value={params.value}\r\n          onChange={(e) => params.onChange(e.target.value)}\r\n          onBlur={params.onBlur}\r\n          placeholder={params.placeholder}\r\n          disabled={configSaving}\r\n        />\r\n      </div>\r\n    );\r\n\r\n    type LastRunResult =\r\n      | { processed: number; skipped: number; errors: number; predictionError?: string }\r\n      | { error: string }\r\n      | null;\r\n\r\n    const displayResult = (lastRunResult: LastRunResult) => {\r\n      if (!lastRunResult) {\r\n        setSettingsRunResult('Hoàn thành.');\r\n      } else if ('error' in lastRunResult) {\r\n        setSettingsRunResult(`Lỗi: ${lastRunResult.error}`);\r\n      } else {\r\n        const resultMsg = `Hoàn thành — đã xử lý: ${lastRunResult.processed}, bỏ qua: ${lastRunResult.skipped}, lỗi: ${lastRunResult.errors}`;\r\n        setSettingsRunResult(\r\n          lastRunResult.predictionError\r\n            ? `${resultMsg} (Prediction API lỗi: ${lastRunResult.predictionError})`\r\n            : resultMsg,\r\n        );\r\n      }\r\n      setSettingsRunning(false);\r\n    };\r\n\r\n    const startPolling = () => {\r\n      setSettingsRunning(true);\r\n      runNowPollInterval = setInterval(() => {\r\n        fetch(`${apiBaseUrl}/api/email-scheduler/status`)\r\n          .then((res) =>\r\n            res.ok\r\n              ? (res.json() as Promise<{ isRunning: boolean; lastRunResult: LastRunResult }>)\r\n              : Promise.reject(new Error(`Status ${res.status}`)),\r\n          )\r\n          .then((data) => {\r\n            if (!data.isRunning) {\r\n              if (runNowPollInterval !== null) {\r\n                clearInterval(runNowPollInterval);\r\n                runNowPollInterval = null;\r\n              }\r\n              displayResult(data.lastRunResult);\r\n            }\r\n          })\r\n          .catch(() => {\r\n            if (runNowPollInterval !== null) {\r\n              clearInterval(runNowPollInterval);\r\n              runNowPollInterval = null;\r\n            }\r\n            setSettingsRunResult('Lỗi kết nối.');\r\n            setSettingsRunning(false);\r\n          });\r\n      }, 2000);\r\n    };\r\n\r\n    const handleRunNow = async () => {\r\n      setSettingsRunResult(null);\r\n\r\n      try {\r\n        const res = await fetch(`${apiBaseUrl}/api/email-scheduler/run`, { method: 'POST' });\r\n        if (res.status === 202) {\r\n          startPolling();\r\n        } else if (res.status === 409) {\r\n          setSettingsRunResult('Đang chạy, vui lòng chờ.');\r\n          startPolling();\r\n        } else {\r\n          setSettingsRunResult('Lỗi khi chạy.');\r\n        }\r\n      } catch {\r\n        setSettingsRunResult('Lỗi kết nối.');\r\n      }\r\n    };\r\n\r\n    const handleGetInfoFlows = async (folderName: string) => {\r\n      setLoadingFlowsDialogs(true);\r\n      try {\r\n        const accessToken = getAccessTokenInfoFromLocal();\r\n        const dataResponse = await axios.get(\r\n          `${rootUrlHostApi}get-knowledge-base/knowledge-base-name/${folderName}`,\r\n          {\r\n            headers: {\r\n              Authorization: `Bearer ${accessToken}`,\r\n            },\r\n          },\r\n        );\r\n        if (dataResponse.status === 200) {\r\n          setDataFlowModels(\r\n            dataResponse.data.knowledgeBase.chatflows.map((item: any) => ({\r\n              ...item,\r\n              KnowledgeBaseId: dataResponse.data.knowledgeBase.knowledge_base_id,\r\n            })),\r\n          );\r\n        }\r\n      } catch (error) {\r\n      } finally {\r\n        setLoadingFlowsDialogs(false);\r\n      }\r\n    };\r\n\r\n    useEffect(() => {\r\n      if (folderToShowFlow && rootUrlHostApi) {\r\n        handleGetInfoFlows(folderToShowFlow);\r\n      }\r\n    }, [folderToShowFlow]);\r\n\r\n    useEffect(() => {\r\n      console.log('pre selected files', preSelectedFiles);\r\n    }, [preSelectedFiles]);\r\n\r\n    const [syncJobStatus, setSyncJobStatus] = useState<SyncJobStatus | null>(null);\r\n\r\n    const [_isMsalReady, setIsMsalReady] = useState(false);\r\n    const [_isAuthenticated, setIsAuthenticated] = useState(false);\r\n    const [showOneDriveModal, setShowOneDriveModal] = useState(false);\r\n    const [folders, setFolders] = useState<OneDriveFile[]>([]);\r\n    const [files, setFiles] = useState<OneDriveFile[]>([]);\r\n    const [breadcrumbOneDrive, setBreadcrumbOneDrive] = useState<{ id: string; name: string }[]>([\r\n      { id: 'root', name: 'OneDrive' },\r\n    ]);\r\n    const [isLoadingOneDrive, setIsLoadingOneDrive] = useState(false);\r\n    const [selectedOneDriveItems, setSelectedOneDriveItems] = useState<OneDriveSelectedItem[]>([]);\r\n    const [excludedOneDriveChildIds, setExcludedOneDriveChildIds] = useState<Set<string>>(\r\n      new Set(),\r\n    );\r\n    const [isLoadingSharePoint, setIsLoadingSharePoint] = useState(false);\r\n    const [sharePointFiles, setSharePointFiles] = useState<SharePointFile[]>([]);\r\n    const [sharePointFolders, setSharePointFolders] = useState<SharePointFile[]>([]);\r\n    const [selectedSharePointItems, setSelectedSharePointItems] = useState<\r\n      SharePointSelectedItem[]\r\n    >([]);\r\n    const [excludedSharePointChildIds, setExcludedSharePointChildIds] = useState<Set<string>>(\r\n      new Set(),\r\n    );\r\n    const [sharePointBreadcrumbs, setSharePointBreadcrumbs] = useState<\r\n      { id: string; name: string }[]\r\n    >([{ id: 'root', name: 'SharePoint' }]);\r\n    // Cache for SharePoint folder contents - persists while modal is open\r\n    const [sharePointCache, setSharePointCache] = useState<SharePointFolderCache>(new Map());\r\n    const [isSharePointModalOpen, setIsSharePointModalOpen] = useState(false);\r\n    const [sharePointSites, setSharePointSites] = useState<SharePointSite[]>([]);\r\n    const [selectedSite, setSelectedSite] = useState<SharePointSite | null>(null);\r\n    const [isSharePointLogoutConfirmOpen, setIsSharePointLogoutConfirmOpen] = useState(false);\r\n    const [isOneDriveLogoutConfirmOpen, setIsOneDriveLogoutConfirmOpen] = useState(false);\r\n    const [isAutoUpdateKB, setIsAutoUpdateKB] = useState(false);\r\n\r\n    const url = new URL(window.location.href);\r\n    const prefixParam = url.searchParams.get('prefix') || '';\r\n    const effectivePrefix = prefixParam || forcePrefix || rootPrefix;\r\n\r\n    const [_token, setToken] = useState<string | null>(null);\r\n    // Metadata validation errors for edit-metadata tab\r\n    const [metadataErrors, setMetadataErrors] = useState<Record<string, string>>({});\r\n\r\n    // Validate metadata form fields\r\n    const validateMetadataFields = (metadata: any): Record<string, string> => {\r\n      const errors: Record<string, string> = {};\r\n      if (!metadata || typeof metadata !== 'object') return errors;\r\n\r\n      const requiredFields: Record<string, string> = {\r\n        summary: 'Trích yếu là bắt buộc',\r\n        issueDate: 'Ngày ban hành là bắt buộc',\r\n        effectiveDate: 'Ngày hiệu lực là bắt buộc',\r\n        processingStatus: 'Trạng thái xử lý là bắt buộc',\r\n        status: 'Tình trạng là bắt buộc',\r\n      };\r\n\r\n      for (const [field, message] of Object.entries(requiredFields)) {\r\n        const value = metadata[field];\r\n        if (\r\n          value === '' ||\r\n          value === null ||\r\n          value === undefined ||\r\n          (typeof value === 'string' && !value.trim())\r\n        ) {\r\n          errors[field] = message;\r\n        }\r\n      }\r\n\r\n      return errors;\r\n    };\r\n    const {\r\n      data: fileSystem,\r\n      isLoading,\r\n      error,\r\n      estimatedTotalHits,\r\n      pagination,\r\n      viewOnly: isViewOnly,\r\n      refetch: refreshFiles,\r\n    } = useFiles(\r\n      apiBaseUrl,\r\n      effectivePrefix,\r\n      displayPrefixes,\r\n      searchQuery,\r\n      currentPage,\r\n      browsePage,\r\n      setSearchQuery,\r\n      idCreator,\r\n      selectedKeys,\r\n      selectStates,\r\n      setSelectedKeys,\r\n    );\r\n\r\n    setViewOnlyMode(!!isViewOnly);\r\n\r\n    // Cross-browser: hỏi trạng thái OCR của các file đang hiển thị từ server (Redis là nguồn thật).\r\n    useEffect(() => {\r\n      const pdfKeys: string[] = [];\r\n      const boChiTieuKeys: string[] = [];\r\n      for (const files of Object.values(fileSystem || {})) {\r\n        for (const file of files || []) {\r\n          if (!file.isFolder && isChatCnLegalKey(file.key) && isPdfName(file.name)) {\r\n            pdfKeys.push(file.key);\r\n          }\r\n          if (!file.isFolder && isBoChiTieuImageKey(file.key)) {\r\n            boChiTieuKeys.push(file.key);\r\n          }\r\n        }\r\n      }\r\n      if (isChatCnLegalKey(effectivePrefix) && pdfKeys.length > 0) observePdfParseKeys(pdfKeys);\r\n      if (isBoChiTieuPrefix(effectivePrefix) && boChiTieuKeys.length > 0) {\r\n        observeBoChiTieuOcrKeys(boChiTieuKeys);\r\n      }\r\n    }, [fileSystem, effectivePrefix]);\r\n\r\n    const [showAddFileMenu, setShowAddFileMenu] = useState(false);\r\n    const addFileMenuRef = useRef<HTMLDivElement>(null);\r\n    const currentUser = getUserInfoFromLocal();\r\n\r\n    const user: User | null = (() => {\r\n      const dataLogin = localStorage.getItem('dataLogin');\r\n      try {\r\n        if (dataLogin) {\r\n          const parsed: any = JSON.parse(dataLogin);\r\n          return parsed?.user ?? null;\r\n        }\r\n      } catch {\r\n        return null;\r\n      }\r\n      return null;\r\n    })();\r\n\r\n    useEffect(() => {\r\n      if (!showAddFileMenu) return;\r\n      function handleClickOutside(event: MouseEvent) {\r\n        if (addFileMenuRef.current && !addFileMenuRef.current.contains(event.target as Node)) {\r\n          setShowAddFileMenu(false);\r\n        }\r\n      }\r\n      document.addEventListener('mousedown', handleClickOutside);\r\n      return () => {\r\n        document.removeEventListener('mousedown', handleClickOutside);\r\n      };\r\n    }, [showAddFileMenu]);\r\n\r\n    const loginSharePoint = async () => {\r\n      try {\r\n        const response = await axios.get(`${apiBaseUrl}/api/login-sharepoint`);\r\n        const { loginUrl } = response.data;\r\n\r\n        const popup = window.open(loginUrl, 'SharePoint Login', 'width=600,height=600');\r\n        if (!popup) throw new Error('Không thể mở cửa sổ pop-up');\r\n        popup.focus();\r\n\r\n        const interval = setInterval(() => {\r\n          try {\r\n            if (popup.closed) {\r\n              clearInterval(interval);\r\n              return;\r\n            }\r\n\r\n            const currentUrl = popup.location.href;\r\n            if (currentUrl.includes('code=')) {\r\n              const authorizationCode = new URL(currentUrl).searchParams.get('code');\r\n              if (authorizationCode) {\r\n                fetchSharePointAccessToken(authorizationCode); // Hàm này nên lưu access token vào localStorage\r\n                popup.close();\r\n                clearInterval(interval);\r\n              }\r\n            }\r\n          } catch (err: unknown) {\r\n            if (err instanceof Error && !err.message.includes('cross-origin')) {\r\n              console.error('SharePoint login error:', err);\r\n            }\r\n          }\r\n        }, 1000);\r\n      } catch (err) {\r\n        hotToast.error(\r\n          'Lỗi khi đăng nhập SharePoint: ' +\r\n            (err instanceof Error ? err.message : 'Lỗi không xác định'),\r\n        );\r\n      }\r\n    };\r\n\r\n    const logoutSharePoint = async () => {\r\n      try {\r\n        setSharePointFiles([]);\r\n        setSharePointFolders([]);\r\n        setSelectedSharePointItems([]);\r\n        setExcludedSharePointChildIds(new Set());\r\n        setSharePointBreadcrumbs([{ id: 'root', name: 'SharePoint' }]);\r\n        setSharePointCache(new Map());\r\n        window.location.href =\r\n          'https://login.microsoftonline.com/common/oauth2/v2.0/logout?post_logout_redirect_uri=' +\r\n          encodeURIComponent(window.location.origin);\r\n        toast({ title: 'Success', description: 'Logged out from SharePoint' });\r\n      } catch (error) {\r\n        console.error('Error logging out from SharePoint:', error);\r\n        toast({\r\n          title: 'Error',\r\n          description: 'Failed to logout from SharePoint',\r\n          variant: 'destructive',\r\n        });\r\n      }\r\n    };\r\n\r\n    const fetchSharePointAccessToken = async (authorizationCode: string) => {\r\n      try {\r\n        const response = await axios.post(`${apiBaseUrl}/api/get-sharepoint-access-token`, {\r\n          code: authorizationCode,\r\n          userId: '1',\r\n        });\r\n\r\n        const { accessToken, refreshToken } = response.data;\r\n\r\n        localStorage.setItem('sharepoint_access_token', accessToken);\r\n        localStorage.setItem('refresh_sharepoint_access_token', refreshToken);\r\n        setIsAuthenticated(true);\r\n        setIsSharePointModalOpen(true);\r\n      } catch (error) {\r\n        console.error('❌ Error fetching SharePoint access token:', error);\r\n        toast({\r\n          title: 'Error',\r\n          description: 'Failed to connect to SharePoint',\r\n          variant: 'destructive',\r\n        });\r\n      }\r\n    };\r\n\r\n    const fetchSharePointSites = async () => {\r\n      try {\r\n        setIsLoadingSharePoint(true);\r\n        const response = await axios.post(`${apiBaseUrl}/api/list-site-sharepoint`, {\r\n          userId: '1',\r\n        });\r\n        const data = response.data.sites.map((item: any): SharePointSite => {\r\n          const url = new URL(item.webUrl);\r\n          return {\r\n            id: item.id,\r\n            name: item.name,\r\n            description: item.description,\r\n            hostname: item.hostname || url.hostname,\r\n            sitePath: item.sitePath || url.pathname.replace(/^\\/+/, ''),\r\n          };\r\n        });\r\n        console.log('data', data);\r\n        setSharePointSites(data);\r\n        setIsLoadingSharePoint(false);\r\n      } catch (error) {\r\n        console.error('❌ Error fetching SharePoint sites:', error);\r\n        toast({\r\n          title: 'Error',\r\n          description: 'Failed to fetch SharePoint sites',\r\n          variant: 'destructive',\r\n        });\r\n        setIsLoadingSharePoint(false);\r\n      }\r\n    };\r\n\r\n    const handleSelectSite = async (site: SharePointSite) => {\r\n      setSelectedSite(site);\r\n      console.log(site);\r\n      await fetchSharePointFiles('root', site.name, site.hostname || '', site.sitePath || '');\r\n    };\r\n\r\n    const fetchSharePointFiles = async (\r\n      folderId: string,\r\n      folderName: string,\r\n      hostname: string,\r\n      sitePath: string,\r\n    ) => {\r\n      try {\r\n        setIsLoadingSharePoint(true);\r\n\r\n        const response = await axios.post(`${apiBaseUrl}/api/list-file-sharepoint`, {\r\n          folderId,\r\n          userId: '1',\r\n          hostname,\r\n          sitePath,\r\n        });\r\n\r\n        const data = response.data.files.map((item: any): SharePointFile => ({\r\n          id: item.id,\r\n          name: item.name,\r\n          size: item.size ?? 0,\r\n          lastModified: item.lastModifiedDateTime\r\n            ? new Date(item.lastModifiedDateTime)\r\n            : new Date(),\r\n          contentType: item.mimeType ?? undefined,\r\n          isFolder: item.type === 'folder',\r\n          parentId: item.parentId ?? '',\r\n        }));\r\n\r\n        // Populate cache with folder contents\r\n        const cacheItems: SharePointCacheItem[] = data.map((item: SharePointFile) => ({\r\n          id: item.id,\r\n          name: item.name,\r\n          isFolder: item.isFolder,\r\n          parentId: item.parentId ?? '',\r\n        }));\r\n        setSharePointCache((prev) => {\r\n          const newCache = new Map(prev);\r\n          newCache.set(folderId, cacheItems);\r\n          return newCache;\r\n        });\r\n\r\n        setSharePointFolders(data.filter((item: SharePointFile) => item.isFolder));\r\n        setSharePointFiles(data.filter((item: SharePointFile) => !item.isFolder));\r\n\r\n        setIsSharePointModalOpen(true);\r\n\r\n        setSharePointBreadcrumbs((prev) => {\r\n          if (prev.some((b) => b.id === folderId)) return prev;\r\n          return [\r\n            ...prev,\r\n            { id: folderId, name: folderName === 'root' ? 'SharePoint' : folderName },\r\n          ];\r\n        });\r\n\r\n        setIsLoadingSharePoint(false);\r\n      } catch (error) {\r\n        console.error('❌ Error fetching SharePoint files:', error);\r\n        toast({\r\n          title: 'Error',\r\n          description: 'Failed to fetch SharePoint files',\r\n          variant: 'destructive',\r\n        });\r\n        setIsLoadingSharePoint(false);\r\n      }\r\n    };\r\n\r\n    // Helper function to check if any ancestor folder is selected (SharePoint)\r\n    // Uses breadcrumbs to determine the ancestor chain for items in current view\r\n    const isSharePointAncestorSelected = (\r\n      _item: SharePointFile,\r\n      selectedItems: SharePointSelectedItem[],\r\n      breadcrumbs: { id: string; name: string }[],\r\n    ): boolean => {\r\n      const currentAncestorIds = breadcrumbs.slice(1).map((b) => b.id);\r\n      return selectedItems.some((selected) => {\r\n        if (!selected.isFolder) return false;\r\n        return currentAncestorIds.includes(selected.id);\r\n      });\r\n    };\r\n\r\n    // Get all known descendants of a folder from cache (recursive)\r\n    const getKnownDescendantIds = (\r\n      folderId: string,\r\n      cache: SharePointFolderCache,\r\n      visited: Set<string> = new Set(),\r\n    ): Set<string> => {\r\n      if (visited.has(folderId)) return new Set();\r\n      visited.add(folderId);\r\n\r\n      const descendants = new Set<string>();\r\n      const children = cache.get(folderId);\r\n      if (!children) return descendants;\r\n\r\n      for (const child of children) {\r\n        descendants.add(child.id);\r\n        if (child.isFolder) {\r\n          const subDescendants = getKnownDescendantIds(child.id, cache, visited);\r\n          subDescendants.forEach((id) => descendants.add(id));\r\n        }\r\n      }\r\n      return descendants;\r\n    };\r\n\r\n    // Check if a folder has any excluded descendants based on cache\r\n    const hasExcludedDescendantsInCache = (\r\n      folderId: string,\r\n      excludedIds: Set<string>,\r\n      cache: SharePointFolderCache,\r\n    ): boolean => {\r\n      const descendants = getKnownDescendantIds(folderId, cache);\r\n      return Array.from(excludedIds).some((id) => descendants.has(id));\r\n    };\r\n\r\n    // Check if all known descendants of a folder are excluded\r\n    const areAllKnownDescendantsExcluded = (\r\n      folderId: string,\r\n      excludedIds: Set<string>,\r\n      selectedItems: SharePointSelectedItem[],\r\n      cache: SharePointFolderCache,\r\n    ): boolean => {\r\n      const children = cache.get(folderId);\r\n      if (!children || children.length === 0) return false;\r\n\r\n      for (const child of children) {\r\n        const isChildExcluded = excludedIds.has(child.id);\r\n        const isChildDirectlySelected = selectedItems.some((s) => s.id === child.id);\r\n\r\n        if (isChildDirectlySelected) {\r\n          // Child is directly selected, so parent is not fully excluded\r\n          return false;\r\n        }\r\n\r\n        if (!isChildExcluded) {\r\n          // Child is not excluded\r\n          if (child.isFolder) {\r\n            // For folders, check if all their known descendants are excluded\r\n            const allSubExcluded = areAllKnownDescendantsExcluded(\r\n              child.id,\r\n              excludedIds,\r\n              selectedItems,\r\n              cache,\r\n            );\r\n            if (!allSubExcluded) return false;\r\n          } else {\r\n            // File is not excluded\r\n            return false;\r\n          }\r\n        }\r\n      }\r\n      return true;\r\n    };\r\n\r\n    // Get selection state for SharePoint item: true, false, or 'indeterminate'\r\n    const getSharePointItemSelectionState = (\r\n      item: SharePointFile,\r\n      selectedItems: SharePointSelectedItem[],\r\n      excludedIds: Set<string>,\r\n      breadcrumbs: { id: string; name: string }[],\r\n      cache: SharePointFolderCache,\r\n    ): boolean | 'indeterminate' => {\r\n      const isDirectlySelected = selectedItems.some((s) => s.id === item.id);\r\n      const ancestorSelected = isSharePointAncestorSelected(item, selectedItems, breadcrumbs);\r\n      const isExcluded = excludedIds.has(item.id);\r\n\r\n      // If directly selected folder, check if it has any excluded descendants using cache\r\n      if (isDirectlySelected && item.isFolder) {\r\n        const hasExcluded = hasExcludedDescendantsInCache(item.id, excludedIds, cache);\r\n        if (hasExcluded) return 'indeterminate';\r\n        return true;\r\n      }\r\n\r\n      // Directly selected (non-folder)\r\n      if (isDirectlySelected) return true;\r\n\r\n      // Ancestor selected and not excluded\r\n      if (ancestorSelected && !isExcluded) return true;\r\n\r\n      // Excluded under selected ancestor\r\n      if (ancestorSelected && isExcluded) return false;\r\n\r\n      return false;\r\n    };\r\n\r\n    // Auto-uncheck propagation: when all known descendants are excluded, remove folder from selection\r\n    // and propagate upward through ancestors\r\n    const propagateAutoUncheck = (\r\n      newExcludedIds: Set<string>,\r\n      currentSelectedItems: SharePointSelectedItem[],\r\n      cache: SharePointFolderCache,\r\n    ): { updatedSelected: SharePointSelectedItem[]; updatedExcluded: Set<string> } => {\r\n      let updatedSelected = [...currentSelectedItems];\r\n      let updatedExcluded = new Set(newExcludedIds);\r\n      let changed = true;\r\n\r\n      while (changed) {\r\n        changed = false;\r\n        for (const selected of updatedSelected) {\r\n          if (!selected.isFolder) continue;\r\n\r\n          const allExcluded = areAllKnownDescendantsExcluded(\r\n            selected.id,\r\n            updatedExcluded,\r\n            updatedSelected,\r\n            cache,\r\n          );\r\n\r\n          if (allExcluded) {\r\n            // Remove this folder from selection\r\n            updatedSelected = updatedSelected.filter((s) => s.id !== selected.id);\r\n            // Clean up exclusions for descendants of this folder\r\n            const descendants = getKnownDescendantIds(selected.id, cache);\r\n            descendants.forEach((id) => updatedExcluded.delete(id));\r\n            changed = true;\r\n            break;\r\n          }\r\n        }\r\n      }\r\n\r\n      return { updatedSelected, updatedExcluded };\r\n    };\r\n\r\n    const handleSharePointSelectItem = (item: SharePointFile) => {\r\n      const isDirectlySelected = selectedSharePointItems.some(\r\n        (selected) => selected.id === item.id,\r\n      );\r\n      const ancestorIsSelected = isSharePointAncestorSelected(\r\n        item,\r\n        selectedSharePointItems,\r\n        sharePointBreadcrumbs,\r\n      );\r\n      const isExcluded = excludedSharePointChildIds.has(item.id);\r\n\r\n      if (isDirectlySelected) {\r\n        // Unselect the directly selected item\r\n        setSelectedSharePointItems((prevItems) =>\r\n          prevItems.filter((selected) => selected.id !== item.id),\r\n        );\r\n        // If this was a folder, clean up exclusions for its descendants using cache\r\n        if (item.isFolder) {\r\n          const descendants = getKnownDescendantIds(item.id, sharePointCache);\r\n          setExcludedSharePointChildIds((prev) => {\r\n            const newSet = new Set(prev);\r\n            descendants.forEach((id) => newSet.delete(id));\r\n            return newSet;\r\n          });\r\n        }\r\n      } else if (ancestorIsSelected && !isExcluded) {\r\n        // Ancestor is selected and this item is not excluded, so exclude it\r\n        const newExcludedIds = new Set(excludedSharePointChildIds).add(item.id);\r\n\r\n        // Use cache-aware auto-uncheck propagation\r\n        const { updatedSelected, updatedExcluded } = propagateAutoUncheck(\r\n          newExcludedIds,\r\n          selectedSharePointItems,\r\n          sharePointCache,\r\n        );\r\n\r\n        setSelectedSharePointItems(updatedSelected);\r\n        setExcludedSharePointChildIds(updatedExcluded);\r\n      } else if (ancestorIsSelected && isExcluded) {\r\n        // Ancestor is selected and this item was excluded, so remove exclusion\r\n        setExcludedSharePointChildIds((prev) => {\r\n          const newSet = new Set(prev);\r\n          newSet.delete(item.id);\r\n          return newSet;\r\n        });\r\n      } else {\r\n        // Not selected and no ancestor selected, so select it\r\n        const currentAncestorIds = sharePointBreadcrumbs.slice(1).map((b) => b.id);\r\n\r\n        setSelectedSharePointItems((prevItems) => {\r\n          if (prevItems.some((selected) => selected.id === item.id)) {\r\n            return prevItems;\r\n          }\r\n          return [\r\n            ...prevItems,\r\n            {\r\n              id: item.id,\r\n              name: item.name,\r\n              size: item.size,\r\n              lastModified: item.lastModified,\r\n              contentType: item.contentType,\r\n              isFolder: item.isFolder,\r\n              parentId: item.parentId,\r\n              ancestorIds: currentAncestorIds,\r\n            },\r\n          ];\r\n        });\r\n\r\n        // If selecting a folder, remove explicitly selected descendants and clear their exclusions\r\n        if (item.isFolder) {\r\n          setSelectedSharePointItems((prevItems) =>\r\n            prevItems.filter((selected) => {\r\n              if (selected.id === item.id) return true;\r\n              return !selected.ancestorIds.includes(item.id);\r\n            }),\r\n          );\r\n          // Clear exclusions for all known descendants of this folder\r\n          const descendants = getKnownDescendantIds(item.id, sharePointCache);\r\n          setExcludedSharePointChildIds((prev) => {\r\n            const newSet = new Set(prev);\r\n            descendants.forEach((id) => newSet.delete(id));\r\n            return newSet;\r\n          });\r\n        }\r\n      }\r\n    };\r\n\r\n    const handleSharePointFolderNavigation = (index: number) => {\r\n      setSharePointBreadcrumbs((prev) => prev.slice(0, index + 1));\r\n      const folderId = sharePointBreadcrumbs[index]?.id;\r\n      if (folderId) {\r\n        fetchSharePointFiles(\r\n          folderId,\r\n          'SharePoint',\r\n          selectedSite?.hostname || '',\r\n          selectedSite?.sitePath || '',\r\n        );\r\n      }\r\n    };\r\n\r\n    const syncSharePointToS3 = async (\r\n      selectedItems: SharePointSelectedItem[],\r\n      prefix: string,\r\n      excludedIds: Set<string>,\r\n    ): Promise<void> => {\r\n      const accessToken = localStorage.getItem('sharepoint_access_token');\r\n      if (!accessToken) {\r\n        hotToast.error('Không tìm thấy access token. Vui lòng đăng nhập lại.');\r\n        return;\r\n      }\r\n\r\n      const toastId = hotToast.loading('Đang đồng bộ SharePoint...', {\r\n        position: 'bottom-right',\r\n        autoClose: false,\r\n      });\r\n\r\n      try {\r\n        const payload = {\r\n          prefix,\r\n          folders: [] as { id: string; name: string }[],\r\n          files: [] as { id: string; name: string }[],\r\n          hostname: selectedSite?.hostname || '',\r\n          sitePath: selectedSite?.sitePath || '',\r\n          isAutoUpdateKB,\r\n          refreshAccessToken: localStorage.getItem('refresh_sharepoint_access_token') || '',\r\n          excludedIds: Array.from(excludedIds),\r\n        };\r\n\r\n        // Deduplicate: collect all selected folder IDs first\r\n        const selectedFolderIds = new Set(\r\n          selectedItems.filter((item) => item.isFolder).map((item) => item.id),\r\n        );\r\n        const addedIds = new Set<string>();\r\n\r\n        selectedItems.forEach((item) => {\r\n          // Skip if already added (prevent duplicates)\r\n          if (addedIds.has(item.id)) return;\r\n\r\n          // Skip if this item's ancestor is already selected (it will be synced as part of parent)\r\n          const hasSelectedAncestor = item.ancestorIds.some((ancestorId) =>\r\n            selectedFolderIds.has(ancestorId),\r\n          );\r\n          if (hasSelectedAncestor) return;\r\n\r\n          addedIds.add(item.id);\r\n          if (item.isFolder) {\r\n            payload.folders.push({ id: item.id, name: item.name });\r\n          } else {\r\n            payload.files.push({ id: item.id, name: item.name });\r\n          }\r\n        });\r\n\r\n        const response = await axios.post(`${apiBaseUrl}/api/sync-sharepoint-to-s3`, payload, {\r\n          headers: { Authorization: `Bearer ${accessToken}` },\r\n        });\r\n\r\n        void refreshFiles();\r\n        hotToast.update(toastId, {\r\n          render: `Đồng bộ thành công! Đã tải lên ${response.data.uploadedKeys.length} file.`,\r\n          type: 'success',\r\n          isLoading: false,\r\n          autoClose: 3000,\r\n          position: 'bottom-right',\r\n        });\r\n\r\n        setIsSharePointModalOpen(false);\r\n      } catch (error) {\r\n        console.error('Lỗi khi đồng bộ file từ SharePoint:', error);\r\n        hotToast.update(toastId, {\r\n          render: 'Không thể đồng bộ file từ SharePoint.',\r\n          type: 'error',\r\n          isLoading: false,\r\n          autoClose: 3000,\r\n          position: 'bottom-right',\r\n        });\r\n      }\r\n    };\r\n\r\n    const handleCloseSharePointModal = () => {\r\n      setIsSharePointModalOpen(false);\r\n      setSharePointFiles([]);\r\n      setSharePointFolders([]);\r\n      setSelectedSharePointItems([]);\r\n      setExcludedSharePointChildIds(new Set());\r\n      setSharePointBreadcrumbs([{ id: 'root', name: 'SharePoint' }]);\r\n      setSharePointCache(new Map());\r\n    };\r\n\r\n    useEffect(() => {\r\n      if (isSharePointModalOpen) {\r\n        const urlParams = new URLSearchParams(window.location.search);\r\n        const code = urlParams.get('code');\r\n        if (code) {\r\n          fetchSharePointAccessToken(code);\r\n          window.history.replaceState({}, document.title, window.location.pathname);\r\n        }\r\n      }\r\n    }, [isSharePointModalOpen]);\r\n\r\n    useEffect(() => {\r\n      msalInstance\r\n        .initialize()\r\n        .then(() => {\r\n          setIsMsalReady(true);\r\n        })\r\n        .catch((error: unknown) => console.error('❌ Lỗi khởi tạo MSAL:', error));\r\n    }, []);\r\n\r\n    useEffect(() => {\r\n      checkLoginStatus();\r\n    }, []);\r\n\r\n    async function checkLoginStatus() {\r\n      const token = localStorage.getItem('onedrive_access_token');\r\n      if (token) {\r\n        setIsAuthenticated(true);\r\n      }\r\n    }\r\n\r\n    // Helper function to check if any ancestor folder is selected (OneDrive)\r\n    const isOneDriveAncestorSelected = (\r\n      _item: OneDriveFile,\r\n      selectedItems: OneDriveSelectedItem[],\r\n      breadcrumbs: { id: string; name: string }[],\r\n    ): boolean => {\r\n      const currentAncestorIds = breadcrumbs.slice(1).map((b) => b.id);\r\n      return selectedItems.some((selected) => {\r\n        if (!selected.isFolder) return false;\r\n        return currentAncestorIds.includes(selected.id);\r\n      });\r\n    };\r\n\r\n    // Helper function to find which selected ancestor folder contains the current view (OneDrive)\r\n    const findOneDriveSelectedAncestor = (\r\n      selectedItems: OneDriveSelectedItem[],\r\n      breadcrumbs: { id: string; name: string }[],\r\n    ): OneDriveSelectedItem | null => {\r\n      const currentAncestorIds = breadcrumbs.slice(1).map((b) => b.id);\r\n      for (let i = currentAncestorIds.length - 1; i >= 0; i--) {\r\n        const ancestorId = currentAncestorIds[i];\r\n        const selectedAncestor = selectedItems.find((s) => s.isFolder && s.id === ancestorId);\r\n        if (selectedAncestor) return selectedAncestor;\r\n      }\r\n      return null;\r\n    };\r\n\r\n    // Get selection state for OneDrive item: true, false, or 'indeterminate'\r\n    const getOneDriveItemSelectionState = (\r\n      item: OneDriveFile,\r\n      selectedItems: OneDriveSelectedItem[],\r\n      excludedIds: Set<string>,\r\n      breadcrumbs: { id: string; name: string }[],\r\n    ): boolean | 'indeterminate' => {\r\n      const isDirectlySelected = selectedItems.some((s) => s.id === item.id);\r\n      const ancestorSelected = isOneDriveAncestorSelected(item, selectedItems, breadcrumbs);\r\n      const isExcluded = excludedIds.has(item.id);\r\n\r\n      if (isDirectlySelected && item.isFolder) {\r\n        const hasExcludedDescendants = Array.from(excludedIds).some((excludedId) => {\r\n          const excludedItem = selectedItems.find((s) => s.id === excludedId);\r\n          if (excludedItem) {\r\n            return excludedItem.ancestorIds.includes(item.id);\r\n          }\r\n          return breadcrumbs.slice(1).some((b) => b.id === item.id);\r\n        });\r\n        if (hasExcludedDescendants) return 'indeterminate';\r\n        return true;\r\n      }\r\n\r\n      if (isDirectlySelected) return true;\r\n      if (ancestorSelected && !isExcluded) return true;\r\n      if (ancestorSelected && isExcluded) return false;\r\n\r\n      return false;\r\n    };\r\n\r\n    const handleOneDriveSelectItem = (item: OneDriveFile) => {\r\n      const isDirectlySelected = selectedOneDriveItems.some((selected) => selected.id === item.id);\r\n      const ancestorIsSelected = isOneDriveAncestorSelected(\r\n        item,\r\n        selectedOneDriveItems,\r\n        breadcrumbOneDrive,\r\n      );\r\n      const isExcluded = excludedOneDriveChildIds.has(item.id);\r\n      const allVisibleItems = [...folders, ...files];\r\n\r\n      if (isDirectlySelected) {\r\n        setSelectedOneDriveItems((prevItems) =>\r\n          prevItems.filter((selected) => selected.id !== item.id),\r\n        );\r\n        if (item.isFolder) {\r\n          setExcludedOneDriveChildIds((prev) => {\r\n            const newSet = new Set(prev);\r\n            prev.forEach((excludedId) => {\r\n              allVisibleItems.forEach((child) => {\r\n                if (child.id === excludedId && child.parentId === item.id) {\r\n                  newSet.delete(excludedId);\r\n                }\r\n              });\r\n            });\r\n            return newSet;\r\n          });\r\n        }\r\n      } else if (ancestorIsSelected && !isExcluded) {\r\n        const newExcludedIds = new Set(excludedOneDriveChildIds).add(item.id);\r\n\r\n        const selectedAncestor = findOneDriveSelectedAncestor(\r\n          selectedOneDriveItems,\r\n          breadcrumbOneDrive,\r\n        );\r\n        if (selectedAncestor) {\r\n          const allVisibleExcluded = allVisibleItems.every((visibleItem) =>\r\n            newExcludedIds.has(visibleItem.id),\r\n          );\r\n\r\n          if (allVisibleExcluded && allVisibleItems.length > 0) {\r\n            setSelectedOneDriveItems((prevItems) =>\r\n              prevItems.filter((s) => s.id !== selectedAncestor.id),\r\n            );\r\n            setExcludedOneDriveChildIds((prev) => {\r\n              const newSet = new Set(prev);\r\n              allVisibleItems.forEach((child) => newSet.delete(child.id));\r\n              return newSet;\r\n            });\r\n          } else {\r\n            setExcludedOneDriveChildIds(newExcludedIds);\r\n          }\r\n        } else {\r\n          setExcludedOneDriveChildIds(newExcludedIds);\r\n        }\r\n      } else if (ancestorIsSelected && isExcluded) {\r\n        setExcludedOneDriveChildIds((prev) => {\r\n          const newSet = new Set(prev);\r\n          newSet.delete(item.id);\r\n          return newSet;\r\n        });\r\n      } else {\r\n        const currentAncestorIds = breadcrumbOneDrive.slice(1).map((b) => b.id);\r\n\r\n        setSelectedOneDriveItems((prevItems) => {\r\n          if (prevItems.some((selected) => selected.id === item.id)) {\r\n            return prevItems;\r\n          }\r\n          return [\r\n            ...prevItems,\r\n            {\r\n              id: item.id,\r\n              name: item.name,\r\n              size: item.size,\r\n              lastModified: item.lastModified,\r\n              contentType: item.contentType,\r\n              isFolder: item.isFolder,\r\n              parentId: item.parentId,\r\n              ancestorIds: currentAncestorIds,\r\n            },\r\n          ];\r\n        });\r\n\r\n        if (item.isFolder) {\r\n          setSelectedOneDriveItems((prevItems) =>\r\n            prevItems.filter((selected) => {\r\n              if (selected.id === item.id) return true;\r\n              return !selected.ancestorIds.includes(item.id);\r\n            }),\r\n          );\r\n          setExcludedOneDriveChildIds((prev) => {\r\n            const newSet = new Set(prev);\r\n            allVisibleItems.forEach((child) => {\r\n              if (child.parentId === item.id) {\r\n                newSet.delete(child.id);\r\n              }\r\n            });\r\n            return newSet;\r\n          });\r\n        }\r\n      }\r\n    };\r\n\r\n    function formatBytes(bytes: number): string {\r\n      if (bytes === 0) return '0 B';\r\n      const k = 1024;\r\n      const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];\r\n      const i = Math.floor(Math.log(bytes) / Math.log(k));\r\n      return parseFloat((bytes / Math.pow(k, i)).toFixed(1)) + ' ' + sizes[i];\r\n    }\r\n\r\n    function formatDate(isoString: string): string {\r\n      const date = new Date(isoString);\r\n      return date.toLocaleDateString() + ' ' + date.toLocaleTimeString();\r\n    }\r\n\r\n    const loginOneDrive = async () => {\r\n      try {\r\n        const response = await axios.get(`${apiBaseUrl}/api/login-one-drive`);\r\n        const { loginUrl } = response.data;\r\n\r\n        const popup = window.open(loginUrl, 'OneDrive Login', 'width=600,height=600');\r\n        if (!popup) throw new Error('Không thể mở cửa sổ pop-up');\r\n        popup.focus();\r\n\r\n        const interval = setInterval(() => {\r\n          try {\r\n            if (popup.closed) {\r\n              clearInterval(interval);\r\n              return;\r\n            }\r\n            const currentUrl = popup.location.href;\r\n            if (currentUrl.includes('code=')) {\r\n              const authorizationCode = new URL(currentUrl).searchParams.get('code');\r\n              if (authorizationCode) {\r\n                fetchAccessToken(authorizationCode);\r\n                popup.close();\r\n                clearInterval(interval);\r\n              }\r\n            }\r\n          } catch (err: unknown) {\r\n            // Ignore cross-origin errors\r\n            if (err instanceof Error && !err.message.includes('cross-origin')) {\r\n              console.error('OneDrive login error:', err);\r\n            }\r\n          }\r\n        }, 1000);\r\n      } catch (err) {\r\n        hotToast.error(\r\n          'Lỗi khi đăng nhập OneDrive: ' +\r\n            (err instanceof Error ? err.message : 'Lỗi không xác định'),\r\n        );\r\n      }\r\n    };\r\n\r\n    const logoutOneDrive = async () => {\r\n      try {\r\n        await axios.post(`${apiBaseUrl}/api/logout-one-drive`);\r\n        localStorage.removeItem('onedrive_access_token');\r\n        localStorage.removeItem('onedrive_refresh_access_token');\r\n\r\n        hotToast.success('Đã đăng xuất khỏi OneDrive');\r\n\r\n        window.location.href =\r\n          'https://login.microsoftonline.com/common/oauth2/v2.0/logout?post_logout_redirect_uri=' +\r\n          encodeURIComponent(window.location.origin);\r\n      } catch (err) {\r\n        hotToast.error(\r\n          'Lỗi khi đăng xuất OneDrive: ' +\r\n            (err instanceof Error ? err.message : 'Lỗi không xác định'),\r\n        );\r\n      }\r\n    };\r\n\r\n    const fetchAccessToken = async (authorizationCode: string) => {\r\n      try {\r\n        const userId = user?.id;\r\n        const response = await axios.post(`${apiBaseUrl}/api/get-one-drive-access-token`, {\r\n          authorizationCode,\r\n          userId,\r\n        });\r\n\r\n        const { accessToken, refreshToken } = response.data;\r\n\r\n        localStorage.setItem('onedrive_access_token', accessToken);\r\n        localStorage.setItem('onedrive_refresh_access_token', refreshToken);\r\n        setIsAuthenticated(true);\r\n        setShowOneDriveModal(true);\r\n        await fetchOneDriveFiles('root', 'One Drive');\r\n      } catch (error) {\r\n        console.error('❌ Lỗi khi lấy Access Token:', error);\r\n      }\r\n    };\r\n\r\n    const fetchOneDriveFiles = async (folderId: string, folderName: string) => {\r\n      try {\r\n        setIsLoadingOneDrive(true);\r\n        const userId = user?.id;\r\n        const response = await axios.post(`${apiBaseUrl}/api/list-file-one-drive`, {\r\n          folderId,\r\n          userId,\r\n        });\r\n\r\n        const data = response.data.map((item: any): OneDriveFile => ({\r\n          id: item.id,\r\n          name: item.name,\r\n          size: item.size ?? 0,\r\n          lastModified: item.lastModifiedDateTime\r\n            ? new Date(item.lastModifiedDateTime)\r\n            : new Date(),\r\n          contentType: item.mimeType ?? undefined,\r\n          isFolder: item.type === 'folder',\r\n          parentId: item.parentId ?? '',\r\n        }));\r\n\r\n        setFolders(data.filter((item: OneDriveFile) => item.isFolder));\r\n        setFiles(data.filter((item: OneDriveFile) => !item.isFolder));\r\n\r\n        setShowOneDriveModal(true);\r\n        setBreadcrumbOneDrive((prev) => {\r\n          if (prev.some((b) => b.id === folderId)) return prev;\r\n          return [...prev, { id: folderId, name: folderName === 'root' ? 'OneDrive' : folderName }];\r\n        });\r\n\r\n        setIsLoadingOneDrive(false);\r\n      } catch (error) {\r\n        console.error('Lỗi lấy danh sách file:', error);\r\n        setIsLoadingOneDrive(false);\r\n      }\r\n    };\r\n\r\n    const handleOneDriveFolderNavigation = (index: number) => {\r\n      if (index === breadcrumbOneDrive.length - 1) return;\r\n\r\n      const targetFolder = breadcrumbOneDrive[index];\r\n      if (!targetFolder) return;\r\n\r\n      setBreadcrumbOneDrive(breadcrumbOneDrive.slice(0, index + 1));\r\n      fetchOneDriveFiles(targetFolder.id, targetFolder.name);\r\n    };\r\n\r\n    const syncOneDriveToS3 = async (\r\n      selectedItems: OneDriveSelectedItem[],\r\n      prefix: string,\r\n      excludedIds: Set<string>,\r\n    ): Promise<void> => {\r\n      const accessToken = localStorage.getItem('onedrive_access_token');\r\n      const refreshAccessToken = localStorage.getItem('onedrive_refresh_access_token');\r\n      if (!accessToken) {\r\n        hotToast.error('Không tìm thấy access token. Vui lòng đăng nhập lại.');\r\n        return;\r\n      }\r\n\r\n      const toastId = hotToast.loading('Đang đồng bộ OneDrive...', {\r\n        position: 'bottom-right',\r\n        autoClose: false,\r\n      });\r\n\r\n      try {\r\n        const payload = {\r\n          prefix,\r\n          folders: [] as { id: string; name: string }[],\r\n          files: [] as { id: string; name: string }[],\r\n          isAutoUpdateKB: isAutoUpdateKB,\r\n          refreshAccessToken: refreshAccessToken,\r\n          excludedIds: Array.from(excludedIds),\r\n        };\r\n\r\n        // Deduplicate: collect all selected folder IDs first\r\n        const selectedFolderIds = new Set(\r\n          selectedItems.filter((item) => item.isFolder).map((item) => item.id),\r\n        );\r\n        const addedIds = new Set<string>();\r\n\r\n        selectedItems.forEach((item) => {\r\n          // Skip if already added (prevent duplicates)\r\n          if (addedIds.has(item.id)) return;\r\n\r\n          // Skip if this item's ancestor is already selected (it will be synced as part of parent)\r\n          const hasSelectedAncestor = item.ancestorIds.some((ancestorId) =>\r\n            selectedFolderIds.has(ancestorId),\r\n          );\r\n          if (hasSelectedAncestor) return;\r\n\r\n          addedIds.add(item.id);\r\n          if (item.isFolder) {\r\n            payload.folders.push({ id: item.id, name: item.name });\r\n          } else {\r\n            payload.files.push({ id: item.id, name: item.name });\r\n          }\r\n        });\r\n\r\n        const response = await axios.post(`${apiBaseUrl}/api/sync-one-drive-to-s3`, payload, {\r\n          headers: { Authorization: `Bearer ${accessToken}` },\r\n        });\r\n\r\n        void refreshFiles();\r\n        hotToast.update(toastId, {\r\n          render: `Đồng bộ thành công! Đã tải lên ${response.data.uploadedKeys.length} file.`,\r\n          type: 'success',\r\n          isLoading: false,\r\n          autoClose: 3000,\r\n          position: 'bottom-right',\r\n        });\r\n      } catch (error) {\r\n        console.error('Lỗi khi đồng bộ file từ OneDrive:', error);\r\n\r\n        hotToast.update(toastId, {\r\n          render: 'Không thể đồng bộ file từ OneDrive.',\r\n          type: 'error',\r\n          isLoading: false,\r\n          autoClose: 3000,\r\n          position: 'bottom-right',\r\n        });\r\n      }\r\n    };\r\n\r\n    const handleCloseOneDriveModal = () => {\r\n      setShowOneDriveModal(false);\r\n      setBreadcrumbOneDrive([{ id: 'root', name: 'OneDrive' }]);\r\n      setFolders([]);\r\n      setFiles([]);\r\n      setSelectedOneDriveItems([]);\r\n      setExcludedOneDriveChildIds(new Set());\r\n      setIsLoadingOneDrive(false);\r\n    };\r\n\r\n    const login = useGoogleLogin({\r\n      onSuccess: (tokenResponse) => {\r\n        setToken(tokenResponse.access_token);\r\n        localStorage.setItem('google_access_token', tokenResponse.access_token);\r\n        loadGooglePicker(tokenResponse.access_token);\r\n      },\r\n      onError: () => {\r\n        console.log('Đăng nhập thất bại!');\r\n      },\r\n      scope: SCOPES,\r\n    });\r\n\r\n    const loadGooglePicker = (accessToken: string) => {\r\n      const script = document.createElement('script');\r\n      script.src = 'https://apis.google.com/js/api.js';\r\n      script.onload = () => {\r\n        window.gapi.load('picker', () => initializePicker(accessToken));\r\n      };\r\n      document.body.appendChild(script);\r\n    };\r\n\r\n    const initializePicker = (accessToken: string) => {\r\n      const docsView = new window.google.picker.DocsView(window.google.picker.ViewId.DOCS)\r\n        .setIncludeFolders(true)\r\n        .setSelectFolderEnabled(true)\r\n        .setOwnedByMe(false);\r\n\r\n      const driveView = new window.google.picker.DocsView(window.google.picker.ViewId.DRIVE)\r\n        .setIncludeFolders(true)\r\n        .setSelectFolderEnabled(true);\r\n\r\n      const picker = new window.google.picker.PickerBuilder()\r\n        .setDeveloperKey(PICKER_BUILDER_DEVELOPER_KEY)\r\n        .setOAuthToken(accessToken)\r\n        .enableFeature(window.google.picker.Feature.MULTISELECT_ENABLED) // Chọn nhiều file\r\n        .setLocale('vi')\r\n        .addView(docsView)\r\n        .addView(driveView)\r\n        .setCallback(async (data: any) => {\r\n          if (data.action === window.google.picker.Action.PICKED) {\r\n            const selectedFiles = data.docs.map((doc: any) => ({\r\n              id: doc.id,\r\n              name: doc.name,\r\n              mimeType: doc.mimeType,\r\n            }));\r\n\r\n            await syncDriveToS3(selectedFiles, currentPrefix);\r\n          }\r\n        })\r\n        .build();\r\n\r\n      picker.setVisible(true);\r\n    };\r\n\r\n    const syncDriveToS3 = async (selectedFiles: any[], prefix = '') => {\r\n      const accessToken = localStorage.getItem('google_access_token');\r\n\r\n      if (!accessToken) {\r\n        console.error('❌ Không tìm thấy access token. Vui lòng đăng nhập lại.');\r\n        hotToast.error('Không tìm thấy access token. Vui lòng đăng nhập lại.', {\r\n          position: 'bottom-right',\r\n        });\r\n        return;\r\n      }\r\n\r\n      const toastId = hotToast.loading('Đang đồng bộ...', {\r\n        position: 'bottom-right',\r\n        autoClose: false,\r\n      });\r\n\r\n      try {\r\n        const payload = {\r\n          prefix: prefix, // ✅ Thêm prefix vào payload\r\n          folders: [] as { id: string; name: string }[],\r\n          files: [] as { id: string; name: string }[],\r\n        };\r\n\r\n        selectedFiles.forEach((file) => {\r\n          if (file.mimeType === 'application/vnd.google-apps.folder') {\r\n            payload.folders.push({ id: file.id, name: file.name });\r\n          } else {\r\n            payload.files.push({ id: file.id, name: file.name });\r\n          }\r\n        });\r\n\r\n        const response = await axios.post(`${apiBaseUrl}/api/sync-drive-to-s3`, payload, {\r\n          headers: { Authorization: `Bearer ${accessToken}` },\r\n        });\r\n\r\n        ignoreCache.current = true;\r\n        void refreshFiles();\r\n\r\n        hotToast.update(toastId, {\r\n          render: `Đồng bộ thành công! Đã tải lên ${response.data.uploadedKeys.length} file.`,\r\n          type: 'success',\r\n          isLoading: false,\r\n          autoClose: 3000,\r\n          position: 'bottom-right',\r\n        });\r\n      } catch (error) {\r\n        console.error('❌ Lỗi khi đồng bộ file từ Google Drive:', error);\r\n\r\n        hotToast.update(toastId, {\r\n          render: 'Không thể đồng bộ file từ Google Drive.',\r\n          type: 'error',\r\n          isLoading: false,\r\n          autoClose: 3000,\r\n          position: 'bottom-right',\r\n        });\r\n      }\r\n    };\r\n\r\n    useEffect(() => {\r\n      const handleLogoutMessage = (event: any) => {\r\n        if (event.data.action === 'logout') {\r\n          const iframe = document.createElement('iframe');\r\n          iframe.style.display = 'none';\r\n          iframe.src = 'https://accounts.google.com/Logout';\r\n          document.body.appendChild(iframe);\r\n\r\n          setTimeout(() => document.body.removeChild(iframe), 2000);\r\n        }\r\n      };\r\n\r\n      window.addEventListener('message', handleLogoutMessage);\r\n      return () => window.removeEventListener('message', handleLogoutMessage);\r\n    }, []);\r\n\r\n    useEffect(() => {\r\n      const newSet = new Set(preSelectedFiles);\r\n      setSelectedKeys(newSet);\r\n    }, []);\r\n\r\n    // Effect to show notifications for completed/failed/blocked jobs\r\n    useEffect(() => {\r\n      if (currentJob?.status) {\r\n        if (currentJob.status.status === 'completed') {\r\n          // Check if S3 upload is still processing\r\n          if (currentJob.status.isProcessing) {\r\n            toast({\r\n              title: 'Đang xử lý dữ liệu thu thập...',\r\n              description: `Đã thu thập xong ${currentJob.status.completed} trang từ ${currentJob.url}. Đang lưu dữ liệu...`,\r\n            });\r\n            // Do NOT refresh files yet - continue polling\r\n          } else {\r\n            // S3 upload is complete, show completion and refresh\r\n            toast({\r\n              title: 'Thu thập website hoàn tất',\r\n              description: `Đã thu thập thành công ${currentJob.url} với ${currentJob.status.completed} trang`,\r\n            });\r\n            // Refresh files to show new content\r\n            ignoreCache.current = true;\r\n            void refreshFiles();\r\n          }\r\n        } else if (currentJob.status.status === 'failed') {\r\n          toast({\r\n            title: 'Thu thập website thất bại',\r\n            description: `Không thể thu thập ${currentJob.url}. Vui lòng thử lại.`,\r\n            variant: 'destructive',\r\n          });\r\n        } else if (currentJob.status.status === 'blocked') {\r\n          toast({\r\n            title: 'Website chặn thu thập dữ liệu',\r\n            description:\r\n              currentJob.status.message ||\r\n              `Website ${currentJob.url} đang chặn yêu cầu thu thập. Điều này có thể do website có bảo vệ chống bot hoặc hạn chế truy cập.`,\r\n            variant: 'destructive',\r\n          });\r\n        }\r\n      }\r\n    }, [currentJob?.status?.status, currentJob?.status?.isProcessing]);\r\n\r\n    const data = useMemo(() => fileSystem[currentPrefix] || [], [fileSystem, currentPrefix]);\r\n\r\n    const filteredData = useMemo(\r\n      () => data.filter((d) => canViewDocument(d.permission)),\r\n      [data, currentPrefix, fileSystem],\r\n    );\r\n\r\n    // Convert selectedKeys to row selection state for the table\r\n    const rowSelection = useMemo(() => {\r\n      const selection: Record<number, boolean> = {};\r\n      filteredData.forEach((file, index) => {\r\n        if (selectedKeys.has(file.key)) {\r\n          selection[index] = true;\r\n        }\r\n      });\r\n      return selection;\r\n    }, [selectedKeys, filteredData]);\r\n\r\n    // Check if a folder is partially selected\r\n    const getFolderSelectionState = (folderKey: string): 'none' | 'partial' | 'all' => {\r\n      const filesUnderFolder = getAllFilesUnderFolder(fileSystem, folderKey);\r\n      // If the folder exists in the fileSystem but has no files, treat it as a single selectable item\r\n      if (filesUnderFolder.length === 0) {\r\n        return selectedKeys.has(folderKey) ? 'all' : 'none';\r\n      }\r\n\r\n      const selectedCount = filesUnderFolder.filter((key) => selectedKeys.has(key)).length;\r\n      if (selectedCount === 0) return 'none';\r\n      if (selectedCount === filesUnderFolder.length) return 'all';\r\n      return 'partial';\r\n    };\r\n\r\n    const handleFolderClick = (prefix: string, isReplace = true) => {\r\n      if (currentPrefix === prefix) return;\r\n\r\n      // Reset browse page when changing folders\r\n      setBrowsePage(1);\r\n\r\n      if (idCreator && !currentPrefix) {\r\n        setIsFolderClicking(true);\r\n        setForcePrefix(prefix + idCreator);\r\n        setCurrentPrefix(prefix + idCreator);\r\n        // if (!Boolean(preSelectedFiles)) {\r\n        //   setSelectedKeys(new Set());\r\n        // }\r\n      } else {\r\n        setIsFolderClicking(true);\r\n        setForcePrefix(prefix);\r\n        setCurrentPrefix(prefix);\r\n        // if (!Boolean(preSelectedFiles)) {\r\n        //   setSelectedKeys(new Set());\r\n        // }\r\n\r\n        if (isReplace && !asSelector) {\r\n          const basePath = window.location.pathname === '/' ? '' : window.location.pathname;\r\n\r\n          const newUrl = prefix\r\n            ? `${window.location.origin}${basePath}?prefix=${encodeURIComponent(prefix)}`\r\n            : `${window.location.origin}${basePath}`;\r\n\r\n          window.history.pushState({ path: newUrl }, '', newUrl);\r\n        }\r\n      }\r\n    };\r\n\r\n    // Function to handle navigation to failed files\r\n    const handleNavigateToFailedFile = (filePath: string) => {\r\n      // Extract folder path from file path\r\n      const lastSlashIndex = filePath.lastIndexOf('/');\r\n      const folderPath = lastSlashIndex > 0 ? filePath.substring(0, lastSlashIndex + 1) : '';\r\n\r\n      // Navigate to the folder containing the file\r\n      if (folderPath) {\r\n        handleFolderClick(folderPath);\r\n\r\n        // After navigation, highlight the file by adding it to selectedKeys\r\n        setTimeout(() => {\r\n          setSelectedKeys(new Set([filePath]));\r\n        }, 500); // Small delay to ensure navigation completes\r\n      } else {\r\n        // If file is in root, just highlight it\r\n        setSelectedKeys(new Set([filePath]));\r\n      }\r\n    };\r\n\r\n    useEffect(() => {\r\n      if (!isFolderClicking) return;\r\n\r\n      ignoreCache.current = true;\r\n      refreshFiles().finally(() => setIsFolderClicking(false));\r\n    }, [isFolderClicking]);\r\n\r\n    const createFolder = async (name: string, prefix: string) => {\r\n      setIsCreatingFolder(true);\r\n      try {\r\n        // Check if the folder name already exists in filtered data\r\n        const folderExists = filteredData.some(\r\n          (file) => file.isFolder && file.name.toLowerCase() === name.toLowerCase(),\r\n        );\r\n\r\n        if (folderExists) {\r\n          toast({\r\n            title: 'Lỗi',\r\n            description: `Thư mục \"${name}\" đã tồn tại trong thư mục hiện tại.`,\r\n            variant: 'destructive',\r\n          });\r\n          setIsCreatingFolder(false);\r\n          return;\r\n        }\r\n\r\n        const folderPrefix = `${prefix}${name}/`;\r\n        const response = await axios.post(`${apiBaseUrl}/api/create-folder`, {\r\n          prefix: folderPrefix,\r\n          userId: currentUser?.id || '',\r\n        });\r\n\r\n        if (response.status !== 200) {\r\n          toast({ title: 'Lỗi', description: 'Không thể tạo thư mục', variant: 'destructive' });\r\n          return;\r\n        }\r\n\r\n        ignoreCache.current = true;\r\n        await refreshFiles();\r\n\r\n        toast({ title: 'Đã tạo thư mục', description: `Đã tạo thành công thư mục \"${name}\"` });\r\n\r\n        // Reset state\r\n        setNewFolderName('');\r\n        setIsCreateFolderOpen(false);\r\n      } catch (error) {\r\n        console.error('Error creating folder:', error);\r\n        const errorMessage = (error as any)?.response?.data?.error || 'Không thể tạo thư mục';\r\n        toast({ title: 'Lỗi', description: errorMessage, variant: 'destructive' });\r\n      } finally {\r\n        setIsCreatingFolder(false);\r\n      }\r\n    };\r\n\r\n    // Lọc tệp theo định dạng cho phép của kho (ví dụ kho_ncc/ chỉ nhận .docx và .pdf).\r\n    // - Kho không có quy tắc: trả lại nguyên danh sách, không toast.\r\n    // - Có tệp sai định dạng: bỏ qua các tệp đó, toast báo danh sách bị bỏ, upload tiếp phần hợp lệ.\r\n    // - Không còn tệp hợp lệ: trả null để phía gọi dừng lại.\r\n    const filterFilesByAllowedExtensions = (\r\n      files: FileList | File[],\r\n      prefix: string,\r\n    ): FileList | null => {\r\n      const { hasRule, validFiles, invalidFiles, allowed } = validateFilesForAllowedExtensions(\r\n        files,\r\n        prefix,\r\n      );\r\n\r\n      if (!hasRule) {\r\n        return toFileList(validFiles);\r\n      }\r\n\r\n      const allowedLabel = allowed.map((ext) => `.${ext}`).join(', ');\r\n\r\n      if (validFiles.length === 0) {\r\n        toast({\r\n          title: 'Lỗi tải lên',\r\n          description: `Kho này chỉ cho phép tải lên tệp định dạng ${allowedLabel}. Không có tệp nào hợp lệ: ${invalidFiles.join(', ')}.`,\r\n          variant: 'destructive',\r\n        });\r\n        return null;\r\n      }\r\n\r\n      if (invalidFiles.length > 0) {\r\n        toast({\r\n          title: 'Một số tệp bị bỏ qua',\r\n          description: `Kho này chỉ cho phép tải lên tệp định dạng ${allowedLabel}. Đã bỏ qua ${invalidFiles.length} tệp: ${invalidFiles.join(', ')}. Tiếp tục tải lên ${validFiles.length} tệp hợp lệ.`,\r\n          variant: 'destructive',\r\n        });\r\n      }\r\n\r\n      return toFileList(validFiles);\r\n    };\r\n\r\n    // Helper function to check if prefix requires metadata form\r\n    // Only applies to kho_doi_ngoai (outside), not kho_doi_noi (inside)\r\n    const requiresMetadataForm = (prefix: string): boolean => {\r\n      return (\r\n        prefix.startsWith('kho_doi_ngoai/') ||\r\n        prefix.startsWith('kho_doi_noi/') ||\r\n        prefix === 'kho_doi_ngoai/' ||\r\n        prefix === 'kho_doi_noi/'\r\n      );\r\n    };\r\n\r\n    // Helper function to check if file is a compressed/archive file\r\n    const isCompressedFile = (fileName: string): boolean => {\r\n      const extension = fileName.split('.').pop()?.toLowerCase();\r\n      const compressedExtensions = [\r\n        'zip',\r\n        'rar',\r\n        '7z',\r\n        'tar',\r\n        'gz',\r\n        'bz2',\r\n        'xz',\r\n        'lz',\r\n        'lzma',\r\n        'cab',\r\n        'iso',\r\n        'dmg',\r\n        'pkg',\r\n        'deb',\r\n        'rpm',\r\n        'msi',\r\n        'exe',\r\n        'jar',\r\n        'war',\r\n        'ear',\r\n        'apk',\r\n        'ipa',\r\n        'wim',\r\n        'swm',\r\n        'esd',\r\n      ];\r\n      return compressedExtensions.includes(extension || '');\r\n    };\r\n\r\n    // Helper function to validate files for compressed formats\r\n    const validateFilesForCompression = (\r\n      files: FileList,\r\n    ): { hasCompressed: boolean; compressedFiles: string[] } => {\r\n      const compressedFiles: string[] = [];\r\n\r\n      Array.from(files).forEach((file) => {\r\n        if (isCompressedFile(file.name)) {\r\n          compressedFiles.push(file.name);\r\n        }\r\n      });\r\n\r\n      return {\r\n        hasCompressed: compressedFiles.length > 0,\r\n        compressedFiles,\r\n      };\r\n    };\r\n\r\n    const uploadFiles = async (inputFiles: FileList, prefix: string, type: 'files' | 'folder') => {\r\n      // Kho bộ chỉ tiêu chỉ nhận ảnh trực tiếp ở thư mục gốc, không nhận upload folder.\r\n      if (\r\n        isBoChiTieuPrefix(prefix) &&\r\n        (type === 'folder' || Array.from(inputFiles).some((file) => file.webkitRelativePath))\r\n      ) {\r\n        toast({\r\n          title: 'Lỗi tải lên',\r\n          description:\r\n            'Kho bộ chỉ tiêu chỉ cho phép tải ảnh trực tiếp trong thư mục gốc, không tải thư mục.',\r\n          variant: 'destructive',\r\n        });\r\n        return;\r\n      }\r\n\r\n      // Lọc tệp sai định dạng theo quy tắc (áp dụng cho cả drag & drop tệp lẻ và cả thư mục)\r\n      const files = filterFilesByAllowedExtensions(inputFiles, prefix);\r\n      if (!files) {\r\n        return;\r\n      }\r\n\r\n      // Kiểm tra tổng dung lượng lần upload tối đa 100MB, không giới hạn số lượng file.\r\n      if (checkConditionUploadFiles(files, toast)) {\r\n        return;\r\n      }\r\n\r\n      // Check for compressed files first\r\n      const compressionCheck = validateFilesForCompression(files);\r\n      if (compressionCheck.hasCompressed) {\r\n        toast({\r\n          title: 'Lỗi tải lên',\r\n          description: `Không thể tải lên file nén: ${compressionCheck.compressedFiles.join(', ')}. Vui lòng giải nén trước khi tải lên.`,\r\n          variant: 'destructive',\r\n        });\r\n        return;\r\n      }\r\n\r\n      // Check if this path requires the metadata form\r\n      if (requiresMetadataForm(prefix)) {\r\n        // Check for compressed files FIRST before proceeding with upload\r\n        const compressionCheck = validateFilesForCompression(files);\r\n        if (compressionCheck.hasCompressed) {\r\n          toast({\r\n            title: 'Lỗi tải lên',\r\n            description: `Không thể tải lên file nén: ${compressionCheck.compressedFiles.join(', ')}. Vui lòng giải nén trước khi tải lên.`,\r\n            variant: 'destructive',\r\n          });\r\n          setShowUploadFormDialog(false);\r\n          setPendingUploadInfo(null);\r\n          setUploadFormErrors([]);\r\n          return;\r\n        }\r\n\r\n        setPendingUploadInfo({\r\n          files,\r\n          prefix,\r\n          type,\r\n        });\r\n        setShowUploadFormDialog(true);\r\n        // Reset form for new upload\r\n        setUploadMetadataForm({\r\n          ...defaultUploadMetadata,\r\n          creator: user?.username || '',\r\n          modifier: user?.username || '',\r\n          modifiedDate: new Date().toLocaleDateString('vi-VN'),\r\n        });\r\n        return;\r\n      }\r\n\r\n      // For other paths, upload directly without metadata form\r\n      setUploadType(type);\r\n      setIsUploading(true);\r\n      try {\r\n        // Check for empty files\r\n        const emptyFiles = Array.from(files).filter((file) => file.size === 0);\r\n        if (emptyFiles.length > 0) {\r\n          const fileNames = emptyFiles.map((file) => file.name).join(', ');\r\n          toast({\r\n            title: 'Lỗi tải lên',\r\n            description: `Không thể tải lên tập tin rỗng: ${fileNames}`,\r\n            variant: 'destructive',\r\n          });\r\n          setIsUploading(false);\r\n          setUploadType(null);\r\n          return;\r\n        }\r\n\r\n        const formData = new FormData();\r\n\r\n        if (user?.id) {\r\n          formData.append(\r\n            'metadata',\r\n            JSON.stringify({\r\n              creator: user.username,\r\n              creatorId: user.id,\r\n              DataSource: 'Tệp tải lên',\r\n            }),\r\n          );\r\n        }\r\n        if (type === 'folder' && files[0]) {\r\n          const folderName = files[0].webkitRelativePath.split('/')[0];\r\n          if (folderName) {\r\n            formData.append('folderName', folderName);\r\n          }\r\n        }\r\n        formData.append('prefix', prefix);\r\n        Array.from(files).forEach((file) => {\r\n          if (type === 'folder') {\r\n            return formData.append('files', file, file.webkitRelativePath);\r\n          } else {\r\n            return formData.append('files', file);\r\n          }\r\n        });\r\n\r\n        ignoreCache.current = true;\r\n\r\n        const checkResponse = await axios.post(`${apiBaseUrl}/api/check-files-existed`, formData, {\r\n          headers: { 'Content-Type': 'multipart/form-data' },\r\n        });\r\n\r\n        if (checkResponse?.data?.status === 200) {\r\n          const toastId = hotToast.loading('Đang tải lên', {\r\n            position: 'bottom-right',\r\n            autoClose: 3000,\r\n          });\r\n          await axios.post(`${apiBaseUrl}/api/upload`, formData, {\r\n            headers: { 'Content-Type': 'multipart/form-data' },\r\n            timeout: 0, // no timeout (infinite)\r\n          });\r\n          hotToast.update(toastId, {\r\n            render: `Tải lên thành công`,\r\n            type: 'success',\r\n            isLoading: false,\r\n            autoClose: 3000,\r\n            position: 'bottom-right',\r\n          });\r\n          setSearchQuery('');\r\n          setForcePrefix(prefix);\r\n          trackUploadedPdfParse(files, prefix);\r\n          trackUploadedBoChiTieuOcr(files, prefix);\r\n          setTimeout(async () => {\r\n            setUploadType(null);\r\n            await refreshFiles();\r\n            setIsUploading(false);\r\n            await autoSyncAfterFileOperation('upload');\r\n          }, 500);\r\n        } else {\r\n          if (checkResponse?.data?.names?.length > 0 && !checkResponse?.data?.isFolder) {\r\n            const filesFound: any = Array.from(files).filter((file) =>\r\n              checkResponse.data.names.includes(file.name),\r\n            );\r\n            setDuplicateFiles(filesFound);\r\n            setShowDuplicateDialog(true);\r\n          }\r\n\r\n          if (checkResponse?.data?.isFolder && checkResponse?.data?.name) {\r\n            setFolderExist(checkResponse?.data?.name);\r\n            setDuplicateFiles(files);\r\n            setShowDuplicateDialog(true);\r\n          }\r\n        }\r\n      } catch (error) {\r\n        console.error('Lỗi tải lên:', error);\r\n        const errorMessage = (error as any)?.response?.data?.error || 'Không thể tải lên tập tin';\r\n        toast({ title: 'Lỗi', description: errorMessage, variant: 'destructive' });\r\n        setUploadType(null);\r\n        setIsUploading(false);\r\n      }\r\n    };\r\n\r\n    const overwriteFiles = async () => {\r\n      if (duplicateFiles && checkConditionUploadFiles(duplicateFiles, toast)) {\r\n        return;\r\n      }\r\n\r\n      try {\r\n        setIsUploading(true);\r\n        const formData = new FormData();\r\n\r\n        if (duplicateFiles) {\r\n          if (Boolean(folderExist)) {\r\n            setUploadType('folder');\r\n          } else {\r\n            setUploadType('files');\r\n          }\r\n          setShowDuplicateDialog(false);\r\n          let dataLogin: any = localStorage.getItem('dataLogin');\r\n          let user: any;\r\n\r\n          try {\r\n            if (dataLogin) {\r\n              dataLogin = JSON.parse(dataLogin);\r\n              user = dataLogin.user;\r\n            }\r\n          } catch (error) {\r\n            dataLogin = null;\r\n          }\r\n\r\n          if (folderExist && duplicateFiles[0]) {\r\n            const folderName = duplicateFiles[0].webkitRelativePath.split('/')[0];\r\n            if (folderName) {\r\n              formData.append('folderName', folderName);\r\n            }\r\n          }\r\n\r\n          formData.append('prefix', currentPrefix);\r\n          Array.from(duplicateFiles).forEach((file) => {\r\n            if (folderExist && duplicateFiles[0]) {\r\n              return formData.append('files', file, file.webkitRelativePath);\r\n            } else {\r\n              return formData.append('files', file);\r\n            }\r\n          });\r\n          if (user?.id) {\r\n            formData.append(\r\n              'metadata',\r\n              JSON.stringify({\r\n                creator: user.username,\r\n                creatorId: user.id,\r\n                DataSource: 'Tệp tải lên',\r\n              }),\r\n            );\r\n          }\r\n          const toastId = hotToast.loading('Đang tải lên', {\r\n            position: 'bottom-right',\r\n            autoClose: 3000,\r\n          });\r\n          await axios.post(`${apiBaseUrl}/api/upload`, formData, {\r\n            headers: { 'Content-Type': 'multipart/form-data' },\r\n            timeout: 0, // no timeout (infinite)\r\n          });\r\n          hotToast.update(toastId, {\r\n            render: `Tải lên thành công`,\r\n            type: 'success',\r\n            isLoading: false,\r\n            autoClose: 3000,\r\n            position: 'bottom-right',\r\n          });\r\n          setSearchQuery('');\r\n          setForcePrefix(currentPrefix);\r\n          if (duplicateFiles) {\r\n            trackUploadedPdfParse(duplicateFiles, currentPrefix);\r\n            trackUploadedBoChiTieuOcr(duplicateFiles, currentPrefix);\r\n          }\r\n          ignoreCache.current = true;\r\n        }\r\n      } catch (error) {\r\n        console.error('Lỗi tải lên:', error);\r\n        const errorMessage = (error as any)?.response?.data?.error || 'Không thể tải lên tập tin';\r\n        toast({ title: 'Lỗi', description: errorMessage, variant: 'destructive' });\r\n      } finally {\r\n        setTimeout(async () => {\r\n          setUploadType(null);\r\n          await refreshFiles();\r\n          setIsUploading(false);\r\n          setFolderExist('');\r\n          setDuplicateFiles(null);\r\n          await autoSyncAfterFileOperation('overwrite');\r\n        }, 500);\r\n      }\r\n    };\r\n\r\n    // Handle upload after form submission\r\n    const handleSubmitUpload = async (\r\n      inputFiles: FileList,\r\n      prefix: string,\r\n      type: 'files' | 'folder',\r\n    ) => {\r\n      if (\r\n        isBoChiTieuPrefix(prefix) &&\r\n        (type === 'folder' || Array.from(inputFiles).some((file) => file.webkitRelativePath))\r\n      ) {\r\n        toast({\r\n          title: 'Lỗi tải lên',\r\n          description:\r\n            'Kho bộ chỉ tiêu chỉ cho phép tải ảnh trực tiếp trong thư mục gốc, không tải thư mục.',\r\n          variant: 'destructive',\r\n        });\r\n        return;\r\n      }\r\n\r\n      // Lọc lại tệp sai định dạng theo quy tắc của kho trước khi gửi lên server\r\n      const files = filterFilesByAllowedExtensions(inputFiles, prefix);\r\n      if (!files) {\r\n        setShowUploadFormDialog(false);\r\n        setPendingUploadInfo(null);\r\n        setUploadFormErrors([]);\r\n        return;\r\n      }\r\n\r\n      // Kiểm tra tổng dung lượng lần upload tối đa 100MB, không giới hạn số lượng file.\r\n      if (checkConditionUploadFiles(files, toast)) {\r\n        return;\r\n      }\r\n      setIsUploading(true);\r\n      try {\r\n        const formData = new FormData();\r\n\r\n        // Add upload metadata form data\r\n        formData.append(\r\n          'uploadMetadata',\r\n          JSON.stringify({\r\n            creator: uploadMetadataForm.creator,\r\n            modifier: uploadMetadataForm.modifier,\r\n            modifiedDate: uploadMetadataForm.modifiedDate,\r\n            summary: uploadMetadataForm.summary,\r\n            effectiveDate: uploadMetadataForm.effectiveDate,\r\n            expirationDate: uploadMetadataForm.expirationDate,\r\n            issueDate: uploadMetadataForm.issueDate,\r\n            processingStatus: uploadMetadataForm.processingStatus,\r\n            status: uploadMetadataForm.status,\r\n            // Additional fields for kho_doi_ngoai/ path\r\n            documentType: uploadMetadataForm.documentType,\r\n            field: uploadMetadataForm.field,\r\n            dataSource: uploadMetadataForm.dataSource,\r\n          }),\r\n        );\r\n\r\n        // Add original metadata\r\n        if (user?.id) {\r\n          formData.append(\r\n            'metadata',\r\n            JSON.stringify({\r\n              creatorId: user.id,\r\n              DataSource: 'Tệp tải lên',\r\n              ...uploadMetadataForm,\r\n            }),\r\n          );\r\n        }\r\n\r\n        if (type === 'folder' && files[0]) {\r\n          const folderName = files[0].webkitRelativePath.split('/')[0];\r\n          if (folderName) {\r\n            formData.append('folderName', folderName);\r\n          }\r\n        }\r\n        formData.append('prefix', prefix);\r\n        Array.from(files).forEach((file) => {\r\n          if (type === 'folder') {\r\n            return formData.append('files', file, file.webkitRelativePath);\r\n          } else {\r\n            return formData.append('files', file);\r\n          }\r\n        });\r\n\r\n        ignoreCache.current = true;\r\n\r\n        const checkResponse = await axios.post(`${apiBaseUrl}/api/check-files-existed`, formData, {\r\n          headers: { 'Content-Type': 'multipart/form-data' },\r\n        });\r\n\r\n        if (checkResponse?.data?.status === 200) {\r\n          const toastId = hotToast.loading('Đang tải lên', {\r\n            position: 'bottom-right',\r\n            autoClose: 3000,\r\n          });\r\n          await axios.post(`${apiBaseUrl}/api/upload`, formData, {\r\n            headers: { 'Content-Type': 'multipart/form-data' },\r\n            timeout: 0,\r\n          });\r\n          hotToast.update(toastId, {\r\n            render: `Tải lên thành công`,\r\n            type: 'success',\r\n            isLoading: false,\r\n            autoClose: 3000,\r\n            position: 'bottom-right',\r\n          });\r\n          setSearchQuery('');\r\n          setForcePrefix(prefix);\r\n          trackUploadedPdfParse(files, prefix);\r\n          trackUploadedBoChiTieuOcr(files, prefix);\r\n\r\n          // Reset form\r\n          setUploadMetadataForm({\r\n            ...defaultUploadMetadata,\r\n            creator: user?.username || '',\r\n            modifier: user?.username || '',\r\n            modifiedDate: new Date().toLocaleDateString('vi-VN'),\r\n          });\r\n\r\n          setTimeout(async () => {\r\n            setUploadType(null);\r\n            setShowUploadFormDialog(false);\r\n            setPendingUploadInfo(null);\r\n            await refreshFiles();\r\n            setIsUploading(false);\r\n            await autoSyncAfterFileOperation('upload');\r\n          }, 500);\r\n        } else {\r\n          if (checkResponse?.data?.names?.length > 0 && !checkResponse?.data?.isFolder) {\r\n            const filesFound: any = Array.from(files).filter((file) =>\r\n              checkResponse.data.names.includes(file.name),\r\n            );\r\n            setDuplicateFiles(filesFound);\r\n            setShowDuplicateDialog(true);\r\n          }\r\n\r\n          if (checkResponse?.data?.isFolder && checkResponse?.data?.name) {\r\n            setFolderExist(checkResponse?.data?.name);\r\n            setDuplicateFiles(files);\r\n            setShowDuplicateDialog(true);\r\n          }\r\n        }\r\n      } catch (error) {\r\n        console.error('Lỗi tải lên:', error);\r\n        const errorMessage = (error as any)?.response?.data?.error || 'Không thể tải lên tập tin';\r\n        toast({ title: 'Lỗi', description: errorMessage, variant: 'destructive' });\r\n        setIsUploading(false);\r\n      } finally {\r\n        setUploadMetadataForm({\r\n          ...defaultUploadMetadata,\r\n          creator: user?.username || '',\r\n          modifier: user?.username || '',\r\n          modifiedDate: new Date().toLocaleDateString('vi-VN'),\r\n        });\r\n        setShowUploadFormDialog(false);\r\n        setPendingUploadInfo(null);\r\n      }\r\n    };\r\n\r\n    const handleDelete = async (file: S3File) => {\r\n      setIsDeleting(true);\r\n      try {\r\n        await axios.delete(`${apiBaseUrl}/api/files`, { data: { paths: [file.key] } });\r\n\r\n        if (selectedKeys.has(file.key)) {\r\n          const newSet = new Set(selectedKeys);\r\n          newSet.delete(file.key);\r\n          setSelectedKeys(newSet);\r\n        }\r\n\r\n        const updatedPrefix =\r\n          file.key?.replace(/^(.*?)(\\/.*)?$/, (_, firstPart, slashPart) => {\r\n            if (!slashPart || slashPart === '/') return '';\r\n            return firstPart + '/';\r\n          }) || '';\r\n\r\n        setForcePrefix(updatedPrefix);\r\n        ignoreCache.current = true;\r\n\r\n        // Show success toast\r\n        toast({ title: 'Đã xóa tập tin', description: `Đã xóa thành công \"${file.name}\"` });\r\n\r\n        setFileToDelete(null);\r\n        await autoSyncAfterFileOperation('delete');\r\n      } catch (error) {\r\n        console.error('Error deleting file:', error);\r\n        toast({ title: 'Lỗi', description: 'Không thể xóa tập tin', variant: 'destructive' });\r\n      } finally {\r\n        setIsDeleting(false);\r\n        await refreshFiles();\r\n      }\r\n    };\r\n\r\n    const handleRowSelectionChange = (\r\n      updaterOrValue:\r\n        Record<number, boolean> | ((prev: Record<number, boolean>) => Record<number, boolean>),\r\n    ) => {\r\n      const newSelectedKeys = new Set(selectedKeys);\r\n\r\n      const selection =\r\n        typeof updaterOrValue === 'function' ? updaterOrValue(rowSelection) : updaterOrValue;\r\n\r\n      // Get all indices in the current view\r\n      const currentIndices = new Set(Object.keys(rowSelection).map(Number));\r\n\r\n      // Handle deselection for indices that are no longer in the selection\r\n      currentIndices.forEach((index) => {\r\n        const file = filteredData[index];\r\n        if (!file) return;\r\n\r\n        if (!selection[index]) {\r\n          newSelectedKeys.delete(file.key);\r\n          if (file.isFolder) {\r\n            getAllFilesUnderFolder(fileSystem, file.key).forEach((key) =>\r\n              newSelectedKeys.delete(key),\r\n            );\r\n          }\r\n        }\r\n      });\r\n\r\n      // Handle new selections\r\n      Object.entries(selection).forEach(([indexStr, isSelected]) => {\r\n        const index = parseInt(indexStr);\r\n        const file = filteredData[index];\r\n        if (!file) return;\r\n\r\n        if (isSelected) {\r\n          newSelectedKeys.add(file.key);\r\n          if (file.isFolder) {\r\n            getAllFilesUnderFolder(fileSystem, file.key).forEach((key) => newSelectedKeys.add(key));\r\n          }\r\n        }\r\n      });\r\n\r\n      setSelectedKeys(newSelectedKeys);\r\n    };\r\n\r\n    const handleRemoveSelected = async () => {\r\n      setIsBulkDeleting(true);\r\n\r\n      try {\r\n        const selectedKeysArray = Array.from(selectedKeys);\r\n\r\n        // Find selected files from the file system\r\n        const selectedFiles = selectedKeysArray\r\n          .map((key) =>\r\n            Object.values(fileSystem)\r\n              .flat()\r\n              .find((f) => f.key === key),\r\n          )\r\n          .filter((file): file is S3File => file !== undefined);\r\n\r\n        if (selectedFiles.length === 0) {\r\n          toast({\r\n            title: 'Lỗi',\r\n            description: 'Không có tập tin nào được chọn để xóa',\r\n            variant: 'destructive',\r\n          });\r\n          return;\r\n        }\r\n\r\n        await axios.delete(`${apiBaseUrl}/api/files`, { data: { paths: selectedKeysArray } });\r\n\r\n        // Xử lý commonPrefix với regex mới\r\n        const commonPrefix =\r\n          selectedFiles[0]?.key.replace(/^(.*?)(\\/.*)?$/, (_, firstPart, slashPart) => {\r\n            if (!slashPart || slashPart === '/') return '';\r\n            return firstPart + '/';\r\n          }) || '';\r\n\r\n        setForcePrefix(commonPrefix);\r\n        // setCurrentPrefix(commonPrefix);\r\n        ignoreCache.current = true;\r\n        void refreshFiles();\r\n\r\n        // Show success toast\r\n        toast({\r\n          title: 'Đã xóa tập tin',\r\n          description: `Đã xóa thành công ${selectedFiles.length} mục`,\r\n        });\r\n\r\n        setShowBulkDeleteDialog(false);\r\n        setSelectedKeys(new Set());\r\n        await autoSyncAfterFileOperation('bulk-delete');\r\n      } catch (error) {\r\n        console.error('Error deleting files:', error);\r\n        toast({\r\n          title: 'Lỗi',\r\n          description: 'Không thể xóa các tập tin đã chọn',\r\n          variant: 'destructive',\r\n        });\r\n      } finally {\r\n        setIsBulkDeleting(false);\r\n      }\r\n    };\r\n\r\n    const handleRename = async (file: S3File, newName: string) => {\r\n      if (!currentPrefix.trim()) {\r\n        toast({\r\n          title: 'Lỗi',\r\n          description: 'Không thể đổi tên tập tin hoặc thư mục ở thư mục gốc. Chỉ có thể xóa.',\r\n          variant: 'destructive',\r\n        });\r\n        return;\r\n      }\r\n      setIsRenaming(true);\r\n      try {\r\n        const oldPath = file.key;\r\n        let parentPath;\r\n        if (file.isFolder) {\r\n          // For folders, go up two levels to skip the folder name and trailing slash\r\n          parentPath = oldPath.split('/').slice(0, -2).join('/') + '/';\r\n        } else {\r\n          // For files, just get the directory path\r\n          parentPath = oldPath.substring(0, oldPath.lastIndexOf('/') + 1);\r\n        }\r\n        const newPath = parentPath + newName + (file.isFolder ? '/' : '');\r\n\r\n        await axios.post(`${apiBaseUrl}/api/rename`, { oldPath, newPath });\r\n\r\n        // Refresh the file list\r\n        ignoreCache.current = true;\r\n        await refreshFiles();\r\n\r\n        // Show success toast\r\n        toast({\r\n          title: 'Đã đổi tên',\r\n          description: `Đã đổi tên thành công \"${file.name}\" thành \"${newName}\"`,\r\n        });\r\n\r\n        setFileToRename(null);\r\n        setNewName('');\r\n        setMetadataForEdit(null);\r\n\r\n        // Auto sync knowledge base after rename\r\n        await autoSyncAfterFileOperation('rename');\r\n      } catch (error) {\r\n        console.error('Error renaming item:', error);\r\n        toast({ title: 'Lỗi', description: 'Không thể đổi tên', variant: 'destructive' });\r\n      } finally {\r\n        setIsRenaming(false);\r\n      }\r\n    };\r\n\r\n    const handleDownload = async (paths: string[]) => {\r\n      // Add all paths to downloading set\r\n      setDownloadingItems((prev) => new Set([...prev, ...paths]));\r\n      try {\r\n        const response = await axios.post(\r\n          `${apiBaseUrl}/api/download`,\r\n          { paths },\r\n          { responseType: 'blob' },\r\n        );\r\n\r\n        // Create a URL for the blob\r\n        const url = window.URL.createObjectURL(response.data);\r\n\r\n        // Create a temporary link element\r\n        const link = document.createElement('a');\r\n        link.href = url;\r\n\r\n        // Get the filename from the Content-Disposition header\r\n        const contentDisposition =\r\n          response.headers['Content-Disposition'] || response.headers['content-disposition'];\r\n        const filenameMatch = contentDisposition?.match(/filename=\"(.+)\"/);\r\n\r\n        // For single files, use the filename from the header\r\n        // For multiple files or folders, fallback to download.zip\r\n        const filename = filenameMatch ? decodeURIComponent(filenameMatch[1]) : 'download.zip';\r\n\r\n        link.setAttribute('download', filename);\r\n        document.body.appendChild(link);\r\n        link.click();\r\n\r\n        // Clean up\r\n        document.body.removeChild(link);\r\n        window.URL.revokeObjectURL(url);\r\n\r\n        toast({\r\n          title: 'Bắt đầu tải xuống',\r\n          description: `Đã bắt đầu tải xuống ${paths.length} mục${paths.length > 1 ? '' : ''}`,\r\n        });\r\n      } catch (error) {\r\n        console.error('Error downloading files:', error);\r\n        toast({ title: 'Lỗi', description: 'Không thể tải xuống tập tin', variant: 'destructive' });\r\n      } finally {\r\n        // Remove all paths from downloading set\r\n        setDownloadingItems((prev) => {\r\n          const next = new Set(prev);\r\n          paths.forEach((path) => next.delete(path));\r\n          return next;\r\n        });\r\n      }\r\n    };\r\n\r\n    const handlePublicDocument = async (prefix: string, isPublic: boolean) => {\r\n      try {\r\n        const response = await axios.post(`${apiBaseUrl}/document-permission/public`, {\r\n          path: prefix,\r\n          isPublic,\r\n          grandtedBy: currentUser?.id,\r\n        });\r\n\r\n        toast({\r\n          title: response.data?.isPublic\r\n            ? 'Chỉnh sửa tài liệu công khai thành công'\r\n            : 'Chỉnh sửa tài liệu riêng tư thành công',\r\n          description: `Chuyển trạng thái thành công tài liệu \"${prefix}\".`,\r\n        });\r\n\r\n        await refreshFiles();\r\n      } catch (error) {\r\n        console.log('error', error);\r\n      } finally {\r\n      }\r\n    };\r\n\r\n    const prefixSegments = currentPrefix\r\n      ? currentPrefix\r\n          .replace(rootPrefix, '') // Remove ROOT_PREFIX from the display\r\n          .split('/')\r\n          .filter(Boolean)\r\n      : [];\r\n\r\n    // Get selected files\r\n    const getSelectedFiles = () => {\r\n      let currentSelections = Array.from(selectedKeys).map((key) => ({ key })) as S3File[];\r\n\r\n      if (currentSelections.length > 1) {\r\n        currentSelections = currentSelections.filter((v) => v.key !== rootPrefix);\r\n      }\r\n\r\n      const haveFile = (folderKey: string) => {\r\n        return (\r\n          findIndex(\r\n            currentSelections,\r\n            (file) => !file.key.endsWith('/') && file.key.startsWith(folderKey),\r\n          ) !== -1\r\n        );\r\n      };\r\n\r\n      currentSelections = currentSelections.filter((file) => {\r\n        if (file.key.endsWith('/')) return !haveFile(file.key);\r\n        return true;\r\n      });\r\n\r\n      // console.log('currentSelected', currentSelections, rootPrefix);\r\n\r\n      return currentSelections;\r\n    };\r\n\r\n    // Define columns based on selector mode\r\n    const columns = useMemo<ColumnDef<S3File>[]>(() => {\r\n      const baseColumns = [\r\n        // Selection is a UI convenience only; every destructive operation is\r\n        // re-authorized by the backend for each selected key.\r\n        ...[\r\n          {\r\n            id: 'select',\r\n            header: () => {\r\n              const filesInView = getAllFilesInCurrentView(fileSystem, currentPrefix);\r\n              const allSelected =\r\n                filesInView.length > 0 && filesInView.every((key) => selectedKeys.has(key));\r\n              const someSelected = filesInView.some((key) => selectedKeys.has(key));\r\n\r\n              return (\r\n                <Checkbox\r\n                  checked={allSelected ? true : someSelected ? 'indeterminate' : false}\r\n                  onCheckedChange={(checked) => {\r\n                    if (checked) {\r\n                      const allSelection = filteredData.reduce(\r\n                        (acc, _, index) => {\r\n                          acc[index] = true;\r\n                          return acc;\r\n                        },\r\n                        {} as Record<number, boolean>,\r\n                      );\r\n\r\n                      handleRowSelectionChange(allSelection);\r\n                    } else {\r\n                      for (const selectedKey of Array.from(selectedKeys)) {\r\n                        if (selectedKey.startsWith(currentPrefix)) {\r\n                          selectedKeys.delete(selectedKey);\r\n                          selectStates.current[selectedKey] = false;\r\n                        }\r\n                      }\r\n\r\n                      forEach(selectStates.current, (_value, key) => {\r\n                        if (key.startsWith(currentPrefix)) {\r\n                          selectStates.current[key] = false;\r\n                        }\r\n                      });\r\n\r\n                      handleRowSelectionChange({});\r\n                    }\r\n                  }}\r\n                  aria-label=\"Chọn tất cả\"\r\n                />\r\n              );\r\n            },\r\n            cell: ({ row }: any) => {\r\n              const file = row.original;\r\n              const isFolder = file.isFolder;\r\n              let selectionState = isFolder\r\n                ? getFolderSelectionState(file.key)\r\n                : selectedKeys.has(file.key)\r\n                  ? 'all'\r\n                  : 'none';\r\n\r\n              if (selectionState === 'none' && file.key.endsWith('/')) {\r\n                for (const selectedKey of Array.from(selectedKeys)) {\r\n                  if (selectedKey.startsWith(file.key)) {\r\n                    selectionState = 'all';\r\n                    break;\r\n                  }\r\n                }\r\n              }\r\n\r\n              return (\r\n                <div className=\"flex items-center\">\r\n                  <Checkbox\r\n                    checked={\r\n                      selectionState === 'partial' ? 'indeterminate' : selectionState === 'all'\r\n                    }\r\n                    onCheckedChange={(checked) => {\r\n                      const newSelection = { ...rowSelection };\r\n                      if (checked) {\r\n                        newSelection[row.index] = true;\r\n                      } else {\r\n                        delete newSelection[row.index];\r\n                      }\r\n\r\n                      selectStates.current[row.original?.key || '_'] = Boolean(checked);\r\n\r\n                      if (row.original?.key.endsWith('/')) {\r\n                        for (const selectedKey of Array.from(selectedKeys)) {\r\n                          if (selectedKey.startsWith(row.original.key)) {\r\n                            selectStates.current[row.original.key] = false;\r\n                            selectedKeys.delete(selectedKey);\r\n                          }\r\n                        }\r\n                      }\r\n\r\n                      handleRowSelectionChange(newSelection);\r\n                    }}\r\n                    aria-label=\"Chọn dòng\"\r\n                  />\r\n                </div>\r\n              );\r\n            },\r\n            enableSorting: false,\r\n          },\r\n        ],\r\n        {\r\n          id: 'fileName',\r\n          header: ({ column }: any) => {\r\n            return (\r\n              <Button\r\n                variant=\"ghost\"\r\n                onClick={() => column.toggleSorting(column.getIsSorted() === 'asc')}\r\n              >\r\n                Tên tập tin\r\n                <ArrowUpDown />\r\n              </Button>\r\n            );\r\n          },\r\n          accessorKey: 'name',\r\n          cell: ({ row }: any) => {\r\n            const file = row.original;\r\n            const parentPrefix = file.key.substring(0, file.key.lastIndexOf('/')) || '/';\r\n            const showPrefix = searchQuery.trim() !== '' && parentPrefix !== currentPrefix;\r\n\r\n            // Split the parent prefix into segments for individual folder links\r\n            const prefixSegments = parentPrefix.split('/').filter(Boolean);\r\n\r\n            return (\r\n              <div className=\"flex flex-col group\">\r\n                <div className=\"flex items-center\">\r\n                  <div\r\n                    className={`flex items-center gap-2 ${file.isFolder ? 'cursor-pointer hover:text-blue-600' : ''}`}\r\n                    onClick={() => {\r\n                      if (file.isFolder) {\r\n                        // if (!preSelectedFiles) {\r\n                        //   setSelectedKeys(new Set());\r\n                        // }\r\n                        handleFolderClick(file.key);\r\n                      }\r\n                    }}\r\n                  >\r\n                    {file.isFolder ? <FolderIcon className=\"h-5 w-5 text-blue-500\" /> : null}\r\n                    {file.name}\r\n                  </div>\r\n                  {(() => {\r\n                    if (file.isFolder) return null;\r\n                    if (isBoChiTieuImageKey(file.key)) {\r\n                      const record = boChiTieuOcrStatus[file.key];\r\n                      if (!record) return null;\r\n                      if (record.status === 'queued' || record.status === 'processing') {\r\n                        const percent =\r\n                          typeof record.progress === 'number'\r\n                            ? Math.max(0, Math.min(100, Math.round(record.progress)))\r\n                            : null;\r\n                        return (\r\n                          <span className=\"ml-2 inline-flex items-center gap-1 text-xs text-blue-600\">\r\n                            <Loader2 className=\"h-3.5 w-3.5 animate-spin\" />\r\n                            Đang tạo JSON{percent !== null ? ` ${percent}%` : ''}\r\n                          </span>\r\n                        );\r\n                      }\r\n                      if (record.status === 'failed') {\r\n                        return (\r\n                          <span\r\n                            className=\"ml-2 inline-flex items-center rounded-full bg-red-100 px-2 py-0.5 text-xs font-medium text-red-700\"\r\n                            title={record.error || 'Trích xuất thất bại'}\r\n                          >\r\n                            Trích xuất thất bại\r\n                          </span>\r\n                        );\r\n                      }\r\n                      return null;\r\n                    }\r\n\r\n                    // Chỉ hiển thị trạng thái parse cho file PDF trong kho quy định pháp luật.\r\n                    if (!isChatCnLegalKey(file.key) || !isPdfName(file.name)) return null;\r\n                    const record = pdfParseStatus[file.key];\r\n                    if (!record) return null;\r\n\r\n                    if (record.status === 'queued' || record.status === 'processing') {\r\n                      const percent =\r\n                        typeof record.progress === 'number'\r\n                          ? Math.max(0, Math.min(100, Math.round(record.progress)))\r\n                          : null;\r\n                      const label =\r\n                        record.status === 'queued'\r\n                          ? 'Đang chờ trích xuất...'\r\n                          : 'Đang trích xuất dữ liệu PDF...';\r\n                      return (\r\n                        <span className=\"ml-2 inline-flex items-center gap-1 text-xs text-blue-600\">\r\n                          <Loader2 className=\"h-3.5 w-3.5 animate-spin\" />\r\n                          {label}\r\n                          {percent !== null ? ` ${percent}%` : ''}\r\n                        </span>\r\n                      );\r\n                    }\r\n\r\n                    if (record.status === 'failed') {\r\n                      return (\r\n                        <span\r\n                          className=\"ml-2 inline-flex items-center rounded-full bg-red-100 px-2 py-0.5 text-xs font-medium text-red-700\"\r\n                          title={record.error || 'Trích xuất thất bại'}\r\n                        >\r\n                          Trích xuất thất bại\r\n                        </span>\r\n                      );\r\n                    }\r\n\r\n                    return null;\r\n                  })()}\r\n                  <button\r\n                    className=\"ml-2 opacity-0 group-hover:opacity-100 transition-opacity\"\r\n                    onClick={(e) => {\r\n                      e.stopPropagation();\r\n                      navigator.clipboard.writeText(file.key);\r\n                      toast({\r\n                        title: 'Copied to clipboard',\r\n                        description: `Path: ${file.key}`,\r\n                        duration: 2000,\r\n                      });\r\n                    }}\r\n                    title=\"Copy path to clipboard\"\r\n                  >\r\n                    <svg\r\n                      xmlns=\"http://www.w3.org/2000/svg\"\r\n                      width=\"16\"\r\n                      height=\"16\"\r\n                      viewBox=\"0 0 24 24\"\r\n                      fill=\"none\"\r\n                      stroke=\"currentColor\"\r\n                      strokeWidth=\"2\"\r\n                      strokeLinecap=\"round\"\r\n                      strokeLinejoin=\"round\"\r\n                    >\r\n                      <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\"></rect>\r\n                      <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"></path>\r\n                    </svg>\r\n                  </button>\r\n                </div>\r\n                {showPrefix && (\r\n                  <div className=\"text-sm text-gray-500 flex items-center\">\r\n                    <FolderIcon className=\"h-4 w-4 text-gray-500 my-auto\" />\r\n                    <span className=\"flex items-center ml-1\">\r\n                      <span\r\n                        className=\"cursor-pointer hover:text-blue-600\"\r\n                        onClick={() => {\r\n                          // searchBoxRef.current?.setValue('');\r\n                          handleFolderClick('');\r\n                        }}\r\n                      >\r\n                        /\r\n                      </span>\r\n                      {prefixSegments.map((segment: string, index: number) => (\r\n                        <span key={index} className=\"flex items-center\">\r\n                          <span\r\n                            className=\"cursor-pointer hover:text-blue-600\"\r\n                            onClick={() => {\r\n                              // searchBoxRef.current?.setValue('');\r\n                              handleFolderClick(prefixSegments.slice(0, index + 1).join('/') + '/');\r\n                            }}\r\n                          >\r\n                            {segment}\r\n                          </span>\r\n                          {index < prefixSegments.length - 1 && <span>/</span>}\r\n                        </span>\r\n                      ))}\r\n                    </span>\r\n                  </div>\r\n                )}\r\n              </div>\r\n            );\r\n          },\r\n        },\r\n      ];\r\n\r\n      if (!asSelector) {\r\n        baseColumns.push(\r\n          {\r\n            id: 'size',\r\n            header: ({ column }: any) => {\r\n              return (\r\n                <Button\r\n                  variant=\"ghost\"\r\n                  onClick={() => column.toggleSorting(column.getIsSorted() === 'asc')}\r\n                >\r\n                  Kích thước\r\n                  <ArrowUpDown />\r\n                </Button>\r\n              );\r\n            },\r\n            accessorKey: 'size',\r\n            cell: ({ getValue, row }) => {\r\n              const value = getValue();\r\n              return <span>{row.original.isFolder ? '-' : formatBytes(value as number)}</span>;\r\n            },\r\n          },\r\n          {\r\n            id: 'lastModified',\r\n            header: ({ column }: any) => {\r\n              return (\r\n                <Button\r\n                  variant=\"ghost\"\r\n                  onClick={() => column.toggleSorting(column.getIsSorted() === 'asc')}\r\n                  className={'px-0 w-full flex-row justify-end'}\r\n                >\r\n                  Sửa đổi lần cuối\r\n                  <ArrowUpDown />\r\n                </Button>\r\n              );\r\n            },\r\n            accessorKey: 'lastModified',\r\n            cell: ({ row }: any) => {\r\n              const value = row.original.lastModified as Date;\r\n              return (\r\n                <div className={'w-full flex-row justify-end items-center text-right'}>\r\n                  <span>\r\n                    {value && dayjs(value).isValid()\r\n                      ? dayjs(value).format('DD/MM/YYYY HH:mm')\r\n                      : '-'}\r\n                  </span>\r\n                </div>\r\n              );\r\n            },\r\n            size: 200,\r\n          } as any,\r\n          {\r\n            // Người sửa đổi gần nhất, đặt cạnh cột \"Sửa đổi lần cuối\".\r\n            id: 'modifier',\r\n            header: ({ column }: any) => {\r\n              return (\r\n                <Button\r\n                  variant=\"ghost\"\r\n                  onClick={() => column.toggleSorting(column.getIsSorted() === 'asc')}\r\n                  className={'px-0 w-full flex-row justify-end'}\r\n                >\r\n                  Người sửa đổi\r\n                  <ArrowUpDown />\r\n                </Button>\r\n              );\r\n            },\r\n            accessorKey: 'modifier',\r\n            cell: ({ row }: any) => {\r\n              // Thư mục không có metadata sidecar nên không hiển thị người sửa đổi.\r\n              const value = row.original.isFolder ? '' : (row.original.modifier as string);\r\n              return (\r\n                <div className={'w-full flex-row justify-end items-center text-right'}>\r\n                  <span className=\"truncate\" title={value || ''}>\r\n                    {value || '-'}\r\n                  </span>\r\n                </div>\r\n              );\r\n            },\r\n            size: 160,\r\n          } as any,\r\n          {\r\n            id: 'actions',\r\n            header: () => {\r\n              return <span>Hành động</span>;\r\n            },\r\n            accessorKey: 'key',\r\n            cell: ({ row }) => (\r\n              <div className=\"flex items-center gap-2\">\r\n                {/* Đã ẩn theo yêu cầu: nút \"Những Flow sử dụng Folder này làm Data\" */}\r\n                {false && currentPrefix === '' && rootUrlHostApi && (\r\n                  <TooltipProvider>\r\n                    <Tooltip>\r\n                      <TooltipTrigger asChild>\r\n                        <Button\r\n                          variant=\"ghost\"\r\n                          size=\"icon\"\r\n                          onClick={() => {\r\n                            setFolderToShowFlow(row.original.key);\r\n                            setShowInfoFlowsDialogs(true);\r\n                          }}\r\n                          className=\"h-8 w-8 p-0\"\r\n                        >\r\n                          <CircleStackIcon className=\"h-4 w-4\" />\r\n                        </Button>\r\n                      </TooltipTrigger>\r\n                      <TooltipContent>Những Flow sử dụng Folder này làm Data</TooltipContent>\r\n                    </Tooltip>\r\n                  </TooltipProvider>\r\n                )}\r\n\r\n                <TooltipProvider>\r\n                  <Tooltip>\r\n                    <TooltipTrigger asChild>\r\n                      <Button\r\n                        variant=\"ghost\"\r\n                        size=\"icon\"\r\n                        onClick={() => handleDownload([row.original.key])}\r\n                        className=\"h-8 w-8 p-0\"\r\n                        disabled={\r\n                          !canDownloadDocument(row.original.permission) ||\r\n                          downloadingItems.has(row.original.key)\r\n                        }\r\n                      >\r\n                        {downloadingItems.has(row.original.key) ? (\r\n                          <Loader2 className=\"h-4 w-4 animate-spin\" />\r\n                        ) : (\r\n                          <ArrowDownTrayIcon className=\"h-4 w-4\" />\r\n                        )}\r\n                      </Button>\r\n                    </TooltipTrigger>\r\n                    <TooltipContent>Tải xuống</TooltipContent>\r\n                  </Tooltip>\r\n                </TooltipProvider>\r\n\r\n                {currentPrefix.trim() !== '' &&\r\n                  (canEditDocument(row.original.permission) ? (\r\n                    <TooltipProvider>\r\n                      <Tooltip>\r\n                        <TooltipTrigger asChild>\r\n                          <Button\r\n                            variant=\"ghost\"\r\n                            size=\"icon\"\r\n                            onClick={() => {\r\n                              setFileToRename(row.original);\r\n                              // Extract name from key if name is empty\r\n                              const displayName =\r\n                                row.original.name ||\r\n                                row.original.key.split('/').filter(Boolean).pop() ||\r\n                                '';\r\n                              setNewName(displayName);\r\n                              // Set default tab based on file type\r\n                              setActiveTab(row.original.isFolder ? 'rename' : 'edit-metadata');\r\n                            }}\r\n                            className=\"h-8 w-8 p-0\"\r\n                          >\r\n                            <PencilIcon className=\"h-4 w-4\" />\r\n                          </Button>\r\n                        </TooltipTrigger>\r\n                        <TooltipContent>Đổi tên</TooltipContent>\r\n                      </Tooltip>\r\n                    </TooltipProvider>\r\n                  ) : (\r\n                    <TooltipProvider>\r\n                      <Tooltip>\r\n                        <TooltipTrigger asChild>\r\n                          <Button\r\n                            variant=\"ghost\"\r\n                            size=\"icon\"\r\n                            onClick={() => {\r\n                              console.log('call');\r\n                              setFileToView(row.original);\r\n                            }}\r\n                            className=\"h-8 w-8 p-0\"\r\n                            disabled={row.original.isFolder}\r\n                          >\r\n                            <EyeIcon className=\"h-4 w-4\" />\r\n                          </Button>\r\n                        </TooltipTrigger>\r\n                        <TooltipContent>Xem</TooltipContent>\r\n                      </Tooltip>\r\n                    </TooltipProvider>\r\n                  ))}\r\n\r\n                {\r\n                  <TooltipProvider>\r\n                    <Tooltip>\r\n                      <TooltipTrigger asChild>\r\n                        <Button\r\n                          variant=\"ghost\"\r\n                          size=\"icon\"\r\n                          onClick={() => {\r\n                            setOpenDialogRename(true);\r\n                            setFileToMove(row.original);\r\n                          }}\r\n                          className=\"h-8 w-8 p-0\"\r\n                          disabled={!canEditDocument(row.original.permission)}\r\n                        >\r\n                          <MoveUpRight className=\"h-4 w-4\" />\r\n                        </Button>\r\n                      </TooltipTrigger>\r\n                      <TooltipContent>Di chuyển</TooltipContent>\r\n                    </Tooltip>\r\n                  </TooltipProvider>\r\n                }\r\n\r\n                {!(currentPrefix === '' || currentPrefix === '/') && (\r\n                  <TooltipProvider>\r\n                    <Tooltip>\r\n                      <TooltipTrigger asChild>\r\n                        <Button\r\n                          variant=\"ghost\"\r\n                          size=\"icon\"\r\n                          onClick={() => setFileToDelete(row.original)}\r\n                          className=\"h-8 w-8 p-0\"\r\n                          disabled={!canEditDocument(row.original.permission)}\r\n                        >\r\n                          <TrashIcon className=\"h-4 w-4\" />\r\n                        </Button>\r\n                      </TooltipTrigger>\r\n                      <TooltipContent>Xóa</TooltipContent>\r\n                    </Tooltip>\r\n                  </TooltipProvider>\r\n                )}\r\n\r\n                {canEditDocument(row.original.permission) && (\r\n                  <TooltipProvider>\r\n                    <Tooltip>\r\n                      <TooltipTrigger asChild>\r\n                        <Button\r\n                          variant=\"ghost\"\r\n                          size=\"icon\"\r\n                          onClick={() => setFileToShare(row.original)}\r\n                          className=\"h-8 w-8 p-0\"\r\n                        >\r\n                          <ShareIcon className=\"h-4 w-4\" />\r\n                        </Button>\r\n                      </TooltipTrigger>\r\n                      <TooltipContent>Chia sẻ</TooltipContent>\r\n                    </Tooltip>\r\n                  </TooltipProvider>\r\n                )}\r\n\r\n                {currentPrefix !== '' &&\r\n                  currentPrefix !== '/' &&\r\n                  canEditDocument(row.original.permission) && (\r\n                    <>\r\n                      <span\r\n                        className={`inline-flex items-center gap-1 rounded-full \r\n                      ${!!row.original.isPublic ? 'bg-green-100 text-green-700' : 'bg-red-100 text-red-700'} \r\n                      px-3 py-1 text-sm font-medium cursor-pointer \r\n                      whitespace-nowrap overflow-hidden text-ellipsis\r\n                    `}\r\n                        onClick={() => setFileToEditPrivacy(row.original)}\r\n                      >\r\n                        {!!row.original.isPublic ? 'Công khai' : 'Riêng tư'}\r\n                      </span>\r\n                      <PrivacyDialog\r\n                        file={fileToEditPrivacy}\r\n                        open={!!fileToEditPrivacy && fileToEditPrivacy.key === row.original.key}\r\n                        onClose={() => setFileToEditPrivacy(null)}\r\n                        onSave={handlePublicDocument}\r\n                      />\r\n                    </>\r\n                  )}\r\n              </div>\r\n            ),\r\n          },\r\n        );\r\n      } else {\r\n        baseColumns.push({\r\n          id: 'actions',\r\n          header: () => {\r\n            return <span>Hành động</span>;\r\n          },\r\n          accessorKey: 'key',\r\n          cell: ({ row }) => (\r\n            <div className=\"flex items-center gap-2\">\r\n              {canEditDocument(row.original.permission) && (\r\n                <TooltipProvider>\r\n                  <Tooltip>\r\n                    <TooltipTrigger asChild>\r\n                      <Button\r\n                        variant=\"ghost\"\r\n                        size=\"icon\"\r\n                        onClick={() => setFileToShare(row.original)}\r\n                        className=\"h-8 w-8 p-0\"\r\n                      >\r\n                        <ShareIcon className=\"h-4 w-4\" />\r\n                      </Button>\r\n                    </TooltipTrigger>\r\n                    <TooltipContent>Chia sẻ</TooltipContent>\r\n                  </Tooltip>\r\n                </TooltipProvider>\r\n              )}\r\n\r\n              {canEditDocument(row.original.permission) && (\r\n                <>\r\n                  <ToggleButton\r\n                    enabled={!!row.original.isPublic}\r\n                    onChange={() => handlePublicDocument(row.original.key, !row.original.isPublic)}\r\n                  />\r\n                  <span\r\n                    className={`inline-flex items-center gap-1 rounded-full ${!!row.original.isPublic ? 'bg-green-100 text-green-700' : 'bg-red-100 text-red-700'} px-3 py-1 text-sm font-medium cursor-pointer`}\r\n                    onClick={() => setFileToEditPrivacy(row.original)}\r\n                  >\r\n                    {!!row.original.isPublic ? 'Công khai' : 'Riêng tư'}\r\n                  </span>\r\n                  {/* <PrivacyDialog file={fileToEditPrivacy} open={!!fileToEditPrivacy} onClose={() => setFileToEditPrivacy(null)} onSave={handlePublicDocument}/> */}\r\n                </>\r\n              )}\r\n            </div>\r\n          ),\r\n        });\r\n      }\r\n\r\n      return baseColumns;\r\n    }, [selectedKeys, filteredData, rowSelection, downloadingItems, asSelector, fileToEditPrivacy]);\r\n\r\n    // Create table instance\r\n    const table = useReactTable({\r\n      data: filteredData,\r\n      columns,\r\n      state: { rowSelection, sorting },\r\n      onSortingChange: setSorting,\r\n      enableRowSelection: true,\r\n      onRowSelectionChange: handleRowSelectionChange,\r\n      getCoreRowModel: getCoreRowModel(),\r\n      getSortedRowModel: getSortedRowModel(),\r\n    });\r\n\r\n    // Add loadFileContent function\r\n    const loadFileContent = async (file: S3File) => {\r\n      setIsLoadingContent(true);\r\n      try {\r\n        let pathToLoad = file.key;\r\n\r\n        // For image files, load the .ocr.txt file instead\r\n        if (isImageFile(file)) {\r\n          pathToLoad = getOcrFilePath(file);\r\n        }\r\n\r\n        if (isTextFile(file) || isImageFile(file)) {\r\n          try {\r\n            const responseContentFile = await axios.get(`${apiBaseUrl}/api/read-text`, {\r\n              params: { path: pathToLoad },\r\n            });\r\n            setFileContent(responseContentFile.data.content || '');\r\n          } catch (error) {\r\n            // For images without OCR file, set empty content (not an error)\r\n            if (isImageFile(file)) {\r\n              setFileContent('');\r\n            } else {\r\n              throw error;\r\n            }\r\n          }\r\n        }\r\n\r\n        try {\r\n          const responseMetadata = await axios.get(`${apiBaseUrl}/api/read-json`, {\r\n            params: { path: file.key + '.metadata.json' },\r\n          });\r\n          const metadataAttributes = responseMetadata?.data?.content?.metadataAttributes || null;\r\n\r\n          return setMetadataForEdit({\r\n            fullPath: fileToRename?.key,\r\n            ...normalizeMetadataForDisplay(metadataAttributes),\r\n          });\r\n        } catch (error) {\r\n          return setMetadataForEdit('Lỗi phân tích siêu dữ liệu');\r\n        }\r\n      } catch (error) {\r\n        console.error('Error loading file content:', error);\r\n        toast({\r\n          title: 'Lỗi',\r\n          description: isImageFile(file)\r\n            ? 'Không thể tải nội dung OCR'\r\n            : 'Không thể tải nội dung tập tin',\r\n          variant: 'destructive',\r\n        });\r\n      } finally {\r\n        setIsLoadingContent(false);\r\n      }\r\n    };\r\n\r\n    // Add saveFileContent function\r\n    const saveFileContent = async (file: S3File, content: string) => {\r\n      setIsSavingContent(true);\r\n      try {\r\n        let pathToSave = file.key;\r\n\r\n        // For image files, save to the .ocr.txt file\r\n        if (isImageFile(file)) {\r\n          pathToSave = getOcrFilePath(file);\r\n        }\r\n\r\n        await axios.post(`${apiBaseUrl}/api/modify-text`, { path: pathToSave, content });\r\n\r\n        // Show success toast\r\n        toast({\r\n          title: 'Đã lưu tập tin',\r\n          description: isImageFile(file)\r\n            ? 'Nội dung OCR đã được cập nhật thành công'\r\n            : 'Nội dung tập tin đã được cập nhật thành công',\r\n        });\r\n\r\n        // Refresh the file list to update metadata\r\n        ignoreCache.current = true;\r\n        await refreshFiles();\r\n\r\n        // Close the dialog after successful save\r\n        setFileToRename(null);\r\n        setFileContent('');\r\n        setActiveTab('rename');\r\n        await autoSyncAfterFileOperation('edit-content');\r\n      } catch (error) {\r\n        console.error('Error saving file content:', error);\r\n        toast({\r\n          title: 'Lỗi',\r\n          description: isImageFile(file)\r\n            ? 'Không thể lưu nội dung OCR'\r\n            : 'Không thể lưu nội dung tập tin',\r\n          variant: 'destructive',\r\n        });\r\n      } finally {\r\n        setIsSavingContent(false);\r\n      }\r\n    };\r\n\r\n    // Add saveFileContent function\r\n    const saveJsonFile = async (file: S3File) => {\r\n      // Validate required fields before saving\r\n      const errors = validateMetadataFields(metadataForEdit);\r\n      if (Object.keys(errors).length > 0) {\r\n        setMetadataErrors(errors);\r\n        toast({\r\n          title: 'Lỗi xác thực',\r\n          description: 'Vui lòng điền đầy đủ các trường bắt buộc',\r\n          variant: 'destructive',\r\n        });\r\n        return;\r\n      }\r\n\r\n      setIsSavingContent(true);\r\n      try {\r\n        // console.log('🚀 ~ saveJsonFile ~ metadataForEdit:', metadataForEdit);\r\n\r\n        // Không gửi người tạo / người sửa lên server: server tự giữ người tạo và\r\n        // đóng dấu người sửa theo tài khoản đang thực hiện thao tác.\r\n        const { fullPath, ...editableMetadata } = metadataForEdit as Record<string, any>;\r\n\r\n        await axios.post(`${apiBaseUrl}/api/modify-json`, {\r\n          path: file.key + '.metadata.json',\r\n          content: { metadataAttributes: stripServerOwnedMetadata(editableMetadata) },\r\n        });\r\n\r\n        // Show success toast\r\n        toast({\r\n          title: 'Đã lưu tập tin',\r\n          description: 'Nội dung tập tin đã được cập nhật thành công',\r\n        });\r\n\r\n        // Refresh the file list to update metadata\r\n        ignoreCache.current = true;\r\n        await refreshFiles();\r\n\r\n        // Close the dialog after successful save\r\n        setFileToRename(null);\r\n        setFileContent('');\r\n        setActiveTab('rename');\r\n        setMetadataErrors({});\r\n      } catch (error) {\r\n        console.error('Error saving file content:', error);\r\n        toast({\r\n          title: 'Lỗi',\r\n          description: 'Không thể lưu nội dung tập tin',\r\n          variant: 'destructive',\r\n        });\r\n      } finally {\r\n        setIsSavingContent(false);\r\n      }\r\n    };\r\n\r\n    // Run validation when fileToRename changes (when dialog opens)\r\n    useEffect(() => {\r\n      if (fileToRename && metadataForEdit && typeof metadataForEdit === 'object') {\r\n        const errors = validateMetadataFields(metadataForEdit);\r\n        setMetadataErrors(errors);\r\n      }\r\n    }, [fileToRename, metadataForEdit]);\r\n\r\n    // Modify the useEffect to load content when fileToRename changes\r\n    useEffect(() => {\r\n      if (fileToRename) {\r\n        if (!fileToRename.isFolder) {\r\n          void loadFileContent(fileToRename);\r\n        }\r\n        // Note: activeTab is set by the click handler in the actions column\r\n        // based on file type (folder -> 'rename', file -> 'edit-metadata')\r\n      }\r\n    }, [fileToRename]);\r\n\r\n    useEffect(() => {\r\n      if (fileToView && !fileToView.isFolder) {\r\n        void loadFileContent(fileToView);\r\n      }\r\n    }, [fileToView]);\r\n\r\n    // Function to fetch S3 folders\r\n    const fetchS3Folders = async (prefix: string = '') => {\r\n      setIsFetchingFolders(true);\r\n      try {\r\n        await axios.get(`${apiBaseUrl}/api/list-s3-folders`, {\r\n          params: { prefix },\r\n        });\r\n      } catch (error) {\r\n        console.error('Error fetching S3 folders:', error);\r\n        toast({\r\n          title: 'Lỗi',\r\n          description: 'Không thể tải danh sách thư mục S3',\r\n          variant: 'destructive',\r\n        });\r\n      } finally {\r\n        setIsFetchingFolders(false);\r\n      }\r\n    };\r\n\r\n    // Load folders when dialog opens\r\n    useEffect(() => {\r\n      if (isWebsiteDialogOpen) {\r\n        // Load folders based on current prefix\r\n        fetchS3Folders(currentPrefix);\r\n      } else {\r\n        // Clear folders when dialog closes\r\n        setSelectedS3Folder('');\r\n      }\r\n    }, [isWebsiteDialogOpen]);\r\n\r\n    const crawlWebsite = async (\r\n      url: string,\r\n      limit: number,\r\n      maxDepth: number,\r\n      maxPagesToCrawl?: number,\r\n    ) => {\r\n      // Validate folder selection is required\r\n      if (!selectedS3Folder) {\r\n        toast({\r\n          title: 'Lỗi',\r\n          description: 'Vui lòng chọn thư mục lưu trữ trước khi bắt đầu thu thập.',\r\n          variant: 'destructive',\r\n        });\r\n        return;\r\n      }\r\n\r\n      // If there's already a job running, don't start another one\r\n      if (currentJob) {\r\n        toast({\r\n          title: 'Đang thu thập website',\r\n          description: 'Vui lòng đợi cho công việc thu thập hiện tại hoàn thành.',\r\n          variant: 'destructive',\r\n        });\r\n        return;\r\n      }\r\n\r\n      setIsCrawling(true);\r\n\r\n      // try {\r\n      //   const response = await axios.get(url);\r\n      //   const status = response.status;\r\n      //   if (status !== 200) {\r\n      //     toast({\r\n      //       title: 'Lỗi',\r\n      //       description: `Không thể lấy dữ liệu. Vui lòng kiểm tra lại đường dẫn.`,\r\n      //       variant: 'destructive',\r\n      //     });\r\n      //     setIsCrawling(false);\r\n      //     return;\r\n      //   }\r\n      // } catch (error) {\r\n      //   toast({\r\n      //     title: 'Lỗi',\r\n      //     description: `Đường dẫn không hợp lệ. Vui lòng kiểm tra lại.`,\r\n      //     variant: 'destructive',\r\n      //   });\r\n      //   setIsCrawling(false);\r\n      //   return;\r\n      // }\r\n\r\n      try {\r\n        // Extract URL pattern from the seed URL for dynamic pattern matching\r\n        let urlPattern: string | undefined = undefined;\r\n        try {\r\n          const urlObj = new URL(url);\r\n          const pathParts = urlObj.pathname.split('/').filter(Boolean);\r\n          if (pathParts.length > 0) {\r\n            urlPattern = `/${pathParts[0]}`;\r\n          }\r\n        } catch {\r\n          // URL parsing failed, keep urlPattern as undefined\r\n        }\r\n\r\n        console.log('[Frontend] Seed URL:', url);\r\n        console.log('[Frontend] Extracted URL Pattern:', urlPattern);\r\n        console.log('[Frontend] Max Pages to Crawl:', maxPagesToCrawl);\r\n\r\n        // Get user info from localStorage for creator/creatorId\r\n        const userInfo = getUserInfoFromLocal();\r\n\r\n        const { data: jobInfo } = await axios.post(`${apiBaseUrl}/api/crawl`, {\r\n          url,\r\n          limit,\r\n          max_depth: maxDepth || 10,\r\n          prefix: selectedS3Folder || currentPrefix,\r\n          isAutoUpdateKB,\r\n          urlPattern,\r\n          maxPagesToCrawl,\r\n          creator: userInfo?.username || '',\r\n          creatorId: userInfo?.id || '',\r\n        });\r\n\r\n        if (jobInfo.id) {\r\n          // Set current job\r\n          setCurrentJob({\r\n            id: jobInfo.id,\r\n            url,\r\n            limit,\r\n            prefix: currentPrefix,\r\n            taskId: jobInfo.task?.id || '',\r\n          });\r\n\r\n          // Store in history\r\n          const storedJobs = localStorage.getItem(CRAWL_JOBS_KEY);\r\n          const crawlJobs = storedJobs\r\n            ? (JSON.parse(storedJobs) as {\r\n                url: string;\r\n                id: string;\r\n                limit: number;\r\n                prefix: string;\r\n                timestamp: number;\r\n              }[])\r\n            : [];\r\n\r\n          if (!crawlJobs.some((job) => job.id === jobInfo.id)) {\r\n            crawlJobs.unshift({\r\n              url,\r\n              id: jobInfo.id,\r\n              limit,\r\n              prefix: currentPrefix,\r\n              timestamp: Date.now(),\r\n            });\r\n            if (crawlJobs.length > 20) {\r\n              crawlJobs.length = 20;\r\n            }\r\n            localStorage.setItem(CRAWL_JOBS_KEY, JSON.stringify(crawlJobs));\r\n          }\r\n\r\n          toast({\r\n            title: 'Bắt đầu thu thập website',\r\n            description: `Đã thêm nhiệm vụ thu thập ${url} với giới hạn ${limit}. Dữ liệu sẽ có sẵn sau khi thu thập hoàn tất.`,\r\n          });\r\n\r\n          setIsWebsiteDialogOpen(false);\r\n          setWebsiteUrl('');\r\n          setCrawlLimit('10');\r\n          setMaxDepth('2');\r\n          setMaxPagesToCrawl('10');\r\n        }\r\n      } catch (error) {\r\n        console.error('Error crawling website:', error);\r\n        toast({\r\n          title: 'Lỗi',\r\n          description: 'Không thể bắt đầu thu thập website',\r\n          variant: 'destructive',\r\n        });\r\n      } finally {\r\n        setIsCrawling(false);\r\n      }\r\n    };\r\n\r\n    const stopCurrentJob = async () => {\r\n      try {\r\n        if (!currentJob?.id) return;\r\n\r\n        // Call backend to set stopped flag\r\n        await axios.post(`${apiBaseUrl}/api/crawl/${currentJob.id}/stop`);\r\n\r\n        // Clear current job from state and localStorage\r\n        setCurrentJob(null);\r\n        localStorage.removeItem(CURRENT_CRAWL_JOB_KEY);\r\n\r\n        toast({\r\n          title: 'Đã dừng thu thập',\r\n          description: `Đã dừng thu thập website ${currentJob.url}`,\r\n        });\r\n      } catch (error) {\r\n        console.error('Error stopping job:', error);\r\n        toast({\r\n          title: 'Lỗi',\r\n          description: 'Không thể dừng thu thập website',\r\n          variant: 'destructive',\r\n        });\r\n      }\r\n    };\r\n\r\n    useEffect(() => {\r\n      if (asSelector) return;\r\n\r\n      const handlePopState = (changeSelectKey = true) => {\r\n        const url = new URL(window.location.href);\r\n        const prefixParam = url.searchParams.get('prefix') || '';\r\n\r\n        if (prefixParam) {\r\n          handleFolderClick(prefixParam, false);\r\n        } else {\r\n          if (changeSelectKey && !Boolean(preSelectedFiles)) {\r\n            setSelectedKeys(new Set());\r\n          }\r\n          setForcePrefix(rootPrefix);\r\n          setCurrentPrefix(rootPrefix);\r\n          ignoreCache.current = true;\r\n\r\n          setTimeout(() => {\r\n            void refreshFiles();\r\n          }, 0);\r\n        }\r\n      };\r\n\r\n      // Handle initial URL on mount\r\n      handlePopState(false);\r\n\r\n      window.addEventListener('popstate', () => handlePopState(true));\r\n      return () => {\r\n        window.removeEventListener('popstate', () => handlePopState(true));\r\n      };\r\n    }, []);\r\n\r\n    const handleExportReport = async () => {\r\n      setIsLoadingHandleExportReport(true);\r\n      try {\r\n        await axios.post(`${apiBaseUrl}/api/prediction-report`);\r\n\r\n        // console.log('🚀 ~ Home.tsx:1585 ~ handleExportReport ~ response:', response);\r\n\r\n        toast({ title: 'Xuất báo cáo thành công', description: 'Báo cáo dự đoán đã được xuất' });\r\n      } catch (error) {\r\n        console.error('Error exporting report:', error);\r\n        toast({\r\n          title: 'Lỗi',\r\n          description: 'Không thể xuất báo cáo dự đoán',\r\n          variant: 'destructive',\r\n        });\r\n      } finally {\r\n        setIsLoadingHandleExportReport(false);\r\n      }\r\n    };\r\n\r\n    const handleSyncKnowledgeBase = async () => {\r\n      try {\r\n        const user = getUserInfoFromLocal();\r\n\r\n        if (user) {\r\n          const response = await axios.post(`${apiBaseUrl}/api/start-ingestion-job`, {\r\n            prefix: currentPrefix,\r\n            user_id: user.id,\r\n            userName: user.username,\r\n          });\r\n          if (response.status === 200) {\r\n            await checkSyncingStatus();\r\n          }\r\n        }\r\n      } catch (error) {\r\n        setIsSyncing(false);\r\n        console.log(error);\r\n      }\r\n    };\r\n\r\n    // Helper function to auto sync knowledge base after file operations\r\n    const autoSyncAfterFileOperation = async (operationType: string) => {\r\n      try {\r\n        // Only auto sync if we're in a knowledge base folder (has a root folder name)\r\n        if (rootFolderName && currentPrefix.includes(rootFolderName)) {\r\n          console.log(`Auto syncing knowledge base after ${operationType} operation`);\r\n          await checkSyncingStatus();\r\n        }\r\n      } catch (error) {\r\n        console.log(`Error auto syncing after ${operationType}:`, error);\r\n      }\r\n    };\r\n\r\n    const interval = useRef<any>();\r\n\r\n    const checkSyncingStatus = async () => {\r\n      try {\r\n        setIsSyncing(true);\r\n        const response = await axios.post(`${apiBaseUrl}/api/get-ingestion-job-status`, {\r\n          prefix: currentPrefix,\r\n        });\r\n\r\n        // status: \"STARTING\" || \"IN_PROGRESS\" || \"COMPLETE\" || \"FAILED\" || \"STOPPING\" || \"STOPPED\"\r\n        const { status } = response?.data;\r\n        if (\r\n          status === 'FAILED' ||\r\n          status === 'COMPLETE' ||\r\n          status === 'STOPPED' ||\r\n          status === 'STOPPING' ||\r\n          !status\r\n        ) {\r\n          setIsSyncing(false);\r\n          if (interval.current) {\r\n            clearInterval(interval.current);\r\n            interval.current = null;\r\n          }\r\n          setSyncJobStatus(response?.data);\r\n        } else {\r\n          if (!interval.current) {\r\n            interval.current = setInterval(() => checkSyncingStatus(), 5000);\r\n          }\r\n          setSyncJobStatus(response?.data);\r\n        }\r\n      } catch (error) {\r\n        console.log(error);\r\n      }\r\n    };\r\n\r\n    const calculateSelectedFiles = () => {\r\n      const keys = Array.from(selectedKeys);\r\n      let count: number;\r\n\r\n      if (!currentPrefix) {\r\n        count = new Set(keys.filter((key) => key.split('/').shift())).size;\r\n      } else {\r\n        count = keys.filter((key) => key.startsWith(currentPrefix) && key !== currentPrefix).length;\r\n      }\r\n\r\n      return `Đang chọn: ${count}`;\r\n    };\r\n\r\n    // console.log(syncJobStatus);\r\n\r\n    // Check sync status every 5s\r\n    useEffect(() => {\r\n      const newRootFolderName = currentPrefix?.split('/')[0];\r\n\r\n      if (newRootFolderName !== rootFolderName) {\r\n        setIsSyncing(false);\r\n        if (interval.current) {\r\n          clearInterval(interval.current);\r\n          interval.current = null;\r\n        }\r\n        setRootFolderName(newRootFolderName || '');\r\n        setSyncJobStatus(null);\r\n\r\n        if (newRootFolderName) {\r\n          checkSyncingStatus();\r\n        }\r\n      }\r\n\r\n      return () => {};\r\n    }, [rootFolderName, currentPrefix]);\r\n\r\n    useEffect(() => {\r\n      if (isSharePointModalOpen && sharePointSites.length === 0) {\r\n        fetchSharePointSites();\r\n        setSelectedSite(null);\r\n      }\r\n    }, [isSharePointModalOpen]);\r\n\r\n    useEffect(() => {\r\n      if (preSelectedFiles) {\r\n        for (const key of Array.from(preSelectedFiles)) {\r\n          selectStates.current[key] = true;\r\n        }\r\n      }\r\n    }, []);\r\n\r\n    return (\r\n      <div className=\"space-y-4 s3-explr-container\">\r\n        <Toaster />\r\n\r\n        {/* Upload Metadata Form Dialog */}\r\n        <Dialog\r\n          open={showUploadFormDialog}\r\n          onOpenChange={(open) => {\r\n            if (!open) {\r\n              setShowUploadFormDialog(false);\r\n              setUploadFormErrors([]);\r\n              setPendingUploadInfo(null);\r\n            }\r\n          }}\r\n        >\r\n          <DialogContent className=\"max-w-2xl max-h-[90vh] overflow-y-auto\">\r\n            <DialogHeader>\r\n              <DialogTitle>Thông tin văn bản</DialogTitle>\r\n              <DialogDescription>Vui lòng điền thông tin trước khi tải lên</DialogDescription>\r\n            </DialogHeader>\r\n\r\n            <div className=\"space-y-4 py-2\">\r\n              {/* Người tạo - readonly */}\r\n              <div className=\"grid grid-cols-2 gap-4\">\r\n                <div className=\"space-y-2\">\r\n                  <Label htmlFor=\"creator\" className=\"text-xs text-gray-500\">\r\n                    Người tạo <span className=\"text-red-500\">*</span>\r\n                  </Label>\r\n                  <Input\r\n                    id=\"creator\"\r\n                    value={uploadMetadataForm.creator}\r\n                    readOnly\r\n                    className=\"bg-gray-100\"\r\n                  />\r\n                </div>\r\n                <div className=\"space-y-2\">\r\n                  <Label htmlFor=\"modifier\" className=\"text-xs text-gray-500\">\r\n                    Người sửa <span className=\"text-red-500\">*</span>\r\n                  </Label>\r\n                  <Input\r\n                    id=\"modifier\"\r\n                    value={uploadMetadataForm.modifier}\r\n                    readOnly\r\n                    className=\"bg-gray-100\"\r\n                  />\r\n                </div>\r\n              </div>\r\n\r\n              {/* Ngày sửa - readonly */}\r\n              <div className=\"space-y-2\">\r\n                <Label htmlFor=\"modifiedDate\" className=\"text-xs text-gray-500\">\r\n                  Ngày sửa <span className=\"text-red-500\">*</span>\r\n                </Label>\r\n                <Input\r\n                  id=\"modifiedDate\"\r\n                  value={uploadMetadataForm.modifiedDate}\r\n                  readOnly\r\n                  className=\"bg-gray-100\"\r\n                />\r\n              </div>\r\n\r\n              {/* Trích yếu */}\r\n              <div className=\"space-y-2\">\r\n                <Label htmlFor=\"summary\" className=\"text-xs text-gray-500\">\r\n                  Trích yếu <span className=\"text-red-500\">*</span>\r\n                </Label>\r\n                <Textarea\r\n                  id=\"summary\"\r\n                  value={uploadMetadataForm.summary}\r\n                  onChange={(e) =>\r\n                    setUploadMetadataForm((prev) => ({\r\n                      ...prev,\r\n                      summary: e.target.value,\r\n                    }))\r\n                  }\r\n                  placeholder=\"Tóm tắt văn bản\"\r\n                  rows={3}\r\n                />\r\n              </div>\r\n\r\n              {/* Ngày hiệu lực & Ngày hết hiệu lực */}\r\n              <div className=\"grid grid-cols-2 gap-4\">\r\n                <div className=\"space-y-2\">\r\n                  <Label htmlFor=\"effectiveDate\" className=\"text-xs text-gray-500\">\r\n                    Ngày hiệu lực <span className=\"text-red-500\">*</span>\r\n                  </Label>\r\n                  <Input\r\n                    id=\"effectiveDate\"\r\n                    type=\"date\"\r\n                    value={uploadMetadataForm.effectiveDate}\r\n                    onChange={(e) =>\r\n                      setUploadMetadataForm((prev) => ({\r\n                        ...prev,\r\n                        effectiveDate: e.target.value,\r\n                      }))\r\n                    }\r\n                  />\r\n                </div>\r\n                <div className=\"space-y-2\">\r\n                  <Label htmlFor=\"expirationDate\" className=\"text-xs text-gray-500\">\r\n                    Ngày hết hiệu lực\r\n                  </Label>\r\n                  <Input\r\n                    id=\"expirationDate\"\r\n                    type=\"date\"\r\n                    value={uploadMetadataForm.expirationDate}\r\n                    onChange={(e) => {\r\n                      setUploadMetadataForm((prev) => ({\r\n                        ...prev,\r\n                        expirationDate: e.target.value,\r\n                      }));\r\n                      // Real-time validation\r\n                      const error = validateExpirationDate(\r\n                        uploadMetadataForm.effectiveDate,\r\n                        e.target.value,\r\n                      );\r\n                      setExpirationDateError(error);\r\n                    }}\r\n                  />\r\n                  {expirationDateError && (\r\n                    <p className=\"text-xs text-red-500\">{expirationDateError}</p>\r\n                  )}\r\n                </div>\r\n              </div>\r\n\r\n              {/* Ngày ban hành */}\r\n              <div className=\"space-y-2\">\r\n                <Label htmlFor=\"issueDate\" className=\"text-xs text-gray-500\">\r\n                  Ngày ban hành <span className=\"text-red-500\">*</span>\r\n                </Label>\r\n                <Input\r\n                  id=\"issueDate\"\r\n                  type=\"date\"\r\n                  value={uploadMetadataForm.issueDate}\r\n                  onChange={(e) =>\r\n                    setUploadMetadataForm((prev) => ({\r\n                      ...prev,\r\n                      issueDate: e.target.value,\r\n                    }))\r\n                  }\r\n                />\r\n              </div>\r\n\r\n              {/* Trạng thái xử lý */}\r\n              <div className=\"space-y-2\">\r\n                <Label htmlFor=\"processingStatus\" className=\"text-xs text-gray-500\">\r\n                  Trạng thái xử lý <span className=\"text-red-500\">*</span>\r\n                </Label>\r\n                <Select\r\n                  value={uploadMetadataForm.processingStatus}\r\n                  onValueChange={(value) =>\r\n                    setUploadMetadataForm((prev) => ({\r\n                      ...prev,\r\n                      processingStatus: value,\r\n                    }))\r\n                  }\r\n                >\r\n                  <SelectTrigger>\r\n                    <SelectValue placeholder=\"Chọn trạng thái xử lý\" />\r\n                  </SelectTrigger>\r\n                  <SelectContent>\r\n                    <SelectItem value=\"phat_hanh\">Phát hành</SelectItem>\r\n                    <SelectItem value=\"da_phat_hanh\">Đã phát hành</SelectItem>\r\n                  </SelectContent>\r\n                </Select>\r\n              </div>\r\n\r\n              {/* Tình trạng */}\r\n              <div className=\"space-y-2\">\r\n                <Label htmlFor=\"status\" className=\"text-xs text-gray-500\">\r\n                  Tình trạng <span className=\"text-red-500\">*</span>\r\n                </Label>\r\n                <Select\r\n                  value={uploadMetadataForm.status}\r\n                  onValueChange={(value) =>\r\n                    setUploadMetadataForm((prev) => ({\r\n                      ...prev,\r\n                      status: value,\r\n                    }))\r\n                  }\r\n                >\r\n                  <SelectTrigger>\r\n                    <SelectValue placeholder=\"Chọn tình trạng\" />\r\n                  </SelectTrigger>\r\n                  <SelectContent>\r\n                    <SelectItem value=\"hieu_luc\">Hiệu lực</SelectItem>\r\n                    <SelectItem value=\"het_hieu_luc\">Hết hiệu lực</SelectItem>\r\n                  </SelectContent>\r\n                </Select>\r\n              </div>\r\n\r\n              {/* Additional fields for kho_doi_ngoai/ path only */}\r\n              {(currentPrefix.startsWith('kho_doi_ngoai/') ||\r\n                currentPrefix === 'kho_doi_ngoai/') && (\r\n                <>\r\n                  {/* Loại văn bản */}\r\n                  <div className=\"space-y-2\">\r\n                    <Label htmlFor=\"documentType\" className=\"text-xs text-gray-500\">\r\n                      Loại văn bản <span className=\"text-red-500\">*</span>\r\n                    </Label>\r\n                    <Input\r\n                      id=\"documentType\"\r\n                      value={uploadMetadataForm.documentType}\r\n                      onChange={(e) =>\r\n                        setUploadMetadataForm((prev) => ({\r\n                          ...prev,\r\n                          documentType: e.target.value,\r\n                        }))\r\n                      }\r\n                      placeholder=\"Nhập loại văn bản\"\r\n                    />\r\n                  </div>\r\n\r\n                  {/* Lĩnh vực */}\r\n                  <div className=\"space-y-2\">\r\n                    <Label htmlFor=\"field\" className=\"text-xs text-gray-500\">\r\n                      Lĩnh vực <span className=\"text-red-500\">*</span>\r\n                    </Label>\r\n                    <Input\r\n                      id=\"field\"\r\n                      value={uploadMetadataForm.field}\r\n                      onChange={(e) =>\r\n                        setUploadMetadataForm((prev) => ({\r\n                          ...prev,\r\n                          field: e.target.value,\r\n                        }))\r\n                      }\r\n                      placeholder=\"Nhập lĩnh vực\"\r\n                    />\r\n                  </div>\r\n\r\n                  {/* Nguồn dữ liệu - readonly, auto-filled */}\r\n                  <div className=\"space-y-2\">\r\n                    <Label htmlFor=\"dataSource\" className=\"text-xs text-gray-500\">\r\n                      Nguồn dữ liệu\r\n                    </Label>\r\n                    <Input id=\"dataSource\" value=\"Tệp tải lên\" readOnly className=\"bg-gray-100\" />\r\n                  </div>\r\n                </>\r\n              )}\r\n\r\n              {/* Form errors display */}\r\n              {uploadFormErrors.length > 0 && (\r\n                <div className=\"bg-red-50 border border-red-200 rounded-md p-3 space-y-1\">\r\n                  <p className=\"text-sm font-semibold text-red-700\">Lỗi xác thực:</p>\r\n                  {uploadFormErrors.map((err, idx) => (\r\n                    <p key={idx} className=\"text-sm text-red-600\">\r\n                      • {err}\r\n                    </p>\r\n                  ))}\r\n                </div>\r\n              )}\r\n            </div>\r\n\r\n            <DialogFooter>\r\n              <Button\r\n                variant=\"outline\"\r\n                onClick={() => {\r\n                  setShowUploadFormDialog(false);\r\n                  setUploadFormErrors([]);\r\n                  setPendingUploadInfo(null);\r\n                }}\r\n              >\r\n                Hủy\r\n              </Button>\r\n              <Button\r\n                className=\"bg-[#1682fe] hover:bg-[#0f6cd4] text-white\"\r\n                onClick={() => {\r\n                  // Validate form\r\n                  const errors = validateUploadForm(uploadMetadataForm);\r\n\r\n                  // Additional validation for kho_doi_ngoai/ path only\r\n                  const isKhoDoiNgoai =\r\n                    pendingUploadInfo?.prefix.startsWith('kho_doi_ngoai/') ||\r\n                    pendingUploadInfo?.prefix === 'kho_doi_ngoai/';\r\n\r\n                  if (isKhoDoiNgoai) {\r\n                    if (!uploadMetadataForm.documentType?.trim())\r\n                      errors.push('Loại văn bản là bắt buộc');\r\n                    if (!uploadMetadataForm.field?.trim()) errors.push('Lĩnh vực là bắt buộc');\r\n                  }\r\n\r\n                  if (errors.length > 0) {\r\n                    setUploadFormErrors(errors);\r\n                    return;\r\n                  }\r\n\r\n                  // Submit form and proceed with upload\r\n                  setUploadFormErrors([]);\r\n                  if (pendingUploadInfo) {\r\n                    const { files, prefix, type } = pendingUploadInfo;\r\n                    handleSubmitUpload(files, prefix, type);\r\n                  }\r\n                }}\r\n                disabled={_isUploading}\r\n              >\r\n                {_isUploading ? (\r\n                  <>\r\n                    <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\r\n                    Đang tải lên...\r\n                  </>\r\n                ) : (\r\n                  'Tiếp tục tải lên'\r\n                )}\r\n              </Button>\r\n            </DialogFooter>\r\n          </DialogContent>\r\n        </Dialog>\r\n\r\n        <Dialog\r\n          open={showDuplicateDialog}\r\n          onOpenChange={(e) => {\r\n            setShowDuplicateDialog(e);\r\n            if (!e) {\r\n              setFolderExist('');\r\n              setDuplicateFiles(null);\r\n              setIsUploading(false);\r\n              setUploadType(null);\r\n            }\r\n          }}\r\n        >\r\n          <DialogContent className=\"max-h-[80vh] overflow-y-auto\">\r\n            <DialogHeader>\r\n              <DialogTitle>Cảnh báo trùng lặp</DialogTitle>\r\n              <DialogDescription>\r\n                {folderExist && <>Folder ${folderExist} đã có.</>}\r\n                {duplicateFiles && duplicateFiles.length > 0 && (\r\n                  <>\r\n                    Những tệp sau bị lặp:\r\n                    <ul className=\"mt-2 max-h-40 overflow-y-auto list-disc pl-5 text-sm text-red-600\">\r\n                      {Array.from(duplicateFiles).map((file: File, index: number) => (\r\n                        <li key={index}>{file.name}</li>\r\n                      ))}\r\n                    </ul>\r\n                  </>\r\n                )}\r\n              </DialogDescription>\r\n            </DialogHeader>\r\n            <DialogFooter>\r\n              <Button\r\n                variant=\"outline\"\r\n                onClick={() => {\r\n                  setShowDuplicateDialog(false);\r\n                  setFolderExist('');\r\n                  setDuplicateFiles(null);\r\n                  setIsUploading(false);\r\n                  setUploadType(null);\r\n                }}\r\n              >\r\n                Bỏ qua\r\n              </Button>\r\n              <Button variant=\"destructive\" onClick={() => overwriteFiles()}>\r\n                Ghi đè\r\n              </Button>\r\n            </DialogFooter>\r\n          </DialogContent>\r\n        </Dialog>\r\n\r\n        <Breadcrumb className=\"s3-explr-breadcrumb\">\r\n          <BreadcrumbList className=\"s3-explr-breadcrumb-list\">\r\n            <BreadcrumbItem className=\"s3-explr-breadcrumb-item\">\r\n              <BreadcrumbLink\r\n                onClick={() => handleFolderClick(rootPrefix)}\r\n                className=\"flex items-center gap-1 cursor-pointer s3-explr-breadcrumb-home\"\r\n              >\r\n                {homeLabel}\r\n              </BreadcrumbLink>\r\n            </BreadcrumbItem>\r\n            {!idCreator &&\r\n              prefixSegments.map((segment, index) => (\r\n                <div key={index} className=\"flex items-center\">\r\n                  <BreadcrumbSeparator\r\n                    key={`sep-${index}`}\r\n                    className=\"s3-explr-breadcrumb-separator\"\r\n                  />\r\n                  <BreadcrumbItem key={`item-${segment}`} className=\"s3-explr-breadcrumb-item\">\r\n                    <BreadcrumbLink\r\n                      onClick={() =>\r\n                        handleFolderClick(\r\n                          rootPrefix + prefixSegments.slice(0, index + 1).join('/') + '/',\r\n                        )\r\n                      }\r\n                      className=\"cursor-pointer s3-explr-breadcrumb-link\"\r\n                    >\r\n                      {segment}\r\n                    </BreadcrumbLink>\r\n                  </BreadcrumbItem>\r\n                </div>\r\n              ))}\r\n          </BreadcrumbList>\r\n        </Breadcrumb>\r\n\r\n        <div className=\"flex items-center space-x-4 s3-explr-toolbar\">\r\n          <div className=\"relative max-w-sm w-full s3-explr-search-container\">\r\n            <SearchBox\r\n              ref={searchBoxRef}\r\n              onChange={(searchQuery1) => setSearchQuery(searchQuery1)}\r\n              loading={isLoading}\r\n            />\r\n          </div>\r\n\r\n          {currentPrefix && currentPrefix !== '/' && (\r\n            <TooltipProvider delayDuration={0}>\r\n              <Tooltip>\r\n                <TooltipTrigger asChild>\r\n                  <Button\r\n                    variant=\"outline\"\r\n                    size=\"sm\"\r\n                    onClick={() => {\r\n                      if (isLoading || isSyncing) return;\r\n                      setIsSyncing(true);\r\n                      handleSyncKnowledgeBase();\r\n                    }}\r\n                    aria-disabled={isLoading || isSyncing}\r\n                    className=\"flex items-center gap-2 s3-explr-refresh-btn aria-disabled:opacity-50\"\r\n                  >\r\n                    <ArrowPathIcon\r\n                      className={`h-4 w-4 s3-explr-refresh-icon ${isLoading || isSyncing ? 'animate-spin' : ''}`}\r\n                    />\r\n                    Đồng bộ KB\r\n                  </Button>\r\n                </TooltipTrigger>\r\n                {syncJobStatus && (\r\n                  <TooltipContent side=\"right\" sideOffset={5}>\r\n                    <div className=\"space-y-2 p-3 max-w-md\">\r\n                      <p className=\"font-semibold text-lg border-b pb-1\">Thông tin đồng bộ</p>\r\n\r\n                      {/* Status Section */}\r\n                      <div className=\"space-y-1\">\r\n                        <p className=\"flex items-center gap-2\">\r\n                          <span className=\"font-medium\">Trạng thái:</span>\r\n                          <span\r\n                            className={`flex items-center gap-1 font-semibold ${\r\n                              syncJobStatus.status === 'COMPLETE'\r\n                                ? 'text-green-600'\r\n                                : syncJobStatus.status === 'FAILED'\r\n                                  ? 'text-red-600'\r\n                                  : 'text-yellow-600'\r\n                            }`}\r\n                          >\r\n                            {syncJobStatus.status === 'COMPLETE' && (\r\n                              <svg\r\n                                xmlns=\"http://www.w3.org/2000/svg\"\r\n                                className=\"h-4 w-4\"\r\n                                fill=\"none\"\r\n                                viewBox=\"0 0 24 24\"\r\n                                stroke=\"currentColor\"\r\n                                strokeWidth={2}\r\n                              >\r\n                                <path\r\n                                  strokeLinecap=\"round\"\r\n                                  strokeLinejoin=\"round\"\r\n                                  d=\"M5 13l4 4L19 7\"\r\n                                />\r\n                              </svg>\r\n                            )}\r\n                            {syncJobStatus.status === 'FAILED' && (\r\n                              <svg\r\n                                xmlns=\"http://www.w3.org/2000/svg\"\r\n                                className=\"h-4 w-4\"\r\n                                fill=\"none\"\r\n                                viewBox=\"0 0 24 24\"\r\n                                stroke=\"currentColor\"\r\n                                strokeWidth={2}\r\n                              >\r\n                                <path\r\n                                  strokeLinecap=\"round\"\r\n                                  strokeLinejoin=\"round\"\r\n                                  d=\"M6 18L18 6M6 6l12 12\"\r\n                                />\r\n                              </svg>\r\n                            )}\r\n                            {syncJobStatus.status !== 'COMPLETE' &&\r\n                              syncJobStatus.status !== 'FAILED' &&\r\n                              syncJobStatus.status !== 'STOPPED' && (\r\n                                <svg\r\n                                  xmlns=\"http://www.w3.org/2000/svg\"\r\n                                  className=\"h-4 w-4 animate-spin\"\r\n                                  fill=\"none\"\r\n                                  viewBox=\"0 0 24 24\"\r\n                                  stroke=\"currentColor\"\r\n                                  strokeWidth={2}\r\n                                >\r\n                                  <path\r\n                                    strokeLinecap=\"round\"\r\n                                    strokeLinejoin=\"round\"\r\n                                    d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\"\r\n                                  />\r\n                                </svg>\r\n                              )}\r\n                            {getSyncStatusInVietnamese(syncJobStatus.status)}\r\n                          </span>\r\n                        </p>\r\n                      </div>\r\n\r\n                      {/* Statistics Section */}\r\n                      {syncJobStatus.statistics && (\r\n                        <div className=\"space-y-1 border-t pt-2\">\r\n                          <p className=\"font-medium text-gray-50\">Thống kê xử lý:</p>\r\n                          <div className=\"grid grid-cols-2 gap-x-4 gap-y-1 text-sm\">\r\n                            <div className=\"flex justify-between\">\r\n                              <span>Tài liệu quét:</span>\r\n                              <span className=\"font-medium\">\r\n                                {syncJobStatus.statistics.numberOfDocumentsScanned}\r\n                              </span>\r\n                            </div>\r\n                            <div className=\"flex justify-between\">\r\n                              <span>Metadata quét:</span>\r\n                              <span className=\"font-medium\">\r\n                                {syncJobStatus.statistics.numberOfMetadataDocumentsScanned}\r\n                              </span>\r\n                            </div>\r\n                            <div className=\"flex justify-between\">\r\n                              <span>Tài liệu mới:</span>\r\n                              <span className=\"font-medium text-green-600\">\r\n                                {syncJobStatus.statistics.numberOfNewDocumentsIndexed}\r\n                              </span>\r\n                            </div>\r\n                            <div className=\"flex justify-between\">\r\n                              <span>Tài liệu sửa:</span>\r\n                              <span className=\"font-medium text-blue-600\">\r\n                                {syncJobStatus.statistics.numberOfModifiedDocumentsIndexed}\r\n                              </span>\r\n                            </div>\r\n                            <div className=\"flex justify-between\">\r\n                              <span>Metadata sửa:</span>\r\n                              <span className=\"font-medium text-blue-600\">\r\n                                {syncJobStatus.statistics.numberOfMetadataDocumentsModified}\r\n                              </span>\r\n                            </div>\r\n                            <div className=\"flex justify-between\">\r\n                              <span>Tài liệu xóa:</span>\r\n                              <span className=\"font-medium text-orange-600\">\r\n                                {syncJobStatus.statistics.numberOfDocumentsDeleted}\r\n                              </span>\r\n                            </div>\r\n                            <div className=\"flex justify-between col-span-2\">\r\n                              <span>Tài liệu lỗi:</span>\r\n                              <span className=\"font-medium text-red-600\">\r\n                                {syncJobStatus.statistics.numberOfDocumentsFailed}\r\n                              </span>\r\n                            </div>\r\n                          </div>\r\n                        </div>\r\n                      )}\r\n\r\n                      {/* Job Details Section */}\r\n                      <div className=\"space-y-1 border-t pt-2 text-sm text-gray-200\">\r\n                        <p className=\"font-medium text-gray-50\">Chi tiết Job:</p>\r\n                        <p>\r\n                          <span className=\"font-medium\">DataSource ID:</span>{' '}\r\n                          {syncJobStatus.dataSourceId}\r\n                        </p>\r\n                        <p>\r\n                          <span className=\"font-medium\">Ingestion Job ID:</span>{' '}\r\n                          {syncJobStatus.ingestionJobId}\r\n                        </p>\r\n                        <p>\r\n                          <span className=\"font-medium\">Knowledge Base ID:</span>{' '}\r\n                          {syncJobStatus.knowledgeBaseId}\r\n                        </p>\r\n                        <p className=\"break-all\">\r\n                          <span className=\"font-medium\">OpenSearch Node:</span>{' '}\r\n                          {syncJobStatus.node ? (\r\n                            <span className=\"text-gray-100\">{syncJobStatus.node}</span>\r\n                          ) : (\r\n                            <span className=\"italic text-gray-400\">Chưa có</span>\r\n                          )}\r\n                        </p>\r\n                        <p className=\"break-all\">\r\n                          <span className=\"font-medium\">Index Name:</span>{' '}\r\n                          {syncJobStatus.index_name ? (\r\n                            <span className=\"text-gray-100\">{syncJobStatus.index_name}</span>\r\n                          ) : (\r\n                            <span className=\"italic text-gray-400\">Chưa có</span>\r\n                          )}\r\n                        </p>\r\n                        <p>\r\n                          <span className=\"font-medium\">Job trong queue:</span>{' '}\r\n                          {syncJobStatus.is_still_in_stock ? 'Còn' : 'Không'}\r\n                        </p>\r\n                      </div>\r\n\r\n                      {/* Error Message */}\r\n                      {syncJobStatus.errorMessage && (\r\n                        <div className=\"border-t pt-2\">\r\n                          <p className=\"text-red-600 font-medium\">Lỗi:</p>\r\n                          <p className=\"text-red-600 text-sm bg-red-50 p-2 rounded\">\r\n                            {syncJobStatus.errorMessage}\r\n                          </p>\r\n                        </div>\r\n                      )}\r\n\r\n                      {/* Failed Files Section */}\r\n                      {syncJobStatus.failureReasons && syncJobStatus.failureReasons.length > 0 && (\r\n                        <FailedFilesDisplay\r\n                          failureReasons={syncJobStatus.failureReasons}\r\n                          onNavigateToFile={handleNavigateToFailedFile}\r\n                        />\r\n                      )}\r\n                    </div>\r\n                  </TooltipContent>\r\n                )}\r\n              </Tooltip>\r\n            </TooltipProvider>\r\n          )}\r\n          {/* Nút lịch sử báo cáo - chỉ hiển thị trong thư mục `bld-reports/` */}\r\n          {isBldReportsFolder && (\r\n            <Button\r\n              variant=\"outline\"\r\n              size=\"sm\"\r\n              onClick={() => setReportHistoryOpen(true)}\r\n              className=\"flex items-center gap-2 s3-explr-report-history-btn\"\r\n            >\r\n              <ClockIcon className=\"h-4 w-4\" />\r\n              Lịch sử báo cáo\r\n            </Button>\r\n          )}\r\n          {/* Nút Add file mới */}\r\n          {canEditDocument((fileSystem as any)?.prefixPermission) && (\r\n            <div className=\"relative\" ref={addFileMenuRef}>\r\n              <Button\r\n                variant=\"outline\"\r\n                size=\"sm\"\r\n                className=\"flex items-center gap-2 s3-explr-add-file-btn bg-[#1682fe] hover:bg-[#0f6cd4] text-white rounded-md px-4 py-2 transition-colors aria-disabled:hidden\"\r\n                onClick={() => setShowAddFileMenu((prev) => !prev)}\r\n                aria-disabled={false}\r\n              >\r\n                <PlusIcon className=\"w-4 h-4\" />\r\n                Add file\r\n              </Button>\r\n              {showAddFileMenu && (\r\n                <div className=\"absolute z-50 mt-2 right-0 w-56 bg-white border rounded-lg shadow-lg py-2 flex flex-col\">\r\n                  <button\r\n                    className=\"flex items-center px-4 py-2 text-sm hover:bg-gray-100 text-left\"\r\n                    onClick={() => {\r\n                      setShowAddFileMenu(false);\r\n                      // Create a hidden file input for files\r\n                      const input = document.createElement('input');\r\n                      input.type = 'file';\r\n                      input.multiple = true;\r\n                      input.onchange = (e) => {\r\n                        const pickedFiles = (e.target as HTMLInputElement).files;\r\n                        if (pickedFiles && pickedFiles.length > 0) {\r\n                          // Lọc tệp sai định dạng theo quy tắc của kho (tải tệp thủ công)\r\n                          const files = filterFilesByAllowedExtensions(pickedFiles, currentPrefix);\r\n                          if (!files || files.length === 0) {\r\n                            return;\r\n                          }\r\n                          // Kiểm tra tổng dung lượng lần upload tối đa 100MB, không giới hạn số lượng file.\r\n                          if (checkConditionUploadFiles(files, toast)) {\r\n                            return;\r\n                          }\r\n                          // Check for empty files\r\n                          const emptyFiles = Array.from(files).filter((file) => file.size === 0);\r\n                          if (emptyFiles.length > 0) {\r\n                            toast({\r\n                              title: 'Lỗi tải lên',\r\n                              description: `Không thể tải lên tập tin rỗng: ${emptyFiles.map((f) => f.name).join(', ')}`,\r\n                              variant: 'destructive',\r\n                            });\r\n                            return;\r\n                          }\r\n                          // Check if this path requires the metadata form\r\n                          if (requiresMetadataForm(currentPrefix)) {\r\n                            // Check for compressed files FIRST before proceeding with upload\r\n                            const compressionCheck = validateFilesForCompression(files);\r\n                            if (compressionCheck.hasCompressed) {\r\n                              toast({\r\n                                title: 'Lỗi tải lên',\r\n                                description: `Không thể tải lên file nén: ${compressionCheck.compressedFiles.join(', ')}. Vui lòng giải nén trước khi tải lên.`,\r\n                                variant: 'destructive',\r\n                              });\r\n                              setShowUploadFormDialog(false);\r\n                              setPendingUploadInfo(null);\r\n                              setUploadFormErrors([]);\r\n                              return;\r\n                            }\r\n\r\n                            setPendingUploadInfo({\r\n                              files,\r\n                              prefix: currentPrefix,\r\n                              type: 'files',\r\n                            });\r\n                            setShowUploadFormDialog(true);\r\n                            // Reset form for new upload\r\n                            setUploadMetadataForm({\r\n                              ...defaultUploadMetadata,\r\n                              creator: user?.username || '',\r\n                              modifier: user?.username || '',\r\n                              modifiedDate: new Date().toLocaleDateString('vi-VN'),\r\n                            });\r\n                          } else {\r\n                            // Upload directly without form dialog\r\n                            void uploadFiles(files, currentPrefix, 'files');\r\n                          }\r\n                        }\r\n                      };\r\n                      input.click();\r\n                    }}\r\n                  >\r\n                    <ArrowUpTrayIcon className=\"h-4 w-4 mr-2\" /> Tải tệp tin\r\n                  </button>\r\n                  <button\r\n                    className=\"flex items-center px-4 py-2 text-sm hover:bg-gray-100 text-left\"\r\n                    onClick={() => {\r\n                      setShowAddFileMenu(false);\r\n                      // Create a hidden file input for folder\r\n                      const input = document.createElement('input');\r\n                      input.type = 'file';\r\n                      input.multiple = true;\r\n                      input.webkitdirectory = true;\r\n                      input.onchange = (e) => {\r\n                        const pickedFiles = (e.target as HTMLInputElement).files;\r\n                        if (pickedFiles && pickedFiles.length > 0) {\r\n                          // Lọc tệp sai định dạng trong thư mục theo quy tắc của kho (tải thư mục thủ công)\r\n                          const files = filterFilesByAllowedExtensions(pickedFiles, currentPrefix);\r\n                          if (!files || files.length === 0) {\r\n                            return;\r\n                          }\r\n                          // Kiểm tra tổng dung lượng lần upload tối đa 100MB, không giới hạn số lượng file.\r\n                          if (checkConditionUploadFiles(files, toast)) {\r\n                            return;\r\n                          }\r\n                          // Check for empty files\r\n                          const emptyFiles = Array.from(files).filter((file) => file.size === 0);\r\n                          if (emptyFiles.length > 0) {\r\n                            toast({\r\n                              title: 'Lỗi tải lên',\r\n                              description: `Không thể tải lên tập tin rỗng: ${emptyFiles.map((f) => f.name).join(', ')}`,\r\n                              variant: 'destructive',\r\n                            });\r\n                            return;\r\n                          }\r\n                          // Check if this path requires the metadata form\r\n                          if (requiresMetadataForm(currentPrefix)) {\r\n                            // Check for compressed files FIRST before proceeding with upload\r\n                            const compressionCheck = validateFilesForCompression(files);\r\n                            if (compressionCheck.hasCompressed) {\r\n                              toast({\r\n                                title: 'Lỗi tải lên',\r\n                                description: `Không thể tải lên file nén: ${compressionCheck.compressedFiles.join(', ')}. Vui lòng giải nén trước khi tải lên.`,\r\n                                variant: 'destructive',\r\n                              });\r\n                              setShowUploadFormDialog(false);\r\n                              setPendingUploadInfo(null);\r\n                              setUploadFormErrors([]);\r\n                              return;\r\n                            }\r\n\r\n                            setPendingUploadInfo({\r\n                              files,\r\n                              prefix: currentPrefix,\r\n                              type: 'folder',\r\n                            });\r\n                            setShowUploadFormDialog(true);\r\n                            // Reset form for new upload\r\n                            setUploadMetadataForm({\r\n                              ...defaultUploadMetadata,\r\n                              creator: user?.username || '',\r\n                              modifier: user?.username || '',\r\n                              modifiedDate: new Date().toLocaleDateString('vi-VN'),\r\n                            });\r\n                          } else {\r\n                            // Upload directly without form dialog\r\n                            void uploadFiles(files, currentPrefix, 'folder');\r\n                          }\r\n                        }\r\n                      };\r\n                      input.click();\r\n                    }}\r\n                  >\r\n                    <FolderIcon className=\"h-4 w-4 mr-2\" /> Tải lên thư mục\r\n                  </button>\r\n                  <button\r\n                    className=\"flex items-center px-4 py-2 text-sm hover:bg-gray-100 text-left\"\r\n                    disabled={Boolean(displayPrefixes) && !currentPrefix}\r\n                    onClick={() => setIsCreateFolderOpen(true)}\r\n                  >\r\n                    <FolderPlusIcon className=\"h-4 w-4 mr-2 s3-explr-folder-plus-icon\" />\r\n                    Thư mục mới\r\n                  </button>\r\n                  <button\r\n                    className=\"flex items-center px-4 py-2 text-sm hover:bg-gray-100 text-left\"\r\n                    onClick={() => {\r\n                      setShowAddFileMenu(false);\r\n                      setIsWebsiteDialogOpen(true);\r\n                    }}\r\n                  >\r\n                    <GlobeAltIcon className=\"h-4 w-4 mr-2\" /> Thêm Website\r\n                  </button>\r\n                  <button\r\n                    className={`flex items-center px-4 py-2 text-sm hover:bg-gray-100 text-left ${hiddenSynchronization ? 'hidden' : ''}`}\r\n                    onClick={() => {\r\n                      setShowAddFileMenu(false);\r\n                      login();\r\n                    }}\r\n                  >\r\n                    <svg\r\n                      viewBox=\"0 0 87.3 78\"\r\n                      xmlns=\"http://www.w3.org/2000/svg\"\r\n                      className=\"h-4 w-4 mr-2\"\r\n                    >\r\n                      <path\r\n                        d=\"m6.6 66.85 3.85 6.65c.8 1.4 1.95 2.5 3.3 3.3l13.75-23.8h-27.5c0 1.55.4 3.1 1.2 4.5z\"\r\n                        fill=\"#0066da\"\r\n                      />\r\n                      <path\r\n                        d=\"m43.65 25-13.75-23.8c-1.35.8-2.5 1.9-3.3 3.3l-25.4 44a9.06 9.06 0 0 0 -1.2 4.5h27.5z\"\r\n                        fill=\"#00ac47\"\r\n                      />\r\n                      <path\r\n                        d=\"m73.55 76.8c1.35-.8 2.5-1.9 3.3-3.3l1.6-2.75 7.65-13.25c.8-1.4 1.2-2.95 1.2-4.5h-27.502l5.852 11.5z\"\r\n                        fill=\"#ea4335\"\r\n                      />\r\n                      <path\r\n                        d=\"m43.65 25 13.75-23.8c-1.35-.8-2.9-1.2-4.5-1.2h-18.5c-1.6 0-3.15.45-4.5 1.2z\"\r\n                        fill=\"#00832d\"\r\n                      />\r\n                      <path\r\n                        d=\"m59.8 53h-32.3l-13.75 23.8c1.35.8 2.9 1.2 4.5 1.2h50.8c1.6 0 3.15-.45 4.5-1.2z\"\r\n                        fill=\"#2684fc\"\r\n                      />\r\n                      <path\r\n                        d=\"m73.4 26.5-12.7-22c-.8-1.4-1.95-2.5-3.3-3.3l-13.75 23.8 16.15 28h27.45c0-1.55-.4-3.1-1.2-4.5z\"\r\n                        fill=\"#ffba00\"\r\n                      />\r\n                    </svg>{' '}\r\n                    Đồng bộ Google Drive\r\n                  </button>\r\n                  <button\r\n                    className={`flex items-center px-4 py-2 text-sm hover:bg-gray-100 text-left ${hiddenSynchronization ? 'hidden' : ''}`}\r\n                    onClick={() => {\r\n                      setShowAddFileMenu(false);\r\n                      loginOneDrive();\r\n                    }}\r\n                  >\r\n                    <svg\r\n                      xmlns=\"http://www.w3.org/2000/svg\"\r\n                      viewBox=\"0 0 64 64\"\r\n                      className=\"h-4 w-4 mr-2\"\r\n                    >\r\n                      <path\r\n                        fill=\"#094ab2\"\r\n                        d=\"M47.3 28.2C45.3 18.6 37.1 12 28 12c-8.5 0-15.9 5.6-18.4 13.5C4.2 27.2 0 32.2 0 38c0 6.6 5.4 12 12 12h36c8.3 0 16-6.6 16-15.5 0-6.8-4.9-12.4-11.7-13.3z\"\r\n                      />\r\n                      <path\r\n                        fill=\"#0067c5\"\r\n                        d=\"M44.9 30.1c-.2 0-.4-.1-.6-.1H26c-3.3 0-6 2.7-6 6 0 .9.2 1.8.6 2.6-1.7-.7-3.5-1.1-5.5-1.1C7.6 37.5 4 41.5 4 46s3.6 8.5 8.1 8.5h34.3c6.8 0 12.6-5.4 12.6-12s-5.5-11.6-11.1-12.4z\"\r\n                      />\r\n                    </svg>{' '}\r\n                    Đồng bộ OneDrive\r\n                  </button>\r\n                  <button\r\n                    className={`flex items-center px-4 py-2 text-sm hover:bg-gray-100 text-left ${hiddenSynchronization ? 'hidden' : ''}`}\r\n                    onClick={() => {\r\n                      setShowAddFileMenu(false);\r\n                      loginSharePoint();\r\n                    }}\r\n                  >\r\n                    <svg\r\n                      xmlns=\"http://www.w3.org/2000/svg\"\r\n                      viewBox=\"0 0 24 24\"\r\n                      className=\"h-4 w-4 mr-2\"\r\n                    >\r\n                      <path\r\n                        fill=\"#036C70\"\r\n                        d=\"M19 14.5v-9c0-.28-.22-.5-.5-.5h-13c-.28 0-.5.22-.5.5v9c0 .28.22.5.5.5h13c.28 0 .5-.22.5-.5z\"\r\n                      />\r\n                      <path\r\n                        fill=\"#17828F\"\r\n                        d=\"M16 17.5v-9c0-.28-.22-.5-.5-.5h-13c-.28 0-.5.22-.5.5v9c0 .28.22.5.5.5h13c.28 0 .5-.22.5-.5z\"\r\n                      />\r\n                      <path\r\n                        fill=\"#4DB6AC\"\r\n                        d=\"M13 20.5v-9c0-.28-.22-.5-.5-.5h-13c-.28 0-.5.22-.5.5v9c0 .28.22.5.5.5h13c.28 0 .5-.22.5-.5z\"\r\n                      />\r\n                      <path\r\n                        fill=\"#fff\"\r\n                        d=\"M4.5 15.5v-3c0-.28.22-.5.5-.5h3c.28 0 .5.22.5.5v3c0 .28-.22.5-.5.5H5c-.28 0-.5-.22-.5-.5z\"\r\n                      />\r\n                    </svg>{' '}\r\n                    Đồng bộ SharePoint\r\n                  </button>\r\n                </div>\r\n              )}\r\n            </div>\r\n          )}\r\n\r\n          {/* PendingApprovalPage ở đây*/}\r\n\r\n          {!isViewOnly &&\r\n            (currentPrefix === 'kho_doi_ngoai/' || currentPrefix.startsWith('kho_doi_ngoai/')) && (\r\n              <PendingApprovalPage\r\n                currentPrefix={currentPrefix}\r\n                apiBaseUrl={apiBaseUrl}\r\n                isUploading={_isUploading}\r\n              />\r\n            )}\r\n\r\n          {/* Email crawler settings button - `bld-reports/` (BLD Reports) hoặc crawler theo folder */}\r\n          {showCrawlerSettingsButton && (\r\n            <Button\r\n              variant=\"ghost\"\r\n              size=\"sm\"\r\n              onClick={openCrawlerSettingsModal}\r\n              disabled={resolvedCrawlerSourceLoading}\r\n              className=\"h-11 w-11 p-0\"\r\n              aria-label={\r\n                crawlerProcessorType === 'recruitment'\r\n                  ? 'Cấu hình crawler tuyển dụng'\r\n                  : 'Cấu hình Email Scheduler'\r\n              }\r\n              title={\r\n                crawlerProcessorType === 'recruitment'\r\n                  ? 'Cấu hình crawler tuyển dụng'\r\n                  : 'Cấu hình Email Scheduler'\r\n              }\r\n            >\r\n              <svg\r\n                className=\"h-4 w-4\"\r\n                viewBox=\"0 0 24 24\"\r\n                fill=\"none\"\r\n                stroke=\"currentColor\"\r\n                strokeWidth=\"2\"\r\n                strokeLinecap=\"round\"\r\n                strokeLinejoin=\"round\"\r\n              >\r\n                <path d=\"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z\" />\r\n                <circle cx=\"12\" cy=\"12\" r=\"3\" />\r\n              </svg>\r\n            </Button>\r\n          )}\r\n\r\n          {canEditDocument(fileSystem['prefixPermission'] as any) &&\r\n            currentPrefix.split('/').length >= 2 && (\r\n              <Button\r\n                variant=\"outline\"\r\n                size=\"sm\"\r\n                className=\"flex items-center gap-2 s3-explr-add-file-btn bg-[#1682fe] hover:bg-[#0f6cd4] text-white rounded-md px-4 py-2 transition-colors aria-disabled:hidden\"\r\n                onClick={() =>\r\n                  setFileToShare({\r\n                    contentType: 'application/x-directory',\r\n                    isFolder: true,\r\n                    key: currentPrefix || '/',\r\n                    lastModified: '-' as unknown as Date,\r\n                    name: '',\r\n                    size: 0,\r\n                  })\r\n                }\r\n              >\r\n                <ShareIcon className=\"w-4 h-4\" />\r\n                Chia sẻ\r\n              </Button>\r\n            )}\r\n\r\n          {!asSelector && (\r\n            <>\r\n              {selectedKeys.size > 0 && canEditDocument((fileSystem as any)?.prefixPermission) && (\r\n                <>\r\n                  <Dialog open={showBulkDeleteDialog} onOpenChange={setShowBulkDeleteDialog}>\r\n                    <DialogTrigger asChild>\r\n                      <Button\r\n                        variant=\"destructive\"\r\n                        size=\"sm\"\r\n                        className=\"flex items-center gap-2 s3-explr-bulk-delete-btn\"\r\n                      >\r\n                        <TrashIcon className=\"h-4 w-4 s3-explr-trash-icon\" />\r\n                        Xóa đã chọn ({selectedKeys.size})\r\n                      </Button>\r\n                    </DialogTrigger>\r\n                    <DialogContent className=\"s3-explr-dialog-content\">\r\n                      <DialogHeader className=\"s3-explr-dialog-header\">\r\n                        <DialogTitle className=\"s3-explr-dialog-title\">\r\n                          Xác nhận xóa hàng loạt\r\n                        </DialogTitle>\r\n                        <DialogDescription className=\"s3-explr-dialog-description\">\r\n                          Bạn có chắc chắn muốn xóa {selectedKeys.size} mục đã chọn? Hành động này\r\n                          không thể hoàn tác.\r\n                        </DialogDescription>\r\n                      </DialogHeader>\r\n                      <DialogFooter className=\"s3-explr-dialog-footer\">\r\n                        <Button\r\n                          variant=\"outline\"\r\n                          onClick={() => setShowBulkDeleteDialog(false)}\r\n                          className=\"s3-explr-cancel-btn\"\r\n                        >\r\n                          Hủy\r\n                        </Button>\r\n                        <Button\r\n                          variant=\"destructive\"\r\n                          onClick={handleRemoveSelected}\r\n                          disabled={isBulkDeleting}\r\n                          className=\"s3-explr-confirm-delete-btn\"\r\n                        >\r\n                          {isBulkDeleting ? (\r\n                            <>\r\n                              <Loader2 className=\"mr-2 h-4 w-4 animate-spin s3-explr-loader\" />\r\n                              Đang xóa...\r\n                            </>\r\n                          ) : (\r\n                            'Xóa đã chọn'\r\n                          )}\r\n                        </Button>\r\n                      </DialogFooter>\r\n                    </DialogContent>\r\n                  </Dialog>\r\n                </>\r\n              )}\r\n              {!idCreator && (\r\n                <Dialog open={isCreateFolderOpen} onOpenChange={setIsCreateFolderOpen}>\r\n                  <DialogTrigger asChild></DialogTrigger>\r\n                  <DialogContent className=\"s3-explr-dialog-content\">\r\n                    <DialogHeader className=\"s3-explr-dialog-header\">\r\n                      <DialogTitle className=\"s3-explr-dialog-title\">Tạo thư mục mới</DialogTitle>\r\n                    </DialogHeader>\r\n                    <div className=\"space-y-4 py-4 s3-explr-dialog-body\">\r\n                      <div className=\"space-y-2 s3-explr-input-group\">\r\n                        <Label htmlFor=\"name\" className=\"s3-explr-label\">\r\n                          Tên thư mục\r\n                        </Label>\r\n                        <Input\r\n                          disabled={isCreatingFolder}\r\n                          id=\"name\"\r\n                          value={newFolderName}\r\n                          onChange={(e) => setNewFolderName(e.target.value)}\r\n                          placeholder=\"Nhập tên thư mục\"\r\n                          className=\"s3-explr-input\"\r\n                        />\r\n                      </div>\r\n                      <Button\r\n                        onClick={() => {\r\n                          if (newFolderName.trim()) {\r\n                            void createFolder(newFolderName, currentPrefix);\r\n                          }\r\n                        }}\r\n                        disabled={isCreatingFolder}\r\n                        className=\"s3-explr-create-btn\"\r\n                      >\r\n                        {isCreatingFolder && (\r\n                          <Loader2 className=\"mr-2 h-4 w-4 animate-spin s3-explr-loader\" />\r\n                        )}\r\n                        {isCreatingFolder ? 'Đang tạo...' : 'Tạo'}\r\n                      </Button>\r\n                    </div>\r\n                  </DialogContent>\r\n                </Dialog>\r\n              )}\r\n              {idCreator && !currentPrefix ? (\r\n                <></>\r\n              ) : (\r\n                <div className=\"flex items-center gap-2 s3-explr-upload-group\">\r\n                  {/*<Button*/}\r\n                  {/*  variant=\"outline\"*/}\r\n                  {/*  size=\"sm\"*/}\r\n                  {/*  className=\"flex items-center gap-2 s3-explr-upload-files-btn\"*/}\r\n                  {/*  onClick={() => {*/}\r\n                  {/*    const input = document.createElement('input');*/}\r\n                  {/*    input.type = 'file';*/}\r\n                  {/*    input.multiple = true;*/}\r\n                  {/*    input.onchange = (e) => {*/}\r\n                  {/*      const files = (e.target as HTMLInputElement).files;*/}\r\n                  {/*      if (files) {*/}\r\n                  {/*        void uploadFiles(files, currentPrefix, 'files');*/}\r\n                  {/*      }*/}\r\n                  {/*    };*/}\r\n                  {/*    input.click();*/}\r\n                  {/*  }}*/}\r\n                  {/*  disabled={uploadType !== null || (Boolean(displayPrefixes) && !currentPrefix)}*/}\r\n                  {/*>*/}\r\n                  {/*  {uploadType === 'files' ? (*/}\r\n                  {/*    <>*/}\r\n                  {/*      <Loader2 className=\"h-4 w-4 animate-spin mr-2 s3-explr-loader\" />*/}\r\n                  {/*      Đang xử lý...*/}\r\n                  {/*    </>*/}\r\n                  {/*  ) : (*/}\r\n                  {/*    <>*/}\r\n                  {/*      <ArrowUpTrayIcon className=\"h-4 w-4 s3-explr-upload-icon\" />*/}\r\n                  {/*      Tải lên tập tin*/}\r\n                  {/*    </>*/}\r\n                  {/*  )}*/}\r\n                  {/*</Button>*/}\r\n\r\n                  {/*<Button*/}\r\n                  {/*  variant=\"outline\"*/}\r\n                  {/*  size=\"sm\"*/}\r\n                  {/*  className=\"flex items-center gap-2 s3-explr-upload-folder-btn\"*/}\r\n                  {/*  onClick={() => {*/}\r\n                  {/*    const input = document.createElement('input');*/}\r\n                  {/*    input.type = 'file';*/}\r\n                  {/*    input.multiple = true;*/}\r\n                  {/*    input.webkitdirectory = true;*/}\r\n                  {/*    input.onchange = (e) => {*/}\r\n                  {/*      const files = (e.target as HTMLInputElement).files;*/}\r\n                  {/*      if (files) {*/}\r\n                  {/*        void uploadFiles(files, currentPrefix, 'folder');*/}\r\n                  {/*      }*/}\r\n                  {/*    };*/}\r\n                  {/*    input.click();*/}\r\n                  {/*  }}*/}\r\n                  {/*  disabled={uploadType !== null || (Boolean(displayPrefixes) && !currentPrefix)}*/}\r\n                  {/*>*/}\r\n                  {/*  {uploadType === 'folder' ? (*/}\r\n                  {/*    <>*/}\r\n                  {/*      <Loader2 className=\"h-4 w-4 animate-spin mr-2 s3-explr-loader\" />*/}\r\n                  {/*      Đang tải lên...*/}\r\n                  {/*    </>*/}\r\n                  {/*  ) : (*/}\r\n                  {/*    <>*/}\r\n                  {/*      <FolderIcon className=\"h-4 w-4 s3-explr-folder-icon\" />*/}\r\n                  {/*      Tải lên thư mục*/}\r\n                  {/*    </>*/}\r\n                  {/*  )}*/}\r\n                  {/*</Button>*/}\r\n\r\n                  {currentJob ? (\r\n                    <TooltipProvider delayDuration={0}>\r\n                      <Tooltip>\r\n                        <TooltipTrigger asChild>\r\n                          <Button\r\n                            variant=\"outline\"\r\n                            size=\"sm\"\r\n                            className=\"flex items-center gap-2 s3-explr-add-website-btn cursor-pointer\"\r\n                            onClick={(e) => {\r\n                              // Check if click is on stop icon area\r\n                              const target = e.target as HTMLElement;\r\n                              if (target.closest('.stop-icon-wrapper')) {\r\n                                e.stopPropagation();\r\n                                void stopCurrentJob();\r\n                              } else {\r\n                                setIsCrawlProgressDialogOpen(true);\r\n                              }\r\n                            }}\r\n                          >\r\n                            <Loader2 className=\"h-4 w-4 animate-spin s3-explr-loader\" />\r\n                            {(() => {\r\n                              const hours = Math.floor(elapsedTime / 3600);\r\n                              const mins = Math.floor((elapsedTime % 3600) / 60);\r\n                              const secs = elapsedTime % 60;\r\n                              const timeStr =\r\n                                hours > 0\r\n                                  ? `${hours}h${mins}m${secs}s`\r\n                                  : mins > 0\r\n                                    ? `${mins}m${secs}s`\r\n                                    : `${secs}s`;\r\n\r\n                              // Get status text based on crawl state\r\n                              const status = currentJob?.status;\r\n                              let statusText = 'Đang xử lý';\r\n\r\n                              if (!status || (status.total === 0 && status.completed === 0)) {\r\n                                statusText = 'Đang khởi tạo';\r\n                              } else if (status.status === 'completed' && status.isProcessing) {\r\n                                statusText = 'Đang lưu dữ liệu';\r\n                              } else if (status.status === 'scraping') {\r\n                                statusText = status.isProcessing\r\n                                  ? 'Đang thu thập'\r\n                                  : 'Đang quét website';\r\n                              }\r\n\r\n                              return `${statusText} (${timeStr})`;\r\n                            })()}\r\n                            <span\r\n                              className=\"stop-icon-wrapper ml-1 hover:bg-red-100 rounded p-1 transition-colors\"\r\n                              onClick={(e) => {\r\n                                e.stopPropagation();\r\n                                void stopCurrentJob();\r\n                              }}\r\n                            >\r\n                              <StopIcon className=\"h-4 w-4 text-red-600\" />\r\n                            </span>\r\n                          </Button>\r\n                        </TooltipTrigger>\r\n                        {currentJob.status && (\r\n                          <TooltipContent side=\"right\" sideOffset={5}>\r\n                            <div className=\"space-y-1 p-2 max-w-md break-words\">\r\n                              <p className=\"font-semibold\">Đang thu thập {currentJob?.url}</p>\r\n                              <p>\r\n                                Tiến độ: {currentJob?.status.completed}/{currentJob?.status.total}{' '}\r\n                                trang\r\n                              </p>\r\n                              <p>\r\n                                Thời gian:{' '}\r\n                                {(() => {\r\n                                  const hours = Math.floor(elapsedTime / 3600);\r\n                                  const mins = Math.floor((elapsedTime % 3600) / 60);\r\n                                  const secs = elapsedTime % 60;\r\n                                  return hours > 0\r\n                                    ? `${hours}h${mins}m${secs}s`\r\n                                    : mins > 0\r\n                                      ? `${mins}m${secs}s`\r\n                                      : `${secs}s`;\r\n                                })()}\r\n                              </p>\r\n                              <p>\r\n                                Trạng thái:{' '}\r\n                                {currentJob?.status.status === 'scraping'\r\n                                  ? 'Đang thu thập'\r\n                                  : currentJob?.status.status === 'completed'\r\n                                    ? 'Hoàn thành'\r\n                                    : 'Thất bại'}\r\n                              </p>\r\n                              <p className=\"text-xs text-gray-400 mt-2\">Nhấn để xem chi tiết</p>\r\n                            </div>\r\n                          </TooltipContent>\r\n                        )}\r\n                      </Tooltip>\r\n                    </TooltipProvider>\r\n                  ) : (\r\n                    !idCreator && (\r\n                      <Dialog open={isWebsiteDialogOpen} onOpenChange={setIsWebsiteDialogOpen}>\r\n                        <DialogTrigger asChild>\r\n                          {/*<Button*/}\r\n                          {/*  variant=\"outline\"*/}\r\n                          {/*  size=\"sm\"*/}\r\n                          {/*  className=\"flex items-center gap-2 s3-explr-add-website-btn\"*/}\r\n                          {/*  disabled={Boolean(displayPrefixes) && !currentPrefix}*/}\r\n                          {/*>*/}\r\n                          {/*  <GlobeAltIcon className=\"h-4 w-4 s3-explr-globe-icon\" />*/}\r\n                          {/*  Thêm website*/}\r\n                          {/*</Button>*/}\r\n                        </DialogTrigger>\r\n                        <DialogContent className=\"s3-explr-dialog-content max-h-[80vh] overflow-y-auto\">\r\n                          <DialogHeader className=\"s3-explr-dialog-header\">\r\n                            <DialogTitle className=\"s3-explr-dialog-title\">\r\n                              Thêm website\r\n                            </DialogTitle>\r\n                            <DialogDescription className=\"s3-explr-dialog-description\">\r\n                              Nhập URL website để thu thập và lưu trữ.\r\n                            </DialogDescription>\r\n                          </DialogHeader>\r\n                          <div className=\"space-y-4 py-4 s3-explr-dialog-body\">\r\n                            <div className=\"space-y-2 s3-explr-input-group\">\r\n                              <Label htmlFor=\"websiteUrl\" className=\"s3-explr-label\">\r\n                                URL Website\r\n                              </Label>\r\n                              <Input\r\n                                id=\"websiteUrl\"\r\n                                value={websiteUrl}\r\n                                onChange={(e) => {\r\n                                  setWebsiteUrl(e.target.value);\r\n                                  // Real-time validation: check if URL starts with https://\r\n                                  if (\r\n                                    e.target.value &&\r\n                                    !e.target.value.trim().startsWith('https://')\r\n                                  ) {\r\n                                    setWebsiteUrlError('URL phải bắt đầu với https://');\r\n                                  } else {\r\n                                    setWebsiteUrlError('');\r\n                                  }\r\n                                }}\r\n                                placeholder=\"https://example.com\"\r\n                                type=\"url\"\r\n                                disabled={isCrawling}\r\n                                className=\"s3-explr-input\"\r\n                              />\r\n                              {websiteUrlError && (\r\n                                <p className=\"text-xs text-red-500\">{websiteUrlError}</p>\r\n                              )}\r\n                            </div>\r\n\r\n                            {/* S3 Folder Selection Section - Tree Selector */}\r\n                            <div className=\"space-y-2 s3-explr-input-group border rounded-lg p-3 border-red-300\">\r\n                              <S3FolderTreeSelector\r\n                                apiBaseUrl={apiBaseUrl}\r\n                                value={selectedS3Folder}\r\n                                onChange={(value) => setSelectedS3Folder(value)}\r\n                                label=\"Thư mục lưu trữ trong S3\"\r\n                                required\r\n                                showSelectedInfo\r\n                              />\r\n                            </div>\r\n\r\n                            <div className=\"space-y-2 s3-explr-input-group\">\r\n                              <div className=\"flex items-center justify-between\">\r\n                                <Label htmlFor=\"crawlLimit\" className=\"s3-explr-label\">\r\n                                  Số trang đồng bộ\r\n                                </Label>\r\n                              </div>\r\n                            </div>\r\n                            <div className=\"space-y-2 s3-explr-input-group\">\r\n                              <p className=\"text-xs text-gray-500 leading-relaxed\">\r\n                                Khi bật, hệ thống sẽ tự động phân tích URL và thu thập tất cả các\r\n                                liên kết có prefix giống với URL gốc (ví dụ: news → thu thập news-1,\r\n                                news-2, news-3...).\r\n                              </p>\r\n                              <Input\r\n                                id=\"crawlLimit\"\r\n                                value={crawlLimit}\r\n                                onChange={(e) => {\r\n                                  const value = e.target.value;\r\n                                  if (/^\\d*$/.test(value)) {\r\n                                    // Only allow digits\r\n                                    setCrawlLimit(value);\r\n                                  }\r\n                                }}\r\n                                placeholder=\"1\"\r\n                                type=\"text\"\r\n                                disabled={isCrawling}\r\n                                className=\"s3-explr-input\"\r\n                              />\r\n                            </div>\r\n                            <div className=\"space-y-2 s3-explr-input-group\">\r\n                              <p className=\"text-xs text-gray-500 leading-relaxed\">\r\n                                Khi bật, hệ thống sẽ tự động phát hiện URL có phân trang (ví dụ:{' '}\r\n                                <code className=\"bg-gray-100 px-1 rounded\">?page=1</code>) và crawl\r\n                                các trang tiếp theo (page=2, page=3, ...).\r\n                              </p>\r\n                              <Input\r\n                                id=\"maxPagesToCrawl\"\r\n                                value={maxPagesToCrawl}\r\n                                onChange={(e) => {\r\n                                  const value = e.target.value;\r\n                                  if (/^\\d*$/.test(value)) {\r\n                                    setMaxPagesToCrawl(value);\r\n                                  }\r\n                                }}\r\n                                placeholder=\"10\"\r\n                                type=\"text\"\r\n                                disabled={isCrawling}\r\n                                className=\"s3-explr-input\"\r\n                              />\r\n                              <p className=\"text-xs text-gray-500\">\r\n                                Số trang tối đa sẽ crawl (mặc định: 10)\r\n                              </p>\r\n                            </div>\r\n                            <div className=\"space-y-2 s3-explr-input-group\">\r\n                              <Label htmlFor=\"maxDepth\" className=\"s3-explr-label\">\r\n                                Độ sâu thu thập\r\n                              </Label>\r\n                              <Input\r\n                                id=\"maxDepth\"\r\n                                value={maxDepth}\r\n                                onChange={(e) => {\r\n                                  const value = e.target.value;\r\n                                  if (/^\\d*$/.test(value)) {\r\n                                    // Only allow digits\r\n                                    setMaxDepth(value);\r\n                                  }\r\n                                }}\r\n                                placeholder=\"10\"\r\n                                type=\"text\"\r\n                                disabled={isCrawling}\r\n                                className=\"s3-explr-input\"\r\n                              />\r\n                            </div>\r\n                          </div>\r\n                          <DialogFooter className=\"s3-explr-dialog-footer\">\r\n                            <Button\r\n                              variant=\"outline\"\r\n                              onClick={() => {\r\n                                setIsWebsiteDialogOpen(false);\r\n                                setWebsiteUrl('');\r\n                                setCrawlLimit('10');\r\n                                setMaxDepth('2');\r\n                                setMaxPagesToCrawl('10');\r\n                              }}\r\n                              disabled={isCrawling}\r\n                              className=\"s3-explr-cancel-btn\"\r\n                            >\r\n                              Hủy\r\n                            </Button>\r\n                            {currentJob ? (\r\n                              <TooltipProvider delayDuration={0}>\r\n                                <Tooltip>\r\n                                  <TooltipTrigger asChild>\r\n                                    <span>\r\n                                      <Button disabled className=\"s3-explr-crawl-btn\">\r\n                                        <Loader2 className=\"mr-2 h-4 w-4 animate-spin s3-explr-loader\" />\r\n                                        Đang thu thập...\r\n                                      </Button>\r\n                                    </span>\r\n                                  </TooltipTrigger>\r\n                                  <TooltipContent side=\"top\" sideOffset={5}>\r\n                                    Đang có một tiến trình thu thập đang chạy. Vui lòng chờ hoàn\r\n                                    thành trước khi bắt đầu mới.\r\n                                  </TooltipContent>\r\n                                </Tooltip>\r\n                              </TooltipProvider>\r\n                            ) : (\r\n                              <Button\r\n                                onClick={() => {\r\n                                  // Validate URL starts with https://\r\n                                  if (!websiteUrl.trim().startsWith('https://')) {\r\n                                    toast({\r\n                                      title: 'Lỗi',\r\n                                      description: 'URL phải bắt đầu với https://',\r\n                                      variant: 'destructive',\r\n                                    });\r\n                                    return;\r\n                                  }\r\n\r\n                                  if (selectedS3Folder) {\r\n                                    void crawlWebsite(\r\n                                      websiteUrl.trim(),\r\n                                      parseInt(crawlLimit) || 1,\r\n                                      parseInt(maxDepth) || 10,\r\n                                      parseInt(maxPagesToCrawl) || 10,\r\n                                    );\r\n                                  }\r\n                                }}\r\n                                disabled={\r\n                                  isCrawling ||\r\n                                  !websiteUrl.trim() ||\r\n                                  !websiteUrl.trim().startsWith('https://') ||\r\n                                  !selectedS3Folder ||\r\n                                  isFetchingFolders\r\n                                }\r\n                                className=\"s3-explr-crawl-btn\"\r\n                              >\r\n                                {isCrawling ? (\r\n                                  <>\r\n                                    <Loader2 className=\"mr-2 h-4 w-4 animate-spin s3-explr-loader\" />\r\n                                    Đang thu thập...\r\n                                  </>\r\n                                ) : (\r\n                                  'Bắt đầu thu thập'\r\n                                )}\r\n                              </Button>\r\n                            )}\r\n                          </DialogFooter>\r\n                        </DialogContent>\r\n                      </Dialog>\r\n                    )\r\n                  )}\r\n\r\n                  {currentPrefix.startsWith('BKTTW/') && (\r\n                    <TooltipProvider delayDuration={0}>\r\n                      <Tooltip>\r\n                        <TooltipTrigger asChild>\r\n                          <Button\r\n                            variant=\"outline\"\r\n                            size=\"sm\"\r\n                            className=\"flex items-center gap-2 s3-explr-add-website-btn\"\r\n                            disabled={Boolean(displayPrefixes) && !currentPrefix}\r\n                            onClick={handleExportReport}\r\n                          >\r\n                            {isLoadingHandleExportReport && (\r\n                              <ArrowPathIcon\r\n                                className={`h-4 w-4 s3-explr-refresh-icon ${isLoadingHandleExportReport ? 'animate-spin' : ''}`}\r\n                              />\r\n                            )}\r\n                            Xuất báo cáo\r\n                          </Button>\r\n                        </TooltipTrigger>\r\n                        {currentJob?.status && (\r\n                          <TooltipContent side=\"right\" sideOffset={5}>\r\n                            <div className=\"space-y-1 p-2\">\r\n                              <p className=\"font-semibold\">Đang thu thập {currentJob!.url}</p>\r\n                              <p>\r\n                                Tiến độ: {currentJob!.status.completed}/{currentJob!.status.total}{' '}\r\n                                trang\r\n                              </p>\r\n                              <p>\r\n                                Thời gian:{' '}\r\n                                {(() => {\r\n                                  const hours = Math.floor(elapsedTime / 3600);\r\n                                  const mins = Math.floor((elapsedTime % 3600) / 60);\r\n                                  const secs = elapsedTime % 60;\r\n                                  return hours > 0\r\n                                    ? `${hours}h${mins}m${secs}s`\r\n                                    : mins > 0\r\n                                      ? `${mins}m${secs}s`\r\n                                      : `${secs}s`;\r\n                                })()}\r\n                              </p>\r\n                              <p>\r\n                                Trạng thái:{' '}\r\n                                {currentJob!.status.status === 'scraping'\r\n                                  ? 'Đang thu thập'\r\n                                  : currentJob!.status.status === 'completed'\r\n                                    ? 'Hoàn thành'\r\n                                    : 'Thất bại'}\r\n                              </p>\r\n                            </div>\r\n                          </TooltipContent>\r\n                        )}\r\n                      </Tooltip>\r\n                    </TooltipProvider>\r\n                  )}\r\n                </div>\r\n              )}\r\n\r\n              {currentPrefix.startsWith('BKTTW/') && (\r\n                <TooltipProvider delayDuration={0}>\r\n                  <Tooltip>\r\n                    <TooltipTrigger asChild>\r\n                      <Button\r\n                        variant=\"outline\"\r\n                        size=\"sm\"\r\n                        className=\"flex items-center gap-2 s3-explr-add-website-btn\"\r\n                        disabled={Boolean(displayPrefixes) && !currentPrefix}\r\n                        onClick={handleExportReport}\r\n                      >\r\n                        {isLoadingHandleExportReport && (\r\n                          <ArrowPathIcon\r\n                            className={`h-4 w-4 s3-explr-refresh-icon ${isLoadingHandleExportReport ? 'animate-spin' : ''}`}\r\n                          />\r\n                        )}\r\n                        Xuất báo cáo\r\n                      </Button>\r\n                    </TooltipTrigger>\r\n                    {isLoadingHandleExportReport && (\r\n                      <TooltipContent sideOffset={5}>Đang xuất báo cáo</TooltipContent>\r\n                    )}\r\n                  </Tooltip>\r\n                </TooltipProvider>\r\n              )}\r\n\r\n              <div className=\"flex items-center gap-4\">\r\n                {showOneDriveModal && (\r\n                  <Modal.Root open={showOneDriveModal} onOpenChange={setShowOneDriveModal}>\r\n                    <Modal.Overlay className=\"fixed inset-0 bg-black bg-opacity-50 z-50\" />\r\n                    <Modal.Content className=\"fixed top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 bg-white p-6 rounded-lg shadow-lg w-[700px] max-w-[90vw] max-h-[80vh] z-50 flex flex-col\">\r\n                      <div className=\"relative\">\r\n                        <Modal.Close asChild>\r\n                          <button\r\n                            className=\"absolute top-2 right-2 text-gray-600\"\r\n                            onClick={handleCloseOneDriveModal}\r\n                          >\r\n                            ✖\r\n                          </button>\r\n                        </Modal.Close>\r\n                        <h2 className=\"text-lg font-semibold\">My OneDrive</h2>\r\n                        <Breadcrumb className=\"onedrive-breadcrumb\">\r\n                          <BreadcrumbList className=\"onedrive-breadcrumb-list\">\r\n                            {breadcrumbOneDrive.map((item, index) => (\r\n                              <div key={index} className=\"flex items-center\">\r\n                                {index > 0 && (\r\n                                  <BreadcrumbSeparator className=\"onedrive-breadcrumb-separator\" />\r\n                                )}\r\n                                <BreadcrumbItem className=\"onedrive-breadcrumb-item\">\r\n                                  <BreadcrumbLink\r\n                                    onClick={() => handleOneDriveFolderNavigation(index)}\r\n                                    className=\"cursor-pointer onedrive-breadcrumb-link\"\r\n                                  >\r\n                                    {item.name}\r\n                                  </BreadcrumbLink>\r\n                                </BreadcrumbItem>\r\n                              </div>\r\n                            ))}\r\n                          </BreadcrumbList>\r\n                        </Breadcrumb>\r\n                      </div>\r\n                      <div className=\"space-y-2 mt-4 flex-1 overflow-y-auto\">\r\n                        {isLoadingOneDrive ? (\r\n                          <div className=\"text-sm text-gray-500\">\r\n                            Đang tải nội dung thư mục... Vui lòng đợi.\r\n                          </div>\r\n                        ) : (\r\n                          <>\r\n                            {[...folders, ...files].length > 0 ? (\r\n                              [...folders, ...files].map((item) => {\r\n                                const selectionState = getOneDriveItemSelectionState(\r\n                                  item,\r\n                                  selectedOneDriveItems,\r\n                                  excludedOneDriveChildIds,\r\n                                  breadcrumbOneDrive,\r\n                                );\r\n                                return (\r\n                                  <div\r\n                                    key={item.id}\r\n                                    className={`flex items-center gap-3 p-2 rounded-lg hover:bg-gray-100 ${\r\n                                      selectionState === true || selectionState === 'indeterminate'\r\n                                        ? 'bg-blue-100'\r\n                                        : ''\r\n                                    }`}\r\n                                  >\r\n                                    <Checkbox\r\n                                      checked={selectionState}\r\n                                      onCheckedChange={() => handleOneDriveSelectItem(item)}\r\n                                      className=\"cursor-pointer\"\r\n                                    />\r\n\r\n                                    {item.isFolder ? (\r\n                                      <FolderIcon\r\n                                        className=\"text-blue-500 w-5 h-5 cursor-pointer\"\r\n                                        onClick={() => fetchOneDriveFiles(item.id, item.name)}\r\n                                      />\r\n                                    ) : (\r\n                                      <ArrowUpTrayIcon className=\"text-gray-500 w-5 h-5\" />\r\n                                    )}\r\n\r\n                                    <div className=\"flex-1\">\r\n                                      <div\r\n                                        className={`font-medium ${item.isFolder ? 'cursor-pointer text-blue-600' : ''}`}\r\n                                        onClick={() => {\r\n                                          if (item.isFolder) {\r\n                                            fetchOneDriveFiles(item.id, item.name);\r\n                                          } else {\r\n                                            handleOneDriveSelectItem(item);\r\n                                          }\r\n                                        }}\r\n                                      >\r\n                                        {item.name}\r\n                                      </div>\r\n\r\n                                      {!item.isFolder && (\r\n                                        <div className=\"text-xs text-gray-500\">\r\n                                          {formatBytes(item.size)} •{' '}\r\n                                          {formatDate(item.lastModified.toISOString())}\r\n                                        </div>\r\n                                      )}\r\n                                    </div>\r\n                                  </div>\r\n                                );\r\n                              })\r\n                            ) : (\r\n                              <div className=\"text-sm text-gray-500\">\r\n                                Không có thư mục hoặc tệp nào.\r\n                              </div>\r\n                            )}\r\n                          </>\r\n                        )}\r\n                      </div>\r\n\r\n                      <div className=\"mt-4 flex flex-wrap justify-end gap-2\">\r\n                        <div className=\"flex justify-end\">\r\n                          <button\r\n                            onClick={() => setIsOneDriveLogoutConfirmOpen(true)}\r\n                            className=\"bottom-4 left-4 text-gray-600 hover:text-gray-800\"\r\n                            title=\"Đăng xuất OneDrive\"\r\n                          >\r\n                            <svg\r\n                              xmlns=\"http://www.w3.org/2000/svg\"\r\n                              width=\"20\"\r\n                              height=\"20\"\r\n                              viewBox=\"0 0 24 24\"\r\n                              fill=\"none\"\r\n                              stroke=\"currentColor\"\r\n                              strokeWidth=\"2\"\r\n                              strokeLinecap=\"round\"\r\n                              strokeLinejoin=\"round\"\r\n                            >\r\n                              <path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\" />\r\n                              <polyline points=\"16 17 21 12 16 7\" />\r\n                              <line x1=\"21\" y1=\"12\" x2=\"9\" y2=\"12\" />\r\n                            </svg>\r\n                          </button>\r\n                          <Button\r\n                            className={`absolute left-4 flex items-center gap-2 px-3 py-2 rounded-md text-white transition-colors ${\r\n                              isAutoUpdateKB\r\n                                ? 'bg-green-500 hover:bg-green-600'\r\n                                : 'bg-gray-400 hover:bg-gray-500'\r\n                            }`}\r\n                            onClick={() => setIsAutoUpdateKB((prev) => !prev)}\r\n                          >\r\n                            <svg\r\n                              xmlns=\"http://www.w3.org/2000/svg\"\r\n                              width=\"18\"\r\n                              height=\"18\"\r\n                              viewBox=\"0 0 24 24\"\r\n                              fill=\"none\"\r\n                              stroke=\"currentColor\"\r\n                              strokeWidth=\"2\"\r\n                              strokeLinecap=\"round\"\r\n                              strokeLinejoin=\"round\"\r\n                            >\r\n                              <rect x=\"2\" y=\"6\" width=\"20\" height=\"12\" rx=\"6\" ry=\"6\" />\r\n                              <circle\r\n                                cx={isAutoUpdateKB ? '16' : '8'}\r\n                                cy=\"12\"\r\n                                r=\"2\"\r\n                                fill=\"currentColor\"\r\n                              />\r\n                            </svg>\r\n                            <span className=\"text-sm\">Tự động cập nhật KB</span>\r\n                          </Button>\r\n                        </div>\r\n\r\n                        <Button\r\n                          onClick={() => {\r\n                            syncOneDriveToS3(\r\n                              selectedOneDriveItems,\r\n                              currentPrefix,\r\n                              excludedOneDriveChildIds,\r\n                            );\r\n                            handleCloseOneDriveModal();\r\n                          }}\r\n                          className=\"bg-[#1682fe] hover:bg-[#0f6cd4] text-white rounded-md px-4 py-2 transition-colors\"\r\n                          disabled={selectedOneDriveItems.length === 0}\r\n                        >\r\n                          Đồng bộ\r\n                        </Button>\r\n                      </div>\r\n                    </Modal.Content>\r\n                  </Modal.Root>\r\n                )}\r\n\r\n                <Modal.Root\r\n                  open={isOneDriveLogoutConfirmOpen}\r\n                  onOpenChange={setIsOneDriveLogoutConfirmOpen}\r\n                >\r\n                  <Modal.Overlay className=\"fixed inset-0 bg-black bg-opacity-50 z-[90]\" />\r\n                  <Modal.Content className=\"fixed top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 bg-white p-6 rounded-lg shadow-lg w-[400px] max-w-[90vw] z-[100]\">\r\n                    <h3 className=\"text-lg font-semibold mb-4\">Xác nhận đăng xuất</h3>\r\n                    <p className=\"text-gray-600 mb-6\">\r\n                      Bạn có chắc chắn muốn đăng xuất khỏi OneDrive?\r\n                    </p>\r\n                    <div className=\"flex justify-end gap-2\">\r\n                      <Button\r\n                        variant=\"outline\"\r\n                        onClick={() => setIsOneDriveLogoutConfirmOpen(false)}\r\n                      >\r\n                        Hủy\r\n                      </Button>\r\n                      <Button\r\n                        variant=\"destructive\"\r\n                        onClick={() => {\r\n                          logoutOneDrive();\r\n                          setIsOneDriveLogoutConfirmOpen(false);\r\n                        }}\r\n                      >\r\n                        Đăng xuất\r\n                      </Button>\r\n                    </div>\r\n                  </Modal.Content>\r\n                </Modal.Root>\r\n                {isSharePointModalOpen && (\r\n                  <Modal.Root open={isSharePointModalOpen} onOpenChange={setIsSharePointModalOpen}>\r\n                    <Modal.Overlay className=\"fixed inset-0 bg-black bg-opacity-50 z-50\" />\r\n                    <Modal.Content className=\"fixed top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 bg-white p-6 rounded-lg shadow-lg w-[700px] max-w-[90vw] max-h-[80vh] z-50 flex flex-col\">\r\n                      <div className=\"relative\">\r\n                        <Modal.Close asChild>\r\n                          <button\r\n                            className=\"absolute top-2 right-2 text-gray-600\"\r\n                            onClick={handleCloseSharePointModal}\r\n                          >\r\n                            ✖\r\n                          </button>\r\n                        </Modal.Close>\r\n                        <div className=\"flex items-center gap-2\">\r\n                          {selectedSite && (\r\n                            <button\r\n                              onClick={() => setSelectedSite(null)}\r\n                              className=\"text-gray-600 hover:text-gray-800\"\r\n                            >\r\n                              <svg\r\n                                xmlns=\"http://www.w3.org/2000/svg\"\r\n                                width=\"20\"\r\n                                height=\"20\"\r\n                                viewBox=\"0 0 24 24\"\r\n                                fill=\"none\"\r\n                                stroke=\"currentColor\"\r\n                                strokeWidth=\"2\"\r\n                                strokeLinecap=\"round\"\r\n                                strokeLinejoin=\"round\"\r\n                              >\r\n                                <path d=\"M19 12H5M12 19l-7-7 7-7\" />\r\n                              </svg>\r\n                            </button>\r\n                          )}\r\n                          <h2 className=\"text-lg font-semibold\">My SharePoint</h2>\r\n                        </div>\r\n                        {selectedSite && (\r\n                          <Breadcrumb className=\"sharepoint-breadcrumb\">\r\n                            <BreadcrumbList className=\"sharepoint-breadcrumb-list\">\r\n                              {sharePointBreadcrumbs.map((item, index) => (\r\n                                <div key={index} className=\"flex items-center\">\r\n                                  {index > 0 && (\r\n                                    <BreadcrumbSeparator className=\"sharepoint-breadcrumb-separator\" />\r\n                                  )}\r\n                                  <BreadcrumbItem className=\"sharepoint-breadcrumb-item\">\r\n                                    <BreadcrumbLink\r\n                                      onClick={() => handleSharePointFolderNavigation(index)}\r\n                                      className=\"cursor-pointer sharepoint-breadcrumb-link\"\r\n                                    >\r\n                                      {item.name}\r\n                                    </BreadcrumbLink>\r\n                                  </BreadcrumbItem>\r\n                                </div>\r\n                              ))}\r\n                            </BreadcrumbList>\r\n                          </Breadcrumb>\r\n                        )}\r\n                      </div>\r\n\r\n                      {/* Vùng danh sách file/folder có thể cuộn */}\r\n                      <div className=\"space-y-2 mt-4 flex-1 overflow-y-auto\">\r\n                        {isLoadingSharePoint ? (\r\n                          <div className=\"text-sm text-gray-500\">\r\n                            Đang tải nội dung thư mục... Vui lòng đợi.\r\n                          </div>\r\n                        ) : selectedSite ? (\r\n                          [...sharePointFolders, ...sharePointFiles].length === 0 ? (\r\n                            <div className=\"text-sm text-gray-500\">\r\n                              Không có thư mục hoặc tệp nào.\r\n                            </div>\r\n                          ) : (\r\n                            [...sharePointFolders, ...sharePointFiles].map((item) => {\r\n                              const selectionState = getSharePointItemSelectionState(\r\n                                item,\r\n                                selectedSharePointItems,\r\n                                excludedSharePointChildIds,\r\n                                sharePointBreadcrumbs,\r\n                                sharePointCache,\r\n                              );\r\n\r\n                              return (\r\n                                <div\r\n                                  key={item.id}\r\n                                  className={`flex items-center gap-3 p-2 rounded-lg hover:bg-gray-100 ${\r\n                                    selectionState === true || selectionState === 'indeterminate'\r\n                                      ? 'bg-blue-100'\r\n                                      : ''\r\n                                  }`}\r\n                                >\r\n                                  <Checkbox\r\n                                    checked={selectionState}\r\n                                    onCheckedChange={() => handleSharePointSelectItem(item)}\r\n                                    className=\"cursor-pointer\"\r\n                                  />\r\n                                  {item.isFolder ? (\r\n                                    <FolderIcon\r\n                                      className=\"text-blue-500 w-5 h-5 cursor-pointer\"\r\n                                      onClick={() =>\r\n                                        fetchSharePointFiles(\r\n                                          item.id,\r\n                                          item.name,\r\n                                          selectedSite?.hostname || '',\r\n                                          selectedSite?.sitePath || '',\r\n                                        )\r\n                                      }\r\n                                    />\r\n                                  ) : (\r\n                                    <ArrowUpTrayIcon className=\"text-gray-500 w-5 h-5\" />\r\n                                  )}\r\n                                  <div className=\"flex-1\">\r\n                                    <div\r\n                                      className={`font-medium ${item.isFolder ? 'cursor-pointer text-blue-600' : ''}`}\r\n                                      onClick={() => {\r\n                                        if (item.isFolder) {\r\n                                          fetchSharePointFiles(\r\n                                            item.id,\r\n                                            item.name,\r\n                                            selectedSite?.hostname || '',\r\n                                            selectedSite?.sitePath || '',\r\n                                          );\r\n                                        }\r\n                                      }}\r\n                                    >\r\n                                      {item.name}\r\n                                    </div>\r\n                                    {!item.isFolder && (\r\n                                      <div className=\"text-xs text-gray-500\">\r\n                                        {formatBytes(item.size)} •{' '}\r\n                                        {item.lastModified.toLocaleString()}\r\n                                      </div>\r\n                                    )}\r\n                                  </div>\r\n                                </div>\r\n                              );\r\n                            })\r\n                          )\r\n                        ) : (\r\n                          <div className=\"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 gap-6\">\r\n                            {sharePointSites.map((site) => (\r\n                              <div\r\n                                key={site.id}\r\n                                className=\"cursor-pointer bg-white shadow-md rounded-xl p-5 flex flex-col justify-center items-start transition-shadow duration-200 hover:shadow-lg border border-gray-100 min-h-[120px]\"\r\n                                style={{\r\n                                  overflow: 'hidden',\r\n                                  wordBreak: 'break-word',\r\n                                  textOverflow: 'ellipsis',\r\n                                  whiteSpace: 'normal',\r\n                                }}\r\n                                onClick={() => handleSelectSite(site)}\r\n                              >\r\n                                <div\r\n                                  className=\"font-bold text-lg mb-1 truncate w-full\"\r\n                                  title={site.name}\r\n                                >\r\n                                  {site.name}\r\n                                </div>\r\n                                <div\r\n                                  className=\"text-sm text-gray-500 truncate w-full\"\r\n                                  title={site.description}\r\n                                >\r\n                                  {site.description}\r\n                                </div>\r\n                              </div>\r\n                            ))}\r\n                          </div>\r\n                        )}\r\n                      </div>\r\n\r\n                      {/* Các nút hành động ở dưới cùng */}\r\n                      <div className=\"mt-4 flex flex-wrap justify-end gap-2\">\r\n                        {selectedSite && (\r\n                          <>\r\n                            <Button\r\n                              onClick={() => {\r\n                                syncSharePointToS3(\r\n                                  selectedSharePointItems,\r\n                                  currentPrefix,\r\n                                  excludedSharePointChildIds,\r\n                                );\r\n                                handleCloseSharePointModal();\r\n                              }}\r\n                              className=\"bg-[#1682fe] hover:bg-[#0f6cd4] text-white rounded-md px-4 py-2 transition-colors\"\r\n                              disabled={selectedSharePointItems.length === 0}\r\n                            >\r\n                              Đồng bộ\r\n                            </Button>\r\n                            <Button onClick={() => setSelectedSite(null)}>Quay lại</Button>\r\n                          </>\r\n                        )}\r\n                      </div>\r\n                      {selectedSite && (\r\n                        <button\r\n                          onClick={() => setIsAutoUpdateKB((prev) => !prev)}\r\n                          className={`absolute bottom-4 left-4 flex items-center gap-2 px-3 py-2 rounded-md text-white transition-colors ${\r\n                            isAutoUpdateKB\r\n                              ? 'bg-green-500 hover:bg-green-600'\r\n                              : 'bg-gray-400 hover:bg-gray-500'\r\n                          }`}\r\n                          title=\"Bật/tắt tự động cập nhật KB\"\r\n                        >\r\n                          <svg\r\n                            xmlns=\"http://www.w3.org/2000/svg\"\r\n                            width=\"18\"\r\n                            height=\"18\"\r\n                            viewBox=\"0 0 24 24\"\r\n                            fill=\"none\"\r\n                            stroke=\"currentColor\"\r\n                            strokeWidth=\"2\"\r\n                            strokeLinecap=\"round\"\r\n                            strokeLinejoin=\"round\"\r\n                          >\r\n                            <rect x=\"2\" y=\"6\" width=\"20\" height=\"12\" rx=\"6\" ry=\"6\" />\r\n                            <circle\r\n                              cx={isAutoUpdateKB ? '16' : '8'}\r\n                              cy=\"12\"\r\n                              r=\"2\"\r\n                              fill=\"currentColor\"\r\n                            />\r\n                          </svg>\r\n                          <span className=\"text-sm\">Tự động cập nhật KB</span>\r\n                        </button>\r\n                      )}\r\n                      {/* <button\r\n                        onClick={() => setIsSharePointLogoutConfirmOpen(true)}\r\n                        className=\"absolute bottom-4 left-4 text-gray-600 hover:text-gray-800\"\r\n                        title=\"Đăng xuất SharePoint\"\r\n                      >\r\n                        <svg\r\n                          xmlns=\"http://www.w3.org/2000/svg\"\r\n                          width=\"20\"\r\n                          height=\"20\"\r\n                          viewBox=\"0 0 24 24\"\r\n                          fill=\"none\"\r\n                          stroke=\"currentColor\"\r\n                          strokeWidth=\"2\"\r\n                          strokeLinecap=\"round\"\r\n                          strokeLinejoin=\"round\"\r\n                        >\r\n                          <path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\" />\r\n                          <polyline points=\"16 17 21 12 16 7\" />\r\n                          <line x1=\"21\" y1=\"12\" x2=\"9\" y2=\"12\" />\r\n                        </svg>\r\n                      </button> */}\r\n                    </Modal.Content>\r\n                  </Modal.Root>\r\n                )}\r\n\r\n                {/* SharePoint Logout Confirmation Modal */}\r\n                <Modal.Root\r\n                  open={isSharePointLogoutConfirmOpen}\r\n                  onOpenChange={setIsSharePointLogoutConfirmOpen}\r\n                >\r\n                  <Modal.Overlay className=\"fixed inset-0 bg-black bg-opacity-50 z-[60]\" />\r\n                  <Modal.Content className=\"fixed top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 bg-white p-6 rounded-lg shadow-lg w-[400px] max-w-[90vw] z-[60]\">\r\n                    <h3 className=\"text-lg font-semibold mb-4\">Xác nhận đăng xuất</h3>\r\n                    <p className=\"text-gray-600 mb-6\">\r\n                      Bạn có chắc chắn muốn đăng xuất khỏi SharePoint?\r\n                    </p>\r\n                    <div className=\"flex justify-end gap-2\">\r\n                      <Button\r\n                        variant=\"outline\"\r\n                        onClick={() => setIsSharePointLogoutConfirmOpen(false)}\r\n                      >\r\n                        Hủy\r\n                      </Button>\r\n                      <Button\r\n                        variant=\"destructive\"\r\n                        onClick={() => {\r\n                          logoutSharePoint();\r\n                          setIsSharePointLogoutConfirmOpen(false);\r\n                        }}\r\n                      >\r\n                        Đăng xuất\r\n                      </Button>\r\n                    </div>\r\n                  </Modal.Content>\r\n                </Modal.Root>\r\n              </div>\r\n\r\n              <Dialog\r\n                open={!!showInfoFlowsDialogs}\r\n                onOpenChange={(open) => {\r\n                  if (!open) {\r\n                    setShowInfoFlowsDialogs(false);\r\n                    setDataFlowModels([]);\r\n                    setFolderToShowFlow('');\r\n                  }\r\n                }}\r\n              >\r\n                <DialogContent className=\"max-h-[700px] pb-3 px-1 s3-explr-input-group max-w-5xl w-[90%] p-6 bg-white rounded-lg shadow-lg\">\r\n                  <DialogHeader className=\"s3-explr-dialog-header\">\r\n                    <DialogTitle className=\"s3-explr-dialog-title\">\r\n                      <h3 className=\"font-medium mb-2\">\r\n                        Danh sách flows đang sử dụng dữ liệu từ folder(\r\n                        <span className=\"font-bold\">{folderToShowFlow}</span>):{' '}\r\n                      </h3>\r\n                    </DialogTitle>\r\n                    <DialogDescription className=\"s3-explr-dialog-description\">\r\n                      {loadingFlowsDialogs ? (\r\n                        <div className=\"flex items-center justify-center py-4\">\r\n                          <Loader2 className=\"h-6 w-6 animate-spin\" />\r\n                          <span className=\"ml-2\">Đang tải thông tin flows...</span>\r\n                        </div>\r\n                      ) : (\r\n                        <div>\r\n                          {dataFlowModels &&\r\n                          Array.isArray(dataFlowModels) &&\r\n                          dataFlowModels.length > 0 ? (\r\n                            <div className=\"max-h-[400px] overflow-y-auto\">\r\n                              <table className=\"w-full border-collapse\">\r\n                                <thead>\r\n                                  <tr className=\"bg-gray-100\">\r\n                                    <th className=\"border border-gray-300 px-4 py-2 text-left\">\r\n                                      Tên Flow\r\n                                    </th>\r\n                                    <th className=\"border border-gray-300 px-4 py-2 text-left\">\r\n                                      KnowledgeBase Id\r\n                                    </th>\r\n                                    <th className=\"border border-gray-300 px-4 py-2 text-left\">\r\n                                      Loại\r\n                                    </th>\r\n                                    <th className=\"border border-gray-300 px-4 py-2 text-left\">\r\n                                      Ngày tạo\r\n                                    </th>\r\n                                  </tr>\r\n                                </thead>\r\n                                <tbody>\r\n                                  {dataFlowModels.map((flow: any, index: number) => (\r\n                                    <tr\r\n                                      key={index}\r\n                                      className={index % 2 === 0 ? 'bg-white' : 'bg-gray-50'}\r\n                                    >\r\n                                      <td className=\"border border-gray-300 px-4 py-2\">\r\n                                        {flow.name}\r\n                                      </td>\r\n                                      <td className=\"border border-gray-300 px-4 py-2\">\r\n                                        {flow.KnowledgeBaseId}\r\n                                      </td>\r\n                                      <td className=\"border border-gray-300 px-4 py-2\">\r\n                                        {flow.type === 'MULTIAGENT' ? 'Agent Flow' : 'Chat Flow'}\r\n                                      </td>\r\n                                      <td className=\"border border-gray-300 px-4 py-2\">\r\n                                        {flow.createdDate\r\n                                          ? new Date(flow.createdDate).toLocaleString('vi-VN')\r\n                                          : 'N/A'}\r\n                                      </td>\r\n                                    </tr>\r\n                                  ))}\r\n                                </tbody>\r\n                              </table>\r\n                            </div>\r\n                          ) : (\r\n                            <div className=\"text-gray-500 italic py-2\">\r\n                              Không có flow nào sử dụng dữ liệu từ folder này\r\n                            </div>\r\n                          )}\r\n                        </div>\r\n                      )}\r\n                    </DialogDescription>\r\n                  </DialogHeader>\r\n                </DialogContent>\r\n              </Dialog>\r\n\r\n              <Dialog open={!!fileToDelete} onOpenChange={(open) => !open && setFileToDelete(null)}>\r\n                <DialogContent className=\"s3-explr-dialog-content\">\r\n                  <DialogHeader className=\"s3-explr-dialog-header\">\r\n                    <DialogTitle className=\"s3-explr-dialog-title\">Xác nhận xóa</DialogTitle>\r\n                    <DialogDescription className=\"s3-explr-dialog-description break-words whitespace-pre-wrap\">\r\n                      Bạn có chắc chắn muốn xóa{' '}\r\n                      <span className=\"font-medium break-all\">{fileToDelete?.name}</span>? Hành động\r\n                      này không thể hoàn tác.\r\n                    </DialogDescription>\r\n                  </DialogHeader>\r\n                  <DialogFooter className=\"s3-explr-dialog-footer\">\r\n                    <Button\r\n                      variant=\"outline\"\r\n                      onClick={() => setFileToDelete(null)}\r\n                      className=\"s3-explr-cancel-btn\"\r\n                    >\r\n                      Hủy\r\n                    </Button>\r\n                    <Button\r\n                      variant=\"destructive\"\r\n                      onClick={() => handleDelete(fileToDelete!)}\r\n                      disabled={isDeleting}\r\n                      className=\"s3-explr-confirm-delete-btn\"\r\n                    >\r\n                      {isDeleting ? (\r\n                        <>\r\n                          <Loader2 className=\"mr-2 h-4 w-4 animate-spin s3-explr-loader\" />\r\n                          Đang xóa...\r\n                        </>\r\n                      ) : (\r\n                        'Xóa'\r\n                      )}\r\n                    </Button>\r\n                  </DialogFooter>\r\n                </DialogContent>\r\n              </Dialog>\r\n\r\n              <Dialog\r\n                open={!!fileToRename}\r\n                onOpenChange={(open) => {\r\n                  if (!open) {\r\n                    setFileToRename(null);\r\n                    setMetadataForEdit(null);\r\n                    setNewName('');\r\n                    setFileContent('');\r\n                    setActiveTab('rename');\r\n                  }\r\n                }}\r\n              >\r\n                <DialogContent className=\"s3-explr-dialog-content max-w-5xl w-[90%]\">\r\n                  <DialogHeader className=\"s3-explr-dialog-header\">\r\n                    <DialogTitle className=\"s3-explr-dialog-title\">\r\n                      {fileToRename?.isFolder\r\n                        ? 'Đổi tên thư mục'\r\n                        : isTextFile(fileToRename!) || isImageFile(fileToRename)\r\n                          ? 'Quản lý tập tin'\r\n                          : 'Sửa metadata tập tin'}\r\n                    </DialogTitle>\r\n                  </DialogHeader>\r\n                  {fileToRename && (\r\n                    <Tabs\r\n                      value={activeTab}\r\n                      onValueChange={(value: any) =>\r\n                        setActiveTab(value as 'rename' | 'edit' | 'edit-metadata')\r\n                      }\r\n                    >\r\n                      <TabsList\r\n                        aria-checked={!isTextFile(fileToRename) && !isImageFile(fileToRename)}\r\n                        aria-disabled={fileToRename.isFolder}\r\n                        className=\"grid w-full grid-cols-3 aria-checked:grid-cols-2  aria-disabled:grid-cols-1\"\r\n                      >\r\n                        {!fileToRename.isFolder && (\r\n                          <>\r\n                            <TabsTrigger value=\"edit-metadata\">Sửa metadata file</TabsTrigger>\r\n                            {(isTextFile(fileToRename) || isImageFile(fileToRename)) && (\r\n                              <TabsTrigger value=\"edit\">\r\n                                {isImageFile(fileToRename) ? 'Sửa nội dung OCR' : 'Sửa nội dung'}\r\n                              </TabsTrigger>\r\n                            )}\r\n                          </>\r\n                        )}\r\n                        <TabsTrigger value=\"rename\">Đổi tên</TabsTrigger>\r\n                      </TabsList>\r\n                      <TabsContent value=\"rename\">\r\n                        <div className=\"space-y-4 py-4 s3-explr-dialog-body\">\r\n                          <div className=\"h-[70dvh] min-h-[500px] overflow-hidden overflow-y-auto pb-3 px-1 s3-explr-input-group\">\r\n                            <Label htmlFor=\"newName\" className=\"s3-explr-label\">\r\n                              Tên mới\r\n                            </Label>\r\n                            <Input\r\n                              id=\"newName\"\r\n                              value={newName}\r\n                              onChange={(e) => setNewName(e.target.value)}\r\n                              placeholder=\"Nhập tên mới\"\r\n                              disabled={isRenaming}\r\n                              className=\"s3-explr-input\"\r\n                            />\r\n                          </div>\r\n                        </div>\r\n                      </TabsContent>\r\n                      {!fileToRename.isFolder && (\r\n                        <>\r\n                          {(isTextFile(fileToRename) || isImageFile(fileToRename)) && (\r\n                            <TabsContent value=\"edit\">\r\n                              <div className=\"space-y-4 py-4\">\r\n                                {isLoadingContent ? (\r\n                                  <div className=\"flex items-center justify-center py-10\">\r\n                                    <Loader2 className=\"h-6 w-6 animate-spin text-muted-foreground\" />\r\n                                  </div>\r\n                                ) : (\r\n                                  <div className=\"max-h-[70dvh] overflow-auto rounded-md border px-4 py-3 bg-muted/30\">\r\n                                    <Label\r\n                                      htmlFor=\"content\"\r\n                                      className=\"block text-sm font-medium mb-2 text-muted-foreground\"\r\n                                    >\r\n                                      {isImageFile(fileToRename)\r\n                                        ? 'Nội dung OCR (đang chỉnh sửa nội dung OCR được trích xuất từ ảnh)'\r\n                                        : 'Nội dung tập tin'}\r\n                                    </Label>\r\n                                    <Textarea\r\n                                      id=\"content\"\r\n                                      value={fileContent}\r\n                                      onChange={(e) => setFileContent(e.target.value)}\r\n                                      placeholder={\r\n                                        isImageFile(fileToRename)\r\n                                          ? 'Chưa có nội dung OCR...'\r\n                                          : 'Nhập nội dung tập tin'\r\n                                      }\r\n                                      className=\"font-mono text-sm resize-none min-h-[200px] w-full\"\r\n                                      disabled={isSavingContent}\r\n                                      style={{ height: 'auto', maxHeight: '60vh' }}\r\n                                      rows={Math.max(10, fileContent.split('\\n').length + 1)}\r\n                                    />\r\n                                  </div>\r\n                                )}\r\n                              </div>\r\n                            </TabsContent>\r\n                          )}\r\n\r\n                          <TabsContent value=\"edit-metadata\">\r\n                            <div className=\"space-y-4 py-4\">\r\n                              {isLoadingContent ? (\r\n                                <div className=\"flex items-center justify-center py-4\">\r\n                                  <Loader2 className=\"h-6 w-6 animate-spin\" />\r\n                                </div>\r\n                              ) : (\r\n                                <div className=\"h-[70dvh] min-h-[500px] overflow-hidden overflow-y-auto pb-3 px-1\">\r\n                                  {metadataForEdit &&\r\n                                    typeof metadataForEdit === 'object' &&\r\n                                    Object.entries(metadataForEdit).map(([key, value], index) => {\r\n                                      // Check if this is a required Select field\r\n                                      const isProcessingStatus = key === 'processingStatus';\r\n                                      const isStatus = key === 'status';\r\n                                      const isRequired = [\r\n                                        'summary',\r\n                                        'issueDate',\r\n                                        'effectiveDate',\r\n                                        'processingStatus',\r\n                                        'status',\r\n                                      ].includes(key);\r\n\r\n                                      // Get the error message for this field\r\n                                      const fieldError = metadataErrors[key];\r\n\r\n                                      return (\r\n                                        <div key={index} className=\"pb-3 flex flex-col gap-2\">\r\n                                          <Label\r\n                                            htmlFor={key}\r\n                                            className=\"s3-explr-label flex items-center gap-1\"\r\n                                          >\r\n                                            {keyMapMetadata[key] || key}\r\n                                            {isRequired && <span className=\"text-red-500\">*</span>}\r\n                                            {isDisableField(key) && (\r\n                                              <PenOff className=\"h-[12px] w-[12px] text-red-500\" />\r\n                                            )}\r\n                                          </Label>\r\n\r\n                                          {/* ProcessingStatus - Select */}\r\n                                          {isProcessingStatus ? (\r\n                                            <div className=\"space-y-1\">\r\n                                              <Select\r\n                                                value={\r\n                                                  typeof value === 'string'\r\n                                                    ? value\r\n                                                    : JSON.stringify(value)\r\n                                                }\r\n                                                onValueChange={(newValue) => {\r\n                                                  const newMetadata = {\r\n                                                    ...metadataForEdit,\r\n                                                    [key]: newValue,\r\n                                                  };\r\n                                                  setMetadataForEdit(newMetadata);\r\n                                                }}\r\n                                                disabled={isSavingContent || isDisableField(key)}\r\n                                              >\r\n                                                <SelectTrigger className=\"s3-explr-input\">\r\n                                                  <SelectValue placeholder=\"Chọn trạng thái xử lý\" />\r\n                                                </SelectTrigger>\r\n                                                <SelectContent>\r\n                                                  <SelectItem value=\"phat_hanh\">\r\n                                                    Phát hành\r\n                                                  </SelectItem>\r\n                                                  <SelectItem value=\"da_phat_hanh\">\r\n                                                    Đã phát hành\r\n                                                  </SelectItem>\r\n                                                </SelectContent>\r\n                                              </Select>\r\n                                              {isRequired && fieldError && (\r\n                                                <p className=\"text-xs text-red-500\">{fieldError}</p>\r\n                                              )}\r\n                                            </div>\r\n                                          ) : // Status - Select\r\n                                          isStatus ? (\r\n                                            <div className=\"space-y-1\">\r\n                                              <Select\r\n                                                value={\r\n                                                  typeof value === 'string'\r\n                                                    ? value\r\n                                                    : JSON.stringify(value)\r\n                                                }\r\n                                                onValueChange={(newValue) => {\r\n                                                  const newMetadata = {\r\n                                                    ...metadataForEdit,\r\n                                                    [key]: newValue,\r\n                                                  };\r\n                                                  setMetadataForEdit(newMetadata);\r\n                                                }}\r\n                                                disabled={isSavingContent || isDisableField(key)}\r\n                                              >\r\n                                                <SelectTrigger className=\"s3-explr-input\">\r\n                                                  <SelectValue placeholder=\"Chọn tình trạng\" />\r\n                                                </SelectTrigger>\r\n                                                <SelectContent>\r\n                                                  <SelectItem value=\"hieu_luc\">Hiệu lực</SelectItem>\r\n                                                  <SelectItem value=\"het_hieu_luc\">\r\n                                                    Hết hiệu lực\r\n                                                  </SelectItem>\r\n                                                </SelectContent>\r\n                                              </Select>\r\n                                              {isRequired && fieldError && (\r\n                                                <p className=\"text-xs text-red-500\">{fieldError}</p>\r\n                                              )}\r\n                                            </div>\r\n                                          ) : isTextarea(key) ? (\r\n                                            <div className=\"space-y-1\">\r\n                                              <Textarea\r\n                                                id={key}\r\n                                                value={\r\n                                                  typeof value === 'string'\r\n                                                    ? value\r\n                                                    : JSON.stringify(value)\r\n                                                }\r\n                                                onChange={(e: any) => {\r\n                                                  const newMetadata = {\r\n                                                    ...metadataForEdit,\r\n                                                    [key]: e.target.value,\r\n                                                  };\r\n                                                  setMetadataForEdit(newMetadata);\r\n                                                }}\r\n                                                placeholder=\"Nhập nội dung tập tin\"\r\n                                                className=\"min-h-[200px] font-mono\"\r\n                                                disabled={isSavingContent || isDisableField(key)}\r\n                                              />\r\n                                              {isRequired && fieldError && (\r\n                                                <p className=\"text-xs text-red-500\">{fieldError}</p>\r\n                                              )}\r\n                                            </div>\r\n                                          ) : isDisableField(key) ||\r\n                                            [\r\n                                              'createdDate',\r\n                                              'effectiveDate',\r\n                                              'expirationDate',\r\n                                              'issueDate',\r\n                                            ].includes(key) ? (\r\n                                            <div className=\"space-y-1\">\r\n                                              <Input\r\n                                                id={key}\r\n                                                type={\r\n                                                  [\r\n                                                    'createdDate',\r\n                                                    'effectiveDate',\r\n                                                    'expirationDate',\r\n                                                    'issueDate',\r\n                                                  ].includes(key)\r\n                                                    ? 'date'\r\n                                                    : undefined\r\n                                                }\r\n                                                value={\r\n                                                  typeof value === 'string'\r\n                                                    ? value\r\n                                                    : JSON.stringify(value)\r\n                                                }\r\n                                                onChange={(e: any) => {\r\n                                                  const newMetadata = {\r\n                                                    ...metadataForEdit,\r\n                                                    [key]: e.target.value,\r\n                                                  };\r\n                                                  setMetadataForEdit(newMetadata);\r\n                                                }}\r\n                                                placeholder=\"Nhập nội dung\"\r\n                                                className=\"s3-explr-input\"\r\n                                                disabled={isSavingContent || isDisableField(key)}\r\n                                              />\r\n                                              {isRequired && fieldError && (\r\n                                                <p className=\"text-xs text-red-500\">{fieldError}</p>\r\n                                              )}\r\n                                            </div>\r\n                                          ) : (\r\n                                            <div className=\"space-y-1\">\r\n                                              <Input\r\n                                                id={key}\r\n                                                value={\r\n                                                  typeof value === 'string'\r\n                                                    ? value\r\n                                                    : JSON.stringify(value)\r\n                                                }\r\n                                                onChange={(e: any) => {\r\n                                                  const newMetadata = {\r\n                                                    ...metadataForEdit,\r\n                                                    [key]: e.target.value,\r\n                                                  };\r\n                                                  setMetadataForEdit(newMetadata);\r\n                                                }}\r\n                                                placeholder=\"Nhập nội dung\"\r\n                                                className=\"s3-explr-input\"\r\n                                                disabled={isSavingContent || isDisableField(key)}\r\n                                              />\r\n                                              {isRequired && fieldError && (\r\n                                                <p className=\"text-xs text-red-500\">{fieldError}</p>\r\n                                              )}\r\n                                            </div>\r\n                                          )}\r\n                                        </div>\r\n                                      );\r\n                                    })}\r\n                                </div>\r\n                              )}\r\n                            </div>\r\n                          </TabsContent>\r\n                        </>\r\n                      )}\r\n                    </Tabs>\r\n                  )}\r\n                  <DialogFooter className=\"s3-explr-dialog-footer\">\r\n                    <Button\r\n                      variant=\"outline\"\r\n                      onClick={() => {\r\n                        setFileToRename(null);\r\n                        setMetadataForEdit(null);\r\n                        setNewName('');\r\n                        setFileContent('');\r\n                      }}\r\n                      className=\"s3-explr-cancel-btn\"\r\n                    >\r\n                      Hủy\r\n                    </Button>\r\n                    {activeTab === 'edit' ? (\r\n                      <Button\r\n                        onClick={() => fileToRename && saveFileContent(fileToRename, fileContent)}\r\n                        disabled={isSavingContent || isLoadingContent}\r\n                        className=\"s3-explr-save-btn\"\r\n                      >\r\n                        {isSavingContent ? (\r\n                          <>\r\n                            <Loader2 className=\"mr-2 h-4 w-4 animate-spin s3-explr-loader\" />\r\n                            Đang lưu...\r\n                          </>\r\n                        ) : (\r\n                          'Lưu thay đổi'\r\n                        )}\r\n                      </Button>\r\n                    ) : activeTab === 'edit-metadata' ? (\r\n                      <Button\r\n                        onClick={() =>\r\n                          metadataForEdit &&\r\n                          typeof metadataForEdit === 'object' &&\r\n                          fileToRename &&\r\n                          saveJsonFile(fileToRename)\r\n                        }\r\n                        disabled={isSavingContent || isLoadingContent}\r\n                        className=\"s3-explr-save-btn\"\r\n                      >\r\n                        {isSavingContent ? (\r\n                          <>\r\n                            <Loader2 className=\"mr-2 h-4 w-4 animate-spin s3-explr-loader\" />\r\n                            Đang lưu...\r\n                          </>\r\n                        ) : (\r\n                          'Lưu thay đổi'\r\n                        )}\r\n                      </Button>\r\n                    ) : (\r\n                      <Button\r\n                        onClick={() => {\r\n                          if (newName.trim() && fileToRename) {\r\n                            void handleRename(fileToRename, newName.trim());\r\n                          }\r\n                        }}\r\n                        disabled={\r\n                          isRenaming || !newName.trim() || newName.trim() === fileToRename?.name\r\n                        }\r\n                        className=\"s3-explr-rename-btn\"\r\n                      >\r\n                        {isRenaming ? (\r\n                          <>\r\n                            <Loader2 className=\"mr-2 h-4 w-4 animate-spin s3-explr-loader\" />\r\n                            Đang đổi tên...\r\n                          </>\r\n                        ) : (\r\n                          'Đổi tên'\r\n                        )}\r\n                      </Button>\r\n                    )}\r\n                  </DialogFooter>\r\n                </DialogContent>\r\n              </Dialog>\r\n\r\n              <Dialog\r\n                open={!!fileToView}\r\n                onOpenChange={(open) => {\r\n                  if (!open) {\r\n                    setFileToView(null);\r\n                    setFileContent('');\r\n                  }\r\n                }}\r\n              >\r\n                <DialogContent className=\"s3-explr-dialog-content max-w-5xl w-[90%]\">\r\n                  <DialogHeader className=\"s3-explr-dialog-header\">\r\n                    <DialogTitle className=\"s3-explr-dialog-title\">Xem tập tin</DialogTitle>\r\n                  </DialogHeader>\r\n\r\n                  {fileToView && (\r\n                    <Tabs value={'view'}>\r\n                      <TabsList className=\"grid w-full grid-cols-1 \">\r\n                        {!fileToView.isFolder && isTextFile(fileToView) && (\r\n                          <TabsTrigger value=\"view\">Nội dung</TabsTrigger>\r\n                        )}\r\n                      </TabsList>\r\n                      {!fileToView.isFolder && isTextFile(fileToView) ? (\r\n                        <TabsContent value=\"view\">\r\n                          <div className=\"space-y-4 py-4\">\r\n                            {isLoadingContent ? (\r\n                              <div className=\"flex items-center justify-center py-4\">\r\n                                <Loader2 className=\"h-6 w-6 animate-spin\" />\r\n                              </div>\r\n                            ) : (\r\n                              <div className=\"overflow-hidden overflow-y-auto pb-3 px-1\">\r\n                                <div className=\"rounded-md bg-muted p-4 font-mono text-sm overflow-auto max-h-[60vh] border\">\r\n                                  <pre className=\"whitespace-pre-wrap break-words\">\r\n                                    {fileContent}\r\n                                  </pre>\r\n                                </div>\r\n                              </div>\r\n                            )}\r\n                          </div>\r\n                        </TabsContent>\r\n                      ) : (\r\n                        <TabsContent value=\"view\">\r\n                          <div className=\"space-y-4 py-4\">\r\n                            {isLoadingContent ? (\r\n                              <div className=\"flex items-center justify-center py-4\">\r\n                                <Loader2 className=\"h-6 w-6 animate-spin\" />\r\n                              </div>\r\n                            ) : (\r\n                              <div className=\"overflow-hidden overflow-y-auto pb-3 px-1\">\r\n                                <div className=\"rounded-md bg-muted p-4 font-mono text-sm overflow-auto max-h-[60vh] border\">\r\n                                  <pre className=\"whitespace-pre-wrap break-words\">\r\n                                    Định dạng file không xem trực tiếp được, hãy tải file về để xem!\r\n                                  </pre>\r\n                                </div>\r\n                              </div>\r\n                            )}\r\n                          </div>\r\n                        </TabsContent>\r\n                      )}\r\n                    </Tabs>\r\n                  )}\r\n                  <DialogFooter className=\"s3-explr-dialog-footer\">\r\n                    <Button\r\n                      variant=\"outline\"\r\n                      onClick={() => {\r\n                        setFileToView(null);\r\n                        setFileContent('');\r\n                      }}\r\n                      className=\"s3-explr-cancel-btn\"\r\n                    >\r\n                      Đóng\r\n                    </Button>\r\n                  </DialogFooter>\r\n                </DialogContent>\r\n              </Dialog>\r\n\r\n              {fileToMove && openDialogRename && (\r\n                <DialogRemoveFiles\r\n                  openDialogRename={openDialogRename}\r\n                  setOpenDialogRename={setOpenDialogRename}\r\n                  apiBaseUrl={apiBaseUrl}\r\n                  setFileToMove={setFileToMove}\r\n                  fileToMove={fileToMove}\r\n                  refreshFiles={refreshFiles}\r\n                  ignoreCache={ignoreCache}\r\n                  autoSyncAfterFileOperation={autoSyncAfterFileOperation}\r\n                />\r\n              )}\r\n            </>\r\n          )}\r\n        </div>\r\n\r\n        {error && (\r\n          <div className=\"bg-red-100 border border-red-400 text-red-700 px-4 py-3 rounded relative s3-explr-error\">\r\n            Đã xảy ra lỗi khi tải danh sách tập tin\r\n          </div>\r\n        )}\r\n\r\n        <FileUpload\r\n          onFilesSelected={(e: any, typeUpload) => uploadFiles(e, currentPrefix, typeUpload)}\r\n        >\r\n          <div className=\"rounded-md border s3-explr-table-container\">\r\n            <Table className=\"s3-explr-table\">\r\n              <TableHeader className=\"s3-explr-table-header\">\r\n                {table.getHeaderGroups().map((headerGroup) => (\r\n                  <TableRow\r\n                    key={headerGroup.id}\r\n                    className=\"hover:bg-transparent s3-explr-header-row\"\r\n                  >\r\n                    {headerGroup.headers.map((header) => (\r\n                      <TableHead key={header.id} className=\"s3-explr-header-cell\">\r\n                        {header.isPlaceholder\r\n                          ? null\r\n                          : flexRender(header.column.columnDef.header, header.getContext())}\r\n                      </TableHead>\r\n                    ))}\r\n                  </TableRow>\r\n                ))}\r\n              </TableHeader>\r\n              <TableBody className=\"s3-explr-table-body\">\r\n                {isLoading ? (\r\n                  // Skeleton rows: giu chieu cao bang on dinh khi dang tai/tim kiem,\r\n                  // tranh nhap nhay giua trang thai rong va co du lieu.\r\n                  Array.from({ length: 6 }).map((_, rowIndex) => (\r\n                    <TableRow key={`skeleton-${rowIndex}`} className=\"h-12 s3-explr-skeleton-row\">\r\n                      {columns.map((_col, colIndex) => (\r\n                        <TableCell\r\n                          key={`skeleton-cell-${rowIndex}-${colIndex}`}\r\n                          className=\"align-middle s3-explr-skeleton-cell\"\r\n                        >\r\n                          <div className=\"h-4 w-full max-w-[200px] animate-pulse rounded bg-gray-200\" />\r\n                        </TableCell>\r\n                      ))}\r\n                    </TableRow>\r\n                  ))\r\n                ) : table.getRowModel().rows.length === 0 ? (\r\n                  <TableRow className=\"s3-explr-empty-row\">\r\n                    <TableCell\r\n                      colSpan={columns.length}\r\n                      className=\"h-24 text-center s3-explr-empty-cell\"\r\n                    >\r\n                      {searchQuery ? (\r\n                        <div className=\"text-gray-500 s3-explr-no-results\">\r\n                          Không tìm thấy tập tin hoặc thư mục nào khớp với \"{searchQuery}\"\r\n                        </div>\r\n                      ) : (\r\n                        <div className=\"text-gray-500 s3-explr-empty-message\">\r\n                          Thư mục này không chứa tập tin hoặc thư mục con nào\r\n                        </div>\r\n                      )}\r\n                    </TableCell>\r\n                  </TableRow>\r\n                ) : (\r\n                  table.getRowModel().rows.map((row) => (\r\n                    <TableRow key={row.id} className=\"h-12 s3-explr-row\">\r\n                      {row.getVisibleCells().map((cell) => (\r\n                        <TableCell key={cell.id} className=\"align-middle s3-explr-cell\">\r\n                          {flexRender(cell.column.columnDef.cell, cell.getContext())}\r\n                        </TableCell>\r\n                      ))}\r\n                    </TableRow>\r\n                  ))\r\n                )}\r\n              </TableBody>\r\n            </Table>\r\n          </div>\r\n        </FileUpload>\r\n\r\n        {searchQuery && estimatedTotalHits !== 0 && (\r\n          <>\r\n            <Pagination>\r\n              <PaginationContent>\r\n                <PaginationPrevious\r\n                  onClick={() => !isLoading && setCurrentPage((prev) => Math.max(prev - 1, 1))}\r\n                  aria-disabled={currentPage === 1 || isLoading}\r\n                  className=\"cursor-pointer aria-disabled:pointer-events-none aria-disabled:opacity-50\"\r\n                />\r\n                {Array.from({ length: Math.ceil(estimatedTotalHits / 20) }, (_, index) => {\r\n                  const pageIndex = index + 1;\r\n                  const totalPages = Math.ceil(estimatedTotalHits / 20);\r\n                  const isHidden =\r\n                    totalPages > 7 &&\r\n                    !(\r\n                      pageIndex === 1 ||\r\n                      pageIndex === totalPages ||\r\n                      (pageIndex >= currentPage - 1 && pageIndex <= currentPage + 1)\r\n                    );\r\n\r\n                  if (isHidden) {\r\n                    if (\r\n                      (pageIndex === currentPage - 2 && currentPage > 4) ||\r\n                      (pageIndex === currentPage + 2 && currentPage < totalPages - 3)\r\n                    ) {\r\n                      return (\r\n                        <PaginationEllipsis key={index} className=\"pointer-events-none\">\r\n                          ...\r\n                        </PaginationEllipsis>\r\n                      );\r\n                    }\r\n                    return null;\r\n                  }\r\n\r\n                  return (\r\n                    <PaginationItem className=\"cursor-pointer\" key={index}>\r\n                      <PaginationLink\r\n                        isActive={currentPage === pageIndex}\r\n                        onClick={() => setCurrentPage(pageIndex)}\r\n                        className={`${\r\n                          currentPage === pageIndex\r\n                            ? 'bg-blue-500 text-white'\r\n                            : 'bg-white text-black'\r\n                        } hover:bg-blue-100`}\r\n                      >\r\n                        {pageIndex}\r\n                      </PaginationLink>\r\n                    </PaginationItem>\r\n                  );\r\n                })}\r\n                <PaginationItem>\r\n                  <PaginationNext\r\n                    onClick={() =>\r\n                      !isLoading &&\r\n                      setCurrentPage((prev) =>\r\n                        Math.min(prev + 1, Math.ceil(estimatedTotalHits / 20)),\r\n                      )\r\n                    }\r\n                    aria-disabled={currentPage === Math.ceil(estimatedTotalHits / 20) || isLoading}\r\n                    className=\"cursor-pointer aria-disabled:pointer-events-none aria-disabled:opacity-50\"\r\n                  />\r\n                </PaginationItem>\r\n              </PaginationContent>\r\n            </Pagination>\r\n          </>\r\n        )}\r\n\r\n        {!searchQuery && pagination && pagination.totalPages > 1 && (\r\n          <>\r\n            <div className=\"flex items-center justify-between mt-4\">\r\n              <Pagination>\r\n                <PaginationContent>\r\n                  <PaginationPrevious\r\n                    onClick={() => !isLoading && setBrowsePage((prev) => Math.max(prev - 1, 1))}\r\n                    aria-disabled={browsePage === 1 || isLoading}\r\n                    className=\"cursor-pointer aria-disabled:pointer-events-none aria-disabled:opacity-50\"\r\n                  />\r\n                  {isLoading ? (\r\n                    <PaginationItem>\r\n                      <div className=\"flex items-center gap-2 px-4\">\r\n                        <Loader2 className=\"h-4 w-4 animate-spin\" />\r\n                        <span className=\"text-sm\">Đang tải...</span>\r\n                      </div>\r\n                    </PaginationItem>\r\n                  ) : (\r\n                    Array.from({ length: pagination.totalPages }, (_, index) => {\r\n                      const pageIndex = index + 1;\r\n                      const totalPages = pagination.totalPages;\r\n                      const isHidden =\r\n                        totalPages > 7 &&\r\n                        !(\r\n                          pageIndex === 1 ||\r\n                          pageIndex === totalPages ||\r\n                          (pageIndex >= browsePage - 1 && pageIndex <= browsePage + 1)\r\n                        );\r\n\r\n                      if (isHidden) {\r\n                        if (\r\n                          (pageIndex === browsePage - 2 && browsePage > 4) ||\r\n                          (pageIndex === browsePage + 2 && browsePage < totalPages - 3)\r\n                        ) {\r\n                          return (\r\n                            <PaginationEllipsis key={index} className=\"pointer-events-none\">\r\n                              ...\r\n                            </PaginationEllipsis>\r\n                          );\r\n                        }\r\n                        return null;\r\n                      }\r\n\r\n                      return (\r\n                        <PaginationItem className=\"cursor-pointer\" key={index}>\r\n                          <PaginationLink\r\n                            isActive={browsePage === pageIndex}\r\n                            onClick={() => setBrowsePage(pageIndex)}\r\n                            className={`${\r\n                              browsePage === pageIndex\r\n                                ? 'bg-blue-500 text-white'\r\n                                : 'bg-white text-black'\r\n                            } hover:bg-blue-100`}\r\n                          >\r\n                            {pageIndex}\r\n                          </PaginationLink>\r\n                        </PaginationItem>\r\n                      );\r\n                    })\r\n                  )}\r\n                  <PaginationItem>\r\n                    <PaginationNext\r\n                      onClick={() =>\r\n                        !isLoading &&\r\n                        setBrowsePage((prev) => Math.min(prev + 1, pagination.totalPages))\r\n                      }\r\n                      aria-disabled={browsePage === pagination.totalPages || isLoading}\r\n                      className=\"cursor-pointer aria-disabled:pointer-events-none aria-disabled:opacity-50\"\r\n                    />\r\n                  </PaginationItem>\r\n                </PaginationContent>\r\n              </Pagination>\r\n            </div>\r\n          </>\r\n        )}\r\n        {asSelector && onSelected && (\r\n          <div className=\"flex justify-between items-center mt-4 s3-explr-selector-footer\">\r\n            <div className=\"text-sm text-gray-500 s3-explr-selection-count\">\r\n              {calculateSelectedFiles()}\r\n            </div>\r\n            <Button\r\n              variant=\"default\"\r\n              onClick={() => onSelected(getSelectedFiles())}\r\n              disabled={selectedKeys.size === 0}\r\n              className=\"s3-explr-ok-btn\"\r\n            >\r\n              OK\r\n            </Button>\r\n          </div>\r\n        )}\r\n        <DialogShare\r\n          open={!!fileToShare}\r\n          onClose={() => setFileToShare(null)}\r\n          file={fileToShare}\r\n          apiBaseUrl={apiBaseUrl}\r\n          rootUrlHostApi={rootUrlHostApi}\r\n        />\r\n        <CrawlProgressDialog\r\n          open={isCrawlProgressDialogOpen}\r\n          onClose={() => setIsCrawlProgressDialogOpen(false)}\r\n          currentJob={currentJob}\r\n          elapsedTime={elapsedTime}\r\n          onStop={stopCurrentJob}\r\n          pages={pages}\r\n        />\r\n        <Dialog\r\n          open={outlookSettingsOpen}\r\n          onOpenChange={(open) => {\r\n            setOutlookSettingsOpen(open);\r\n            if (open) {\r\n              void loadEmailConfig();\r\n              if (!settingsRunning) {\r\n                fetch(`${apiBaseUrl}/api/email-scheduler/status`)\r\n                  .then((res) =>\r\n                    res.ok\r\n                      ? (res.json() as Promise<{\r\n                          isRunning: boolean;\r\n                          lastRunResult: LastRunResult;\r\n                        }>)\r\n                      : null,\r\n                  )\r\n                  .then((data) => {\r\n                    if (data && data.isRunning) {\r\n                      startPolling();\r\n                    } else if (data && !data.isRunning && data.lastRunResult) {\r\n                      displayResult(data.lastRunResult);\r\n                    }\r\n                  })\r\n                  .catch(() => {});\r\n              }\r\n            }\r\n          }}\r\n        >\r\n          <DialogContent className=\"sm:max-w-lg max-h-[90dvh] grid-rows-[auto_minmax(0,1fr)_auto] overflow-hidden\">\r\n            <DialogHeader>\r\n              <DialogTitle>Cấu hình Email Scheduler</DialogTitle>\r\n              <DialogDescription>Quản lý cấu hình và xác thực email scheduler.</DialogDescription>\r\n            </DialogHeader>\r\n\r\n            <div className=\"min-h-0 space-y-4 overflow-y-auto py-2 pr-1\">\r\n              {/* Auth status */}\r\n              <div className=\"rounded-md border p-3 space-y-2\">\r\n                {outlookEmail ? (\r\n                  <div className=\"flex items-center gap-1.5 text-sm text-green-700\">\r\n                    <span className=\"w-2 h-2 rounded-full bg-green-500 inline-block\"></span>\r\n                    {outlookEmail}\r\n                  </div>\r\n                ) : (\r\n                  <p className=\"text-sm text-muted-foreground\">Chưa xác thực</p>\r\n                )}\r\n                <Button\r\n                  variant=\"outline\"\r\n                  size=\"sm\"\r\n                  className=\"flex items-center gap-1.5\"\r\n                  onClick={() => {\r\n                    if (!resolvedCrawlerKnownFolder) return;\r\n                    setOutlookDialogContext(resolvedCrawlerKnownFolder);\r\n                    setOutlookDialogOpen(true);\r\n                    void handleBootstrap(resolvedCrawlerKnownFolder);\r\n                  }}\r\n                >\r\n                  <svg\r\n                    className=\"w-4 h-4\"\r\n                    viewBox=\"0 0 24 24\"\r\n                    fill=\"none\"\r\n                    stroke=\"currentColor\"\r\n                    strokeWidth=\"2\"\r\n                  >\r\n                    <rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\" />\r\n                    <path d=\"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7\" />\r\n                  </svg>\r\n                  Đăng nhập Outlook\r\n                </Button>\r\n              </div>\r\n\r\n              {configLoading && (\r\n                <div className=\"flex items-center gap-2 text-sm text-muted-foreground\">\r\n                  <Loader2 className=\"h-4 w-4 animate-spin\" />\r\n                  Đang tải cấu hình...\r\n                </div>\r\n              )}\r\n\r\n              {!configLoading && emailConfig !== null && (\r\n                <div className=\"space-y-3\">\r\n                  <div className=\"flex items-center justify-between\">\r\n                    <Label htmlFor=\"settings-enabled\">Bật/Tắt</Label>\r\n                    <Switch\r\n                      id=\"settings-enabled\"\r\n                      checked={formEnabled}\r\n                      onCheckedChange={(checked) => {\r\n                        setFormEnabled(checked);\r\n                        void saveConfig('enabled', checked);\r\n                      }}\r\n                    />\r\n                  </div>\r\n\r\n                  <div className=\"space-y-1\">\r\n                    <Label htmlFor=\"settings-cron\">Lịch chạy hàng ngày</Label>\r\n                    <Select\r\n                      value={formVnTime}\r\n                      onValueChange={(vnTime) => {\r\n                        const cron = vnTimeToUtcCron(vnTime);\r\n                        setFormCron(cron);\r\n                        void saveConfig('schedule_cron', cron);\r\n                      }}\r\n                      disabled={configSaving}\r\n                    >\r\n                      <SelectTrigger id=\"settings-cron\">\r\n                        <SelectValue placeholder=\"Chọn giờ chạy\" />\r\n                      </SelectTrigger>\r\n                      <SelectContent className=\"max-h-72\">\r\n                        {vnTimeOptions.map((time) => (\r\n                          <SelectItem key={time} value={time}>\r\n                            {time}\r\n                          </SelectItem>\r\n                        ))}\r\n                      </SelectContent>\r\n                    </Select>\r\n                    {formVnTime && (\r\n                      <p className=\"text-xs text-muted-foreground\">\r\n                        Hàng ngày lúc {formVnTime} (giờ VN)\r\n                      </p>\r\n                    )}\r\n                  </div>\r\n\r\n                  {/* <div className=\"space-y-1\">\r\n                    <Label htmlFor=\"settings-prefix\">Thư mục S3</Label>\r\n                    <Input\r\n                      id=\"settings-prefix\"\r\n                      value={formPrefix}\r\n                      onChange={(e) => setFormPrefix(e.target.value)}\r\n                      onBlur={() => void saveConfig('s3_prefix', formPrefix)}\r\n                      placeholder=\"email-reports\"\r\n                      disabled={configSaving}\r\n                    />\r\n                  </div>\r\n\r\n                  <div className=\"space-y-1\">\r\n                    <Label htmlFor=\"settings-max-emails\">Số email tối đa mỗi lần</Label>\r\n                    <Input\r\n                      id=\"settings-max-emails\"\r\n                      type=\"number\"\r\n                      value={formMaxEmails}\r\n                      onChange={(e) => setFormMaxEmails(Number(e.target.value))}\r\n                      onBlur={() => void saveConfig('max_emails_per_run', formMaxEmails)}\r\n                      disabled={configSaving}\r\n                    />\r\n                  </div>\r\n\r\n                  <div className=\"space-y-1\">\r\n                    <Label htmlFor=\"settings-client-id\">Outlook Client ID</Label>\r\n                    <Input\r\n                      id=\"settings-client-id\"\r\n                      type=\"password\"\r\n                      value={formClientId}\r\n                      onChange={(e) => setFormClientId(e.target.value)}\r\n                      onBlur={() => void saveConfig('outlook_client_id', formClientId)}\r\n                      placeholder=\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"\r\n                      disabled={configSaving}\r\n                    />\r\n                  </div>\r\n\r\n                  <div className=\"space-y-1\">\r\n                    <Label htmlFor=\"settings-authority\">Outlook Authority</Label>\r\n                    <Input\r\n                      id=\"settings-authority\"\r\n                      type=\"password\"\r\n                      value={formAuthority}\r\n                      onChange={(e) => setFormAuthority(e.target.value)}\r\n                      onBlur={() => void saveConfig('outlook_authority', formAuthority)}\r\n                      placeholder=\"https://login.microsoftonline.com/...\"\r\n                      disabled={configSaving}\r\n                    />\r\n                  </div> */}\r\n\r\n                  <div className=\"space-y-2\">\r\n                    <Label>Bộ lọc tiêu đề báo cáo ngày</Label>\r\n                    <div className=\"grid grid-cols-1 gap-2 md:grid-cols-1\">\r\n                      {DAILY_REPORT_FILTER_FIELDS.map((field) =>\r\n                        renderSubjectFilterInput({\r\n                          id: `settings-${field.key}-filter`,\r\n                          label: field.label,\r\n                          value: formFilters[field.key],\r\n                          placeholder: field.placeholder,\r\n                          onChange: (value) =>\r\n                            setFormFilters((prev) => ({ ...prev, [field.key]: value })),\r\n                          onBlur: () => void saveConfig('subject_filters', formFilters),\r\n                        }),\r\n                      )}\r\n                    </div>\r\n                  </div>\r\n\r\n                  <div className=\"space-y-2\">\r\n                    <Label>Bộ lọc tiêu đề báo cáo tuần</Label>\r\n                    {renderSubjectFilterInput({\r\n                      id: 'settings-week-equipment-status-filter',\r\n                      label: 'Tình trạng thiết bị',\r\n                      value: formFiltersWeek.equipment_status,\r\n                      placeholder: 'Báo cáo tình trạng thiết bị tuần',\r\n                      onChange: (value) =>\r\n                        setFormFiltersWeek((prev) => ({ ...prev, equipment_status: value })),\r\n                      onBlur: () => void saveConfig('subject_filters_week', formFiltersWeek),\r\n                    })}\r\n                  </div>\r\n\r\n                  <div className=\"space-y-2\">\r\n                    <Label>Bộ lọc tiêu đề báo cáo tháng</Label>\r\n                    {renderSubjectFilterInput({\r\n                      id: 'settings-month-equipment-status-filter',\r\n                      label: 'Tình trạng thiết bị',\r\n                      value: formFiltersMonth.equipment_status,\r\n                      placeholder: 'Báo cáo tình trạng thiết bị tháng',\r\n                      onChange: (value) =>\r\n                        setFormFiltersMonth((prev) => ({ ...prev, equipment_status: value })),\r\n                      onBlur: () => void saveConfig('subject_filters_month', formFiltersMonth),\r\n                    })}\r\n                  </div>\r\n\r\n                  <div className=\"space-y-2\">\r\n                    <Label>Bộ lọc tiêu đề báo cáo quý</Label>\r\n                    {renderSubjectFilterInput({\r\n                      id: 'settings-quarter-equipment-status-filter',\r\n                      label: 'Tình trạng thiết bị',\r\n                      value: formFiltersQuarter.equipment_status,\r\n                      placeholder: 'Báo cáo tình trạng thiết bị quý',\r\n                      onChange: (value) =>\r\n                        setFormFiltersQuarter((prev) => ({ ...prev, equipment_status: value })),\r\n                      onBlur: () => void saveConfig('subject_filters_quarter', formFiltersQuarter),\r\n                    })}\r\n                  </div>\r\n                </div>\r\n              )}\r\n\r\n              {settingsRunResult && (\r\n                <p className=\"text-sm text-muted-foreground\">{settingsRunResult}</p>\r\n              )}\r\n            </div>\r\n\r\n            <DialogFooter>\r\n              <Button\r\n                variant=\"outline\"\r\n                disabled={settingsRunning}\r\n                onClick={() => void handleRunNow()}\r\n              >\r\n                {settingsRunning && <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />}\r\n                {settingsRunning ? 'Đang chạy...' : 'Chạy ngay'}\r\n              </Button>\r\n              <Button variant=\"outline\" onClick={() => setOutlookSettingsOpen(false)}>\r\n                Đóng\r\n              </Button>\r\n            </DialogFooter>\r\n          </DialogContent>\r\n        </Dialog>\r\n\r\n        <EmailCrawlerSourceModal\r\n          open={crawlerSourceModalOpen}\r\n          onOpenChange={(open) => {\r\n            setCrawlerSourceModalOpen(open);\r\n            if (!open) {\r\n              setCrawlerCreateDefaults(null);\r\n              void refreshResolvedCrawlerSource();\r\n            }\r\n          }}\r\n          source={crawlerSource}\r\n          createDefaults={crawlerCreateDefaults}\r\n          bldReports={crawlerBldReports}\r\n          apiBaseUrl={apiBaseUrl}\r\n          onSourceUpdated={(updated) => setCrawlerSource(updated)}\r\n          onSourceCreated={() => {\r\n            setCrawlerCreateDefaults(null);\r\n          }}\r\n        />\r\n\r\n        <ReportHistoryModal\r\n          open={reportHistoryOpen}\r\n          onOpenChange={setReportHistoryOpen}\r\n          apiBaseUrl={apiBaseUrl}\r\n        />\r\n\r\n        <Dialog\r\n          open={outlookDialogOpen}\r\n          // modal=false: dialog này có thể được mở khi modal \"Cấu hình tuyển\r\n          // dụng\" (EmailCrawlerSourceModal) vẫn đang mở phía dưới (xem\r\n          // handleCrawlerOutlookLogin). Hai Dialog Radix độc lập cùng mở modal\r\n          // (mặc định) khiến Radix quản lý pointer-events/aria-hidden trên\r\n          // document.body qua 2 root riêng biệt; khi dialog này tự đóng bằng\r\n          // setTimeout, dọn dẹp không đồng bộ khiến body bị kẹt pointer-events\r\n          // và modal phía dưới không thể click/lưu được nữa. Tắt modal-trap ở\r\n          // đây, lớp overlay (bg-black/80) của chính dialog vẫn chặn tương tác\r\n          // với modal phía dưới trong lúc đang mở.\r\n          modal={false}\r\n          onOpenChange={(open) => {\r\n            setOutlookDialogOpen(open);\r\n            if (!open) {\r\n              setBootstrapId(null);\r\n              setBootstrapInfo(null);\r\n              setBootstrapStatus(null);\r\n              setBootstrapError(null);\r\n              setOutlookDialogContext(null);\r\n            }\r\n          }}\r\n        >\r\n          <DialogContent className=\"sm:max-w-md\">\r\n            <DialogHeader>\r\n              <DialogTitle>Login Outlook</DialogTitle>\r\n              <DialogDescription>\r\n                Xác thực với Microsoft để hệ thống có thể đọc email.\r\n              </DialogDescription>\r\n            </DialogHeader>\r\n            <div className=\"space-y-4 py-4\">\r\n              {bootstrapLoading && !bootstrapInfo && (\r\n                <div\r\n                  role=\"status\"\r\n                  aria-live=\"polite\"\r\n                  className=\"flex items-center gap-2 text-sm text-muted-foreground\"\r\n                >\r\n                  <Loader2 className=\"h-4 w-4 animate-spin\" />\r\n                  Đang khởi tạo...\r\n                </div>\r\n              )}\r\n              {bootstrapInfo?.userCode && bootstrapStatus === 'pending' && (\r\n                <>\r\n                  <p className=\"text-sm\">Truy cập link bên dưới và nhập mã:</p>\r\n                  <div className=\"flex items-center gap-2 rounded-md border p-3 bg-muted/50\">\r\n                    <code className=\"flex-1 text-lg font-mono font-bold tracking-widest text-center\">\r\n                      {bootstrapInfo.userCode}\r\n                    </code>\r\n                    <Button variant=\"ghost\" size=\"sm\" onClick={handleCopyCode}>\r\n                      {copied ? '✓' : 'Copy'}\r\n                    </Button>\r\n                  </div>\r\n                  <a\r\n                    href={bootstrapInfo.verificationUri}\r\n                    target=\"_blank\"\r\n                    rel=\"noopener noreferrer\"\r\n                    className=\"text-sm text-blue-600 hover:underline flex items-center gap-1\"\r\n                  >\r\n                    {bootstrapInfo.verificationUri}\r\n                    <MoveUpRight className=\"h-3 w-3\" />\r\n                  </a>\r\n                  <div\r\n                    role=\"status\"\r\n                    aria-live=\"polite\"\r\n                    className=\"flex items-center gap-2 text-sm text-muted-foreground\"\r\n                  >\r\n                    <Loader2 className=\"h-4 w-4 animate-spin\" />\r\n                    Đang chờ xác thực...\r\n                  </div>\r\n                </>\r\n              )}\r\n              {bootstrapStatus === 'success' && (\r\n                <div\r\n                  role=\"status\"\r\n                  aria-live=\"polite\"\r\n                  className=\"flex items-center gap-2 text-sm text-green-800 font-medium\"\r\n                >\r\n                  Đã xác thực: {outlookEmail}\r\n                </div>\r\n              )}\r\n              {bootstrapStatus === 'error' && (\r\n                <div role=\"alert\" className=\"space-y-2\">\r\n                  <p className=\"text-sm text-destructive\">{bootstrapError}</p>\r\n                  <Button\r\n                    variant=\"outline\"\r\n                    size=\"sm\"\r\n                    onClick={() => void handleBootstrap(bootstrapContext)}\r\n                  >\r\n                    Thử lại\r\n                  </Button>\r\n                </div>\r\n              )}\r\n              {bootstrapStatus === 'timeout' && (\r\n                <div role=\"alert\" className=\"space-y-2\">\r\n                  <p className=\"text-sm text-yellow-800\">Hết thời gian chờ. Vui lòng thử lại.</p>\r\n                  <Button\r\n                    variant=\"outline\"\r\n                    size=\"sm\"\r\n                    onClick={() => void handleBootstrap(bootstrapContext)}\r\n                  >\r\n                    Thử lại\r\n                  </Button>\r\n                </div>\r\n              )}\r\n            </div>\r\n            <DialogFooter>\r\n              <Button variant=\"outline\" onClick={() => setOutlookDialogOpen(false)}>\r\n                Đóng\r\n              </Button>\r\n            </DialogFooter>\r\n          </DialogContent>\r\n        </Dialog>\r\n      </div>\r\n    );\r\n  },\r\n);\r\n\r\nexport const Home = (props: any) => {\r\n  return (\r\n    <GoogleOAuthProvider clientId={CLIENT_ID}>\r\n      <HomeWithoutContext\r\n        {...props}\r\n        // asSelector={true}\r\n        // preSelectedFiles={['PO/', 'abs-sample/FAQs.txt']}\r\n      />\r\n      <ToastContainer />\r\n    </GoogleOAuthProvider>\r\n  );\r\n};\r\n","import React from 'react';\n\nvar isCheckBoxInput = (element) => element.type === 'checkbox';\n\nvar isDateObject = (value) => value instanceof Date;\n\nvar isNullOrUndefined = (value) => value == null;\n\nconst isObjectType = (value) => typeof value === 'object';\nvar isObject = (value) => !isNullOrUndefined(value) &&\n    !Array.isArray(value) &&\n    isObjectType(value) &&\n    !isDateObject(value);\n\nvar getEventValue = (event) => isObject(event) && event.target\n    ? isCheckBoxInput(event.target)\n        ? event.target.checked\n        : event.target.value\n    : event;\n\nvar isNameInFieldArray = (names, name) => name\n    .split('.')\n    .some((part, index, arr) => !isNaN(Number(part)) && names.has(arr.slice(0, index).join('.')));\n\nvar isPlainObject = (tempObject) => {\n    const prototypeCopy = tempObject.constructor && tempObject.constructor.prototype;\n    return (isObject(prototypeCopy) && prototypeCopy.hasOwnProperty('isPrototypeOf'));\n};\n\nvar isWeb = typeof window !== 'undefined' &&\n    typeof window.HTMLElement !== 'undefined' &&\n    typeof document !== 'undefined';\n\nfunction cloneObject(data) {\n    if (data instanceof Date) {\n        return new Date(data);\n    }\n    const isFileListInstance = typeof FileList !== 'undefined' && data instanceof FileList;\n    if (isWeb && (data instanceof Blob || isFileListInstance)) {\n        return data;\n    }\n    const isArray = Array.isArray(data);\n    if (!isArray && !(isObject(data) && isPlainObject(data))) {\n        return data;\n    }\n    const copy = isArray ? [] : Object.create(Object.getPrototypeOf(data));\n    for (const key in data) {\n        if (Object.prototype.hasOwnProperty.call(data, key)) {\n            copy[key] = cloneObject(data[key]);\n        }\n    }\n    return copy;\n}\n\nconst EVENTS = {\n    BLUR: 'blur',\n    FOCUS_OUT: 'focusout',\n    CHANGE: 'change',\n    SUBMIT: 'submit',\n    TRIGGER: 'trigger',\n    VALID: 'valid',\n};\nconst VALIDATION_MODE = {\n    onBlur: 'onBlur',\n    onChange: 'onChange',\n    onSubmit: 'onSubmit',\n    onTouched: 'onTouched',\n    all: 'all',\n};\nconst INPUT_VALIDATION_RULES = {\n    max: 'max',\n    min: 'min',\n    maxLength: 'maxLength',\n    minLength: 'minLength',\n    pattern: 'pattern',\n    required: 'required',\n    validate: 'validate',\n};\nconst ROOT_ERROR_TYPE = 'root';\nconst PROTOTYPE_KEYWORDS = ['__proto__', 'constructor', 'prototype'];\n\nconst IS_KEY_RE = /^\\w*$/;\nvar isKey = (value) => IS_KEY_RE.test(value);\n\nvar isUndefined = (val) => val === undefined;\n\nconst FIELD_PATH_RE = /[.[\\]'\"]/;\nvar stringToPath = (input) => input.split(FIELD_PATH_RE).filter(Boolean);\n\nvar get = (object, path, defaultValue) => {\n    if (!path || !isObject(object)) {\n        return defaultValue;\n    }\n    const paths = isKey(path) ? [path] : stringToPath(path);\n    if (paths.some((key) => PROTOTYPE_KEYWORDS.includes(key))) {\n        return defaultValue;\n    }\n    const result = paths.reduce((result, key) => {\n        return isNullOrUndefined(result) ? undefined : result[key];\n    }, object);\n    return isUndefined(result) || result === object\n        ? isUndefined(object[path])\n            ? defaultValue\n            : object[path]\n        : result;\n};\n\nvar isBoolean = (value) => typeof value === 'boolean';\n\nvar isFunction = (value) => typeof value === 'function';\n\nvar set = (object, path, value) => {\n    let index = -1;\n    const tempPath = isKey(path) ? [path] : stringToPath(path);\n    const length = tempPath.length;\n    const lastIndex = length - 1;\n    while (++index < length) {\n        const key = tempPath[index];\n        let newValue = value;\n        if (index !== lastIndex) {\n            const objValue = object[key];\n            newValue =\n                isObject(objValue) || Array.isArray(objValue)\n                    ? objValue\n                    : !isNaN(+tempPath[index + 1])\n                        ? []\n                        : {};\n        }\n        if (PROTOTYPE_KEYWORDS.includes(key)) {\n            return;\n        }\n        object[key] = newValue;\n        object = object[key];\n    }\n};\n\n/**\n * Separate context for `control` to prevent unnecessary rerenders.\n * Internal hooks that only need control use this instead of full form context.\n */\nconst HookFormControlContext = React.createContext(null);\nHookFormControlContext.displayName = 'HookFormControlContext';\n/**\n * @internal Internal hook to access only control from context.\n */\nconst useFormControlContext = () => React.useContext(HookFormControlContext);\n\nvar getProxyFormState = (formState, control, localProxyFormState, isRoot = true) => {\n    const result = {};\n    for (const key in formState) {\n        Object.defineProperty(result, key, {\n            get: () => {\n                const _key = key;\n                if (control._proxyFormState[_key] !== VALIDATION_MODE.all) {\n                    control._proxyFormState[_key] = !isRoot || VALIDATION_MODE.all;\n                }\n                localProxyFormState && (localProxyFormState[_key] = true);\n                return formState[_key];\n            },\n        });\n    }\n    return result;\n};\n\nconst useIsomorphicLayoutEffect = isWeb\n    ? React.useLayoutEffect\n    : React.useEffect;\n\n/**\n * This custom hook allows you to subscribe to each form state, and isolate the re-render at the custom hook level. It has its scope in terms of form state subscription, so it would not affect other useFormState and useForm. Using this hook can reduce the re-render impact on large and complex form application.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformstate) • [Demo](https://codesandbox.io/s/useformstate-75xly)\n *\n * @param props - include options on specify fields to subscribe. {@link UseFormStateReturn}\n *\n * @example\n * ```tsx\n * function App() {\n *   const { register, handleSubmit, control } = useForm({\n *     defaultValues: {\n *     firstName: \"firstName\"\n *   }});\n *   const { dirtyFields } = useFormState({\n *     control\n *   });\n *   const onSubmit = (data) => console.log(data);\n *\n *   return (\n *     <form onSubmit={handleSubmit(onSubmit)}>\n *       <input {...register(\"firstName\")} placeholder=\"First Name\" />\n *       {dirtyFields.firstName && <p>Field is dirty.</p>}\n *       <input type=\"submit\" />\n *     </form>\n *   );\n * }\n * ```\n */\nfunction useFormState(props) {\n    const formControl = useFormControlContext();\n    const { control = formControl, disabled, name, exact } = props || {};\n    const [formState, updateFormState] = React.useState(() => ({\n        ...control._formState,\n        defaultValues: control._defaultValues,\n    }));\n    const _localProxyFormState = React.useRef({\n        isDirty: false,\n        isLoading: false,\n        dirtyFields: false,\n        touchedFields: false,\n        validatingFields: false,\n        isValidating: false,\n        isValid: false,\n        errors: false,\n    });\n    useIsomorphicLayoutEffect(() => control._subscribe({\n        name,\n        formState: _localProxyFormState.current,\n        exact,\n        callback: (formState) => {\n            !disabled &&\n                updateFormState({\n                    ...control._formState,\n                    ...formState,\n                    defaultValues: control._defaultValues,\n                });\n        },\n    }), [name, disabled, exact]);\n    React.useEffect(() => {\n        _localProxyFormState.current.isValid && control._setValid(true);\n    }, [control]);\n    return React.useMemo(() => getProxyFormState(formState, control, _localProxyFormState.current, false), [formState, control]);\n}\n\nvar isString = (value) => typeof value === 'string';\n\nvar generateWatchOutput = (names, _names, formValues, isGlobal, defaultValue) => {\n    if (isString(names)) {\n        isGlobal && _names.watch.add(names);\n        return get(formValues, names, defaultValue);\n    }\n    if (Array.isArray(names)) {\n        return names.map((fieldName) => (isGlobal && _names.watch.add(fieldName),\n            get(formValues, fieldName)));\n    }\n    isGlobal && (_names.watchAll = true);\n    return formValues;\n};\n\nvar isPrimitive = (value) => isNullOrUndefined(value) || !isObjectType(value);\n\nconst isEmptyObjectWithCustomPrototype = (object, keys) => keys.length === 0 && !Array.isArray(object) && !isPlainObject(object);\nfunction deepEqual(object1, object2, visited = new WeakMap()) {\n    if (object1 === object2) {\n        return true;\n    }\n    if (isPrimitive(object1) || isPrimitive(object2)) {\n        return Object.is(object1, object2);\n    }\n    if (isDateObject(object1) && isDateObject(object2)) {\n        return Object.is(object1.getTime(), object2.getTime());\n    }\n    const keys1 = Object.keys(object1);\n    const keys2 = Object.keys(object2);\n    if (keys1.length !== keys2.length) {\n        return false;\n    }\n    if (isEmptyObjectWithCustomPrototype(object1, keys1) ||\n        isEmptyObjectWithCustomPrototype(object2, keys2)) {\n        return Object.is(object1, object2);\n    }\n    if (!keys1.length && Array.isArray(object1) !== Array.isArray(object2)) {\n        return false;\n    }\n    const visitedPairs = visited.get(object1);\n    if (visitedPairs && visitedPairs.has(object2)) {\n        return true;\n    }\n    if (visitedPairs) {\n        visitedPairs.add(object2);\n    }\n    else {\n        const ws = new WeakSet();\n        ws.add(object2);\n        visited.set(object1, ws);\n    }\n    for (const key of keys1) {\n        const val1 = object1[key];\n        if (!(key in object2)) {\n            return false;\n        }\n        if (key !== 'ref') {\n            const val2 = object2[key];\n            if ((isDateObject(val1) && isDateObject(val2)) ||\n                ((isObject(val1) || Array.isArray(val1)) &&\n                    (isObject(val2) || Array.isArray(val2)))\n                ? !deepEqual(val1, val2, visited)\n                : !Object.is(val1, val2)) {\n                return false;\n            }\n        }\n    }\n    return true;\n}\n\n/**\n * Custom hook to subscribe to field change and isolate re-rendering at the component level.\n *\n * @remarks\n *\n * [API](https://react-hook-form.com/docs/usewatch) • [Demo](https://codesandbox.io/s/react-hook-form-v7-ts-usewatch-h9i5e)\n *\n * @example\n * ```tsx\n * const { control } = useForm();\n * const values = useWatch({\n *   name: \"fieldName\"\n *   control,\n * })\n * ```\n */\nfunction useWatch(props) {\n    const formControl = useFormControlContext();\n    const { control = formControl, name, defaultValue, disabled, exact, compute, } = props || {};\n    const _defaultValue = React.useRef(defaultValue);\n    const _compute = React.useRef(compute);\n    const _computeFormValues = React.useRef(undefined);\n    const _prevControl = React.useRef(control);\n    const _prevName = React.useRef(name);\n    _compute.current = compute;\n    const [value, updateValue] = React.useState(() => {\n        const defaultValue = control._getWatch(name, _defaultValue.current);\n        return _compute.current ? _compute.current(defaultValue) : defaultValue;\n    });\n    const getCurrentOutput = React.useCallback((values) => {\n        const formValues = generateWatchOutput(name, control._names, values || control._formValues, false, _defaultValue.current);\n        return _compute.current ? _compute.current(formValues) : formValues;\n    }, [control._formValues, control._names, name]);\n    const refreshValue = React.useCallback((values) => {\n        if (!disabled) {\n            const formValues = generateWatchOutput(name, control._names, values || control._formValues, false, _defaultValue.current);\n            if (_compute.current) {\n                const computedFormValues = _compute.current(formValues);\n                if (!deepEqual(computedFormValues, _computeFormValues.current)) {\n                    updateValue(computedFormValues);\n                    _computeFormValues.current = computedFormValues;\n                }\n            }\n            else {\n                updateValue(formValues);\n            }\n        }\n    }, [control._formValues, control._names, disabled, name]);\n    useIsomorphicLayoutEffect(() => {\n        if (_prevControl.current !== control ||\n            !deepEqual(_prevName.current, name)) {\n            _prevControl.current = control;\n            _prevName.current = name;\n            refreshValue();\n        }\n        return control._subscribe({\n            name,\n            formState: {\n                values: true,\n            },\n            exact,\n            callback: (formState) => {\n                refreshValue(formState.values);\n            },\n        });\n    }, [control, exact, name, refreshValue]);\n    React.useEffect(() => control._removeUnmounted());\n    // If name or control changed for this render, synchronously reflect the\n    // latest value so callers (like useController) see the correct value\n    // immediately on the same render.\n    // Optimize: Check control reference first before expensive deepEqual\n    const controlChanged = _prevControl.current !== control;\n    const prevName = _prevName.current;\n    // Cache the computed output to avoid duplicate calls within the same render\n    // We include shouldReturnImmediate in deps to ensure proper recomputation\n    const computedOutput = React.useMemo(() => {\n        if (disabled) {\n            return null;\n        }\n        const nameChanged = !controlChanged && !deepEqual(prevName, name);\n        const shouldReturnImmediate = controlChanged || nameChanged;\n        return shouldReturnImmediate ? getCurrentOutput() : null;\n    }, [disabled, controlChanged, name, prevName, getCurrentOutput]);\n    return computedOutput !== null ? computedOutput : value;\n}\n\n/**\n * Custom hook to work with controlled component, this function provide you with both form and field level state. Re-render is isolated at the hook level.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usecontroller) • [Demo](https://codesandbox.io/s/usecontroller-0o8px)\n *\n * @param props - the path name to the form field value, and validation rules.\n *\n * @returns field properties, field and form state. {@link UseControllerReturn}\n *\n * @example\n * ```tsx\n * function Input(props) {\n *   const { field, fieldState, formState } = useController(props);\n *   return (\n *     <div>\n *       <input {...field} placeholder={props.name} />\n *       <p>{fieldState.isTouched && \"Touched\"}</p>\n *       <p>{formState.isSubmitted ? \"submitted\" : \"\"}</p>\n *     </div>\n *   );\n * }\n * ```\n */\nfunction useController(props) {\n    const formControl = useFormControlContext();\n    const { name, disabled, control = formControl, shouldUnregister, defaultValue, exact = true, } = props;\n    const isArrayField = isNameInFieldArray(control._names.array, name);\n    const defaultValueMemo = React.useMemo(() => get(control._formValues, name, get(control._defaultValues, name, defaultValue)), [control, name, defaultValue]);\n    const value = useWatch({\n        control,\n        name,\n        defaultValue: defaultValueMemo,\n        exact,\n    });\n    const formState = useFormState({\n        control,\n        name,\n        exact,\n    });\n    const _props = React.useRef(props);\n    const _proxyRef = React.useRef(null);\n    const _registerProps = React.useRef(control.register(name, {\n        ...props.rules,\n        value,\n        ...(isBoolean(props.disabled) ? { disabled: props.disabled } : {}),\n    }));\n    _props.current = props;\n    const fieldState = React.useMemo(() => Object.defineProperties({}, {\n        invalid: {\n            enumerable: true,\n            get: () => !!get(formState.errors, name),\n        },\n        isDirty: {\n            enumerable: true,\n            get: () => !!get(formState.dirtyFields, name),\n        },\n        isTouched: {\n            enumerable: true,\n            get: () => !!get(formState.touchedFields, name),\n        },\n        isValidating: {\n            enumerable: true,\n            get: () => !!get(formState.validatingFields, name),\n        },\n        error: {\n            enumerable: true,\n            get: () => get(formState.errors, name),\n        },\n    }), [formState, name]);\n    const onChange = React.useCallback((event) => {\n        const value = getEventValue(event);\n        if (!get(control._fields, name)) {\n            _registerProps.current = control.register(name, {\n                ..._props.current.rules,\n                value,\n            });\n        }\n        return _registerProps.current.onChange({\n            target: {\n                value: getEventValue(event),\n                name: name,\n            },\n            type: EVENTS.CHANGE,\n        });\n    }, [name, control]);\n    const onBlur = React.useCallback(() => _registerProps.current.onBlur({\n        target: {\n            value: get(control._formValues, name),\n            name: name,\n        },\n        type: EVENTS.BLUR,\n    }), [name, control._formValues]);\n    const ref = React.useCallback((elm) => {\n        if (elm) {\n            _proxyRef.current = {\n                focus: () => isFunction(elm.focus) && elm.focus(),\n                select: () => isFunction(elm.select) && elm.select(),\n                setCustomValidity: (message) => isFunction(elm.setCustomValidity) && elm.setCustomValidity(message),\n                reportValidity: () => isFunction(elm.reportValidity) && elm.reportValidity(),\n            };\n        }\n        const field = get(control._fields, name);\n        if (field && field._f && elm) {\n            field._f.ref = _proxyRef.current;\n        }\n    }, [control._fields, name]);\n    const field = React.useMemo(() => ({\n        name,\n        value,\n        ...(isBoolean(disabled) || formState.disabled\n            ? { disabled: formState.disabled || disabled }\n            : {}),\n        onChange,\n        onBlur,\n        ref,\n    }), [name, disabled, formState.disabled, onChange, onBlur, ref, value]);\n    React.useEffect(() => {\n        const _shouldUnregisterField = control._options.shouldUnregister || shouldUnregister;\n        control.register(name, {\n            ..._props.current.rules,\n            ...(isBoolean(_props.current.disabled)\n                ? { disabled: _props.current.disabled }\n                : {}),\n        });\n        const updateMounted = (name, value) => {\n            const field = get(control._fields, name);\n            if (field && field._f) {\n                field._f.mount = value;\n            }\n        };\n        updateMounted(name, true);\n        if (_shouldUnregisterField) {\n            const value = cloneObject(get(shouldUnregister\n                ? control._defaultValues\n                : control._options.values || control._defaultValues, name, get(control._options.defaultValues, name, _props.current.defaultValue)));\n            set(control._defaultValues, name, value);\n            if (isUndefined(get(control._formValues, name))) {\n                set(control._formValues, name, value);\n            }\n        }\n        !isArrayField && control.register(name);\n        if (_proxyRef.current) {\n            const field = get(control._fields, name);\n            if (field && field._f) {\n                field._f.ref = _proxyRef.current;\n            }\n        }\n        return () => {\n            (isArrayField\n                ? _shouldUnregisterField && !control._state.action\n                : _shouldUnregisterField)\n                ? control.unregister(name)\n                : updateMounted(name, false);\n        };\n    }, [name, control, isArrayField, shouldUnregister]);\n    React.useEffect(() => {\n        control._setDisabledField({\n            disabled,\n            name,\n        });\n    }, [disabled, name, control]);\n    return React.useMemo(() => ({\n        field,\n        formState,\n        fieldState,\n    }), [field, formState, fieldState]);\n}\n\n/**\n * Component based on `useController` hook to work with controlled component.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usecontroller/controller) • [Demo](https://codesandbox.io/s/react-hook-form-v6-controller-ts-jwyzw) • [Video](https://www.youtube.com/watch?v=N2UNk_UCVyA)\n *\n * @param props - the path name to the form field value, and validation rules.\n *\n * @returns provide field handler functions, field and form state.\n *\n * @example\n * ```tsx\n * function App() {\n *   const { control } = useForm<FormValues>({\n *     defaultValues: {\n *       test: \"\"\n *     }\n *   });\n *\n *   return (\n *     <form>\n *       <Controller\n *         control={control}\n *         name=\"test\"\n *         render={({ field: { onChange, onBlur, value, ref }, formState, fieldState }) => (\n *           <>\n *             <input\n *               onChange={onChange} // send value to hook form\n *               onBlur={onBlur} // notify when input is touched\n *               value={value} // return updated value\n *               ref={ref} // set ref for focus management\n *             />\n *             <p>{formState.isSubmitted ? \"submitted\" : \"\"}</p>\n *             <p>{fieldState.isTouched ? \"touched\" : \"\"}</p>\n *           </>\n *         )}\n *       />\n *     </form>\n *   );\n * }\n * ```\n */\nconst Controller = (props) => props.render(useController(props));\n\nconst flatten = (obj) => {\n    const output = {};\n    for (const key of Object.keys(obj)) {\n        if (isObjectType(obj[key]) && obj[key] !== null) {\n            const nested = flatten(obj[key]);\n            for (const nestedKey of Object.keys(nested)) {\n                output[`${key}.${nestedKey}`] = nested[nestedKey];\n            }\n        }\n        else {\n            output[key] = obj[key];\n        }\n    }\n    return output;\n};\n\nconst HookFormContext = React.createContext(null);\nHookFormContext.displayName = 'HookFormContext';\n/**\n * This custom hook allows you to access the form context. useFormContext is intended to be used in deeply nested structures, where it would become inconvenient to pass the context as a prop. To be used with {@link FormProvider}.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformcontext) • [Demo](https://codesandbox.io/s/react-hook-form-v7-form-context-ytudi)\n *\n * @returns return all useForm methods\n *\n * @example\n * ```tsx\n * function App() {\n *   const methods = useForm();\n *   const onSubmit = data => console.log(data);\n *\n *   return (\n *     <FormProvider {...methods} >\n *       <form onSubmit={methods.handleSubmit(onSubmit)}>\n *         <NestedInput />\n *         <input type=\"submit\" />\n *       </form>\n *     </FormProvider>\n *   );\n * }\n *\n *  function NestedInput() {\n *   const { register } = useFormContext(); // retrieve all hook methods\n *   return <input {...register(\"test\")} />;\n * }\n * ```\n */\nconst useFormContext = () => React.useContext(HookFormContext);\n/**\n * A provider component that propagates the `useForm` methods to all children components via [React Context](https://react.dev/reference/react/useContext) API. To be used with {@link useFormContext}.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformcontext) • [Demo](https://codesandbox.io/s/react-hook-form-v7-form-context-ytudi)\n *\n * @param props - all useForm methods\n *\n * @example\n * ```tsx\n * function App() {\n *   const methods = useForm();\n *   const onSubmit = data => console.log(data);\n *\n *   return (\n *     <FormProvider {...methods} >\n *       <form onSubmit={methods.handleSubmit(onSubmit)}>\n *         <NestedInput />\n *         <input type=\"submit\" />\n *       </form>\n *     </FormProvider>\n *   );\n * }\n *\n *  function NestedInput() {\n *   const { register } = useFormContext(); // retrieve all hook methods\n *   return <input {...register(\"test\")} />;\n * }\n * ```\n */\nconst FormProvider = ({ children, watch, getValues, getFieldState, setError, clearErrors, setValue, setValues, trigger, formState, resetField, reset, handleSubmit, unregister, control, register, setFocus, subscribe, }) => {\n    const memoizedValue = React.useMemo(() => ({\n        watch,\n        getValues,\n        getFieldState,\n        setError,\n        clearErrors,\n        setValue,\n        setValues,\n        trigger,\n        formState,\n        resetField,\n        reset,\n        handleSubmit,\n        unregister,\n        control,\n        register,\n        setFocus,\n        subscribe,\n    }), [\n        clearErrors,\n        control,\n        formState,\n        getFieldState,\n        getValues,\n        handleSubmit,\n        register,\n        reset,\n        resetField,\n        setError,\n        setFocus,\n        setValue,\n        setValues,\n        subscribe,\n        trigger,\n        unregister,\n        watch,\n    ]);\n    return (React.createElement(HookFormContext.Provider, { value: memoizedValue },\n        React.createElement(HookFormControlContext.Provider, { value: memoizedValue.control }, children)));\n};\n\nconst POST_REQUEST = 'post';\n/**\n * Form component to manage submission.\n *\n * @param props - to setup submission detail. {@link FormProps}\n *\n * @returns form component or headless render prop.\n *\n * @example\n * ```tsx\n * function App() {\n *   const { control, formState: { errors } } = useForm();\n *\n *   return (\n *     <Form action=\"/api\" control={control}>\n *       <input {...register(\"name\")} />\n *       <p>{errors?.root?.server && 'Server error'}</p>\n *       <button>Submit</button>\n *     </Form>\n *   );\n * }\n * ```\n */\nfunction Form(props) {\n    const methods = useFormContext();\n    const [mounted, setMounted] = React.useState(false);\n    const { control = methods.control, onSubmit, children, action, method = POST_REQUEST, headers, encType, onError, render, onSuccess, validateStatus, ...rest } = props;\n    const submit = React.useCallback(async (event) => {\n        let hasError = false;\n        let type = '';\n        await control.handleSubmit(async (data) => {\n            const formData = new FormData();\n            let formDataJson = '';\n            try {\n                formDataJson = JSON.stringify(data);\n            }\n            catch (_a) { }\n            const flattenFormValues = flatten(data);\n            for (const key in flattenFormValues) {\n                formData.append(key, flattenFormValues[key]);\n            }\n            if (onSubmit) {\n                await onSubmit({\n                    data,\n                    event,\n                    method,\n                    formData,\n                    formDataJson,\n                });\n            }\n            if (action) {\n                try {\n                    const shouldStringifySubmissionData = [\n                        headers && headers['Content-Type'],\n                        encType,\n                    ].some((value) => value && value.includes('json'));\n                    const response = await fetch(String(action), {\n                        method,\n                        headers: {\n                            ...headers,\n                            ...(encType && encType !== 'multipart/form-data'\n                                ? { 'Content-Type': encType }\n                                : {}),\n                        },\n                        body: shouldStringifySubmissionData ? formDataJson : formData,\n                    });\n                    if (response &&\n                        (validateStatus\n                            ? !validateStatus(response.status)\n                            : response.status < 200 || response.status >= 300)) {\n                        hasError = true;\n                        onError && onError({ response });\n                        type = String(response.status);\n                    }\n                    else {\n                        onSuccess && onSuccess({ response });\n                    }\n                }\n                catch (error) {\n                    hasError = true;\n                    onError && onError({ error });\n                }\n            }\n        })(event);\n        if (hasError && control) {\n            control._subjects.state.next({\n                isSubmitSuccessful: false,\n            });\n            control.setError('root.server', {\n                type,\n            });\n        }\n    }, [\n        control,\n        onSubmit,\n        method,\n        action,\n        headers,\n        encType,\n        validateStatus,\n        onError,\n        onSuccess,\n    ]);\n    React.useEffect(() => {\n        setMounted(true);\n    }, []);\n    return render ? (React.createElement(React.Fragment, null, render({\n        submit,\n    }))) : (React.createElement(\"form\", { noValidate: mounted, action: action, method: method, encType: encType, onSubmit: submit, ...rest }, children));\n}\n\nconst FormStateSubscribe = ({ control, disabled, exact, name, render, }) => render(useFormState({ control, name, disabled, exact }));\n\nvar appendErrors = (name, validateAllFieldCriteria, errors, type, message) => validateAllFieldCriteria\n    ? {\n        ...errors[name],\n        types: {\n            ...(errors[name] && errors[name].types ? errors[name].types : {}),\n            [type]: message || true,\n        },\n    }\n    : {};\n\nvar compact = (value) => Array.isArray(value) ? value.filter(Boolean) : [];\n\nvar convertToArrayPayload = (value) => (Array.isArray(value) ? value : [value]);\n\nvar createSubject = () => {\n    let _observers = [];\n    const next = (value) => {\n        for (const observer of _observers) {\n            observer.next && observer.next(value);\n        }\n    };\n    const subscribe = (observer) => {\n        _observers.push(observer);\n        return {\n            unsubscribe: () => {\n                _observers = _observers.filter((o) => o !== observer);\n            },\n        };\n    };\n    const unsubscribe = () => {\n        _observers = [];\n    };\n    return {\n        get observers() {\n            return _observers;\n        },\n        next,\n        subscribe,\n        unsubscribe,\n    };\n};\n\nfunction extractFormValues(fieldsState, formValues) {\n    const values = {};\n    for (const key in fieldsState) {\n        if (fieldsState.hasOwnProperty(key)) {\n            const fieldState = fieldsState[key];\n            const fieldValue = formValues[key];\n            if (fieldState && isObject(fieldState) && fieldValue) {\n                const nestedFieldsState = extractFormValues(fieldState, fieldValue);\n                if (isObject(nestedFieldsState)) {\n                    values[key] = nestedFieldsState;\n                }\n            }\n            else if (fieldsState[key]) {\n                values[key] = fieldValue;\n            }\n        }\n    }\n    return values;\n}\n\nvar isEmptyObject = (value) => isObject(value) && !Object.keys(value).length;\n\nvar isFileInput = (element) => element.type === 'file';\n\nvar isHTMLElement = (value) => {\n    if (!isWeb) {\n        return false;\n    }\n    const owner = value ? value.ownerDocument : 0;\n    return (value instanceof\n        (owner && owner.defaultView ? owner.defaultView.HTMLElement : HTMLElement));\n};\n\nvar isMultipleSelect = (element) => element.type === `select-multiple`;\n\nvar isRadioInput = (element) => element.type === 'radio';\n\nvar isRadioOrCheckbox = (ref) => isRadioInput(ref) || isCheckBoxInput(ref);\n\nvar live = (ref) => isHTMLElement(ref) && ref.isConnected;\n\nfunction baseGet(object, updatePath) {\n    const length = updatePath.slice(0, -1).length;\n    let index = 0;\n    while (index < length) {\n        if (isNullOrUndefined(object)) {\n            object = undefined;\n            break;\n        }\n        object = object[updatePath[index]];\n        index++;\n    }\n    return object;\n}\nfunction isEmptyArray(obj) {\n    for (const key in obj) {\n        if (obj.hasOwnProperty(key) && !isUndefined(obj[key])) {\n            return false;\n        }\n    }\n    return true;\n}\nfunction unset(object, path) {\n    if (isString(path) && Object.prototype.hasOwnProperty.call(object, path)) {\n        delete object[path];\n        return object;\n    }\n    const paths = Array.isArray(path)\n        ? path\n        : isKey(path)\n            ? [path]\n            : stringToPath(path);\n    const childObject = paths.length === 1 ? object : baseGet(object, paths);\n    const index = paths.length - 1;\n    const key = paths[index];\n    if (childObject) {\n        delete childObject[key];\n    }\n    if (index !== 0 &&\n        ((isObject(childObject) && isEmptyObject(childObject)) ||\n            (Array.isArray(childObject) && isEmptyArray(childObject)))) {\n        unset(object, paths.slice(0, -1));\n    }\n    return object;\n}\n\nvar objectHasFunction = (data) => {\n    for (const key in data) {\n        if (isFunction(data[key])) {\n            return true;\n        }\n    }\n    return false;\n};\n\nfunction isTraversable(value) {\n    return Array.isArray(value) || (isObject(value) && !objectHasFunction(value));\n}\nfunction markFieldsDirty(data, fields = {}) {\n    for (const key in data) {\n        const value = data[key];\n        if (isTraversable(value)) {\n            fields[key] = Array.isArray(value) ? [] : {};\n            markFieldsDirty(value, fields[key]);\n        }\n        else if (!isUndefined(value)) {\n            fields[key] = true;\n        }\n    }\n    return fields;\n}\nfunction pruneDirtyFields(value) {\n    if (value === false) {\n        return undefined;\n    }\n    if (value === true) {\n        return true;\n    }\n    if (Array.isArray(value)) {\n        const result = value.map((value) => pruneDirtyFields(value));\n        return (result.some((value) => value !== undefined) ? result : undefined);\n    }\n    if (isObject(value)) {\n        const result = {};\n        for (const key in value) {\n            const pruned = pruneDirtyFields(value[key]);\n            if (!isUndefined(pruned)) {\n                result[key] = pruned;\n            }\n        }\n        return (Object.keys(result).length ? result : undefined);\n    }\n    return undefined;\n}\nfunction getDirtyFields(data, formValues, dirtyFieldsFromValues) {\n    if (!dirtyFieldsFromValues) {\n        dirtyFieldsFromValues = markFieldsDirty(formValues);\n    }\n    for (const key in data) {\n        const value = data[key];\n        if (isTraversable(value)) {\n            if (isUndefined(formValues) || isPrimitive(dirtyFieldsFromValues[key])) {\n                dirtyFieldsFromValues[key] = markFieldsDirty(value, Array.isArray(value) ? [] : {});\n            }\n            else {\n                getDirtyFields(value, isNullOrUndefined(formValues) ? {} : formValues[key], dirtyFieldsFromValues[key]);\n            }\n        }\n        else {\n            const formValue = formValues[key];\n            dirtyFieldsFromValues[key] = !deepEqual(value, formValue);\n        }\n    }\n    return pruneDirtyFields(dirtyFieldsFromValues) || {};\n}\n\nconst defaultResult = {\n    value: false,\n    isValid: false,\n};\nconst validResult = { value: true, isValid: true };\nvar getCheckboxValue = (options) => {\n    if (Array.isArray(options)) {\n        if (options.length > 1) {\n            const values = options\n                .filter((option) => option && option.checked && !option.disabled)\n                .map((option) => option.value);\n            return { value: values, isValid: !!values.length };\n        }\n        return options[0].checked && !options[0].disabled\n            ? // @ts-expect-error expected to work in the browser\n                options[0].attributes && !isUndefined(options[0].attributes.value)\n                    ? isUndefined(options[0].value) || options[0].value === ''\n                        ? validResult\n                        : { value: options[0].value, isValid: true }\n                    : validResult\n            : defaultResult;\n    }\n    return defaultResult;\n};\n\nvar getFieldValueAs = (value, { valueAsNumber, valueAsDate, setValueAs }) => isUndefined(value)\n    ? value\n    : valueAsNumber\n        ? value === ''\n            ? NaN\n            : value\n                ? +value\n                : value\n        : valueAsDate && isString(value)\n            ? new Date(value)\n            : setValueAs\n                ? setValueAs(value)\n                : value;\n\nconst defaultReturn = {\n    isValid: false,\n    value: null,\n};\nvar getRadioValue = (options) => Array.isArray(options)\n    ? options.reduce((previous, option) => option && option.checked && !option.disabled\n        ? {\n            isValid: true,\n            value: option.value,\n        }\n        : previous, defaultReturn)\n    : defaultReturn;\n\nfunction getFieldValue(_f) {\n    const ref = _f.ref;\n    if (isFileInput(ref)) {\n        return ref.files;\n    }\n    if (isRadioInput(ref)) {\n        return getRadioValue(_f.refs).value;\n    }\n    if (isMultipleSelect(ref)) {\n        return [...ref.selectedOptions].map(({ value }) => value);\n    }\n    if (isCheckBoxInput(ref)) {\n        return getCheckboxValue(_f.refs).value;\n    }\n    return getFieldValueAs(isUndefined(ref.value) ? _f.ref.value : ref.value, _f);\n}\n\nvar getResolverOptions = (fieldsNames, _fields, criteriaMode, shouldUseNativeValidation) => {\n    const fields = {};\n    for (const name of fieldsNames) {\n        const field = get(_fields, name);\n        field && set(fields, name, field._f);\n    }\n    return {\n        criteriaMode,\n        names: [...fieldsNames],\n        fields,\n        shouldUseNativeValidation,\n    };\n};\n\nvar isRegex = (value) => value instanceof RegExp;\n\nvar getRuleValue = (rule) => isUndefined(rule)\n    ? rule\n    : isRegex(rule)\n        ? rule.source\n        : isObject(rule)\n            ? isRegex(rule.value)\n                ? rule.value.source\n                : rule.value\n            : rule;\n\nvar getValidationModes = (mode) => ({\n    isOnSubmit: !mode || mode === VALIDATION_MODE.onSubmit,\n    isOnBlur: mode === VALIDATION_MODE.onBlur,\n    isOnChange: mode === VALIDATION_MODE.onChange,\n    isOnAll: mode === VALIDATION_MODE.all,\n    isOnTouch: mode === VALIDATION_MODE.onTouched,\n});\n\nconst ASYNC_FUNCTION = 'AsyncFunction';\nvar hasPromiseValidation = (fieldReference) => {\n    if (!fieldReference || !fieldReference.validate)\n        return false;\n    if (isFunction(fieldReference.validate)) {\n        return fieldReference.validate.constructor.name === ASYNC_FUNCTION;\n    }\n    if (isObject(fieldReference.validate)) {\n        for (const key in fieldReference.validate) {\n            if (fieldReference.validate[key].constructor\n                .name === ASYNC_FUNCTION) {\n                return true;\n            }\n        }\n    }\n    return false;\n};\n\nvar hasValidation = (options) => options.mount &&\n    (options.required ||\n        options.min ||\n        options.max ||\n        options.maxLength ||\n        options.minLength ||\n        options.pattern ||\n        options.validate);\n\nvar isWatched = (name, _names, isBlurEvent) => {\n    if (isBlurEvent)\n        return false;\n    if (_names.watchAll || _names.watch.has(name))\n        return true;\n    for (const watchName of _names.watch) {\n        if (name.startsWith(watchName) && name.charAt(watchName.length) === '.')\n            return true;\n    }\n    return false;\n};\n\nconst iterateFieldsByAction = (fields, action, fieldsNames, abortEarly) => {\n    for (const key of fieldsNames || Object.keys(fields)) {\n        const field = get(fields, key);\n        if (field) {\n            const { _f, ...currentField } = field;\n            if (_f) {\n                if (_f.refs && _f.refs[0] && action(_f.refs[0], key) && !abortEarly) {\n                    return true;\n                }\n                else if (_f.ref && action(_f.ref, _f.name) && !abortEarly) {\n                    return true;\n                }\n                else {\n                    if (iterateFieldsByAction(currentField, action)) {\n                        break;\n                    }\n                }\n            }\n            else if (isObject(currentField)) {\n                if (iterateFieldsByAction(currentField, action)) {\n                    break;\n                }\n            }\n        }\n    }\n    return;\n};\n\nfunction schemaErrorLookup(errors, _fields, name) {\n    const error = get(errors, name);\n    if (error || isKey(name)) {\n        return {\n            error,\n            name,\n        };\n    }\n    const names = name.split('.');\n    while (names.length) {\n        const fieldName = names.join('.');\n        const field = get(_fields, fieldName);\n        const foundError = get(errors, fieldName);\n        if (field && !Array.isArray(field) && name !== fieldName) {\n            return { name };\n        }\n        if (foundError && foundError.type) {\n            return {\n                name: fieldName,\n                error: foundError,\n            };\n        }\n        if (foundError && foundError.root && foundError.root.type) {\n            return {\n                name: `${fieldName}.root`,\n                error: foundError.root,\n            };\n        }\n        names.pop();\n    }\n    return {\n        name,\n    };\n}\n\nvar shouldRenderFormState = (formStateData, _proxyFormState, updateFormState, isRoot) => {\n    updateFormState(formStateData);\n    const { name, ...formState } = formStateData;\n    const keys = Object.keys(formState);\n    return (!keys.length ||\n        (isRoot && keys.length >= Object.keys(_proxyFormState).length) ||\n        keys.find((key) => _proxyFormState[key] ===\n            (!isRoot || VALIDATION_MODE.all)));\n};\n\nvar shouldSubscribeByName = (name, signalName, exact) => !name ||\n    !signalName ||\n    name === signalName ||\n    convertToArrayPayload(name).some((currentName) => currentName &&\n        (exact\n            ? currentName === signalName\n            : currentName.startsWith(signalName) ||\n                signalName.startsWith(currentName)));\n\nvar skipValidation = (isBlurEvent, isTouched, isSubmitted, reValidateMode, mode) => {\n    if (mode.isOnAll) {\n        return false;\n    }\n    else if (!isSubmitted && mode.isOnTouch) {\n        return !(isTouched || isBlurEvent);\n    }\n    else if (isSubmitted ? reValidateMode.isOnBlur : mode.isOnBlur) {\n        return !isBlurEvent;\n    }\n    else if (isSubmitted ? reValidateMode.isOnChange : mode.isOnChange) {\n        return isBlurEvent;\n    }\n    return true;\n};\n\nvar unsetEmptyArray = (ref, name) => !compact(get(ref, name)).length && unset(ref, name);\n\nvar updateFieldArrayRootError = (errors, error, name) => {\n    const existingErrors = get(errors, name);\n    const fieldArrayErrors = Array.isArray(existingErrors) ? existingErrors : [];\n    set(fieldArrayErrors, ROOT_ERROR_TYPE, error[name]);\n    set(errors, name, fieldArrayErrors);\n    return errors;\n};\n\nfunction getValidateError(result, ref, type = 'validate') {\n    if (isString(result) ||\n        (Array.isArray(result) && result.every(isString)) ||\n        (isBoolean(result) && !result)) {\n        return {\n            type,\n            message: isString(result) ? result : '',\n            ref,\n        };\n    }\n}\n\nvar getValueAndMessage = (validationData) => isObject(validationData) && !isRegex(validationData)\n    ? validationData\n    : {\n        value: validationData,\n        message: '',\n    };\n\nvar validateField = async (field, disabledFieldNames, formValues, validateAllFieldCriteria, shouldUseNativeValidation, isFieldArray) => {\n    const { ref, refs, required, maxLength, minLength, min, max, pattern, validate, name, valueAsNumber, mount, } = field._f;\n    const inputValue = get(formValues, name);\n    if (!mount || disabledFieldNames.has(name)) {\n        return {};\n    }\n    const inputRef = refs ? refs[0] : ref;\n    const setCustomValidity = (message) => {\n        if (shouldUseNativeValidation && inputRef.reportValidity) {\n            const validityMessage = isBoolean(message) ? '' : message || '';\n            if (refs) {\n                refs.forEach((ref) => ref.setCustomValidity(validityMessage));\n            }\n            else {\n                inputRef.setCustomValidity(validityMessage);\n            }\n            inputRef.reportValidity();\n        }\n    };\n    const error = {};\n    const isRadio = isRadioInput(ref);\n    const isCheckBox = isCheckBoxInput(ref);\n    const isRadioOrCheckbox = isRadio || isCheckBox;\n    const isEmpty = ((valueAsNumber || isFileInput(ref)) &&\n        isUndefined(ref.value) &&\n        isUndefined(inputValue)) ||\n        (isHTMLElement(ref) && ref.value === '') ||\n        inputValue === '' ||\n        (Array.isArray(inputValue) && !inputValue.length);\n    const appendErrorsCurry = appendErrors.bind(null, name, validateAllFieldCriteria, error);\n    const getMinMaxMessage = (exceedMax, maxLengthMessage, minLengthMessage, maxType = INPUT_VALIDATION_RULES.maxLength, minType = INPUT_VALIDATION_RULES.minLength) => {\n        const message = exceedMax ? maxLengthMessage : minLengthMessage;\n        error[name] = {\n            type: exceedMax ? maxType : minType,\n            message,\n            ref,\n            ...appendErrorsCurry(exceedMax ? maxType : minType, message),\n        };\n    };\n    if (isFieldArray\n        ? !Array.isArray(inputValue) || !inputValue.length\n        : required &&\n            ((!isRadioOrCheckbox && (isEmpty || isNullOrUndefined(inputValue))) ||\n                (isBoolean(inputValue) && !inputValue) ||\n                (isCheckBox && !getCheckboxValue(refs).isValid) ||\n                (isRadio && !getRadioValue(refs).isValid))) {\n        const { value, message } = isString(required)\n            ? { value: !!required, message: required }\n            : getValueAndMessage(required);\n        if (value) {\n            error[name] = {\n                type: INPUT_VALIDATION_RULES.required,\n                message,\n                ref: inputRef,\n                ...appendErrorsCurry(INPUT_VALIDATION_RULES.required, message),\n            };\n            if (!validateAllFieldCriteria) {\n                setCustomValidity(message);\n                return error;\n            }\n        }\n    }\n    if (!isEmpty && (!isNullOrUndefined(min) || !isNullOrUndefined(max))) {\n        let exceedMax;\n        let exceedMin;\n        const maxOutput = getValueAndMessage(max);\n        const minOutput = getValueAndMessage(min);\n        if (!isNullOrUndefined(inputValue) && !isNaN(inputValue)) {\n            const valueNumber = ref.valueAsNumber ||\n                (inputValue ? +inputValue : inputValue);\n            if (!isNullOrUndefined(maxOutput.value)) {\n                exceedMax = valueNumber > maxOutput.value;\n            }\n            if (!isNullOrUndefined(minOutput.value)) {\n                exceedMin = valueNumber < minOutput.value;\n            }\n        }\n        else {\n            const valueDate = ref.valueAsDate || new Date(inputValue);\n            const convertTimeToDate = (time) => new Date(new Date().toDateString() + ' ' + time);\n            const isTime = ref.type == 'time';\n            const isWeek = ref.type == 'week';\n            if (isString(maxOutput.value) && inputValue) {\n                exceedMax = isTime\n                    ? convertTimeToDate(inputValue) > convertTimeToDate(maxOutput.value)\n                    : isWeek\n                        ? inputValue > maxOutput.value\n                        : valueDate > new Date(maxOutput.value);\n            }\n            if (isString(minOutput.value) && inputValue) {\n                exceedMin = isTime\n                    ? convertTimeToDate(inputValue) < convertTimeToDate(minOutput.value)\n                    : isWeek\n                        ? inputValue < minOutput.value\n                        : valueDate < new Date(minOutput.value);\n            }\n        }\n        if (exceedMax || exceedMin) {\n            getMinMaxMessage(!!exceedMax, maxOutput.message, minOutput.message, INPUT_VALIDATION_RULES.max, INPUT_VALIDATION_RULES.min);\n            if (!validateAllFieldCriteria) {\n                setCustomValidity(error[name].message);\n                return error;\n            }\n        }\n    }\n    if ((maxLength || minLength) &&\n        !isEmpty &&\n        (isString(inputValue) || (isFieldArray && Array.isArray(inputValue)))) {\n        const maxLengthOutput = getValueAndMessage(maxLength);\n        const minLengthOutput = getValueAndMessage(minLength);\n        const exceedMax = !isNullOrUndefined(maxLengthOutput.value) &&\n            inputValue.length > +maxLengthOutput.value;\n        const exceedMin = !isNullOrUndefined(minLengthOutput.value) &&\n            inputValue.length < +minLengthOutput.value;\n        if (exceedMax || exceedMin) {\n            getMinMaxMessage(exceedMax, maxLengthOutput.message, minLengthOutput.message);\n            if (!validateAllFieldCriteria) {\n                setCustomValidity(error[name].message);\n                return error;\n            }\n        }\n    }\n    if (pattern && !isEmpty && isString(inputValue)) {\n        const { value: patternValue, message } = getValueAndMessage(pattern);\n        if (isRegex(patternValue) && !inputValue.match(patternValue)) {\n            error[name] = {\n                type: INPUT_VALIDATION_RULES.pattern,\n                message,\n                ref,\n                ...appendErrorsCurry(INPUT_VALIDATION_RULES.pattern, message),\n            };\n            if (!validateAllFieldCriteria) {\n                setCustomValidity(message);\n                return error;\n            }\n        }\n    }\n    if (validate) {\n        if (isFunction(validate)) {\n            const result = await validate(inputValue, formValues);\n            const validateError = getValidateError(result, inputRef);\n            if (validateError) {\n                error[name] = {\n                    ...validateError,\n                    ...appendErrorsCurry(INPUT_VALIDATION_RULES.validate, validateError.message),\n                };\n                if (!validateAllFieldCriteria) {\n                    setCustomValidity(validateError.message);\n                    return error;\n                }\n            }\n        }\n        else if (isObject(validate)) {\n            let validationResult = {};\n            for (const key in validate) {\n                if (!isEmptyObject(validationResult) && !validateAllFieldCriteria) {\n                    break;\n                }\n                const validateError = getValidateError(await validate[key](inputValue, formValues), inputRef, key);\n                if (validateError) {\n                    validationResult = {\n                        ...validateError,\n                        ...appendErrorsCurry(key, validateError.message),\n                    };\n                    setCustomValidity(validateError.message);\n                    if (validateAllFieldCriteria) {\n                        error[name] = validationResult;\n                    }\n                }\n            }\n            if (!isEmptyObject(validationResult)) {\n                error[name] = {\n                    ref: inputRef,\n                    ...validationResult,\n                };\n                if (!validateAllFieldCriteria) {\n                    return error;\n                }\n            }\n        }\n    }\n    setCustomValidity(true);\n    return error;\n};\n\nconst defaultOptions = {\n    mode: VALIDATION_MODE.onSubmit,\n    reValidateMode: VALIDATION_MODE.onChange,\n    shouldFocusError: true,\n};\nconst FORM_ERROR_TYPE = 'form';\nconst DEFAULT_FORM_STATE = {\n    submitCount: 0,\n    isDirty: false,\n    isReady: false,\n    isValidating: false,\n    isSubmitted: false,\n    isSubmitting: false,\n    isSubmitSuccessful: false,\n    isValid: false,\n    touchedFields: {},\n    dirtyFields: {},\n    validatingFields: {},\n};\nfunction createFormControl(props = {}) {\n    let _options = {\n        ...defaultOptions,\n        ...props,\n    };\n    let _formState = {\n        ...cloneObject(DEFAULT_FORM_STATE),\n        isLoading: isFunction(_options.defaultValues),\n        errors: _options.errors || {},\n        disabled: _options.disabled || false,\n    };\n    let _fields = {};\n    let _defaultValues = isObject(_options.defaultValues) || isObject(_options.values)\n        ? cloneObject(_options.defaultValues || _options.values) || {}\n        : {};\n    let _formValues = _options.shouldUnregister\n        ? {}\n        : cloneObject(_defaultValues);\n    let _state = {\n        action: false,\n        mount: false,\n        watch: false,\n        keepIsValid: false,\n    };\n    let _names = {\n        mount: new Set(),\n        disabled: new Set(),\n        unMount: new Set(),\n        array: new Set(),\n        watch: new Set(),\n        registerName: new Set(),\n    };\n    let delayErrorCallback;\n    let timer = 0;\n    let _valuesSubscriberCount = 0;\n    let _validationModeBeforeSubmit = getValidationModes(_options.mode);\n    let _validationModeAfterSubmit = getValidationModes(_options.reValidateMode);\n    const defaultProxyFormState = {\n        isDirty: false,\n        dirtyFields: false,\n        validatingFields: false,\n        touchedFields: false,\n        isValidating: false,\n        isValid: false,\n        errors: false,\n    };\n    const _proxyFormState = {\n        ...defaultProxyFormState,\n    };\n    let _proxySubscribeFormState = {\n        ..._proxyFormState,\n    };\n    const _subjects = {\n        array: createSubject(),\n        state: createSubject(),\n    };\n    const shouldDisplayAllAssociatedErrors = _options.criteriaMode === VALIDATION_MODE.all;\n    const debounce = (callback) => (wait) => {\n        clearTimeout(timer);\n        timer = setTimeout(callback, wait);\n    };\n    const _setValid = async (shouldUpdateValid) => {\n        if (_state.keepIsValid) {\n            return;\n        }\n        if (!_options.disabled &&\n            (_proxyFormState.isValid ||\n                _proxySubscribeFormState.isValid ||\n                shouldUpdateValid)) {\n            let isValid;\n            if (_options.resolver) {\n                isValid = isEmptyObject((await _runSchema()).errors);\n                _updateIsValidating();\n            }\n            else {\n                isValid = await executeBuiltInValidation({\n                    fields: _fields,\n                    onlyCheckValid: true,\n                    eventType: EVENTS.VALID,\n                });\n            }\n            if (isValid !== _formState.isValid) {\n                _subjects.state.next({\n                    isValid,\n                });\n            }\n        }\n    };\n    const _updateIsValidating = (names, isValidating) => {\n        if (!_options.disabled &&\n            (_proxyFormState.isValidating ||\n                _proxyFormState.validatingFields ||\n                _proxySubscribeFormState.isValidating ||\n                _proxySubscribeFormState.validatingFields)) {\n            (names || Array.from(_names.mount)).forEach((name) => {\n                if (name) {\n                    isValidating\n                        ? set(_formState.validatingFields, name, isValidating)\n                        : unset(_formState.validatingFields, name);\n                }\n            });\n            _subjects.state.next({\n                validatingFields: _formState.validatingFields,\n                isValidating: !isEmptyObject(_formState.validatingFields),\n            });\n        }\n    };\n    const _updateDirtyFields = () => {\n        _formState.dirtyFields = getDirtyFields(_defaultValues, _formValues);\n    };\n    const _setFieldArray = (name, values = [], method, args, shouldSetValues = true, shouldUpdateFieldsAndState = true) => {\n        if (args && method && !_options.disabled) {\n            _state.action = true;\n            if (shouldUpdateFieldsAndState && Array.isArray(get(_fields, name))) {\n                const fieldValues = method(get(_fields, name), args.argA, args.argB);\n                shouldSetValues && set(_fields, name, fieldValues);\n            }\n            if (shouldUpdateFieldsAndState &&\n                Array.isArray(get(_formState.errors, name))) {\n                const errors = method(get(_formState.errors, name), args.argA, args.argB);\n                shouldSetValues && set(_formState.errors, name, errors);\n                unsetEmptyArray(_formState.errors, name);\n            }\n            if ((_proxyFormState.touchedFields ||\n                _proxySubscribeFormState.touchedFields) &&\n                shouldUpdateFieldsAndState &&\n                Array.isArray(get(_formState.touchedFields, name))) {\n                const touchedFields = method(get(_formState.touchedFields, name), args.argA, args.argB);\n                shouldSetValues && set(_formState.touchedFields, name, touchedFields);\n            }\n            if (_proxyFormState.dirtyFields || _proxySubscribeFormState.dirtyFields) {\n                _updateDirtyFields();\n            }\n            _subjects.state.next({\n                name,\n                isDirty: _getDirty(name, values),\n                dirtyFields: _formState.dirtyFields,\n                errors: _formState.errors,\n                isValid: _formState.isValid,\n            });\n        }\n        else {\n            set(_formValues, name, values);\n        }\n    };\n    const updateErrors = (name, error) => {\n        set(_formState.errors, name, error);\n        _formState.errors = { ..._formState.errors };\n        _subjects.state.next({\n            errors: _formState.errors,\n        });\n    };\n    const _setErrors = (errors) => {\n        _formState.errors = errors;\n        _subjects.state.next({\n            errors: _formState.errors,\n            isValid: false,\n        });\n    };\n    const hasExplicitNullIntermediate = (name) => {\n        const segments = isKey(name) ? [name] : stringToPath(name);\n        let formValues = _formValues;\n        let defaultValues = _defaultValues;\n        for (let i = 0; i < segments.length - 1; i++) {\n            const key = segments[i];\n            formValues = isNullOrUndefined(formValues) ? formValues : formValues[key];\n            defaultValues = isNullOrUndefined(defaultValues)\n                ? defaultValues\n                : defaultValues[key];\n            if (formValues === null && defaultValues !== null) {\n                return true;\n            }\n        }\n        return false;\n    };\n    const updateValidAndValue = (name, shouldSkipSetValueAs, value, ref) => {\n        const field = get(_fields, name);\n        if (field) {\n            if (hasExplicitNullIntermediate(name)) {\n                return;\n            }\n            const wasUnsetInFormValues = isUndefined(get(_formValues, name));\n            const defaultValue = get(_formValues, name, isUndefined(value) ? get(_defaultValues, name) : value);\n            isUndefined(defaultValue) ||\n                (ref && ref.defaultChecked) ||\n                shouldSkipSetValueAs\n                ? set(_formValues, name, shouldSkipSetValueAs ? defaultValue : getFieldValue(field._f))\n                : setFieldValue(name, defaultValue);\n            if (_state.mount && !_state.action) {\n                _setValid();\n                if (wasUnsetInFormValues &&\n                    _formState.isDirty &&\n                    (_proxyFormState.isDirty || _proxySubscribeFormState.isDirty)) {\n                    const isDirty = _getDirty();\n                    if (!isDirty) {\n                        _formState.isDirty = false;\n                        _subjects.state.next({ ..._formState });\n                    }\n                }\n                if (props.shouldUnregister &&\n                    wasUnsetInFormValues &&\n                    !isUndefined(get(_formValues, name)) &&\n                    isWatched(name, _names)) {\n                    _state.watch = true;\n                }\n            }\n        }\n    };\n    const updateTouchAndDirty = (name, fieldValue, isBlurEvent, shouldDirty, shouldRender) => {\n        let shouldUpdateField = false;\n        let isPreviousDirty = false;\n        const output = {\n            name,\n        };\n        if (!_options.disabled) {\n            if (!isBlurEvent || shouldDirty) {\n                const isCurrentFieldPristine = deepEqual(get(_defaultValues, name), fieldValue);\n                if (_proxyFormState.isDirty || _proxySubscribeFormState.isDirty) {\n                    isPreviousDirty = _formState.isDirty;\n                    _formState.isDirty = output.isDirty =\n                        !isCurrentFieldPristine || _getDirty();\n                    shouldUpdateField = isPreviousDirty !== output.isDirty;\n                }\n                isPreviousDirty = !!get(_formState.dirtyFields, name);\n                if (isCurrentFieldPristine !== _formState.isDirty) {\n                    _formState.dirtyFields = getDirtyFields(_defaultValues, _formValues);\n                }\n                else {\n                    isCurrentFieldPristine\n                        ? unset(_formState.dirtyFields, name)\n                        : set(_formState.dirtyFields, name, true);\n                }\n                output.dirtyFields = _formState.dirtyFields;\n                shouldUpdateField =\n                    shouldUpdateField ||\n                        ((_proxyFormState.dirtyFields ||\n                            _proxySubscribeFormState.dirtyFields) &&\n                            isPreviousDirty !== !isCurrentFieldPristine);\n            }\n            if (isBlurEvent) {\n                const isPreviousFieldTouched = get(_formState.touchedFields, name);\n                if (!isPreviousFieldTouched) {\n                    set(_formState.touchedFields, name, isBlurEvent);\n                    output.touchedFields = _formState.touchedFields;\n                    shouldUpdateField =\n                        shouldUpdateField ||\n                            ((_proxyFormState.touchedFields ||\n                                _proxySubscribeFormState.touchedFields) &&\n                                isPreviousFieldTouched !== isBlurEvent);\n                }\n            }\n            shouldUpdateField && shouldRender && _subjects.state.next(output);\n        }\n        return shouldUpdateField ? output : {};\n    };\n    const shouldRenderByError = (name, isValid, error, fieldState) => {\n        const previousFieldError = get(_formState.errors, name);\n        const shouldUpdateValid = (_proxyFormState.isValid || _proxySubscribeFormState.isValid) &&\n            isBoolean(isValid) &&\n            _formState.isValid !== isValid;\n        if (_options.delayError && error) {\n            delayErrorCallback = debounce(() => updateErrors(name, error));\n            delayErrorCallback(_options.delayError);\n        }\n        else {\n            clearTimeout(timer);\n            delayErrorCallback = null;\n            error\n                ? set(_formState.errors, name, error)\n                : unset(_formState.errors, name);\n            _formState.errors = { ..._formState.errors };\n        }\n        if ((error ? !deepEqual(previousFieldError, error) : previousFieldError) ||\n            !isEmptyObject(fieldState) ||\n            shouldUpdateValid) {\n            const updatedFormState = {\n                ...fieldState,\n                ...(shouldUpdateValid && isBoolean(isValid) ? { isValid } : {}),\n                errors: _formState.errors,\n                name,\n            };\n            _formState = {\n                ..._formState,\n                ...updatedFormState,\n            };\n            _subjects.state.next(updatedFormState);\n        }\n    };\n    const _runSchema = async (name) => {\n        _updateIsValidating(name, true);\n        return await _options.resolver(_formValues, _options.context, getResolverOptions(name || _names.mount, _fields, _options.criteriaMode, _options.shouldUseNativeValidation));\n    };\n    const executeSchemaAndUpdateState = async (names) => {\n        const { errors } = await _runSchema(names);\n        _updateIsValidating(names);\n        if (names) {\n            for (const name of names) {\n                const error = get(errors, name);\n                error\n                    ? _names.array.has(name) &&\n                        isObject(error) &&\n                        !Object.keys(error).some((key) => !Number.isNaN(Number(key)))\n                        ? updateFieldArrayRootError(_formState.errors, { [name]: error }, name)\n                        : set(_formState.errors, name, error)\n                    : unset(_formState.errors, name);\n            }\n            _formState.errors = { ..._formState.errors };\n        }\n        else {\n            _formState.errors = errors;\n        }\n        return errors;\n    };\n    const validateForm = async ({ name, eventType, }) => {\n        if (props.validate) {\n            const result = await props.validate({\n                formValues: _formValues,\n                formState: _formState,\n                name,\n                eventType,\n            });\n            if (isObject(result)) {\n                for (const key in result) {\n                    const error = result[key];\n                    if (error) {\n                        setError(`${FORM_ERROR_TYPE}.${key}`, {\n                            message: isString(error.message) ? error.message : '',\n                            type: error.type || INPUT_VALIDATION_RULES.validate,\n                        });\n                    }\n                }\n            }\n            else if (isString(result) || !result) {\n                setError(FORM_ERROR_TYPE, {\n                    message: result || '',\n                    type: INPUT_VALIDATION_RULES.validate,\n                });\n            }\n            else {\n                clearErrors(FORM_ERROR_TYPE);\n            }\n            return result;\n        }\n        return true;\n    };\n    const executeBuiltInValidation = async ({ fields, onlyCheckValid, name, eventType, context = {\n        valid: true,\n        runRootValidation: false,\n    }, }) => {\n        if (props.validate) {\n            context.runRootValidation = true;\n            const result = await validateForm({\n                name,\n                eventType,\n            });\n            if (!result) {\n                context.valid = false;\n                if (onlyCheckValid) {\n                    return context.valid;\n                }\n            }\n        }\n        for (const name in fields) {\n            const field = fields[name];\n            if (field) {\n                const { _f, ...fieldValue } = field;\n                if (_f) {\n                    const isFieldArrayRoot = _names.array.has(_f.name);\n                    const isPromiseFunction = field._f && hasPromiseValidation(field._f);\n                    const shouldTrackIsValidatingState = _proxyFormState.validatingFields ||\n                        _proxyFormState.isValidating ||\n                        _proxySubscribeFormState.validatingFields ||\n                        _proxySubscribeFormState.isValidating;\n                    if (isPromiseFunction && shouldTrackIsValidatingState) {\n                        _updateIsValidating([_f.name], true);\n                    }\n                    const fieldError = await validateField(field, _names.disabled, _formValues, shouldDisplayAllAssociatedErrors, _options.shouldUseNativeValidation && !onlyCheckValid, isFieldArrayRoot);\n                    if (isPromiseFunction && shouldTrackIsValidatingState) {\n                        _updateIsValidating([_f.name]);\n                    }\n                    if (fieldError[_f.name]) {\n                        context.valid = false;\n                        if (onlyCheckValid) {\n                            break;\n                        }\n                    }\n                    !onlyCheckValid &&\n                        (get(fieldError, _f.name)\n                            ? isFieldArrayRoot\n                                ? updateFieldArrayRootError(_formState.errors, fieldError, _f.name)\n                                : set(_formState.errors, _f.name, fieldError[_f.name])\n                            : unset(_formState.errors, _f.name));\n                    if (props.shouldUseNativeValidation && fieldError[_f.name]) {\n                        break;\n                    }\n                }\n                !isEmptyObject(fieldValue) &&\n                    (await executeBuiltInValidation({\n                        context,\n                        onlyCheckValid,\n                        fields: fieldValue,\n                        name: name,\n                        eventType,\n                    }));\n            }\n        }\n        return context.valid;\n    };\n    const _removeUnmounted = () => {\n        for (const name of _names.unMount) {\n            const field = get(_fields, name);\n            field &&\n                (field._f.refs\n                    ? field._f.refs.every((ref) => !live(ref))\n                    : !live(field._f.ref)) &&\n                unregister(name);\n        }\n        _names.unMount = new Set();\n    };\n    const _getDirty = (name, data) => !_options.disabled &&\n        (name && data && set(_formValues, name, data),\n            !deepEqual(_state.mount ? _formValues : _defaultValues, _defaultValues));\n    const _getWatch = (names, defaultValue, isGlobal) => generateWatchOutput(names, _names, {\n        ...(_state.mount\n            ? _formValues\n            : isUndefined(defaultValue)\n                ? _defaultValues\n                : isString(names)\n                    ? { [names]: defaultValue }\n                    : defaultValue),\n    }, isGlobal, defaultValue);\n    const _getFieldArray = (name) => compact(get(_state.mount ? _formValues : _defaultValues, name, _options.shouldUnregister ? get(_defaultValues, name, []) : []));\n    const setFieldValue = (name, value, options = {}, skipClone = false, skipRender = false) => {\n        const field = get(_fields, name);\n        let fieldValue = value;\n        if (field) {\n            const fieldReference = field._f;\n            if (fieldReference) {\n                !fieldReference.disabled &&\n                    set(_formValues, name, getFieldValueAs(value, fieldReference));\n                fieldValue =\n                    isHTMLElement(fieldReference.ref) && isNullOrUndefined(value)\n                        ? ''\n                        : value;\n                if (isMultipleSelect(fieldReference.ref)) {\n                    [...fieldReference.ref.options].forEach((optionRef) => (optionRef.selected = fieldValue.includes(optionRef.value)));\n                }\n                else if (fieldReference.refs) {\n                    if (isCheckBoxInput(fieldReference.ref)) {\n                        fieldReference.refs.forEach((checkboxRef) => {\n                            if (!checkboxRef.defaultChecked || !checkboxRef.disabled) {\n                                if (Array.isArray(fieldValue)) {\n                                    checkboxRef.checked = !!fieldValue.find((data) => data === checkboxRef.value);\n                                }\n                                else {\n                                    checkboxRef.checked =\n                                        fieldValue === checkboxRef.value || !!fieldValue;\n                                }\n                            }\n                        });\n                    }\n                    else {\n                        fieldReference.refs.forEach((radioRef) => (radioRef.checked = radioRef.value === fieldValue));\n                    }\n                }\n                else if (isFileInput(fieldReference.ref)) {\n                    fieldReference.ref.value = '';\n                }\n                else {\n                    fieldReference.ref.value = fieldValue;\n                    if (!fieldReference.ref.type && !skipRender) {\n                        _subjects.state.next({\n                            name,\n                            values: skipClone ? _formValues : cloneObject(_formValues),\n                        });\n                    }\n                }\n            }\n        }\n        (options.shouldDirty || options.shouldTouch) &&\n            updateTouchAndDirty(name, fieldValue, options.shouldTouch, options.shouldDirty, !skipRender);\n        options.shouldValidate && trigger(name);\n    };\n    const setFieldValues = (name, value, options, skipClone = false, skipRender = false) => {\n        for (const fieldKey in value) {\n            if (!value.hasOwnProperty(fieldKey)) {\n                return;\n            }\n            const fieldValue = value[fieldKey];\n            const fieldName = name + '.' + fieldKey;\n            const field = get(_fields, fieldName);\n            (_names.array.has(name) ||\n                isObject(fieldValue) ||\n                (field && !field._f)) &&\n                !isDateObject(fieldValue)\n                ? setFieldValues(fieldName, fieldValue, options, skipClone, skipRender)\n                : setFieldValue(fieldName, fieldValue, options, skipClone, skipRender);\n        }\n    };\n    const _setValue = (name, value, options, skipClone, skipStateEmit = false) => {\n        const field = get(_fields, name);\n        const isFieldArray = _names.array.has(name);\n        const cloneValue = skipClone ? value : cloneObject(value);\n        const previousValue = get(_formValues, name);\n        const isValueUnchanged = deepEqual(previousValue, cloneValue);\n        if (!isValueUnchanged) {\n            set(_formValues, name, cloneValue);\n        }\n        if (isFieldArray) {\n            _subjects.array.next({\n                name,\n                values: skipClone ? _formValues : cloneObject(_formValues),\n            });\n            if ((_proxyFormState.isDirty ||\n                _proxyFormState.dirtyFields ||\n                _proxySubscribeFormState.isDirty ||\n                _proxySubscribeFormState.dirtyFields) &&\n                options.shouldDirty) {\n                _updateDirtyFields();\n                if (!skipStateEmit) {\n                    _subjects.state.next({\n                        name,\n                        dirtyFields: _formState.dirtyFields,\n                        isDirty: _getDirty(name, cloneValue),\n                    });\n                }\n            }\n        }\n        else {\n            const isEmpty = (Array.isArray(cloneValue) && !cloneValue.length) ||\n                isEmptyObject(cloneValue);\n            if (!field || field._f || isNullOrUndefined(cloneValue) || isEmpty) {\n                setFieldValue(name, cloneValue, options, skipClone, skipStateEmit);\n            }\n            else {\n                setFieldValues(name, cloneValue, options, skipClone, skipStateEmit);\n            }\n        }\n        if (!isValueUnchanged && !skipStateEmit) {\n            const watched = isWatched(name, _names);\n            const values = skipClone ? _formValues : cloneObject(_formValues);\n            _subjects.state.next({\n                ...(watched && _formState),\n                name: _state.mount || watched ? name : undefined,\n                values,\n            });\n        }\n    };\n    const setValue = (name, value, options = {}) => _setValue(name, value, options, false);\n    const setValues = (formValues, options = {}) => {\n        const updatedFormValues = isFunction(formValues)\n            ? formValues(_formValues)\n            : formValues;\n        if (!deepEqual(_formValues, updatedFormValues)) {\n            _formValues = {\n                ..._formValues,\n                ...updatedFormValues,\n            };\n            for (const fieldName of _names.mount) {\n                _setValue(fieldName, get(updatedFormValues, fieldName), options, true, true);\n            }\n            _subjects.state.next({\n                ..._formState,\n                name: undefined,\n                type: undefined,\n                ...(_valuesSubscriberCount ? { values: _formValues } : {}),\n            });\n            if (options.shouldValidate) {\n                _setValid();\n            }\n        }\n    };\n    const onChange = async (event) => {\n        _state.mount = true;\n        const target = event.target;\n        let name = target.name;\n        let isFieldValueUpdated = true;\n        const field = get(_fields, name);\n        const _updateIsFieldValueUpdated = (fieldValue) => {\n            isFieldValueUpdated =\n                Number.isNaN(fieldValue) ||\n                    (isDateObject(fieldValue) && isNaN(fieldValue.getTime())) ||\n                    deepEqual(fieldValue, get(_formValues, name, fieldValue));\n        };\n        if (field) {\n            let error;\n            let isValid;\n            const fieldValue = target.type\n                ? getFieldValue(field._f)\n                : getEventValue(event);\n            const isBlurEvent = event.type === EVENTS.BLUR || event.type === EVENTS.FOCUS_OUT;\n            const hasNoValidationEffect = !hasValidation(field._f) &&\n                !props.validate &&\n                !_options.resolver &&\n                !get(_formState.errors, name) &&\n                !field._f.deps;\n            const shouldSkipValidation = hasNoValidationEffect ||\n                skipValidation(isBlurEvent, get(_formState.touchedFields, name), _formState.isSubmitted, _validationModeAfterSubmit, _validationModeBeforeSubmit);\n            const watched = isWatched(name, _names, isBlurEvent);\n            set(_formValues, name, fieldValue);\n            if (isBlurEvent) {\n                if (!target || !target.readOnly) {\n                    field._f.onBlur && field._f.onBlur(event);\n                    delayErrorCallback && delayErrorCallback(0);\n                }\n            }\n            else if (field._f.onChange) {\n                field._f.onChange(event);\n            }\n            const fieldState = updateTouchAndDirty(name, fieldValue, isBlurEvent);\n            const shouldRender = !isEmptyObject(fieldState) || watched;\n            !isBlurEvent &&\n                _subjects.state.next({\n                    name,\n                    type: event.type,\n                    ...(_valuesSubscriberCount\n                        ? { values: cloneObject(_formValues) }\n                        : {}),\n                });\n            if (shouldSkipValidation) {\n                if ((!hasNoValidationEffect || !_formState.isValid) &&\n                    (_proxyFormState.isValid || _proxySubscribeFormState.isValid)) {\n                    if (_options.mode === 'onBlur') {\n                        if (isBlurEvent) {\n                            _setValid();\n                        }\n                    }\n                    else if (!isBlurEvent) {\n                        _setValid();\n                    }\n                }\n                return (shouldRender &&\n                    _subjects.state.next({ name, ...(watched ? {} : fieldState) }));\n            }\n            if (!_options.resolver && props.validate) {\n                await validateForm({\n                    name: name,\n                    eventType: event.type,\n                });\n            }\n            !isBlurEvent && watched && _subjects.state.next({ ..._formState });\n            if (_options.resolver) {\n                const { errors } = await _runSchema([name]);\n                _updateIsValidating([name]);\n                _updateIsFieldValueUpdated(fieldValue);\n                if (!isFieldValueUpdated) {\n                    !isEmptyObject(fieldState) && _subjects.state.next(fieldState);\n                    return;\n                }\n                const previousErrorLookupResult = schemaErrorLookup(_formState.errors, _fields, name);\n                const errorLookupResult = schemaErrorLookup(errors, _fields, previousErrorLookupResult.name || name);\n                error = errorLookupResult.error;\n                name = errorLookupResult.name;\n                isValid = isEmptyObject(errors);\n            }\n            else {\n                _updateIsValidating([name], true);\n                error = (await validateField(field, _names.disabled, _formValues, shouldDisplayAllAssociatedErrors, _options.shouldUseNativeValidation))[name];\n                _updateIsValidating([name]);\n                _updateIsFieldValueUpdated(fieldValue);\n                if (isFieldValueUpdated) {\n                    if (error) {\n                        isValid = false;\n                    }\n                    else if (_proxyFormState.isValid ||\n                        _proxySubscribeFormState.isValid) {\n                        isValid = await executeBuiltInValidation({\n                            fields: _fields,\n                            onlyCheckValid: true,\n                            name: name,\n                            eventType: event.type,\n                        });\n                    }\n                }\n            }\n            if (isFieldValueUpdated) {\n                field._f.deps &&\n                    (!Array.isArray(field._f.deps) || field._f.deps.length > 0) &&\n                    trigger(field._f.deps);\n                shouldRenderByError(name, isValid, error, fieldState);\n            }\n        }\n    };\n    const _focusInput = (ref, key) => {\n        if (get(_formState.errors, key) && ref.focus) {\n            ref.focus();\n            return 1;\n        }\n        return;\n    };\n    const trigger = async (name, options = {}) => {\n        let isValid;\n        let validationResult;\n        const fieldNames = convertToArrayPayload(name);\n        if (_options.resolver) {\n            const errors = await executeSchemaAndUpdateState(isUndefined(name) ? name : fieldNames);\n            isValid = isEmptyObject(errors);\n            validationResult = name\n                ? !fieldNames.some((name) => get(errors, name))\n                : isValid;\n        }\n        else if (name) {\n            validationResult = (await Promise.all(fieldNames.map(async (fieldName) => {\n                const field = get(_fields, fieldName);\n                return await executeBuiltInValidation({\n                    fields: field && field._f ? { [fieldName]: field } : field,\n                    eventType: EVENTS.TRIGGER,\n                });\n            }))).every(Boolean);\n            !(!validationResult && !_formState.isValid) && _setValid();\n        }\n        else {\n            validationResult = isValid = await executeBuiltInValidation({\n                fields: _fields,\n                name,\n                eventType: EVENTS.TRIGGER,\n            });\n        }\n        _subjects.state.next({\n            ...(!isString(name) ||\n                ((_proxyFormState.isValid || _proxySubscribeFormState.isValid) &&\n                    isValid !== _formState.isValid)\n                ? {}\n                : { name }),\n            ...(_options.resolver || !name ? { isValid } : {}),\n            errors: _formState.errors,\n        });\n        options.shouldFocus &&\n            !validationResult &&\n            iterateFieldsByAction(_fields, _focusInput, name ? fieldNames : _names.mount);\n        return validationResult;\n    };\n    const getValues = (fieldNames, config) => {\n        let values = {\n            ...(_state.mount ? _formValues : _defaultValues),\n        };\n        if (config) {\n            values = extractFormValues(config.dirtyFields ? _formState.dirtyFields : _formState.touchedFields, values);\n        }\n        return isUndefined(fieldNames)\n            ? values\n            : isString(fieldNames)\n                ? get(values, fieldNames)\n                : fieldNames.map((name) => get(values, name));\n    };\n    const getFieldState = (name, formState) => ({\n        invalid: !!get((formState || _formState).errors, name),\n        isDirty: !!get((formState || _formState).dirtyFields, name),\n        error: get((formState || _formState).errors, name),\n        isValidating: !!get(_formState.validatingFields, name),\n        isTouched: !!get((formState || _formState).touchedFields, name),\n    });\n    const clearErrors = (name) => {\n        const names = name ? convertToArrayPayload(name) : undefined;\n        names === null || names === void 0 ? void 0 : names.forEach((inputName) => unset(_formState.errors, inputName));\n        if (names) {\n            names.forEach((inputName) => {\n                _subjects.state.next({\n                    name: inputName,\n                    errors: _formState.errors,\n                });\n            });\n        }\n        else {\n            _subjects.state.next({\n                errors: {},\n            });\n        }\n    };\n    const setError = (name, error, options) => {\n        const ref = (get(_fields, name, { _f: {} })._f || {}).ref;\n        const currentError = get(_formState.errors, name) || {};\n        const { ref: currentRef, message, type, ...restOfErrorTree } = currentError;\n        set(_formState.errors, name, {\n            ...restOfErrorTree,\n            ...error,\n            ref,\n        });\n        _subjects.state.next({\n            name,\n            errors: _formState.errors,\n            isValid: false,\n        });\n        options && options.shouldFocus && ref && ref.focus && ref.focus();\n    };\n    const watch = (name, defaultValue) => {\n        if (isFunction(name)) {\n            _valuesSubscriberCount++;\n            const { unsubscribe } = _subjects.state.subscribe({\n                next: (payload) => 'values' in payload &&\n                    name(payload.values || _getWatch(undefined, defaultValue), payload),\n            });\n            let called = false;\n            return {\n                unsubscribe: () => {\n                    if (called) {\n                        return;\n                    }\n                    called = true;\n                    _valuesSubscriberCount--;\n                    unsubscribe();\n                },\n            };\n        }\n        return _getWatch(name, defaultValue, true);\n    };\n    const _subscribe = (props) => {\n        var _a;\n        const needsValues = !!((_a = props.formState) === null || _a === void 0 ? void 0 : _a.values);\n        if (needsValues) {\n            _valuesSubscriberCount++;\n        }\n        const { unsubscribe } = _subjects.state.subscribe({\n            next: (formState) => {\n                if (shouldSubscribeByName(props.name, formState.name, props.exact) &&\n                    shouldRenderFormState(formState, props.formState || _proxyFormState, _setFormState, props.reRenderRoot)) {\n                    const snapshot = { ..._formValues };\n                    props.callback({\n                        values: snapshot,\n                        ..._formState,\n                        ...formState,\n                        defaultValues: _defaultValues,\n                    });\n                }\n            },\n        });\n        if (!needsValues) {\n            return unsubscribe;\n        }\n        let called = false;\n        return () => {\n            if (called) {\n                return;\n            }\n            called = true;\n            _valuesSubscriberCount--;\n            unsubscribe();\n        };\n    };\n    const subscribe = (props) => {\n        _state.mount = true;\n        _proxySubscribeFormState = {\n            ..._proxySubscribeFormState,\n            ...props.formState,\n        };\n        return _subscribe({\n            ...props,\n            formState: {\n                ...defaultProxyFormState,\n                ...props.formState,\n            },\n        });\n    };\n    const unregister = (name, options = {}) => {\n        for (const fieldName of name ? convertToArrayPayload(name) : _names.mount) {\n            _names.mount.delete(fieldName);\n            _names.array.delete(fieldName);\n            if (!options.keepValue) {\n                unset(_fields, fieldName);\n                unset(_formValues, fieldName);\n            }\n            !options.keepError && unset(_formState.errors, fieldName);\n            !options.keepDirty && unset(_formState.dirtyFields, fieldName);\n            !options.keepTouched && unset(_formState.touchedFields, fieldName);\n            !options.keepIsValidating &&\n                unset(_formState.validatingFields, fieldName);\n            !_options.shouldUnregister &&\n                !options.keepDefaultValue &&\n                unset(_defaultValues, fieldName);\n        }\n        _subjects.state.next({\n            values: cloneObject(_formValues),\n        });\n        _subjects.state.next({\n            ..._formState,\n            ...(!options.keepDirty ? {} : { isDirty: _getDirty() }),\n        });\n        !options.keepIsValid && _setValid();\n    };\n    const _setDisabledField = ({ disabled, name, }) => {\n        if ((isBoolean(disabled) && _state.mount) ||\n            !!disabled ||\n            _names.disabled.has(name)) {\n            const wasDisabled = _names.disabled.has(name);\n            const isDisabled = !!disabled;\n            const disabledStateChanged = wasDisabled !== isDisabled;\n            disabled ? _names.disabled.add(name) : _names.disabled.delete(name);\n            disabledStateChanged && _state.mount && !_state.action && _setValid();\n        }\n    };\n    const register = (name, options = {}) => {\n        let field = get(_fields, name);\n        const disabledIsDefined = isBoolean(options.disabled) || isBoolean(_options.disabled);\n        const shouldRevalidateRemount = !_names.registerName.has(name) && field && field._f && !field._f.mount;\n        set(_fields, name, {\n            ...(field || {}),\n            _f: {\n                ...(field && field._f ? field._f : { ref: { name } }),\n                name,\n                mount: true,\n                ...options,\n            },\n        });\n        _names.mount.add(name);\n        if (field && !shouldRevalidateRemount) {\n            _setDisabledField({\n                disabled: isBoolean(options.disabled)\n                    ? options.disabled\n                    : _options.disabled,\n                name,\n            });\n        }\n        else {\n            updateValidAndValue(name, true, options.value);\n        }\n        return {\n            ...(disabledIsDefined\n                ? { disabled: options.disabled || _options.disabled }\n                : {}),\n            ...(_options.progressive\n                ? {\n                    required: !!options.required,\n                    min: getRuleValue(options.min),\n                    max: getRuleValue(options.max),\n                    minLength: getRuleValue(options.minLength),\n                    maxLength: getRuleValue(options.maxLength),\n                    pattern: getRuleValue(options.pattern),\n                }\n                : {}),\n            name,\n            onChange,\n            onBlur: onChange,\n            ref: (ref) => {\n                if (ref) {\n                    _names.registerName.add(name);\n                    register(name, options);\n                    _names.registerName.delete(name);\n                    field = get(_fields, name);\n                    const fieldRef = isUndefined(ref.value)\n                        ? ref.querySelectorAll\n                            ? ref.querySelectorAll('input,select,textarea')[0] || ref\n                            : ref\n                        : ref;\n                    const radioOrCheckbox = isRadioOrCheckbox(fieldRef);\n                    const refs = field._f.refs || [];\n                    if (radioOrCheckbox\n                        ? refs.find((option) => option === fieldRef)\n                        : fieldRef === field._f.ref) {\n                        return;\n                    }\n                    set(_fields, name, {\n                        _f: {\n                            ...field._f,\n                            ...(radioOrCheckbox\n                                ? {\n                                    refs: [\n                                        ...refs.filter(live),\n                                        fieldRef,\n                                        ...(Array.isArray(get(_defaultValues, name)) ? [{}] : []),\n                                    ],\n                                    ref: { type: fieldRef.type, name },\n                                }\n                                : { ref: fieldRef }),\n                        },\n                    });\n                    updateValidAndValue(name, false, undefined, fieldRef);\n                }\n                else {\n                    field = get(_fields, name, {});\n                    if (field._f) {\n                        field._f.mount = false;\n                    }\n                    (_options.shouldUnregister || options.shouldUnregister) &&\n                        !(isNameInFieldArray(_names.array, name) && _state.action) &&\n                        _names.unMount.add(name);\n                }\n            },\n        };\n    };\n    const _focusError = () => _options.shouldFocusError &&\n        !_options.shouldUseNativeValidation &&\n        iterateFieldsByAction(_fields, _focusInput, _names.mount);\n    const _disableForm = (disabled) => {\n        if (isBoolean(disabled)) {\n            _subjects.state.next({ disabled });\n            iterateFieldsByAction(_fields, (ref, name) => {\n                const currentField = get(_fields, name);\n                if (currentField) {\n                    ref.disabled = currentField._f.disabled || disabled;\n                    if (Array.isArray(currentField._f.refs)) {\n                        currentField._f.refs.forEach((inputRef) => {\n                            inputRef.disabled = currentField._f.disabled || disabled;\n                        });\n                    }\n                }\n            }, 0, false);\n        }\n    };\n    const handleSubmit = (onValid, onInvalid) => async (e) => {\n        let onValidError = undefined;\n        if (e) {\n            e.preventDefault && e.preventDefault();\n            e.persist &&\n                e.persist();\n        }\n        let fieldValues = cloneObject(_formValues);\n        _subjects.state.next({\n            isSubmitting: true,\n        });\n        if (_options.resolver) {\n            const { errors, values } = await _runSchema();\n            _updateIsValidating();\n            _formState.errors = errors;\n            fieldValues = cloneObject(values);\n        }\n        else {\n            await executeBuiltInValidation({\n                fields: _fields,\n                eventType: EVENTS.SUBMIT,\n            });\n        }\n        if (_names.disabled.size) {\n            for (const name of _names.disabled) {\n                unset(fieldValues, name);\n            }\n        }\n        unset(_formState.errors, ROOT_ERROR_TYPE);\n        if (isEmptyObject(_formState.errors)) {\n            _subjects.state.next({\n                errors: {},\n            });\n            try {\n                await onValid(fieldValues, e);\n            }\n            catch (error) {\n                onValidError = error;\n            }\n        }\n        else {\n            if (onInvalid) {\n                await onInvalid({ ..._formState.errors }, e);\n            }\n            _focusError();\n            setTimeout(_focusError);\n        }\n        _subjects.state.next({\n            isSubmitted: true,\n            isSubmitting: false,\n            isSubmitSuccessful: isEmptyObject(_formState.errors) && !onValidError,\n            submitCount: _formState.submitCount + 1,\n            errors: _formState.errors,\n        });\n        if (onValidError) {\n            throw onValidError;\n        }\n    };\n    const resetField = (name, options = {}) => {\n        if (get(_fields, name)) {\n            if (isUndefined(options.defaultValue)) {\n                setValue(name, cloneObject(get(_defaultValues, name)));\n            }\n            else {\n                setValue(name, options.defaultValue);\n                set(_defaultValues, name, cloneObject(options.defaultValue));\n            }\n            if (!options.keepTouched) {\n                unset(_formState.touchedFields, name);\n            }\n            if (!options.keepDirty) {\n                unset(_formState.dirtyFields, name);\n                _formState.isDirty = options.defaultValue\n                    ? _getDirty(name, cloneObject(get(_defaultValues, name)))\n                    : _getDirty();\n            }\n            if (!options.keepError) {\n                unset(_formState.errors, name);\n                _proxyFormState.isValid && _setValid();\n            }\n            _subjects.state.next({ ..._formState });\n        }\n    };\n    const _reset = (formValues, keepStateOptions = {}) => {\n        const updatedValues = formValues ? cloneObject(formValues) : _defaultValues;\n        const cloneUpdatedValues = cloneObject(updatedValues);\n        const isEmptyResetValues = isEmptyObject(formValues);\n        const values = cloneUpdatedValues;\n        if (!keepStateOptions.keepDefaultValues) {\n            _defaultValues = updatedValues;\n        }\n        if (!keepStateOptions.keepValues) {\n            if (keepStateOptions.keepDirtyValues) {\n                const fieldsToCheck = new Set([\n                    ..._names.mount,\n                    ...Object.keys(getDirtyFields(_defaultValues, _formValues)),\n                ]);\n                for (const fieldName of Array.from(fieldsToCheck)) {\n                    const isDirty = get(_formState.dirtyFields, fieldName);\n                    const existingValue = get(_formValues, fieldName);\n                    const newValue = get(values, fieldName);\n                    if (isDirty && !isUndefined(existingValue)) {\n                        set(values, fieldName, existingValue);\n                    }\n                    else if (!isDirty && !isUndefined(newValue)) {\n                        setValue(fieldName, newValue);\n                    }\n                }\n            }\n            else {\n                if (isWeb && isUndefined(formValues)) {\n                    for (const name of _names.mount) {\n                        const field = get(_fields, name);\n                        if (field && field._f) {\n                            const fieldReference = Array.isArray(field._f.refs)\n                                ? field._f.refs[0]\n                                : field._f.ref;\n                            if (isHTMLElement(fieldReference)) {\n                                const form = fieldReference.closest('form');\n                                if (form) {\n                                    form.reset();\n                                    break;\n                                }\n                            }\n                        }\n                    }\n                }\n                if (keepStateOptions.keepFieldsRef) {\n                    for (const fieldName of _names.mount) {\n                        setValue(fieldName, get(values, fieldName));\n                    }\n                }\n                else {\n                    _fields = {};\n                }\n            }\n            if (_options.shouldUnregister) {\n                _formValues = keepStateOptions.keepDefaultValues\n                    ? cloneObject(_defaultValues)\n                    : {};\n                if (keepStateOptions.keepFieldsRef) {\n                    for (const fieldName of _names.mount) {\n                        set(_formValues, fieldName, get(values, fieldName));\n                    }\n                }\n            }\n            else {\n                _formValues = cloneObject(values);\n            }\n            _subjects.array.next({\n                values: { ...values },\n            });\n            _subjects.state.next({\n                values: { ...values },\n            });\n        }\n        _names = {\n            mount: keepStateOptions.keepDirtyValues ? _names.mount : new Set(),\n            unMount: new Set(),\n            array: new Set(),\n            registerName: new Set(),\n            disabled: new Set(),\n            watch: new Set(),\n            watchAll: false,\n            focus: '',\n        };\n        _state.mount =\n            !_proxyFormState.isValid ||\n                !!keepStateOptions.keepIsValid ||\n                !!keepStateOptions.keepDirtyValues ||\n                (!_options.shouldUnregister && !isEmptyObject(values));\n        _state.watch = !!_options.shouldUnregister;\n        _state.keepIsValid = !!keepStateOptions.keepIsValid;\n        _state.action = false;\n        if (!keepStateOptions.keepErrors) {\n            _formState.errors = {};\n        }\n        _subjects.state.next({\n            submitCount: keepStateOptions.keepSubmitCount\n                ? _formState.submitCount\n                : 0,\n            isDirty: isEmptyResetValues\n                ? false\n                : keepStateOptions.keepDirty\n                    ? _formState.isDirty\n                    : keepStateOptions.keepValues\n                        ? _getDirty()\n                        : !!(keepStateOptions.keepDefaultValues &&\n                            !deepEqual(formValues, _defaultValues)),\n            isSubmitted: keepStateOptions.keepIsSubmitted\n                ? _formState.isSubmitted\n                : false,\n            dirtyFields: isEmptyResetValues\n                ? {}\n                : keepStateOptions.keepDirtyValues\n                    ? keepStateOptions.keepDefaultValues && _formValues\n                        ? getDirtyFields(_defaultValues, _formValues)\n                        : _formState.dirtyFields\n                    : keepStateOptions.keepDefaultValues && formValues\n                        ? getDirtyFields(_defaultValues, formValues)\n                        : keepStateOptions.keepDirty\n                            ? _formState.dirtyFields\n                            : {},\n            touchedFields: keepStateOptions.keepTouched\n                ? _formState.touchedFields\n                : {},\n            errors: keepStateOptions.keepErrors ? _formState.errors : {},\n            isSubmitSuccessful: keepStateOptions.keepIsSubmitSuccessful\n                ? _formState.isSubmitSuccessful\n                : false,\n            isSubmitting: false,\n            defaultValues: _defaultValues,\n        });\n    };\n    const reset = (formValues, keepStateOptions) => _reset(isFunction(formValues)\n        ? formValues(_formValues)\n        : formValues, { ..._options.resetOptions, ...keepStateOptions });\n    const setFocus = (name, options = {}) => {\n        const field = get(_fields, name);\n        const fieldReference = field && field._f;\n        if (fieldReference) {\n            const fieldRef = fieldReference.refs\n                ? fieldReference.refs[0]\n                : fieldReference.ref;\n            if (fieldRef.focus) {\n                setTimeout(() => {\n                    fieldRef.focus();\n                    options.shouldSelect &&\n                        isFunction(fieldRef.select) &&\n                        fieldRef.select();\n                });\n            }\n        }\n    };\n    const _setFormState = (updatedFormState) => {\n        _formState = {\n            ..._formState,\n            ...updatedFormState,\n        };\n    };\n    const _resetDefaultValues = () => isFunction(_options.defaultValues) &&\n        _options.defaultValues().then((values) => {\n            reset(values, _options.resetOptions);\n            _subjects.state.next({\n                isLoading: false,\n            });\n        });\n    const resetDefaultValues = (values, options = {}) => {\n        _defaultValues = cloneObject(values);\n        if (!options.keepDirty) {\n            const newDirtyFields = getDirtyFields(_defaultValues, _formValues);\n            _formState.dirtyFields = newDirtyFields;\n            _formState.isDirty = !isEmptyObject(newDirtyFields);\n        }\n        if (!options.keepIsValid) {\n            _setValid();\n        }\n        _subjects.state.next({\n            ..._formState,\n            defaultValues: _defaultValues,\n        });\n    };\n    const methods = {\n        control: {\n            register,\n            unregister,\n            getFieldState,\n            handleSubmit,\n            setError,\n            _subscribe,\n            _runSchema,\n            _updateIsValidating,\n            _focusError,\n            _getWatch,\n            _getDirty,\n            _setValid,\n            _setFieldArray,\n            _setDisabledField,\n            _setErrors,\n            _getFieldArray,\n            _reset,\n            _resetDefaultValues,\n            _removeUnmounted,\n            _disableForm,\n            _subjects,\n            _proxyFormState,\n            get _fields() {\n                return _fields;\n            },\n            get _formValues() {\n                return _formValues;\n            },\n            get _state() {\n                return _state;\n            },\n            set _state(value) {\n                _state = value;\n            },\n            get _defaultValues() {\n                return _defaultValues;\n            },\n            get _names() {\n                return _names;\n            },\n            set _names(value) {\n                _names = value;\n            },\n            get _formState() {\n                return _formState;\n            },\n            get _options() {\n                return _options;\n            },\n            set _options(value) {\n                _options = {\n                    ..._options,\n                    ...value,\n                };\n                _validationModeBeforeSubmit = getValidationModes(_options.mode);\n                _validationModeAfterSubmit = getValidationModes(_options.reValidateMode);\n            },\n        },\n        subscribe,\n        trigger,\n        register,\n        handleSubmit,\n        watch,\n        setValue,\n        setValues,\n        getValues,\n        reset,\n        resetField,\n        resetDefaultValues,\n        clearErrors,\n        unregister,\n        setError,\n        setFocus,\n        getFieldState,\n    };\n    return {\n        ...methods,\n        formControl: methods,\n    };\n}\n\nvar generateId = () => {\n    if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n        return crypto.randomUUID();\n    }\n    const d = typeof performance === 'undefined' ? Date.now() : performance.now() * 1000;\n    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n        const r = ((Math.random() * 16 + d) % 16) | 0;\n        return (c == 'x' ? r : (r & 0x3) | 0x8).toString(16);\n    });\n};\n\nvar getFocusFieldName = (name, index, options = {}) => options.shouldFocus || isUndefined(options.shouldFocus)\n    ? options.focusName ||\n        `${name}.${isUndefined(options.focusIndex) ? index : options.focusIndex}.`\n    : '';\n\nvar appendAt = (data, value) => [\n    ...data,\n    ...convertToArrayPayload(value),\n];\n\nvar fillEmptyArray = (value) => Array.isArray(value) ? value.map(() => undefined) : undefined;\n\nfunction insert(data, index, value) {\n    return [\n        ...data.slice(0, index),\n        ...convertToArrayPayload(value),\n        ...data.slice(index),\n    ];\n}\n\nvar moveArrayAt = (data, from, to) => {\n    if (!Array.isArray(data)) {\n        return [];\n    }\n    if (isUndefined(data[to])) {\n        data[to] = undefined;\n    }\n    data.splice(to, 0, data.splice(from, 1)[0]);\n    return data;\n};\n\nvar prependAt = (data, value) => [\n    ...convertToArrayPayload(value),\n    ...convertToArrayPayload(data),\n];\n\nfunction removeAtIndexes(data, indexes) {\n    let i = 0;\n    const temp = [...data];\n    for (const index of indexes) {\n        temp.splice(index - i, 1);\n        i++;\n    }\n    return compact(temp).length ? temp : [];\n}\nvar removeArrayAt = (data, index) => isUndefined(index)\n    ? []\n    : removeAtIndexes(data, convertToArrayPayload(index).sort((a, b) => a - b));\n\nvar swapArrayAt = (data, indexA, indexB) => {\n    [data[indexA], data[indexB]] = [data[indexB], data[indexA]];\n};\n\nvar updateAt = (fieldValues, index, value) => {\n    fieldValues[index] = value;\n    return fieldValues;\n};\n\n/**\n * A custom hook that exposes convenient methods to perform operations with a list of dynamic inputs that need to be appended, updated, removed etc. • [Demo](https://codesandbox.io/s/react-hook-form-usefieldarray-ssugn) • [Video](https://youtu.be/4MrbfGSFY2A)\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usefieldarray) • [Demo](https://codesandbox.io/s/react-hook-form-usefieldarray-ssugn)\n *\n * @param props - useFieldArray props\n *\n * @returns methods - functions to manipulate with the Field Arrays (dynamic inputs) {@link UseFieldArrayReturn}\n *\n * @example\n * ```tsx\n * function App() {\n *   const { register, control, handleSubmit, reset, trigger, setError } = useForm({\n *     defaultValues: {\n *       test: []\n *     }\n *   });\n *   const { fields, append } = useFieldArray({\n *     control,\n *     name: \"test\"\n *   });\n *\n *   return (\n *     <form onSubmit={handleSubmit(data => console.log(data))}>\n *       {fields.map((item, index) => (\n *          <input key={item.id} {...register(`test.${index}.firstName`)}  />\n *       ))}\n *       <button type=\"button\" onClick={() => append({ firstName: \"bill\" })}>\n *         append\n *       </button>\n *       <input type=\"submit\" />\n *     </form>\n *   );\n * }\n * ```\n */\nfunction useFieldArray(props) {\n    const formControl = useFormControlContext();\n    const { control = formControl, name, keyName = 'id', disabled, shouldUnregister, rules, } = props;\n    const [fields, setFields] = React.useState(control._getFieldArray(name));\n    const ids = React.useRef(control._getFieldArray(name).map(generateId));\n    const _actioned = React.useRef(false);\n    if (!disabled) {\n        control._names.array.add(name);\n    }\n    React.useMemo(() => !disabled &&\n        rules &&\n        fields.length >= 0 &&\n        control.register(name, rules), [control, name, fields.length, rules, disabled]);\n    useIsomorphicLayoutEffect(() => {\n        if (disabled) {\n            return;\n        }\n        return control._subjects.array.subscribe({\n            next: ({ values, name: fieldArrayName, }) => {\n                if (fieldArrayName === name || !fieldArrayName) {\n                    const fieldValues = get(values, name);\n                    if (Array.isArray(fieldValues)) {\n                        setFields(fieldValues);\n                        ids.current = fieldValues.map(generateId);\n                    }\n                    else if (!fieldArrayName) {\n                        setFields([]);\n                        ids.current = [];\n                    }\n                }\n            },\n        }).unsubscribe;\n    }, [control, name, disabled]);\n    const updateValues = React.useCallback((updatedFieldArrayValues) => {\n        _actioned.current = true;\n        control._setFieldArray(name, updatedFieldArrayValues);\n    }, [control, name]);\n    const append = (value, options) => {\n        if (disabled) {\n            return;\n        }\n        const appendValue = convertToArrayPayload(cloneObject(value));\n        const updatedFieldArrayValues = appendAt(control._getFieldArray(name), appendValue);\n        control._names.focus = getFocusFieldName(name, updatedFieldArrayValues.length - 1, options);\n        ids.current = appendAt(ids.current, appendValue.map(generateId));\n        updateValues(updatedFieldArrayValues);\n        setFields(updatedFieldArrayValues);\n        control._setFieldArray(name, updatedFieldArrayValues, appendAt, {\n            argA: fillEmptyArray(value),\n        });\n    };\n    const prepend = (value, options) => {\n        if (disabled) {\n            return;\n        }\n        const prependValue = convertToArrayPayload(cloneObject(value));\n        const updatedFieldArrayValues = prependAt(control._getFieldArray(name), prependValue);\n        control._names.focus = getFocusFieldName(name, 0, options);\n        ids.current = prependAt(ids.current, prependValue.map(generateId));\n        updateValues(updatedFieldArrayValues);\n        setFields(updatedFieldArrayValues);\n        control._setFieldArray(name, updatedFieldArrayValues, prependAt, {\n            argA: fillEmptyArray(value),\n        });\n    };\n    const remove = (index) => {\n        if (disabled) {\n            return;\n        }\n        const updatedFieldArrayValues = removeArrayAt(control._getFieldArray(name), index);\n        ids.current = removeArrayAt(ids.current, index);\n        updateValues(updatedFieldArrayValues);\n        setFields(updatedFieldArrayValues);\n        !Array.isArray(get(control._fields, name)) &&\n            set(control._fields, name, undefined);\n        control._setFieldArray(name, updatedFieldArrayValues, removeArrayAt, {\n            argA: index,\n        });\n    };\n    const insert$1 = (index, value, options) => {\n        if (disabled) {\n            return;\n        }\n        const insertValue = convertToArrayPayload(cloneObject(value));\n        const updatedFieldArrayValues = insert(control._getFieldArray(name), index, insertValue);\n        control._names.focus = getFocusFieldName(name, index, options);\n        ids.current = insert(ids.current, index, insertValue.map(generateId));\n        updateValues(updatedFieldArrayValues);\n        setFields(updatedFieldArrayValues);\n        control._setFieldArray(name, updatedFieldArrayValues, insert, {\n            argA: index,\n            argB: fillEmptyArray(value),\n        });\n    };\n    const swap = (indexA, indexB) => {\n        if (disabled) {\n            return;\n        }\n        const updatedFieldArrayValues = control._getFieldArray(name);\n        swapArrayAt(updatedFieldArrayValues, indexA, indexB);\n        swapArrayAt(ids.current, indexA, indexB);\n        updateValues(updatedFieldArrayValues);\n        setFields(updatedFieldArrayValues);\n        control._setFieldArray(name, updatedFieldArrayValues, swapArrayAt, {\n            argA: indexA,\n            argB: indexB,\n        }, false);\n    };\n    const move = (from, to) => {\n        if (disabled) {\n            return;\n        }\n        const updatedFieldArrayValues = control._getFieldArray(name);\n        moveArrayAt(updatedFieldArrayValues, from, to);\n        moveArrayAt(ids.current, from, to);\n        updateValues(updatedFieldArrayValues);\n        setFields(updatedFieldArrayValues);\n        control._setFieldArray(name, updatedFieldArrayValues, moveArrayAt, {\n            argA: from,\n            argB: to,\n        }, false);\n    };\n    const update = (index, value) => {\n        if (disabled) {\n            return;\n        }\n        const updateValue = cloneObject(value);\n        const updatedFieldArrayValues = updateAt(control._getFieldArray(name), index, updateValue);\n        ids.current = [...updatedFieldArrayValues].map((item, i) => !item || i === index ? generateId() : ids.current[i]);\n        updateValues(updatedFieldArrayValues);\n        setFields([...updatedFieldArrayValues]);\n        control._setFieldArray(name, updatedFieldArrayValues, updateAt, {\n            argA: index,\n            argB: updateValue,\n        }, true, false);\n    };\n    const replace = (value) => {\n        if (disabled) {\n            return;\n        }\n        const updatedFieldArrayValues = convertToArrayPayload(cloneObject(value));\n        ids.current = updatedFieldArrayValues.map(generateId);\n        updateValues([...updatedFieldArrayValues]);\n        setFields([...updatedFieldArrayValues]);\n        control._setFieldArray(name, [...updatedFieldArrayValues], (data) => data, {}, true, false);\n    };\n    React.useEffect(() => {\n        if (disabled) {\n            return;\n        }\n        control._state.action = false;\n        isWatched(name, control._names) &&\n            control._subjects.state.next({\n                ...control._formState,\n            });\n        const validationModes = getValidationModes(control._options.mode);\n        if (_actioned.current &&\n            (!validationModes.isOnSubmit || control._formState.isSubmitted) &&\n            !getValidationModes(control._options.reValidateMode).isOnSubmit &&\n            !validationModes.isOnBlur) {\n            if (control._options.resolver) {\n                control._runSchema([name]).then((result) => {\n                    control._updateIsValidating([name]);\n                    const error = get(result.errors, name);\n                    const existingError = get(control._formState.errors, name);\n                    if (existingError\n                        ? (!error && existingError.type) ||\n                            (error &&\n                                (existingError.type !== error.type ||\n                                    existingError.message !== error.message))\n                        : error && error.type) {\n                        error\n                            ? set(control._formState.errors, name, error)\n                            : unset(control._formState.errors, name);\n                        control._subjects.state.next({\n                            errors: control._formState.errors,\n                        });\n                    }\n                });\n            }\n            else {\n                const field = get(control._fields, name);\n                if (field &&\n                    field._f &&\n                    !(getValidationModes(control._options.reValidateMode).isOnSubmit &&\n                        getValidationModes(control._options.mode).isOnSubmit)) {\n                    validateField(field, control._names.disabled, control._formValues, control._options.criteriaMode === VALIDATION_MODE.all, control._options.shouldUseNativeValidation, true).then((error) => !isEmptyObject(error) &&\n                        control._subjects.state.next({\n                            errors: updateFieldArrayRootError(control._formState.errors, error, name),\n                        }));\n                }\n            }\n        }\n        control._subjects.state.next({\n            name,\n            values: cloneObject(control._formValues),\n        });\n        control._names.focus &&\n            iterateFieldsByAction(control._fields, (ref, key) => {\n                if (control._names.focus &&\n                    key.startsWith(control._names.focus) &&\n                    ref.focus) {\n                    ref.focus();\n                    return 1;\n                }\n                return;\n            });\n        control._names.focus = '';\n        control._setValid();\n        _actioned.current = false;\n    }, [fields, name, control, disabled]);\n    React.useEffect(() => {\n        if (!disabled) {\n            !get(control._formValues, name) && control._setFieldArray(name);\n        }\n        return () => {\n            if (disabled) {\n                return;\n            }\n            const shouldKeepFieldArrayValues = !(control._options.shouldUnregister || shouldUnregister);\n            const updateMounted = (name, value) => {\n                const field = get(control._fields, name);\n                if (field && field._f) {\n                    field._f.mount = value;\n                }\n            };\n            if (_actioned.current && shouldKeepFieldArrayValues) {\n                control._subjects.state.next({\n                    name,\n                    values: cloneObject(control._formValues),\n                });\n            }\n            shouldKeepFieldArrayValues\n                ? updateMounted(name, false)\n                : control.unregister(name);\n        };\n    }, [name, control, keyName, shouldUnregister, disabled]);\n    return {\n        swap: React.useCallback(swap, [updateValues, name, control, disabled]),\n        move: React.useCallback(move, [updateValues, name, control, disabled]),\n        prepend: React.useCallback(prepend, [\n            updateValues,\n            name,\n            control,\n            disabled,\n        ]),\n        append: React.useCallback(append, [updateValues, name, control, disabled]),\n        remove: React.useCallback(remove, [updateValues, name, control, disabled]),\n        insert: React.useCallback(insert$1, [updateValues, name, control, disabled]),\n        update: React.useCallback(update, [updateValues, name, control, disabled]),\n        replace: React.useCallback(replace, [\n            updateValues,\n            name,\n            control,\n            disabled,\n        ]),\n        fields: React.useMemo(() => fields.map((field, index) => ({\n            ...field,\n            ...(isBoolean(disabled) ? { disabled } : {}),\n            [keyName]: ids.current[index] || generateId(),\n        })), [fields, keyName, disabled]),\n    };\n}\n\n/**\n * Custom hook to manage the entire form.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useform) • [Demo](https://codesandbox.io/s/react-hook-form-get-started-ts-5ksmm) • [Video](https://www.youtube.com/watch?v=RkXv4AXXC_4)\n *\n * @param props - form configuration and validation parameters.\n *\n * @returns methods - individual functions to manage the form state. {@link UseFormReturn}\n *\n * @example\n * ```tsx\n * function App() {\n *   const { register, handleSubmit, watch, formState: { errors } } = useForm();\n *   const onSubmit = data => console.log(data);\n *\n *   console.log(watch(\"example\"));\n *\n *   return (\n *     <form onSubmit={handleSubmit(onSubmit)}>\n *       <input defaultValue=\"test\" {...register(\"example\")} />\n *       <input {...register(\"exampleRequired\", { required: true })} />\n *       {errors.exampleRequired && <span>This field is required</span>}\n *       <button>Submit</button>\n *     </form>\n *   );\n * }\n * ```\n */\nfunction useForm(props = {}) {\n    const _formControl = React.useRef(undefined);\n    const _values = React.useRef(undefined);\n    const _formControlProp = React.useRef(props.formControl);\n    const [formState, updateFormState] = React.useState(() => ({\n        ...cloneObject(DEFAULT_FORM_STATE),\n        isLoading: isFunction(props.defaultValues),\n        errors: props.errors || {},\n        disabled: props.disabled || false,\n        defaultValues: isFunction(props.defaultValues)\n            ? undefined\n            : props.defaultValues,\n    }));\n    if (!_formControl.current ||\n        (props.formControl && _formControlProp.current !== props.formControl)) {\n        _formControlProp.current = props.formControl;\n        if (props.formControl) {\n            _formControl.current = {\n                ...props.formControl,\n                formState,\n            };\n            if (props.defaultValues && !isFunction(props.defaultValues)) {\n                props.formControl.reset(props.defaultValues, props.resetOptions);\n            }\n        }\n        else {\n            const { formControl, ...rest } = createFormControl(props);\n            _formControl.current = {\n                ...rest,\n                formState,\n            };\n        }\n    }\n    const control = _formControl.current.control;\n    control._options = props;\n    useIsomorphicLayoutEffect(() => {\n        const sub = control._subscribe({\n            formState: control._proxyFormState,\n            callback: () => updateFormState({\n                ...control._formState,\n                defaultValues: control._defaultValues,\n            }),\n            reRenderRoot: true,\n        });\n        updateFormState((data) => ({\n            ...data,\n            isReady: true,\n        }));\n        control._formState.isReady = true;\n        return sub;\n    }, [control]);\n    React.useEffect(() => control._disableForm(props.disabled), [control, props.disabled]);\n    React.useEffect(() => {\n        if (props.mode) {\n            control._options.mode = props.mode;\n        }\n        if (props.reValidateMode) {\n            control._options.reValidateMode = props.reValidateMode;\n        }\n    }, [control, props.mode, props.reValidateMode]);\n    React.useEffect(() => {\n        if (props.errors) {\n            control._setErrors(props.errors);\n            control._focusError();\n        }\n    }, [control, props.errors]);\n    React.useEffect(() => {\n        props.shouldUnregister &&\n            control._subjects.state.next({\n                values: control._getWatch(),\n            });\n    }, [control, props.shouldUnregister]);\n    React.useEffect(() => {\n        if (control._proxyFormState.isDirty) {\n            const isDirty = control._getDirty();\n            if (isDirty !== formState.isDirty) {\n                control._subjects.state.next({\n                    isDirty,\n                });\n            }\n        }\n    }, [control, formState.isDirty]);\n    React.useEffect(() => {\n        var _a;\n        if (props.values && !deepEqual(props.values, _values.current)) {\n            control._reset(props.values, {\n                keepFieldsRef: true,\n                ...control._options.resetOptions,\n            });\n            if (!((_a = control._options.resetOptions) === null || _a === void 0 ? void 0 : _a.keepIsValid)) {\n                control._setValid();\n            }\n            _values.current = props.values;\n            updateFormState((state) => ({ ...state }));\n        }\n        else {\n            control._resetDefaultValues();\n        }\n    }, [control, props.values]);\n    React.useEffect(() => {\n        if (!control._state.mount) {\n            control._setValid();\n            control._state.mount = true;\n        }\n        if (control._state.watch) {\n            control._state.watch = false;\n            control._subjects.state.next({ ...control._formState });\n        }\n        control._removeUnmounted();\n    });\n    _formControl.current.formState = React.useMemo(() => getProxyFormState(formState, control), [control, formState]);\n    return _formControl.current;\n}\n\n/**\n * Watch component that subscribes to form field changes and re-renders when watched fields update.\n *\n * @param control - The form control object from useForm\n * @param name - Can be field name, array of field names, or undefined to watch the entire form\n * @param disabled - Disable subscription\n * @param exact - Whether to watch exact field names or not\n * @param defaultValue - The default value to use if the field is not yet set\n * @param compute - Function to compute derived values from watched fields\n * @param render - The function that receives watched values and returns ReactNode\n * @returns The result of calling render function with watched values\n *\n * @example\n * The `Watch` component only re-render when the values of `foo`, `bar`, and `baz.qux` change.\n * The types of `foo`, `bar`, and `baz.qux` are precisely inferred.\n *\n * ```tsx\n * const { control } = useForm();\n *\n * <Watch\n *   control={control}\n *   names={['foo', 'bar', 'baz.qux']}\n *   render={([foo, bar, baz_qux]) => <div>{foo}{bar}{baz_qux}</div>}\n * />\n * ```\n */\nconst Watch = (props) => props.render(useWatch({ name: props.names, ...props }));\n\nexport { Controller, Form, FormProvider, FormStateSubscribe, Watch, appendErrors, createFormControl, get, set, useController, useFieldArray, useForm, useFormContext, useFormState, useWatch };\n//# sourceMappingURL=index.esm.mjs.map\n","import React, { useState } from 'react';\r\n\r\nimport {\r\n  Tooltip as TooltipComponent,\r\n  TooltipContent,\r\n  TooltipProvider,\r\n  TooltipTrigger,\r\n} from '@/components/ui/tooltip';\r\nimport { cn } from '@/lib/utils';\r\n\r\ninterface TooltipSProps {\r\n  className?: string;\r\n  children: React.ReactNode;\r\n  content: React.ReactNode;\r\n  side?: 'left' | 'top' | 'right' | 'bottom' | undefined;\r\n}\r\n\r\nconst TooltipS: React.FC<TooltipSProps> = ({ className, children, content, side }) => {\r\n  const [open, setOpen] = useState(false);\r\n\r\n  return (\r\n    <TooltipProvider delayDuration={0}>\r\n      <TooltipComponent open={open}>\r\n        <TooltipTrigger asChild>\r\n          <button\r\n            type=\"button\"\r\n            className={cn('cursor-pointer', className)}\r\n            onClick={() => setOpen(!open)}\r\n            onMouseEnter={() => setOpen(true)}\r\n            onMouseLeave={() => setOpen(false)}\r\n            onTouchStart={() => setOpen(!open)}\r\n            onKeyDown={(e) => {\r\n              e.preventDefault();\r\n              e.key === 'Enter' && setOpen(!open);\r\n            }}\r\n          >\r\n            {children}\r\n          </button>\r\n        </TooltipTrigger>\r\n        <TooltipContent side={side} className={!content ? 'hidden' : ''}>\r\n          <span className=\"inline-block\">{content}</span>\r\n        </TooltipContent>\r\n      </TooltipComponent>\r\n    </TooltipProvider>\r\n  );\r\n};\r\n\r\nexport default TooltipS;\r\n","import {\r\n  ColumnDef,\r\n  ColumnFiltersState,\r\n  flexRender,\r\n  getCoreRowModel,\r\n  getFilteredRowModel,\r\n  useReactTable,\r\n} from '@tanstack/react-table';\r\nimport axios from 'axios';\r\nimport { Eye, Loader2, X } from 'lucide-react';\r\nimport React, { useEffect, useMemo, useState } from 'react';\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport TooltipS from '@/components/ui/ToolTipS';\r\nimport { Button } from '@/components/ui/button';\r\nimport {\r\n  Dialog,\r\n  DialogContent,\r\n  DialogHeader,\r\n  DialogTitle,\r\n  DialogTrigger,\r\n} from '@/components/ui/dialog';\r\nimport { Input } from '@/components/ui/input';\r\nimport {\r\n  Pagination,\r\n  PaginationContent,\r\n  PaginationEllipsis,\r\n  PaginationItem,\r\n  PaginationLink,\r\n  PaginationNext,\r\n  PaginationPrevious,\r\n} from '@/components/ui/pagination';\r\nimport {\r\n  Table,\r\n  TableBody,\r\n  TableCell,\r\n  TableHead,\r\n  TableHeader,\r\n  TableRow,\r\n} from '@/components/ui/table';\r\nimport { Textarea } from '@/components/ui/textarea';\r\nimport { API_BASE_URL } from '@/lib/config';\r\n\r\ninterface SummaryProps {\r\n  apiBaseUrl?: string;\r\n}\r\n\r\ninterface SummaryData {\r\n  id: string;\r\n  prefix: string;\r\n  model: string;\r\n  fileName: string;\r\n  code: string;\r\n  month: string;\r\n  year: string;\r\n  content: string;\r\n  status: string;\r\n  note: string;\r\n  lastUpdate: string;\r\n  stock_id: string;\r\n}\r\n\r\nconst useDebounce = <T,>(value: T, delay: number): T => {\r\n  const [debouncedValue, setDebouncedValue] = useState<T>(value);\r\n\r\n  useEffect(() => {\r\n    const timer = setTimeout(() => {\r\n      setDebouncedValue(value);\r\n    }, delay);\r\n\r\n    return () => {\r\n      clearTimeout(timer);\r\n    };\r\n  }, [value, delay]);\r\n\r\n  return debouncedValue;\r\n};\r\n\r\nexport const Summary: React.FC<SummaryProps> = ({ apiBaseUrl = API_BASE_URL }) => {\r\n  const [data, setData] = useState<SummaryData[]>([]);\r\n  const [isLoading, setIsLoading] = useState(false);\r\n  const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([]);\r\n  const [currentPage, setCurrentPage] = useState(1);\r\n  const [totalPages, setTotalPages] = useState(1);\r\n  const [loadingPage, setLoadingPage] = useState<number | null>(null);\r\n  const [searchQuery, setSearchQuery] = useState('');\r\n  const debouncedSearchQuery = useDebounce(searchQuery, 500);\r\n\r\n  const extractMonthYearFromFilename = (filename: string) => {\r\n    const match = filename.match(/\\d{6}/);\r\n    if (!match) return { month: '', year: '' };\r\n\r\n    const dateStr = match[0];\r\n    const month = dateStr.substring(0, 2);\r\n    const year = dateStr.substring(2);\r\n\r\n    return { month, year };\r\n  };\r\n\r\n  const mapConversation = (items: any) => {\r\n    const summaryTransfer = items.map((item: any) => {\r\n      let month = item?.month || '';\r\n      let year = item?.year || '';\r\n\r\n      if ((!month || !year) && item?.file_name) {\r\n        const extracted = extractMonthYearFromFilename(item.file_name);\r\n        month = month || extracted.month;\r\n        year = year || extracted.year;\r\n      }\r\n\r\n      return {\r\n        id: item?.id,\r\n        prefix: item?.prefix || '',\r\n        model: item?.model || '',\r\n        fileName: item?.file_name || '',\r\n        code: item?.stock_id || '',\r\n        month,\r\n        year,\r\n        content: item?.text_summary || '',\r\n        status: item?.status || '',\r\n        note: item?.note || '',\r\n        lastUpdate: item?.updated_at,\r\n        stock_id: item?.stock_id,\r\n      };\r\n    });\r\n    return summaryTransfer;\r\n  };\r\n\r\n  const handleConversation = (summaryRes: any) => {\r\n    if (!summaryRes?.data) return [];\r\n    const data = mapConversation(summaryRes?.data);\r\n    setData(data);\r\n    setTotalPages(summaryRes.pagination.totalPages);\r\n    return;\r\n  };\r\n\r\n  const fetchData = async (page = 1, limit = 15) => {\r\n    setLoadingPage(page);\r\n    setIsLoading(true);\r\n    try {\r\n      const response = await axios.get(`${apiBaseUrl}/api/latest-summaries`, {\r\n        params: { page, limit, search: searchQuery },\r\n      });\r\n\r\n      if (response?.status === 200) {\r\n        handleConversation(response.data);\r\n      } else {\r\n        console.error(response);\r\n      }\r\n    } catch (error) {\r\n      console.error('Error fetching data:', error);\r\n    } finally {\r\n      setLoadingPage(null);\r\n      setIsLoading(false);\r\n    }\r\n  };\r\n\r\n  React.useEffect(() => {\r\n    if (debouncedSearchQuery) {\r\n      setCurrentPage(1);\r\n    }\r\n    void fetchData(currentPage);\r\n  }, [currentPage, debouncedSearchQuery]);\r\n\r\n  const columns = useMemo<ColumnDef<any>[]>(() => {\r\n    const baseColumns = [\r\n      {\r\n        id: 'code',\r\n        header: 'Mã',\r\n        accessorKey: 'code',\r\n        cell: ({ row }: any) => {\r\n          return <span className=\"flex flex-col\">{row.original.code}</span>;\r\n        },\r\n      },\r\n      {\r\n        id: 'month',\r\n        header: 'Tháng',\r\n        accessorKey: 'month',\r\n        cell: ({ row }: any) => {\r\n          const month = row.original.month;\r\n          const year = row.original.year;\r\n          return (\r\n            <span className=\"flex flex-col\">{`${month.toString().padStart(2, '0')}/${year}`}</span>\r\n          );\r\n        },\r\n      },\r\n      {\r\n        id: 'content',\r\n        header: 'Nội dung',\r\n        accessorKey: 'content',\r\n        cell: ({ row }: any) => {\r\n          const content: string = row.getValue('content');\r\n          return (\r\n            <div className=\"text-start truncate text-ellipsis overflow-hidden whitespace-nowrap max-w-[30dvw]\">\r\n              {content}\r\n            </div>\r\n          );\r\n        },\r\n      },\r\n      {\r\n        id: 'status',\r\n        header: 'Trạng thái',\r\n        accessorKey: 'status',\r\n        cell: ({ row }: any) => {\r\n          const status = row.original.status;\r\n          const isPublished = status !== 'unpublish';\r\n          return (\r\n            <span\r\n              className={`inline-flex items-center rounded-full px-2 py-0 text-[10px] font-bold ${\r\n                isPublished\r\n                  ? 'bg-green-50 text-green-700 ring-1 ring-inset ring-green-600/20'\r\n                  : 'bg-gray-50 text-gray-600 ring-1 ring-inset ring-gray-500/20'\r\n              }`}\r\n            >\r\n              {isPublished ? 'PUBLISHED' : 'UNPUBLISHED'}\r\n            </span>\r\n          );\r\n        },\r\n      },\r\n      {\r\n        id: 'note',\r\n        header: 'Ghi chú',\r\n        accessorKey: 'note',\r\n        cell: ({ row }: any) => {\r\n          return (\r\n            <TooltipS\r\n              content={\r\n                <div className=\"font-medium text-[16px] max-w-[90dvw]\">{row.original.note}</div>\r\n              }\r\n            >\r\n              <div className=\"text-start truncate text-ellipsis overflow-hidden whitespace-nowrap max-w-[20dvw]\">\r\n                {row.original.note}\r\n              </div>\r\n            </TooltipS>\r\n          );\r\n        },\r\n      },\r\n      {\r\n        id: 'last-update',\r\n        header: 'Cập nhật',\r\n        accessorKey: 'last-update',\r\n        cell: ({ row }: any) => {\r\n          const date = new Date(row.original.lastUpdate);\r\n          const day = date.getDate();\r\n          const month = date.getMonth() + 1;\r\n          const formattedDate = `ngày ${day} tháng ${month}`;\r\n\r\n          return <span className=\"flex flex-col\">{formattedDate}</span>;\r\n        },\r\n      },\r\n      {\r\n        accessorKey: 'actions',\r\n        header: () => {\r\n          return <div className=\"font-medium text-right\">Hành động</div>;\r\n        },\r\n        cell: ({ row }: any) => {\r\n          const [loading, setLoading] = useState(false);\r\n          const [openPopup, setOpenPopup] = useState(false);\r\n          const [showFullContent, setShowFullContent] = useState(false);\r\n          const { handleSubmit, register, reset } = useForm();\r\n          const id = (row.original as any).id;\r\n          const status: string = row.getValue('status');\r\n          const content: string = row.getValue('content');\r\n          const [publishLoading, setPublishLoading] = useState(false);\r\n\r\n          const handleTogglePublish = async () => {\r\n            try {\r\n              setPublishLoading(true);\r\n              const newStatus = status === 'unpublish' ? 'published' : 'unpublish';\r\n              const response = await axios.patch(`${apiBaseUrl}/api/toggle-publish/${id}`, {\r\n                id,\r\n                typeAction: 'update',\r\n                status,\r\n                idInput: id,\r\n                stock_id: row.original.stock_id,\r\n                prefix: row.original.prefix,\r\n                model: row.original.model,\r\n                summary_result: row.original.content,\r\n                note: row.original.note,\r\n              });\r\n\r\n              if (response.status === 200) {\r\n                setData((prevData) =>\r\n                  prevData.map((item) => (item.id === id ? { ...item, status: newStatus } : item)),\r\n                );\r\n              } else {\r\n                console.error('Failed to toggle publish status:', response);\r\n              }\r\n            } catch (error) {\r\n              console.error('Error toggling publish status:', error);\r\n            } finally {\r\n              setPublishLoading(false);\r\n            }\r\n          };\r\n\r\n          const handleEditQuestion = async (data: any) => {\r\n            setLoading(true);\r\n            try {\r\n              const response = await axios.patch(`${apiBaseUrl}/api/update-summary`, {\r\n                note: data.note,\r\n                text_summary: data.content,\r\n                id,\r\n              });\r\n\r\n              if (response.status === 200) {\r\n                await fetchData(currentPage);\r\n                setOpenPopup(false);\r\n              } else {\r\n                console.error('Failed to update summary:', response);\r\n              }\r\n            } catch (error) {\r\n              console.error('Error updating summary:', error);\r\n            }\r\n            return setLoading(false);\r\n          };\r\n\r\n          return (\r\n            <div className=\"flex items-center justify-end gap-2\">\r\n              <Button\r\n                variant=\"outline\"\r\n                size=\"sm\"\r\n                onClick={() => setShowFullContent(true)}\r\n                className=\"px-2 py-0.5 h-7\"\r\n              >\r\n                <Eye className=\"h-4 w-4\" />\r\n              </Button>\r\n\r\n              <Dialog open={showFullContent} onOpenChange={setShowFullContent}>\r\n                <DialogContent className=\"max-w-3xl max-h-[80vh]\">\r\n                  <DialogHeader>\r\n                    <DialogTitle>Nội dung chi tiết</DialogTitle>\r\n                  </DialogHeader>\r\n                  <div className=\"mt-4 overflow-y-auto max-h-[60vh]\">\r\n                    <div className=\"whitespace-pre-wrap text-[16px] leading-relaxed\">{content}</div>\r\n                  </div>\r\n                </DialogContent>\r\n              </Dialog>\r\n\r\n              <Dialog\r\n                open={openPopup}\r\n                onOpenChange={(bool) => {\r\n                  setOpenPopup(bool);\r\n                  if (!bool) {\r\n                    reset();\r\n                  } else {\r\n                    reset({\r\n                      content: row.original.content,\r\n                      note: row.original.note,\r\n                    });\r\n                  }\r\n                }}\r\n              >\r\n                <DialogTrigger asChild>\r\n                  <Button\r\n                    variant=\"outline\"\r\n                    size=\"sm\"\r\n                    onClick={() => setOpenPopup(true)}\r\n                    className=\"px-2 py-0.5 h-7\"\r\n                  >\r\n                    Sửa\r\n                  </Button>\r\n                </DialogTrigger>\r\n                <DialogContent className=\"rounded-lg sm:px-3 h-[calc(100dvh-200px)] min-w-[calc(100dvw-112px)]\">\r\n                  <DialogHeader className=\"flex flex-col gap-3\">\r\n                    <DialogTitle className=\"max-sm:hidden text-center\">Sửa summary</DialogTitle>\r\n                    <form\r\n                      className=\"flex flex-col gap-3 h-full justify-between\"\r\n                      onSubmit={handleSubmit(handleEditQuestion)}\r\n                    >\r\n                      <div className=\"flex flex-col gap-2\">\r\n                        <div className=\"flex flex-col items-start\">\r\n                          <span>Nội dung:</span>\r\n                          <Textarea\r\n                            placeholder=\"Nội dung\"\r\n                            className=\"w-full input-scroll-bar\"\r\n                            defaultValue={(row.original as any).answer || ''}\r\n                            rows={10}\r\n                            {...register('content')}\r\n                          />\r\n                        </div>\r\n                        <div className=\"flex flex-col items-start\">\r\n                          <span>Ghi chú:</span>\r\n                          <Textarea\r\n                            placeholder=\"Nội dung\"\r\n                            className=\"w-full input-scroll-bar\"\r\n                            defaultValue={(row.original as any).note || ''}\r\n                            rows={1}\r\n                            {...register('note')}\r\n                          />\r\n                        </div>\r\n                      </div>\r\n                      <div className=\"flex justify-end\">\r\n                        <Button disabled={loading} type=\"submit\" variant=\"default\">\r\n                          {loading ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : 'Ok'}\r\n                        </Button>\r\n                      </div>\r\n                    </form>\r\n                  </DialogHeader>\r\n                </DialogContent>\r\n              </Dialog>\r\n\r\n              <Button\r\n                variant=\"outline\"\r\n                size=\"sm\"\r\n                onClick={handleTogglePublish}\r\n                disabled={publishLoading}\r\n                className=\"w-[70px] px-2 py-0.5 h-7\"\r\n              >\r\n                {publishLoading ? (\r\n                  <Loader2 className=\"h-4 w-4 animate-spin\" />\r\n                ) : status === 'unpublish' ? (\r\n                  'Publish'\r\n                ) : (\r\n                  'Unpublish'\r\n                )}\r\n              </Button>\r\n            </div>\r\n          );\r\n        },\r\n      },\r\n    ];\r\n\r\n    return baseColumns;\r\n  }, []);\r\n\r\n  const table = useReactTable({\r\n    data: data,\r\n    columns,\r\n    state: {\r\n      columnFilters,\r\n    },\r\n    enableRowSelection: true,\r\n    onColumnFiltersChange: setColumnFilters,\r\n    getFilteredRowModel: getFilteredRowModel(),\r\n    getCoreRowModel: getCoreRowModel(),\r\n  });\r\n\r\n  return (\r\n    <div className=\"space-y-4 s3-explr-container\">\r\n      <div className=\"flex items-center space-x-4 s3-explr-toolbar\">\r\n        <div className=\"relative max-w-sm\">\r\n          <Input\r\n            placeholder=\"Tìm kiếm theo mã...\"\r\n            value={searchQuery}\r\n            onChange={(event) => setSearchQuery(event.target.value)}\r\n            className=\"pr-8\"\r\n          />\r\n          {searchQuery && (\r\n            <Button\r\n              variant=\"ghost\"\r\n              size=\"sm\"\r\n              className=\"absolute right-1 top-1/2 -translate-y-1/2 h-6 w-6 p-0\"\r\n              onClick={() => setSearchQuery('')}\r\n            >\r\n              <X className=\"h-4 w-4\" />\r\n            </Button>\r\n          )}\r\n        </div>\r\n      </div>\r\n      <div className=\"rounded-md border s3-explr-table-container\">\r\n        <Table className=\"s3-explr-table\">\r\n          <TableHeader className=\"s3-explr-table-header\">\r\n            {table.getHeaderGroups().map((headerGroup) => (\r\n              <TableRow key={headerGroup.id} className=\"hover:bg-transparent s3-explr-header-row\">\r\n                {headerGroup.headers.map((header) => (\r\n                  <TableHead key={header.id} className=\"s3-explr-header-cell\">\r\n                    {header.isPlaceholder\r\n                      ? null\r\n                      : flexRender(header.column.columnDef.header, header.getContext())}\r\n                  </TableHead>\r\n                ))}\r\n              </TableRow>\r\n            ))}\r\n          </TableHeader>\r\n          <TableBody className=\"s3-explr-table-body\">\r\n            {isLoading ? (\r\n              <TableRow>\r\n                <TableCell colSpan={columns.length} className=\"h-24 text-center\">\r\n                  Đang tải dữ liệu...\r\n                </TableCell>\r\n              </TableRow>\r\n            ) : table.getRowModel().rows?.length ? (\r\n              table.getRowModel().rows?.map((row) => (\r\n                <TableRow key={row.id} className=\"h-12 s3-explr-row\">\r\n                  {row.getVisibleCells().map((cell) => (\r\n                    <TableCell key={cell.id} className=\"align-middle s3-explr-cell\">\r\n                      {flexRender(cell.column.columnDef.cell, cell.getContext())}\r\n                    </TableCell>\r\n                  ))}\r\n                </TableRow>\r\n              ))\r\n            ) : (\r\n              <TableRow>\r\n                <TableCell colSpan={columns.length} className=\"h-24 text-center\">\r\n                  Không có kết quả.\r\n                </TableCell>\r\n              </TableRow>\r\n            )}\r\n          </TableBody>\r\n        </Table>\r\n      </div>\r\n      <div className=\"mt-4\">\r\n        <Pagination>\r\n          <PaginationContent>\r\n            <PaginationItem>\r\n              <PaginationPrevious\r\n                onClick={() => setCurrentPage((p) => Math.max(1, p - 1))}\r\n                className={currentPage === 1 ? 'pointer-events-none opacity-50' : 'cursor-pointer'}\r\n              />\r\n            </PaginationItem>\r\n\r\n            {Array.from({ length: totalPages }, (_, i) => i + 1)\r\n              .filter(\r\n                (page) => page === 1 || page === totalPages || Math.abs(page - currentPage) <= 1,\r\n              )\r\n              .map((page, index, array) => (\r\n                <>\r\n                  {index > 0 && array[index - 1] !== page - 1 && (\r\n                    <PaginationItem key={page + '...'}>\r\n                      <PaginationEllipsis />\r\n                    </PaginationItem>\r\n                  )}\r\n                  <PaginationItem key={page}>\r\n                    <PaginationLink\r\n                      onClick={() => setCurrentPage(page)}\r\n                      isActive={currentPage === page}\r\n                      className={`cursor-pointer ${isLoading ? 'pointer-events-none' : ''}`}\r\n                    >\r\n                      {loadingPage === page ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : page}\r\n                    </PaginationLink>\r\n                  </PaginationItem>\r\n                </>\r\n              ))}\r\n\r\n            <PaginationItem>\r\n              <PaginationNext\r\n                onClick={() => setCurrentPage((p) => Math.min(totalPages, p + 1))}\r\n                className={\r\n                  currentPage === totalPages || loadingPage !== null\r\n                    ? 'pointer-events-none opacity-50'\r\n                    : 'cursor-pointer'\r\n                }\r\n              />\r\n            </PaginationItem>\r\n          </PaginationContent>\r\n        </Pagination>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n","import axios from 'axios';\r\nimport { Briefcase, Loader2, RotateCw } from 'lucide-react';\r\nimport { memo, useEffect, useState } from 'react';\r\n\r\nimport TooltipS from '@/components/ui/ToolTipS';\r\nimport { Button } from '@/components/ui/button';\r\nimport {\r\n  Pagination,\r\n  PaginationContent,\r\n  PaginationEllipsis,\r\n  PaginationItem,\r\n  PaginationLink,\r\n  PaginationNext,\r\n  PaginationPrevious,\r\n} from '@/components/ui/pagination';\r\nimport {\r\n  Table,\r\n  TableBody,\r\n  TableCell,\r\n  TableHead,\r\n  TableHeader,\r\n  TableRow,\r\n} from '@/components/ui/table';\r\nimport { Toaster } from '@/components/ui/toaster.tsx';\r\nimport { useToast } from '@/hooks/use-toast.ts';\r\nimport { API_BASE_URL } from '@/lib/config';\r\n\r\ninterface JobData {\r\n  id: number;\r\n  job_name: string;\r\n  status: string;\r\n  created_at: string;\r\n  updated_at: string;\r\n  execution_time_seconds: number;\r\n  error: string;\r\n}\r\n\r\ninterface PaginationData {\r\n  total: number;\r\n  page: number;\r\n  limit: number;\r\n  totalPages: number;\r\n}\r\n\r\ninterface ApiResponse {\r\n  data: JobData[];\r\n  pagination: PaginationData;\r\n}\r\n\r\nconst ITEMS_PER_PAGE = 10;\r\n\r\nexport const Job = memo<{\r\n  apiBaseUrl: string;\r\n}>(({ apiBaseUrl = API_BASE_URL }) => {\r\n  const [currentPage, setCurrentPage] = useState(1);\r\n  const [jobs, setJobs] = useState<JobData[]>([]);\r\n  const [pagination, setPagination] = useState<PaginationData>({\r\n    total: 0,\r\n    page: 1,\r\n    limit: ITEMS_PER_PAGE,\r\n    totalPages: 1,\r\n  });\r\n  const [loading, setLoading] = useState(true);\r\n  const [loadingPage, setLoadingPage] = useState<number | null>(null);\r\n  const [retryingJobs, setRetryingJobs] = useState<Set<string>>(new Set());\r\n  const { toast } = useToast();\r\n  const [isRefreshing, setIsRefreshing] = useState(false);\r\n\r\n  const fetchJobs = async (page: number) => {\r\n    try {\r\n      setLoadingPage(page);\r\n      const response = await axios.get<ApiResponse>(`${apiBaseUrl}/api/jobs`, {\r\n        params: {\r\n          page: page.toString(),\r\n          limit: ITEMS_PER_PAGE.toString(),\r\n        },\r\n      });\r\n      setJobs(response.data.data);\r\n      setPagination(response.data.pagination);\r\n    } catch (error) {\r\n      toast({\r\n        variant: 'destructive',\r\n        title: 'Error',\r\n        description: 'Failed to fetch jobs. Please try again.',\r\n      });\r\n    } finally {\r\n      setLoadingPage(null);\r\n      setLoading(false);\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    void fetchJobs(currentPage);\r\n  }, [currentPage, apiBaseUrl]);\r\n\r\n  const handleRetry = async (jobId: number) => {\r\n    setRetryingJobs((prev) => new Set(prev).add(jobId.toString()));\r\n\r\n    try {\r\n      await axios.post(`${apiBaseUrl}/api/retry-job`, { jobId });\r\n      toast({\r\n        title: 'Job Restarted',\r\n        description: `Job ${jobId} has been successfully restarted.`,\r\n      });\r\n      void fetchJobs(currentPage); // Refresh the list after retry\r\n    } catch (error) {\r\n      toast({\r\n        variant: 'destructive',\r\n        title: 'Retry Failed',\r\n        description: `Failed to restart job ${jobId}. Please try again.`,\r\n      });\r\n    } finally {\r\n      setRetryingJobs((prev) => {\r\n        const newSet = new Set(prev);\r\n        newSet.delete(jobId.toString());\r\n        return newSet;\r\n      });\r\n    }\r\n  };\r\n\r\n  const handleRefresh = async () => {\r\n    setIsRefreshing(true);\r\n    setCurrentPage(1);\r\n    await fetchJobs(1);\r\n    setIsRefreshing(false);\r\n  };\r\n\r\n  const formatStartTime = (dateString: string): string => {\r\n    return new Date(dateString).toLocaleString();\r\n  };\r\n\r\n  const formatExecutionTime = (seconds: number | string): string => {\r\n    seconds = parseFloat(seconds as string);\r\n\r\n    if (seconds < 60) {\r\n      return `${(seconds as number).toFixed(2)}s`;\r\n    }\r\n\r\n    const minutes = Math.floor(seconds / 60);\r\n    const remainingSeconds = (seconds % 60).toFixed(0);\r\n    return `${minutes}m ${remainingSeconds}s`;\r\n  };\r\n\r\n  return (\r\n    <div>\r\n      <div className=\"flex items-center gap-2 mb-6\">\r\n        <Briefcase className=\"w-8 h-8 text-primary\" />\r\n        <h2 className=\"text-3xl font-bold tracking-tight\">Job Management</h2>\r\n        <Button\r\n          variant=\"outline\"\r\n          size=\"icon\"\r\n          onClick={handleRefresh}\r\n          disabled={isRefreshing || loading}\r\n          className=\"ml-2\"\r\n        >\r\n          <RotateCw className={`h-4 w-4 ${isRefreshing ? 'animate-spin' : ''}`} />\r\n        </Button>\r\n      </div>\r\n      <div className=\"rounded-md border\">\r\n        <Table>\r\n          <TableHeader>\r\n            <TableRow>\r\n              <TableHead>ID</TableHead>\r\n              <TableHead>Tên Công Việc</TableHead>\r\n              <TableHead>Thời Gian Bắt Đầu</TableHead>\r\n              <TableHead>Thời Gian Cập Nhật</TableHead>\r\n              <TableHead>Thời Gian Thực Thi</TableHead>\r\n              <TableHead>Trạng Thái</TableHead>\r\n              <TableHead>Thao Tác</TableHead>\r\n            </TableRow>\r\n          </TableHeader>\r\n          <TableBody>\r\n            {loading && jobs.length === 0 ? (\r\n              <TableRow>\r\n                <TableCell colSpan={7} className=\"text-center py-4\">\r\n                  <Loader2 className=\"w-6 h-6 animate-spin mx-auto\" />\r\n                </TableCell>\r\n              </TableRow>\r\n            ) : (\r\n              jobs.map((job) => (\r\n                <TableRow key={job.id}>\r\n                  <TableCell className=\"!w-[100px]\">{job.id}</TableCell>\r\n                  <TableCell className=\"font-medium\">\r\n                    {job.job_name?.replace('Upload file', 'Summary')}\r\n                  </TableCell>\r\n                  <TableCell className=\"!w-[200px]\">{formatStartTime(job.created_at)}</TableCell>\r\n                  <TableCell className=\"!w-[200px]\">{formatStartTime(job.updated_at)}</TableCell>\r\n                  <TableCell className=\"!w-[150px]\">\r\n                    {formatExecutionTime(job.execution_time_seconds)}\r\n                  </TableCell>\r\n\r\n                  <TableCell className=\"!w-[200px]\">\r\n                    <TooltipS\r\n                      content={\r\n                        job.status === 'fail' && job.error ? (\r\n                          <div className=\"font-medium text-[16px] max-w-[90dvw]\">{job.error}</div>\r\n                        ) : null\r\n                      }\r\n                    >\r\n                      <div\r\n                        className={`inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium truncate text-ellipsis overflow-hidden whitespace-nowrap max-w-[30dvw]\r\n                        ${\r\n                          job.status === 'done'\r\n                            ? 'bg-green-100 text-green-800'\r\n                            : job.status === 'fail'\r\n                              ? 'bg-red-100 text-red-800'\r\n                              : 'bg-yellow-100 text-yellow-800'\r\n                        }`}\r\n                      >\r\n                        {job.status === 'fail' ? 'FAILED' : job.status?.toUpperCase()}\r\n                      </div>\r\n                    </TooltipS>\r\n                  </TableCell>\r\n\r\n                  <TableCell className=\"!w-[200px]\">\r\n                    {job.status === 'fail' ? (\r\n                      <Button\r\n                        variant=\"outline\"\r\n                        size=\"sm\"\r\n                        onClick={() => handleRetry(job.id)}\r\n                        disabled={retryingJobs.has(job.id.toString())}\r\n                        className=\"h-[32px]\"\r\n                      >\r\n                        {retryingJobs.has(job.id.toString()) ? (\r\n                          <>\r\n                            <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\r\n                            Đang thử lại...\r\n                          </>\r\n                        ) : (\r\n                          'Thử Lại'\r\n                        )}\r\n                      </Button>\r\n                    ) : (\r\n                      <div className=\"h-[32px]\" />\r\n                    )}\r\n                  </TableCell>\r\n                </TableRow>\r\n              ))\r\n            )}\r\n          </TableBody>\r\n        </Table>\r\n      </div>\r\n\r\n      <div className=\"mt-4\">\r\n        <Pagination>\r\n          <PaginationContent>\r\n            <PaginationItem>\r\n              <PaginationPrevious\r\n                onClick={() => setCurrentPage((p) => Math.max(1, p - 1))}\r\n                className={currentPage === 1 ? 'pointer-events-none opacity-50' : 'cursor-pointer'}\r\n              />\r\n            </PaginationItem>\r\n\r\n            {Array.from({ length: pagination.totalPages }, (_, i) => i + 1)\r\n              .filter(\r\n                (page) =>\r\n                  page === 1 || page === pagination.totalPages || Math.abs(page - currentPage) <= 1,\r\n              )\r\n              .map((page, index, array) => (\r\n                <>\r\n                  {index > 0 && array[index - 1] !== page - 1 && (\r\n                    <PaginationItem key={page + '...'}>\r\n                      <PaginationEllipsis />\r\n                    </PaginationItem>\r\n                  )}\r\n                  <PaginationItem key={page}>\r\n                    <PaginationLink\r\n                      onClick={() => setCurrentPage(page)}\r\n                      isActive={currentPage === page}\r\n                      className={`cursor-pointer ${loadingPage !== null ? 'pointer-events-none' : ''}`}\r\n                    >\r\n                      {loadingPage === page ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : page}\r\n                    </PaginationLink>\r\n                  </PaginationItem>\r\n                </>\r\n              ))}\r\n\r\n            <PaginationItem>\r\n              <PaginationNext\r\n                onClick={() => setCurrentPage((p) => Math.min(pagination.totalPages, p + 1))}\r\n                className={\r\n                  currentPage === pagination.totalPages || loadingPage !== null\r\n                    ? 'pointer-events-none opacity-50'\r\n                    : 'cursor-pointer'\r\n                }\r\n              />\r\n            </PaginationItem>\r\n          </PaginationContent>\r\n        </Pagination>\r\n      </div>\r\n      <Toaster />\r\n    </div>\r\n  );\r\n});\r\n"],"names":["Constants","HttpStatus","HttpMethod","OIDC_DEFAULT_SCOPES","OIDC_SCOPES","HeaderNames","PersistentCacheKeys","AADAuthorityConstants","ClaimsRequestKeys","PromptValue","OAuthResponseType","ServerResponseType","ResponseMode","GrantType","CacheAccountType","Separators","CredentialType","APP_METADATA","CLIENT_INFO","THE_FAMILY_ID","AUTHORITY_METADATA_CONSTANTS","AuthorityMetadataSource","SERVER_TELEM_CONSTANTS","AuthenticationScheme","ThrottlingConstants","Errors","RegionDiscoverySources","RegionDiscoveryOutcomes","CacheOutcome","JsonWebTokenTypes","DEFAULT_TOKEN_RENEWAL_OFFSET_SEC","unexpectedError","postRequestFailed","AuthErrorMessages","AuthError","errorCode","errorMessage","suberror","errorString","correlationId","createAuthError","code","additionalMessage","clientInfoDecodingError","clientInfoEmptyError","tokenParsingError","nullOrEmptyToken","endpointResolutionError","networkError","openIdConfigError","hashNotDeserialized","invalidState","stateMismatch","stateNotFound","nonceMismatch","authTimeNotFound","maxAgeTranspired","multipleMatchingTokens","multipleMatchingAccounts","multipleMatchingAppMetadata","requestCannotBeMade","cannotRemoveEmptyScope","cannotAppendScopeSet","emptyInputScopeSet","deviceCodePollingCancelled","deviceCodeExpired","deviceCodeUnknownError","noAccountInSilentRequest","invalidCacheRecord","invalidCacheEnvironment","noAccountFound","noCryptoObject","unexpectedCredentialType","invalidAssertion","invalidClientCredential","tokenRefreshRequired","userTimeoutReached","tokenClaimsCnfRequiredForSignedJwt","authorizationCodeMissingFromServerResponse","bindingKeyNotRemoved","endSessionEndpointNotSupported","keyIdMissing","noNetworkConnectivity","userCanceled","missingTenantIdError","methodNotImplemented","nestedAppAuthBridgeDisabled","platformBrokerError","ClientAuthErrorMessages","ClientAuthError","createClientAuthError","DEFAULT_CRYPTO_IMPLEMENTATION","LogLevel","Logger","loggerOptions","packageName","packageVersion","defaultLoggerCallback","setLoggerOptions","logMessage","options","log","level","message","containsPii","name","version","AzureCloudInstance","redirectUriEmpty","claimsRequestParsingError","authorityUriInsecure","urlParseError","urlEmptyError","emptyInputScopesError","invalidClaims","tokenRequestEmpty","logoutRequestEmpty","invalidCodeChallengeMethod","pkceParamsMissing","invalidCloudDiscoveryMetadata","invalidAuthorityMetadata","untrustedAuthority","missingSshJwk","missingSshKid","missingNonceAuthenticationHeader","invalidAuthenticationHeader","cannotSetOIDCOptions","cannotAllowPlatformBroker","authorityMismatch","invalidRequestMethodForEAR","invalidAuthorizePostBodyParameters","invalidPlatformBrokerConfiguration","ClientConfigurationErrorMessages","ClientConfigurationError","createClientConfigurationError","StringUtils","strObj","obj","str","search","query","params","decode","s","pair","key","value","arr","entry","pattern","input","component","regexBody","ScopeSet","inputScopes","scopeArr","filteredInput","scope","inputScopeString","scopesToUse","scopeSet","lowerCaseScopes","lowerCaseScopesSet","defaultScopeCount","defaultScope","newScope","newScopes","otherScopes","unionScopes","sizeOtherScopes","sizeThisScopes","array","val","buildClientInfo","rawClientInfo","base64Decode","decodedClientInfo","buildClientInfoFromHomeAccountId","homeAccountId","clientInfoParts","tenantIdMatchesHomeTenant","tenantId","buildTenantProfile","localAccountId","idTokenClaims","oid","sub","tid","tfp","acr","preferred_username","upn","login_hint","updateAccountTenantProfileData","baseAccountInfo","tenantProfile","idTokenSecret","updatedAccountInfo","isHomeTenant","tenantProfileOverride","claimsSourcedTenantProfile","AuthorityType","getTenantIdFromIdTokenClaims","ProtocolMode","AccountEntity","accountEntity","tenantProfiles","accountDetails","authority","account","clientInfo","env","_a","_b","preferredUsername","_c","_d","email","_e","_f","_g","accountInfo","cloudGraphHostName","msGraphHost","serverClientInfo","authType","logger","cryptoObj","entity","accountA","accountB","compareClaims","claimsMatch","accountAClaims","accountBClaims","extractTokenClaims","encodedToken","jswPayload","getJWSPayload","base64Decoded","isKmsi","kmsiClaims","authToken","matches","checkMaxAge","authTime","maxAge","canonicalizeUrl","url","lowerCaseUrl","stripLeadingHashOrQuery","responseString","getDeserializedResponse","normalizedResponse","deserializedHash","mapToQueryString","parameters","encodeExtraParams","extraQueryParameters","queryParameterArray","normalizeUrlForComparison","urlWithoutHash","urlObj","normalizedUrl","UrlString","components","queryString","urlObject","pathArray","regEx","match","urlComponents","pathSegments","relativeUrl","baseUrl","baseComponents","response","rawMetdataJSON","EndpointMetadata","InstanceDiscoveryMetadata","InstanceDiscoveryMetadataAliases","metadataEntry","alias","getAliasesFromStaticSources","staticAuthorityOptions","staticAliases","canonicalAuthority","authorityHost","getAliasesFromMetadata","cloudDiscoveryMetadata","source","metadata","getCloudDiscoveryMetadataFromNetworkResponse","getCloudDiscoveryMetadataFromHardcodedValues","i","cacheQuotaExceeded","cacheErrorUnknown","CacheErrorMessages","CacheError","createCacheError","e","CacheManager","clientId","cryptoImpl","performanceClient","accountFilter","allAccounts","accountEntities","cachedAccounts","tokenKeys","tenantProfileFilter","tenantedAccountInfo","idToken","targetTenantId","searchTenantProfiles","matchingTenantProfiles","cacheRecord","kmsi","apiId","storeInCache","credential","accessTokenFilter","currentScopes","tokenEntity","allAccountKeys","matchingAccounts","cacheKey","filter","allCacheKeys","matchingAppMetadata","host","matchedEntity","accountKeys","keyFilter","allTokenKeys","kid","targetRealm","idTokenFilter","idTokenMap","numIdTokens","tokensToBeRemoved","homeIdTokenMap","numHomeIdTokens","idTokenKeys","idTokens","inputKey","request","scopes","authScheme","credentialType","accessTokenKeys","accessTokens","accessToken","numAccessTokens","keyMustContainAllScopes","familyRT","id","refreshTokenFilter","refreshTokenKeys","refreshTokens","refreshToken","numRefreshTokens","environment","appMetadataFilter","appMetadata","appMetadataEntries","numAppMetadata","tokenClaims","idTokenLocalAccountId","claims","cachedUsername","filterUsername","userAssertionHash","cloudMetadata","familyId","realm","nativeAccountId","loginHint","sid","authorityType","target","tokenType","keyId","json","propertyName","DefaultStorageClass","PerformanceEvents","PerformanceEventStatus","StubPerformanceMeasurement","StubPerformanceClient","measureName","DEFAULT_SYSTEM_OPTIONS","DEFAULT_LOGGER_IMPLEMENTATION","DEFAULT_CACHE_OPTIONS","DEFAULT_NETWORK_IMPLEMENTATION","DEFAULT_LIBRARY_INFO","DEFAULT_CLIENT_CREDENTIALS","DEFAULT_AZURE_CLOUD_OPTIONS","DEFAULT_TELEMETRY_OPTIONS","buildClientConfiguration","userAuthOptions","userSystemOptions","userLoggerOption","userCacheOptions","storageImplementation","networkImplementation","cryptoImplementation","clientCredentials","libraryInfo","telemetry","serverTelemetryManager","persistencePlugin","serializableCache","buildAuthOptions","authOptions","isOidcProtocolMode","config","CcsCredentialType","CLIENT_ID","REDIRECT_URI","RESPONSE_TYPE","RESPONSE_MODE","GRANT_TYPE","CLAIMS","SCOPE","REFRESH_TOKEN","STATE","NONCE","PROMPT","CODE","CODE_CHALLENGE","CODE_CHALLENGE_METHOD","CODE_VERIFIER","CLIENT_REQUEST_ID","X_CLIENT_SKU","X_CLIENT_VER","X_CLIENT_OS","X_CLIENT_CPU","X_CLIENT_CURR_TELEM","X_CLIENT_LAST_TELEM","X_MS_LIB_CAPABILITY","X_APP_NAME","X_APP_VER","POST_LOGOUT_URI","ID_TOKEN_HINT","CLIENT_SECRET","CLIENT_ASSERTION","CLIENT_ASSERTION_TYPE","TOKEN_TYPE","REQ_CNF","RETURN_SPA_CODE","NATIVE_BROKER","LOGOUT_HINT","SID","LOGIN_HINT","DOMAIN_HINT","X_CLIENT_EXTRA_SKU","BROKER_CLIENT_ID","BROKER_REDIRECT_URI","INSTANCE_AWARE","EAR_JWK","EAR_JWE_CRYPTO","CLI_DATA","instrumentBrokerParams","addResponseType","responseType","addResponseMode","responseMode","addNativeBroker","addScopes","addOidcScopes","defaultScopes","requestScopes","addClientId","addRedirectUri","redirectUri","addPostLogoutRedirectUri","addIdTokenHint","idTokenHint","addDomainHint","domainHint","addLoginHint","addCcsUpn","addCcsOid","addSid","addClaims","clientCapabilities","mergedClaims","addClientCapabilitiesToClaims","addCorrelationId","addLibraryInfo","addApplicationTelemetry","appTelemetry","addPrompt","prompt","addState","state","addNonce","nonce","addCodeChallengeParams","codeChallenge","codeChallengeMethod","addAuthorizationCode","addRefreshToken","addCodeVerifier","codeVerifier","addClientSecret","clientSecret","addClientAssertion","clientAssertion","addClientAssertionType","clientAssertionType","addGrantType","grantType","addClientInfo","addCliData","addInstanceAware","addExtraQueryParameters","eQParams","addPopToken","cnfString","addSshJwk","sshJwkString","addServerTelemetry","addThrottling","addLogoutHint","logoutHint","addBrokerParameters","brokerClientId","brokerRedirectUri","addEARParameters","jwk","addPostBodyParameters","bodyParameters","isOpenIdConfigResponse","isCloudInstanceDiscoveryResponse","isCloudInstanceDiscoveryErrorResponse","invoke","callback","eventName","telemetryClient","args","inProgressEvent","eventCount","result","invokeAsync","RegionDiscovery","networkInterface","environmentRegion","regionDiscoveryMetadata","autodetectedRegionName","localIMDSVersionResponse","currentIMDSVersion","currentIMDSVersionResponse","nowSeconds","toSecondsFromDate","date","toDateFromSeconds","seconds","isTokenExpired","expiresOn","offset","expirationSec","isCacheExpired","lastUpdatedAt","cacheRetentionDays","cacheExpirationTimestamp","wasClockTurnedBack","cachedAt","createIdTokenEntity","createAccessTokenEntity","extExpiresOn","refreshOn","requestedClaims","requestedClaimsHash","atEntity","createRefreshTokenEntity","rtEntity","isCredentialEntity","isAccessTokenEntity","isIdTokenEntity","isRefreshTokenEntity","isServerTelemetryEntity","validateKey","validateEntity","isThrottlingEntity","generateAppMetadataKey","isAppMetadataEntity","isAuthorityMetadataEntity","generateAuthorityMetadataExpiresAt","updateAuthorityEndpointMetadata","authorityMetadata","updatedValues","fromNetwork","updateCloudDiscoveryMetadata","isAuthorityMetadataExpired","Authority","cacheManager","authorityOptions","managedIdentity","authorityUri","urlString","endpoint","cachedAuthorityUrlComponents","cachedAuthorityParts","currentPart","index","cachedPart","canonicalAuthorityHost","metadataEntity","cloudDiscoverySource","endpointSource","endpointMetadataResult","localMetadata","hardcodedMetadata","configMetadata","metadataEntityExpired","openIdConfigurationEndpoint","userConfiguredAzureRegion","localMetadataSource","parsedResponse","instanceDiscoveryEndpoint","typedResponseBody","error","typedError","authorityString","azureCloudOptions","authorityAzureCloudInstance","tenant","region","authorityUrlInstance","authorityUrlParts","hostNameAndPort","azureRegion","regionalMetadata","ciamAuthority","authorityUrlComponents","tenantIdOrDomain","getTenantFromAuthorityString","formatAuthorityUri","buildStaticAuthorityOptions","rawCloudDiscoveryMetadata","createDiscoveredInstance","networkClient","authorityUriFinal","acquireTokenAuthority","ServerError","subError","errorNo","status","getRequestThumbprint","ThrottlingUtils","thumbprint","thumbprintValue","throttleTime","time","currentSeconds","homeAccountIdentifier","NetworkError","httpStatus","responseHeaders","createNetworkError","additionalError","BaseClient","configuration","ccsCred","headers","tokenEndpoint","queuedEvent","cloudInstanceHostname","cloudInstanceAuthorityUri","cloudInstanceAuthority","noTokensFound","nativeAccountUnavailable","refreshTokenExpired","uxNotAllowed","interactionRequired","consentRequired","loginRequired","badToken","interruptedUser","InteractionRequiredServerErrorMessage","InteractionRequiredAuthSubErrorMessage","InteractionRequiredAuthErrorMessages","InteractionRequiredAuthError","timestamp","traceId","isInteractionRequiredError","isInteractionRequiredErrorCode","isInteractionRequiredSubError","isInteractionRequiredErrorDesc","irErrorCode","createInteractionRequiredAuthError","ProtocolUtils","userState","meta","libraryState","stateObj","stateString","splitState","libraryStateString","libraryStateObj","KeyLocation","PopTokenGenerator","cryptoUtils","reqCnf","reqCnfString","payload","resourceRequestMethod","resourceRequestUri","shrClaims","shrNonce","shrOptions","resourceUrlString","resourceUrlComponents","TokenCacheContext","tokenCache","hasChanged","ResponseHandler","cacheStorage","serverResponse","refreshAccessToken","errString","serverErrorNo","serverError","serverTokenResponse","reqTimestamp","authCodePayload","handlingRefreshTokenResponse","forceCacheRefreshTokenResponse","serverRequestId","requestStateObj","cacheContext","claimsTenantId","cachedIdToken","cachedAccount","buildAccountToCache","cachedAccessToken","responseScopes","expiresIn","extExpiresIn","refreshIn","tokenExpirationSeconds","extendedTokenExpirationSeconds","refreshOnSeconds","cachedRefreshToken","rtExpiresOn","rtExpiresIn","cachedAppMetadata","fromTokenCache","requestState","requestId","popTokenGenerator","secret","uid","baseAccountKey","accountKey","baseAccount","newTenantProfile","getClientAssertion","AuthorizationCodeClient","responseHandler","logoutRequest","queryParametersString","requestBody","ccsCredential","reqCnfData","configClaims","DEFAULT_REFRESH_TOKEN_EXPIRATION_OFFSET_SECONDS","RefreshTokenClient","noFamilyRTInCache","clientMismatchErrorWithFamilyRT","foci","refreshTokenRequest","badRefreshTokenKey","SilentFlowClient","lastCacheOutcome","requestTenantId","cacheOutcome","StubbedNetworkModule","getStandardAuthorizeRequestParameters","accountSid","extractAccountSid","accountLoginHintClaim","extractLoginHint","getAuthorizeUrl","requestParameters","encodeParams","getAuthorizationCodePayload","serverParams","cachedState","validateAuthorizationResponse","decodedServerResponseState","decodedRequestState","parseServerErrorNo","errorCodePrefix","errorCodePrefixIndex","skuGroupSeparator","skuValueSeparator","makeExtraSkuString","skus","libraryName","libraryVersion","extensionName","extensionVersion","skuMap","skuArr","setSku","skuName","skuVersion","ServerTelemetryManager","telemetryRequest","platformFieldsArr","nativeBrokerErrorCode","platformFields","regionDiscoveryFields","requestWithRegionDiscoveryFields","lastRequests","maxErrors","failedRequests","errors","errorCount","overflow","initialValue","numErrorsFlushed","serverTelemEntity","serverTelemetryEntity","dataSize","missingKidError","missingAlgError","JoseHeaderErrorMessages","JoseHeaderError","createJoseHeaderError","JoseHeader","shrHeaderOptions","shrHeader","pkceNotCreated","earJwkEmpty","earJweEmpty","cryptoNonExistent","emptyNavigateUri","hashEmptyError","noStateInHash","hashDoesNotContainKnownProperties","unableToParseState","stateInteractionTypeMismatch","interactionInProgress","popupWindowError","emptyWindowError","userCancelled","monitorPopupTimeout","monitorWindowTimeout","redirectInIframe","blockIframeReload","blockNestedPopups","iframeClosedPrematurely","silentLogoutUnsupported","noAccountError","silentPromptValueError","noTokenRequestCacheError","unableToParseTokenRequestCacheError","authRequestNotSetError","invalidCacheType","nonBrowserEnvironment","databaseNotOpen","getRequestFailed","failedToParseResponse","unableToLoadToken","cryptoKeyNotFound","authCodeRequired","authCodeOrNativeAccountIdRequired","spaCodeAndNativeAccountIdPresent","databaseUnavailable","unableToAcquireTokenFromNativePlatform","nativeHandshakeTimeout","nativeExtensionNotInstalled","nativeConnectionNotEstablished","uninitializedPublicClientApplication","nativePromptNotSupported","invalidBase64String","invalidPopTokenRequest","failedToBuildHeaders","failedToParseHeaders","failedToDecryptEarResponse","timedOut","ErrorLink","BrowserAuthErrorMessages","BrowserAuthError","createBrowserAuthError","BrowserConstants","PlatformAuthConstants","NativeExtensionMethod","BrowserCacheLocation","HTTP_REQUEST_TYPE","INTERACTION_TYPE","TemporaryCacheKeys","InMemoryCacheKeys","ApiId","ApiName","apiIdToName","InteractionType","DEFAULT_REQUEST","KEY_FORMAT_JWK","DB_NAME","DB_VERSION","DB_TABLE_NAME","CacheLookupPolicy","iFrameRenewalPolicies","urlEncode","base64Encode","urlEncodeArr","inputArr","base64EncArr","aBytes","binString","x","base64DecToArr","base64String","encodedString","m","PKCS1_V15_KEYGEN_ALG","AES_GCM","HKDF","S256_HASH_ALG","MODULUS_LENGTH","PUBLIC_EXPONENT","UUID_CHARS","UINT32_ARR","RAW","ENCRYPT","DECRYPT","DERIVE_KEY","SUBTLE_SUBERROR","keygenAlgorithmOptions","validateCryptoAvailable","skipValidateSubtleCrypto","sha256Digest","dataString","data","getRandomValues","dataBuffer","getRandomUint32","createNewGuid","currentTimestamp","baseRand","bytes","randA","randBHi","randBLo","text","generateKeyPair","extractable","usages","exportJwk","importJwk","sign","generateEarKey","generateBaseKey","importEarKey","earJwk","b64DecodedJwk","rawKey","keyBuffer","decryptEarResponse","earJwe","earJweParts","header","iv","ciphertext","tag","tagLengthBits","encryptedData","decryptedData","generateHKDF","baseKey","deriveKey","context","encrypt","rawData","encodedData","derivedKey","decrypt","hashString","plainText","hashBuffer","hashBytes","storageNotSupported","stubbedPublicClientApplicationCalled","inMemRedirectUnavailable","BrowserConfigurationAuthErrorMessages","BrowserConfigurationAuthError","createBrowserConfigurationAuthError","clearHash","contentWindow","replaceHash","urlParts","isInIframe","isInPopup","getCurrentUri","getHomepage","blockReloadInHiddenIframes","blockRedirectInIframe","allowRedirectInIframe","blockAcquireTokenInPopups","blockNonBrowserEnvironment","blockAPICallsBeforeInitialize","initialized","preflightCheck","redirectPreflightCheck","preconnect","link","createGuid","NavigationClient","resolve","reject","FetchClient","responseStatus","reqHeaders","getFetchHeaders","getHeaderDict","reqBody","optionsHeaders","headerDict","DEFAULT_POPUP_TIMEOUT_MS","DEFAULT_IFRAME_TIMEOUT_MS","DEFAULT_REDIRECT_TIMEOUT_MS","DEFAULT_NATIVE_BROKER_HANDSHAKE_TIMEOUT_MS","buildConfiguration","userInputAuth","userInputCache","userInputSystem","userInputTelemetry","isBrowserEnvironment","DEFAULT_AUTH_OPTIONS","DEFAULT_LOGGER_OPTIONS","providedSystemOptions","ClientConfigurationErrorCodes.cannotSetOIDCOptions","ClientConfigurationErrorCodes.cannotAllowPlatformBroker","PREFIX","BROWSER_PREFIX","CACHE_KEY_SEPARATOR","CREDENTIAL_SCHEMA_VERSION","ACCOUNT_SCHEMA_VERSION","LOG_LEVEL_CACHE_KEY","LOG_PII_CACHE_KEY","VERSION_CACHE_KEY","ACCOUNT_KEYS","TOKEN_KEYS","getAccountKeysCacheKey","schema","getTokenKeysCacheKey","BaseOperatingContext","sessionStorage","logLevelKey","piiLoggingKey","piiLoggingEnabled","logLevel","StandardOperatingContext","DatabaseStorage","openDB","event","db","dbGet","dbPut","dbDelete","dbGetKeys","dbContainsKey","deleteDbRequest","MemoryStorage","cacheKeys","AsyncMemoryStorage","item","containsKey","dbDeleted","CryptoOps","inputKid","publicKeyThumbMeasurement","keyPair","publicKeyJwk","pubKeyThumprintObj","publicJwkString","getSortedObjectString","publicJwkHash","privateKeyJwk","unextractablePrivateKey","ClientAuthErrorCodes.bindingKeyNotRemoved","signJwtMeasurement","cachedKeyPair","publicKeyJwkString","encodedKeyIdThumbprint","encodedShrHeader","encodedPayload","tokenString","tokenBuffer","signatureBuffer","encodedSignature","signedJwt","COOKIE_LIFE_MULTIPLIER","SameSiteOptions","CookieStorage","cookieList","cookie","rest","ClientAuthErrorCodes.methodNotImplemented","cookieLifeDays","secure","sameSite","cookieStr","expireTime","getCookieExpirationTime","keys","cookieParts","today","getAccountKeys","storage","schemaVersion","getTokenKeys","isEncrypted","ENCRYPTION_KEY","BROADCAST_CHANNEL_NAME","LocalStorage","cookies","cookieString","parsedCookie","keyStr","cookieData","rawCache","encObj","importedArr","promiseArr","promise","perfMeasurement","SessionStorage","EventType","removeElementFromArray","element","BrowserCacheManager","cacheConfig","eventHandler","getStorageImplementation","credentialSchema","accountSchema","kmsiMap","rawValue","parsedValue","TimeUtils.isCacheExpired","CacheHelpers.isCredentialEntity","CacheHelpers.isAccessTokenEntity","CacheHelpers.isRefreshTokenEntity","TimeUtils.isTokenExpired","accountKeysToCheck","rawObject","AuthToken.extractTokenClaims","AuthToken.isKmsi","credentialKeysToMigrate","currentCredentialKeys","currentAccountKeys","previousAccountKeys","idTokenKey","oldSchemaData","currentAccountKey","previousAccountKey","newIdTokenKey","currentIdToken","oldTokenHasSignInState","currentTokenHasSignInState","newAccountKey","accessTokenKey","newKey","currentToken","refreshTokenKey","previousVersion","jsonValue","parsedJson","tokenKeysCount","maxRetries","startIndex","sum","count","endIndex","cacheError","CacheErrorCodes.cacheQuotaExceeded","serializedAccount","parsedAccount","wasAdded","removalIndex","activeAccount","idRemoval","updateTokenKeys","keysRemoved","accessRemoval","refreshRemoval","parsedIdToken","CacheHelpers.isIdTokenEntity","parsedAccessToken","parsedRefreshToken","appMetadataKey","parsedMetadata","CacheHelpers.isAppMetadataEntity","CacheHelpers.generateAppMetadataKey","serverTelemetryKey","parsedEntity","CacheHelpers.isServerTelemetryEntity","serverTelemetry","CacheHelpers.isAuthorityMetadataEntity","wrapperSKU","wrapperVersion","sku","activeAccountKeyFilters","activeAccountValueFilters","activeAccountValueObj","activeAccountKey","activeAccountValue","TimeUtils.nowSeconds","throttlingCacheKey","parsedThrottlingCache","CacheHelpers.isThrottlingEntity","throttlingCache","generateKey","itemCookie","removedAccessTokens","scheme","homeTenantId","authCodeRequest","encodedValue","encodedVerifier","encodedTokenRequest","parsedRequest","verifier","cachedRequest","matchClientId","inProgress","type","idTokenEntity","CacheHelpers.createIdTokenEntity","claimsHash","accessTokenEntity","CacheHelpers.createAccessTokenEntity","TimeUtils.toSecondsFromDate","cacheLocation","DEFAULT_BROWSER_CACHE_MANAGER","cacheOptions","getAllAccounts","browserStorage","isInBrowser","getAccount","getAccountByUsername","username","getAccountByHomeId","getAccountByLocalId","setActiveAccount","getActiveAccount","EventHandler","eventTypes","callbackId","eventType","interactionType","BaseInteractionClient","storageImpl","browserCrypto","navigationClient","platformAuthProvider","requestRedirectUri","forceRefresh","telemetryPayload","instanceAwareEQ","resolvedAuthority","resolvedInstanceAware","userAuthority","builtAuthority","discoveredAuthority","AuthorityFactory.createDiscoveredInstance","ClientConfigurationErrorCodes.authorityMismatch","initializeBaseRequest","validatedRequest","ClientConfigurationErrorCodes.missingSshJwk","ClientConfigurationErrorCodes.missingSshKid","initializeSilentRequest","baseRequest","validateRequestMethod","interactionRequest","protocolMode","httpMethod","requestMethod","ClientConfigurationErrorCodes.invalidRequestMethodForEAR","ClientConfigurationErrorCodes.invalidAuthorizePostBodyParameters","StandardInteractionClient","validLogoutRequest","clientConfig","requestAuthority","requestAzureCloudOptions","requestExtraQueryParameters","browserState","extractBrowserRequestState","ClientAuthErrorCodes.invalidState","deserializeResponse","responseLocation","UrlUtils.getDeserializedResponse","UrlUtils.stripLeadingHashOrQuery","validateInteractionType","platformStateObj","InteractionHandler","authCodeModule","authCodeResponse","AuthorizeProtocol.getAuthorizationCodePayload","validateNonce","contentError","pageException","userSwitch","USER_INTERACTION_REQUIRED","USER_CANCEL","NO_NETWORK","DISABLED","ACCOUNT_UNAVAILABLE","UX_NOT_ALLOWED","INVALID_METHOD_ERROR","NativeAuthErrorMessages","NativeAuthError","description","ext","isFatalNativeAuthError","createNativeAuthError","InteractionRequiredAuthErrorCodes.nativeAccountUnavailable","InteractionRequiredAuthErrorCodes.uxNotAllowed","SilentCacheClient","silentRequest","silentAuthClient","authResponse","PlatformAuthInteractionClient","provider","accountId","nativeStorageImpl","AADServerParamKeys.X_CLIENT_EXTRA_SKU","cacheLookupPolicy","nativeATMeasurement","nativeRequest","validatedResponse","ClientAuthErrorCodes.noAccountFound","fullAccount","rootMeasurement","remainingParameters","navigationOptions","authResult","cachedhomeAccountId","shrParameters","ClientAuthErrorCodes.keyIdMissing","mats","accountProperties","responseAccessToken","TimeUtils.toDateFromSeconds","nativeCacheRecord","matsResponse","remainingProperties","RequestParameterBuilder.addClientCapabilitiesToClaims","generatedReqCnfData","hasExtraBrokerParams","AADServerParamKeys.BROKER_CLIENT_ID","AADServerParamKeys.BROKER_REDIRECT_URI","AADServerParamKeys.CLIENT_ID","child_client_id","child_redirect_uri","clientDataAccountTypeMapping","parseClientData","clientdata","parts","instrumentClientData","parsed","getStandardParameters","AuthorizeProtocol.getStandardAuthorizeRequestParameters","RequestParameterBuilder.addLibraryInfo","RequestParameterBuilder.addApplicationTelemetry","RequestParameterBuilder.addNativeBroker","cryptoOps","RequestParameterBuilder.addPopToken","RequestParameterBuilder.instrumentBrokerParams","getAuthCodeRequestUrl","ClientConfigurationErrorCodes.pkceParamsMissing","RequestParameterBuilder.addResponseType","RequestParameterBuilder.addCodeChallengeParams","RequestParameterBuilder.addExtraQueryParameters","AuthorizeProtocol.getAuthorizeUrl","getEARForm","frame","RequestParameterBuilder.addEARParameters","queryParams","RequestParameterBuilder.addCorrelationId","createForm","getCodeForm","RequestParameterBuilder.addPostBodyParameters","authorizeUrl","form","param","handleResponsePlatformBroker","nativeStorage","nativeInteractionClient","userRequestState","handleResponseCode","authClient","interactionHandler","handleResponseEAR","AuthorizeProtocol.validateAuthorizationResponse","additionalData","RANDOM_BYTE_ARR_LENGTH","generatePkceCodes","generateCodeVerifier","generateCodeChallengeFromVerifier","buffer","pkceCodeVerifier","pkceHashedCodeVerifier","PlatformAuthExtensionHandler","handshakeTimeoutMs","extensionId","messageBody","req","preferredProvider","backupProvider","handshakeResolver","resolver","method","AuthErrorCodes.unexpectedError","err","PlatformAuthDOMHandler","supportedContracts","platformDOMRequest","embeddedClientId","extraParameters","validExtraParameters","errorResponse","stringifiedProperties","getPlatformAuthProvider","nativeBrokerHandshakeTimeout","enablePlatformBrokerDOMSupport","isPlatformAuthAllowed","authenticationScheme","ClientConfigurationErrorCodes.invalidPlatformBrokerConfiguration","PopupClient","platformAuthHandler","pkceCodes","popupParams","mainWindowRedirectUri","validRequest","isPlatformBroker","pkce","popupRequest","navigateUrl","popupWindow","pkceVerifier","absoluteUrl","logoutUri","requestUrl","popupWindowParent","intervalId","href","urlNavigate","popupName","popupWindowAttributes","winLeft","winTop","winWidth","winHeight","width","height","top","left","getNavigationType","navigationEntries","navigation","RedirectClient","handleBackButton","redirectStartPage","onRedirectNavigate","redirectRequest","hash","parentMeasurement","loginRequestUrl","loginRequestUrlNormalized","UrlUtils.normalizeUrlForComparison","currentUrlNormalized","processHashOnRedirect","homepage","userProvidedResponse","cachedHash","onRedirectNavigateRequest","requestStartPage","initiateCodeRequest","navigateFrameWait","loadFrame","loadFrameSync","initiateCodeFlowWithPost","createHiddenIframe","initiateEarRequest","monitorIframeForHash","iframe","timeout","pollIntervalMilliseconds","totalTickCount","crossOriginTickCount","timeoutId","removeHiddenIframe","frameHandle","authFrame","SilentIframeClient","inputRequest","msalFrame","requestWithPkce","SilentRefreshClient","refreshTokenClient","TokenCache","cacheRecordAccount","extendedExpiresOn","refreshTokenEntity","CacheHelpers.createRefreshTokenEntity","HybridSpaAuthorizationCodeClient","SilentAuthCodeClient","collectInstanceStats","currentClientId","performanceEvent","frameInstances","msalInstanceCount","sameClientIdInstanceCount","preflightCheck$1","StandardController","operatingContext","nativeCacheOptions","controller","isBroker","initCorrelationId","allowPlatformBroker","initMeasurement","redirectResponseKey","loggedInAccounts","platformBrokerRequest","useNative","redirectResponse","nativeClient","standardRequest","redirectClient","eventError","atrMeasurement","onRedirectNavigateCb","navigate","configOnRedirectNavigateCb","isLoggedIn","atPopupMeasurement","measurement","listener","parentApi","ssoCapableMeasurement","ssoVerificationRequest","success","atbcMeasurement","hybridAuthCode","tokenRenewalError","commonRequest","silentCacheClient","ClientAuthErrorCodes.tokenRefreshRequired","silentRefreshClient","silentIframeClient","atsMeasurement","silentRequestKey","inProgressRequest","activeRequest","trackStateChange","refreshTokenError","checkIfRefreshTokenErrorCanBeResolvedSilently","silentRefreshReason","activePromise","activeCorrelationId","awaitConcurrentIframeMeasure","activePromiseResult","_resolve","iframeResult","res","noInteractionRequired","InteractionRequiredAuthErrorCodes.badToken","refreshTokenRefreshRequired","isSilentlyResolvable","InteractionRequiredAuthErrorCodes.noTokensFound","InteractionRequiredAuthErrorCodes.refreshTokenExpired","tryIframeRenewal","createV3Controller","standard","PublicClientApplication","localId","userName","ArrowDownTrayIcon","title","titleId","props","svgRef","React","ForwardRef","ArrowPathIcon","ArrowUpTrayIcon","ClockIcon","FolderPlusIcon","FolderIcon","GlobeAltIcon","PencilIcon","PlusIcon","ShareIcon","StopIcon","TrashIcon","composeEventHandlers","originalEventHandler","ourEventHandler","checkForDefaultPrevented","setRef","ref","composeRefs","refs","node","hasCleanup","cleanups","cleanup","useComposedRefs","createContextScope","scopeName","createContextScopeDeps","defaultContexts","createContext3","rootComponentName","defaultContext","BaseContext","Provider","children","Context","jsx","useContext2","consumerName","createScope","scopeContexts","contexts","composeContextScopes","baseScope","scopeHooks","createScope2","overrideScopes","nextScopes","nextScopes2","useScope","currentScope","useLayoutEffect2","useReactId","useId","deterministicId","setId","useLayoutEffect","reactId","useReactEffectEvent","useReactInsertionEffect","useEffectEvent","useInsertionEffect","useControllableState","prop","defaultProp","onChange","caller","uncontrolledProp","setUncontrolledProp","onChangeRef","useUncontrolledState","isControlled","isControlledRef","wasControlled","setValue","nextValue","value2","isFunction","prevValueRef","createSlot","ownerName","Slot2","forwardedRef","slotProps","slottableElement","hasSlottable","newChildren","isLazyComponent","use","maybeSlottable","isSlottable","slottable","child","getSlottableElementFromSlottable","slottableElementRef","getElementRef","composedRef","createSlottableError","createSlotError","mergedProps","mergeProps","Slot","SLOTTABLE_IDENTIFIER","createSlottable","Slottable2","child2","childProps","overrideProps","propName","slotPropValue","childPropValue","getter","mayWarn","REACT_LAZY_TYPE","isPromiseLike","NODES","Primitive","primitive","Node","asChild","primitiveProps","Comp","dispatchDiscreteCustomEvent","ReactDOM","useCallbackRef","callbackRef","DISMISSABLE_LAYER_NAME","CONTEXT_UPDATE","POINTER_DOWN_OUTSIDE","FOCUS_OUTSIDE","originalBodyPointerEvents","DismissableLayerContext","DismissableLayer","disableOutsidePointerEvents","deferPointerDownOutside","onEscapeKeyDown","onPointerDownOutside","onFocusOutside","onInteractOutside","onDismiss","layerProps","setNode","ownerDocument","force","composedRefs","layers","highestLayerWithOutsidePointerEventsDisabled","highestLayerWithOutsidePointerEventsDisabledIndex","isBodyPointerEventsDisabled","isPointerEventsEnabled","isDeferredPointerDownOutsideRef","pointerDownOutside","usePointerDownOutside","isPointerDownOnBranch","branch","focusOutside","useFocusOutside","isHighestLayer","handleKeyDown","dispatchUpdate","handleUpdate","BRANCH_NAME","DismissableLayerBranch","useDismissableLayerSurface","dismissableSurfaces","handlePointerDownOutside","isPointerInsideReactTreeRef","isPointerDownOutsideRef","interceptedOutsideInteractionEventsRef","handleClickRef","resetOutsideInteraction","isOutsideInteractionIntercepted","handleInteractionCapture","surface","handleInteractionBubble","handlePointerDown","handleAndDispatchPointerDownOutsideEvent2","wasOutsideInteractionIntercepted","handleAndDispatchCustomEvent","eventDetail","outsideInteractionEvents","timerId","handleFocusOutside","isFocusInsideReactTreeRef","handleFocus","handler","detail","discrete","Root","Branch","AUTOFOCUS_ON_MOUNT","AUTOFOCUS_ON_UNMOUNT","EVENT_OPTIONS","FOCUS_SCOPE_NAME","FocusScope","loop","trapped","onMountAutoFocusProp","onUnmountAutoFocusProp","scopeProps","container","setContainer","onMountAutoFocus","onUnmountAutoFocus","lastFocusedElementRef","focusScope","handleFocusIn2","focus","handleFocusOut2","relatedTarget","handleMutations2","mutations","mutation","mutationObserver","focusScopesStack","previouslyFocusedElement","mountEvent","focusFirst","removeLinks","getTabbableCandidates","unmountEvent","isTabKey","focusedElement","container2","first","last","getTabbableEdges","candidates","select","candidate","findVisible","nodes","walker","isHiddenInput","elements","isHidden","upTo","isSelectableInput","createFocusScopesStack","stack","activeFocusScope","arrayRemove","updatedArray","items","PORTAL_NAME","Portal","containerProp","portalProps","mounted","setMounted","useStateMachine","initialState","machine","Presence","present","presence","usePresence","React2","useStableComposedRefs","stylesRef","prevPresentRef","prevAnimationNameRef","send","currentAnimationName","getAnimationName","styles","wasPresent","prevAnimationName","ownerWindow","handleAnimationEnd","isCurrentAnimation","currentFillMode","handleAnimationStart","node2","refsRef","currentRefs","guards","useFocusGuards","createFocusGuard","start","end","__assign","t","n","p","__rest","__awaiter","thisArg","_arguments","P","generator","adopt","fulfilled","step","rejected","__read","o","r","ar","__spreadArray","to","from","pack","l","zeroRightClassName","fullWidthClassName","noScrollbarsClassName","removedBarSizeVariable","assignRef","useState","useIsomorphicLayoutEffect","currentValues","useMergeRefs","defaultValue","newValue","oldValue","prevRefs_1","nextRefs_1","current_1","ItoI","a","innerCreateMedium","defaults","middleware","assigned","medium","cb","cbs","pendingQueue","executeQueue","cycle","createSidecarMedium","SideCar","sideCar","Target","exportSidecar","exported","effectCar","nothing","RemoveScroll","parentRef","callbacks","setCallbacks","forwardProps","className","removeScrollBar","enabled","shards","noRelative","noIsolation","inert","allowPinchZoom","Container","gapMode","containerRef","containerProps","getNonce","makeStyleTag","injectStyles","css","insertStyleTag","head","stylesheetSingleton","counter","stylesheet","style","styleHookSingleton","sheet","isDynamic","styleSingleton","useStyle","Sheet","dynamic","zeroGap","parse","getOffset","cs","right","getGapWidth","offsets","documentWidth","windowWidth","Style","lockAttribute","getStyles","allowRelative","important","gap","getCurrentUseCounter","useLockAttribute","newCounter","RemoveScrollBar","noImportant","passiveSupported","nonPassive","alwaysContainsScroll","elementCanBeScrolled","elementCouldBeVScrolled","elementCouldBeHScrolled","locationCouldBeScrolled","axis","current","isScrollable","elementCouldBeScrolled","getScrollVariables","scrollHeight","clientHeight","getVScrollVariables","scrollTop","getHScrollVariables","scrollLeft","scrollWidth","clientWidth","getDirectionFactor","direction","handleScroll","endTarget","sourceDelta","noOverscroll","directionFactor","delta","targetInLock","shouldCancelScroll","isDeltaPositive","availableScroll","availableScrollTop","position","scroll_1","capacity","elementScroll","parent_1","getTouchXY","getDeltaXY","extractRef","deltaCompare","y","generateStyle","idCounter","lockStack","RemoveScrollSideCar","shouldPreventQueue","touchStartRef","activeAxis","lastProps","allow_1","el","shouldCancelEvent","parent","touch","touchStart","deltaX","deltaY","currentAxis","moveDirection","selection","anchorNode","isTouchingSelection","canBeScrolledInMainDirection","cancelingAxis","shouldPrevent","_event","sourceEvent","shardNodes","shouldStop","shouldCancel","should","getOutermostShadowParent","scrollTouchStart","scrollWheel","scrollTouchMove","inst","shadowParent","ReactRemoveScroll","getDefaultParent","originalTarget","sampleTarget","counterMap","uncontrolledNodes","markerMap","lockCount","unwrapHost","correctTargets","targets","correctedTarget","applyAttributeToOthers","parentNode","markerName","controlAttribute","markerCounter","hiddenNodes","elementsToKeep","elementsToStop","keep","deep","attr","alreadyHidden","counterValue","markerValue","hideOthers","activeParentNode","DIALOG_NAME","createDialogContext","DialogProvider","useDialogContext","Dialog","__scopeDialog","openProp","defaultOpen","onOpenChange","modal","triggerRef","contentRef","open","setOpen","prevOpen","TRIGGER_NAME","DialogTrigger","triggerProps","composedTriggerRef","getState","PortalProvider","usePortalContext","DialogPortal","forceMount","PortalPrimitive","OVERLAY_NAME","DialogOverlay","portalContext","overlayProps","DialogOverlayImpl","registerDismissableSurface","CONTENT_NAME","DialogContent","contentProps","DialogContentModal","DialogContentNonModal","content","DialogContentImpl","originalEvent","ctrlLeftClick","hasInteractedOutsideRef","hasPointerDownOutsideRef","trapFocus","onOpenAutoFocus","onCloseAutoFocus","Fragment","TITLE_NAME","DialogTitle","titleProps","DESCRIPTION_NAME","DialogDescription","descriptionProps","CLOSE_NAME","DialogClose","closeProps","useLoadGsiScript","onScriptLoadSuccess","onScriptLoadError","scriptLoadedSuccessfully","setScriptLoadedSuccessfully","onScriptLoadSuccessRef","useRef","onScriptLoadErrorRef","useEffect","scriptTag","GoogleOAuthContext","createContext","GoogleOAuthProvider","contextValue","useMemo","useGoogleOAuth","useContext","useGoogleLogin","flow","onSuccess","onError","onNonOAuthError","overrideScope","clientRef","onSuccessRef","onErrorRef","onNonOAuthErrorRef","clientMethod","client","nonOAuthError","loginImplicitFlow","useCallback","overrideConfig","loginAuthCodeFlow","functionalUpdate","updater","makeStateUpdater","instance","old","d","isNumberArray","flattenBy","getChildren","flat","recurse","subArr","memo","getDeps","fn","opts","deps","depArgs","depTime","newDeps","dep","resultTime","depEndTime","resultEndTime","resultFpsPercentage","pad","num","getMemoOptions","tableOptions","debugLevel","_tableOptions$debugAl","createCell","table","row","column","columnId","getRenderValue","_cell$getValue","cell","feature","createColumn","columnDef","depth","_ref","_resolvedColumnDef$id","resolvedColumnDef","accessorKey","accessorFn","originalRow","_result","_column$columns","orderColumns","_column$columns2","leafColumns","debug","createHeader","_options$id","leafHeaders","recurseHeader","h","Headers","allColumns","_left$map$filter","_right$map$filter","leftColumns","rightColumns","centerColumns","buildHeaderGroups","_left$map$filter2","orderedLeafColumns","_right$map$filter2","headerGroups","headerGroup","flatHeaders","_header$subHeaders","_header$subHeaders2","_header$subHeaders3","center","_left$0$headers","_left$","_center$0$headers","_center$","_right$0$headers","_right$","columnsToGroup","headerFamily","_headerGroups$0$heade","_headerGroups$","maxDepth","findMaxDepth","columns","createHeaderGroup","headersToGroup","pendingParentHeaders","headerToGroup","latestPendingParentHeader","isLeafHeader","isPlaceholder","bottomHeaders","recurseHeadersForSpans","colSpan","rowSpan","childRowSpans","childColSpan","childRowSpan","minChildRowSpan","createRow","original","rowIndex","subRows","parentId","_row$getValue","parentRows","currentRow","parentRow","allCells","acc","ColumnFaceting","includesString","filterValue","_filterValue$toString","testFalsey","includesStringSensitive","_row$getValue2","equalsString","_row$getValue3","arrIncludes","_row$getValue4","arrIncludesAll","_row$getValue5","arrIncludesSome","_row$getValue6","equals","weakEquals","inNumberRange","min","max","rowValue","unsafeMin","unsafeMax","parsedMin","parsedMax","temp","filterFns","ColumnFiltering","firstRow","_table$options$filter","_table$options$filter2","_column$columnDef$ena","_table$options$enable","_table$options$enable2","_table$getState$colum","_table$getState$colum2","_table$getState$colum3","filterFn","previousFilter","newFilter","shouldAutoRemoveFilter","_old$filter","newFilterObj","_old$map","_table","updateFn","_functionalUpdate","defaultState","_table$initialState$c","_table$initialState","aggregationFns","_leafRows","childRows","next","leafRows","values","mid","nums","b","_columnId","ColumnGrouping","_toString","_props$getValue","_table$getState$group","_table$getState$group2","canGroup","_table$options$aggreg","_table$options$aggreg2","_table$initialState$g","_row$subRows","grouping","groupedColumnMode","nonGroupingColumns","col","g","ColumnOrdering","_getVisibleLeafColumns","_columns$","_columns","columnOrder","orderedColumns","columnOrderCopy","columnsCopy","targetColumnId","foundIndex","getDefaultColumnPinningState","ColumnPinning","columnIds","_old$left3","_old$right3","_old$left","_old$right","_old$left2","_old$right2","_d$columnDef$enablePi","leafColumnIds","isLeft","isRight","leftAndRight","_pinningState$positio","pinningState","_pinningState$left","_pinningState$right","safelyAccessDocument","_document","defaultColumnSizing","getDefaultColumnSizingInfoState","ColumnSizing","_column$columnDef$min","_column$columnDef$max","columnSize","_ref2","_","_header$column$getSiz","prevSiblingHeader","_contextDocument","canResize","isTouchStartEvent","startSize","columnSizingStart","clientX","newColumnSizing","updateOffset","clientXPos","_old$startOffset","_old$startSize","deltaDirection","deltaOffset","deltaPercentage","_ref3","headerSize","onMove","onEnd","contextDocument","mouseEvents","touchEvents","_e$touches$","passiveIfSupported","passiveEventSupported","_table$initialState$c2","_table$getHeaderGroup","_table$getHeaderGroup2","_table$getLeftHeaderG","_table$getLeftHeaderG2","_table$getCenterHeade","_table$getCenterHeade2","_table$getRightHeader","_table$getRightHeader2","supported","noop","ColumnVisibility","childColumns","c","cells","makeVisibleColumnsMethod","getColumns","_value","_target","GlobalFaceting","GlobalFiltering","_table$getCoreRowMode","_table$options$getCol","globalFilterFn","RowExpanding","registered","queued","_table$options$autoRe","expanded","_table$initialState$e","splitId","_expanded","exists","oldExpanded","rowId","_table$options$getIsR","_table$options$getRow","isFullyExpanded","canExpand","defaultPageIndex","defaultPageSize","getDefaultPaginationState","RowPagination","safeUpdater","_table$initialState$p","pageIndex","maxPageIndex","_table$initialState$p2","_table$initialState$p3","_table$initialState2","pageSize","topRowIndex","_table$options$pageCo","newPageCount","pageCount","pageOptions","_table$options$pageCo2","_table$options$rowCou","getDefaultRowPinningState","RowPinning","includeLeafRows","includeParentRows","leafRowIds","parentRowIds","rowIds","_old$top3","_old$bottom3","_old$top","_old$bottom","_old$top2","_old$bottom2","enableRowPinning","enablePinning","bottom","isTop","isBottom","_ref4","_visiblePinnedRowIds$","visiblePinnedRowIds","_ref5","_table$initialState$r","_pinningState$top","_pinningState$bottom","visibleRows","pinnedRowIds","_table$options$keepPi","allRows","topPinnedRowIds","bottomPinnedRowIds","topAndBottom","RowSelection","rowSelection","preGroupedFlatRows","resolvedValue","mutateRowIsSelected","rowModel","selectRowsFn","isAllRowsSelected","paginationFlatRows","isAllPageRowsSelected","_table$getState$rowSe","totalSelected","isSelected","_opts$selectChildren","selectedRowIds","isRowSelected","isSubRowSelected","_table$options$enable3","canSelect","includeChildren","newSelectedFlatRows","newSelectedRowsById","recurseRows","rows","_row$subRows2","_selection$row$id","_row$subRows3","allChildrenSelected","someSelected","subRow","subRowChildrenSelected","reSplitAlphaNumeric","alphanumeric","rowA","rowB","compareAlphanumeric","toString","alphanumericCaseSensitive","compareBasic","textCaseSensitive","datetime","basic","aStr","bStr","aa","bb","an","bn","combo","sortingFns","builtInFeatures","firstRows","isString","_table$options$sortin","_table$options$sortin2","desc","multi","nextSortingOrder","hasManualValue","existingSorting","existingIndex","newSorting","sortAction","nextDesc","_table$options$maxMul","_column$columnDef$sor","firstSortDirection","isSorted","_column$columnDef$ena2","_table$getState$sorti","columnSort","_table$getState$sorti2","_table$getState$sorti3","canSort","_table$initialState$s","createTable","_options$_features","_options$initialState","_features","defaultOptions","mergeOptions","_feature$getInitialSt","queuedTimeout","coreInstance","newOptions","searchAll","defaultColumn","_defaultColumn","_props$renderValue$to","_props$renderValue","columnDefs","recurseColumns","groupingColumnDef","flatColumns","getCoreRowModel","accessRows","originalRows","_row$originalSubRows","filterRows","filterRowImpl","filterRowModelFromLeafs","filterRowModelFromRoot","rowsToFilter","filterRow","_table$options$maxLea","newFilteredFlatRows","newFilteredRowsById","recurseFilterRows","newRow","_table$options$maxLea2","getFilteredRowModel","columnFilters","globalFilter","resolvedColumnFilters","resolvedGlobalFilters","_filterFn$resolveFilt","filterableIds","globallyFilterableColumns","_globalFilterFn$resol","currentColumnFilter","currentGlobalFilter","j","filterMeta","filterRowsImpl","getSortedRowModel","sorting","sortingState","sortedFlatRows","availableSorting","sort","_table$getColumn","columnInfoById","sortEntry","sortData","sortedData","_sortEntry$desc","columnInfo","sortUndefined","isDesc","sortInt","aValue","bValue","aUndefined","bUndefined","flexRender","isReactComponent","isClassComponent","isExoticComponent","proto","useReactTable","resolvedOptions","tableRef","setState","prev","module","this","f","$","M","v","u","D","S","w","O","Y","undefined","VERSION","LARGE_ARRAY_SIZE","CORE_ERROR_TEXT","FUNC_ERROR_TEXT","INVALID_TEMPL_VAR_ERROR_TEXT","INVALID_TEMPL_IMPORTS_ERROR_TEXT","HASH_UNDEFINED","MAX_MEMOIZE_SIZE","PLACEHOLDER","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","WRAP_BIND_FLAG","WRAP_BIND_KEY_FLAG","WRAP_CURRY_BOUND_FLAG","WRAP_CURRY_FLAG","WRAP_CURRY_RIGHT_FLAG","WRAP_PARTIAL_FLAG","WRAP_PARTIAL_RIGHT_FLAG","WRAP_ARY_FLAG","WRAP_REARG_FLAG","WRAP_FLIP_FLAG","DEFAULT_TRUNC_LENGTH","DEFAULT_TRUNC_OMISSION","HOT_COUNT","HOT_SPAN","LAZY_FILTER_FLAG","LAZY_MAP_FLAG","LAZY_WHILE_FLAG","INFINITY","MAX_SAFE_INTEGER","MAX_INTEGER","NAN","MAX_ARRAY_LENGTH","MAX_ARRAY_INDEX","HALF_MAX_ARRAY_LENGTH","wrapFlags","argsTag","arrayTag","asyncTag","boolTag","dateTag","domExcTag","errorTag","funcTag","genTag","mapTag","numberTag","nullTag","objectTag","promiseTag","proxyTag","regexpTag","setTag","stringTag","symbolTag","undefinedTag","weakMapTag","weakSetTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reIsDeepProp","reIsPlainProp","rePropName","reRegExpChar","reHasRegExpChar","reTrimStart","reWhitespace","reWrapComment","reWrapDetails","reSplitDetails","reAsciiWord","reForbiddenIdentifierChars","reEscapeChar","reEsTemplate","reFlags","reIsBadHex","reIsBinary","reIsHostCtor","reIsOctal","reIsUint","reLatin","reNoMatch","reUnescapedString","rsAstralRange","rsComboMarksRange","reComboHalfMarksRange","rsComboSymbolsRange","rsComboRange","rsDingbatRange","rsLowerRange","rsMathOpRange","rsNonCharRange","rsPunctuationRange","rsSpaceRange","rsUpperRange","rsVarRange","rsBreakRange","rsApos","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsModifier","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsZWJ","rsMiscLower","rsMiscUpper","rsOptContrLower","rsOptContrUpper","reOptMod","rsOptVar","rsOptJoin","rsOrdLower","rsOrdUpper","rsSeq","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","contextProps","templateCounter","typedArrayTags","cloneableTags","deburredLetters","htmlEscapes","htmlUnescapes","stringEscapes","freeParseFloat","freeParseInt","freeGlobal","global","freeSelf","root","freeExports","exports","freeModule","moduleExports","freeProcess","nodeUtil","types","nodeIsArrayBuffer","nodeIsDate","nodeIsMap","nodeIsRegExp","nodeIsSet","nodeIsTypedArray","apply","func","arrayAggregator","setter","iteratee","accumulator","length","arrayEach","arrayEachRight","arrayEvery","predicate","arrayFilter","resIndex","arrayIncludes","baseIndexOf","arrayIncludesWith","comparator","arrayMap","arrayPush","arrayReduce","initAccum","arrayReduceRight","arraySome","asciiSize","baseProperty","asciiToArray","string","asciiWords","baseFindKey","collection","eachFunc","baseFindIndex","fromIndex","fromRight","strictIndexOf","baseIsNaN","baseIndexOfWith","baseMean","baseSum","object","basePropertyOf","baseReduce","baseSortBy","comparer","baseTimes","baseToPairs","baseTrim","trimmedEndIndex","baseUnary","baseValues","cacheHas","cache","charsStartIndex","strSymbols","chrSymbols","charsEndIndex","countHolders","placeholder","deburrLetter","escapeHtmlChar","escapeStringChar","chr","getValue","hasUnicode","hasUnicodeWord","iteratorToArray","iterator","mapToArray","map","overArg","transform","arg","replaceHolders","setToArray","set","setToPairs","strictLastIndexOf","stringSize","unicodeSize","stringToArray","unicodeToArray","unescapeHtmlChar","unicodeWords","runInContext","Array","Date","Error","Function","Math","Object","RegExp","String","TypeError","arrayProto","funcProto","objectProto","coreJsData","funcToString","hasOwnProperty","maskSrcKey","nativeObjectToString","objectCtorString","oldDash","reIsNative","Buffer","Symbol","Uint8Array","allocUnsafe","getPrototype","objectCreate","propertyIsEnumerable","splice","spreadableSymbol","symIterator","symToStringTag","defineProperty","getNative","ctxClearTimeout","ctxNow","ctxSetTimeout","nativeCeil","nativeFloor","nativeGetSymbols","nativeIsBuffer","nativeIsFinite","nativeJoin","nativeKeys","nativeMax","nativeMin","nativeNow","nativeParseInt","nativeRandom","nativeReverse","DataView","Map","Promise","Set","WeakMap","nativeCreate","metaMap","realNames","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","symbolToString","lodash","isObjectLike","isArray","LazyWrapper","LodashWrapper","wrapperClone","baseCreate","isObject","baseLodash","chainAll","lazyClone","copyArray","lazyReverse","lazyValue","dir","isArr","arrLength","view","getView","iteratees","iterLength","takeCount","baseWrapperValue","outer","iterIndex","computed","Hash","entries","hashClear","hashDelete","hashGet","hashHas","hashSet","ListCache","listCacheClear","listCacheDelete","assocIndexOf","lastIndex","listCacheGet","listCacheHas","listCacheSet","MapCache","mapCacheClear","mapCacheDelete","getMapData","mapCacheGet","mapCacheHas","mapCacheSet","size","SetCache","setCacheAdd","setCacheHas","Stack","stackClear","stackDelete","stackGet","stackHas","stackSet","pairs","arrayLikeKeys","inherited","isArg","isArguments","isBuff","isBuffer","isType","isTypedArray","skipIndexes","isIndex","arraySample","baseRandom","arraySampleSize","shuffleSelf","baseClamp","arrayShuffle","assignMergeValue","eq","baseAssignValue","assignValue","objValue","baseAggregator","baseEach","baseAssign","copyObject","baseAssignIn","keysIn","baseAt","paths","skip","get","number","lower","upper","baseClone","bitmask","customizer","isDeep","isFlat","isFull","initCloneArray","getTag","isFunc","cloneBuffer","initCloneObject","copySymbolsIn","copySymbols","initCloneByTag","stacked","isSet","subValue","isMap","keysFunc","getAllKeysIn","getAllKeys","baseConforms","baseConformsTo","baseDelay","wait","setTimeout","baseDifference","includes","isCommon","valuesLength","valuesIndex","createBaseEach","baseForOwn","baseEachRight","baseForOwnRight","baseEvery","baseExtremum","isSymbol","baseFill","toInteger","toLength","baseFilter","baseFlatten","isStrict","isFlattenable","baseFor","createBaseFor","baseForRight","baseFunctions","baseGet","path","castPath","toKey","baseGetAllKeys","symbolsFunc","baseGetTag","getRawTag","objectToString","baseGt","other","baseHas","baseHasIn","baseInRange","baseIntersection","arrays","othLength","othIndex","caches","maxLength","seen","baseInverter","baseInvoke","baseIsArguments","baseIsArrayBuffer","baseIsDate","baseIsEqual","baseIsEqualDeep","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","equalObjects","baseIsMap","baseIsMatch","matchData","noCustomizer","srcValue","baseIsNative","isMasked","baseIsRegExp","baseIsSet","baseIsTypedArray","isLength","baseIteratee","identity","baseMatchesProperty","baseMatches","property","baseKeys","isPrototype","baseKeysIn","nativeKeysIn","isProto","baseLt","baseMap","isArrayLike","getMatchData","matchesStrictComparable","isKey","isStrictComparable","hasIn","baseMerge","srcIndex","baseMergeDeep","safeGet","mergeFunc","isTyped","isArrayLikeObject","cloneTypedArray","isPlainObject","toPlainObject","baseNth","baseOrderBy","orders","getIteratee","criteria","compareMultiple","basePick","basePickBy","baseSet","basePropertyDeep","basePullAll","indexOf","basePullAt","indexes","previous","baseUnset","baseRange","baseRepeat","baseRest","setToString","overRest","baseSample","baseSampleSize","nested","baseSetData","baseSetToString","constant","baseShuffle","baseSlice","baseSome","baseSortedIndex","retHighest","low","high","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","baseSortedUniq","baseToNumber","baseToString","baseUniq","createSet","seenIndex","baseUpdate","baseWhile","isDrop","actions","action","baseXor","baseZipObject","assignFunc","valsLength","castArrayLikeObject","castFunction","stringToPath","castRest","castSlice","clearTimeout","cloneArrayBuffer","arrayBuffer","cloneDataView","dataView","cloneRegExp","regexp","cloneSymbol","symbol","typedArray","compareAscending","valIsDefined","valIsReflexive","objCriteria","othCriteria","ordersLength","order","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","getSymbols","getSymbolsIn","createAggregator","initializer","createAssigner","assigner","sources","guard","isIterateeCall","iterable","createBind","isBind","Ctor","createCtor","wrapper","createCaseFirst","methodName","trailing","createCompounder","words","deburr","thisBinding","createCurry","arity","getHolder","createRecurry","createHybrid","createFind","findIndexFunc","createFlow","flatRest","funcs","prereq","getFuncName","funcName","getData","isLaziable","partialsRight","holdersRight","argPos","ary","isAry","isBindKey","isFlip","holdersCount","newHolders","reorder","createInverter","toIteratee","createMathOperation","operator","createOver","arrayFunc","createPadding","chars","charsLength","createPartial","createRange","toFinite","createRelationalOperation","toNumber","wrapFunc","isCurry","newHoldersRight","newPartials","newPartialsRight","newData","setData","setWrapToString","createRound","precision","createToPairs","createWrap","mergeData","customDefaultsAssignIn","customDefaultsMerge","customOmitClone","isPartial","arrStacked","othStacked","arrValue","othValue","compared","convert","objProps","objLength","othProps","objStacked","skipCtor","objCtor","othCtor","flatten","otherFunc","isKeyable","isOwn","unmasked","stubArray","ctorString","transforms","getWrapDetails","hasPath","hasFunc","insertWrapDetails","details","isMaskable","stubFalse","memoizeCapped","memoize","srcBitmask","newBitmask","isCombo","otherArgs","oldArray","shortOut","reference","updateWrapDetails","lastCalled","stamp","remaining","rand","quote","subString","chunk","compact","concat","difference","differenceBy","differenceWith","drop","dropRight","dropRightWhile","dropWhile","fill","findIndex","findLastIndex","flattenDeep","flattenDepth","fromPairs","initial","intersection","mapped","intersectionBy","intersectionWith","join","separator","lastIndexOf","nth","pull","pullAll","pullAllBy","pullAllWith","pullAt","remove","reverse","slice","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","sortedUniq","sortedUniqBy","tail","take","takeRight","takeRightWhile","takeWhile","union","unionBy","unionWith","uniq","uniqBy","uniqWith","unzip","group","unzipWith","without","xor","xorBy","xorWith","zip","zipObject","zipObjectDeep","zipWith","chain","tap","interceptor","thru","wrapperAt","wrapperChain","wrapperCommit","wrapperNext","toArray","done","wrapperToIterator","wrapperPlant","clone","wrapperReverse","wrapped","wrapperValue","countBy","every","find","findLast","flatMap","flatMapDeep","flatMapDepth","forEach","forEachRight","groupBy","invokeMap","keyBy","orderBy","partition","reduce","reduceRight","negate","sample","sampleSize","shuffle","some","sortBy","now","after","before","bind","bindKey","curry","curryRight","debounce","lastArgs","lastThis","maxWait","lastCallTime","lastInvokeTime","leading","maxing","invokeFunc","leadingEdge","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","timeWaiting","shouldInvoke","trailingEdge","cancel","flush","debounced","isInvoking","defer","delay","flip","memoized","once","overArgs","funcsLength","partial","partialRight","rearg","spread","throttle","unary","wrap","castArray","cloneWith","cloneDeep","cloneDeepWith","conformsTo","gt","gte","isArrayBuffer","isBoolean","isDate","isElement","isEmpty","isEqual","isEqualWith","isError","isFinite","isInteger","isMatch","isMatchWith","isNaN","isNumber","isNative","isNull","isNil","isRegExp","isSafeInteger","isUndefined","isWeakMap","isWeakSet","lt","lte","remainder","isBinary","toSafeInteger","assign","assignIn","assignInWith","assignWith","at","create","prototype","properties","propsIndex","propsLength","defaultsDeep","mergeWith","findKey","findLastKey","forIn","forInRight","forOwn","forOwnRight","functions","functionsIn","has","invert","invertBy","mapKeys","mapValues","merge","omit","omitBy","pickBy","pick","setWith","toPairs","toPairsIn","isArrLike","unset","update","updateWith","valuesIn","clamp","inRange","random","floating","camelCase","word","capitalize","upperFirst","endsWith","escape","escapeRegExp","kebabCase","lowerCase","lowerFirst","strLength","padEnd","padStart","parseInt","radix","repeat","replace","snakeCase","split","limit","startCase","startsWith","template","settings","imports","importsKeys","importsValues","isEscaping","isEvaluating","interpolate","reDelimiters","sourceURL","escapeValue","interpolateValue","esTemplateValue","evaluateValue","variable","attempt","toLower","toUpper","trim","trimEnd","trimStart","truncate","omission","substring","newEnd","unescape","upperCase","bindAll","methodNames","cond","conforms","defaultTo","flowRight","matchesProperty","methodOf","mixin","noConflict","nthArg","over","overEvery","overSome","propertyOf","range","rangeRight","stubObject","stubString","stubTrue","times","toPath","uniqueId","prefix","add","augend","addend","ceil","divide","dividend","divisor","floor","maxBy","mean","meanBy","minBy","multiply","multiplier","multiplicand","round","subtract","minuend","subtrahend","sumBy","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","toKebabCase","mergeClasses","classes","defaultAttributes","Icon","forwardRef","color","strokeWidth","absoluteStrokeWidth","iconNode","createElement","attrs","createLucideIcon","iconName","Component","ArrowUpDown","Briefcase","CalendarDays","Check","ChevronDown","ChevronLeft","ChevronRight","CircleAlert","CircleCheckBig","CircleCheck","CirclePlay","CircleX","Download","Ellipsis","ExternalLink","Eye","FileText","FileX","FolderOpen","Folder","Globe","LoaderCircle","Lock","Minus","MoveUpRight","PenOff","RefreshCw","RotateCw","TriangleAlert","X","clsx","L","N","ut","z","yt","F","Bt","J","R","T","C","E","Ut","Ft","zt","Tt","tt","ot","Vt","Ht","et","bt","_t","Qt","st","vt","k","A","B","I","U","rt","Wt","ht","Gt","nt","Ct","xt","Et","Pt","it","It","St","qt","H","Q","W","Kt","Yt","kt","jt","Zt","Nt","Ot","At","G","eo","oo","K","ro","no","io","lo","fo","q","co","wt","so","ao","Dt","mt","pt","Z","V","po","mo","ft","vo","dt","bo","_o","Lt","go","ct","Mt","$t","Rt","xo","Co","keyMapMetadata","SERVER_OWNED_METADATA_KEYS","isBlankValue","normalizeMetadataForDisplay","creator","creatorId","modifier","modifierId","modifiedDate","stripServerOwnedMetadata","isTextarea","isDisableField","MAX_UPLOAD_TOTAL_SIZE","checkConditionUploadFiles","files","toast","file","syncStatusMap","getSyncStatusInVietnamese","ToggleButton","on","setOn","handleChange","getPrototypeOf","toStringTag","hasOwnInPrototypeChain","thing","getSafeProp","kindOf","kindOfTest","typeOfTest","isArrayBufferView","isEmptyObject","isFile","isReactNativeBlob","isReactNative","formData","isBlob","isFileList","isStream","getGlobal","FormDataCtor","isFormData","kind","isURLSearchParams","isReadableStream","isRequest","isResponse","isHeaders","allOwnKeys","len","_key","_global","isContextDefined","objs","caseless","skipUndefined","targetKey","existing","symbols","extend","stripBOM","inherits","constructor","superConstructor","descriptors","toFlatObject","sourceObj","destObj","propFilter","merged","searchString","TypedArray","forEachEntry","_iterator","matchAll","regExp","isHTMLForm","toCamelCase","p1","p2","reduceDescriptors","reducer","reducedDescriptors","descriptor","ret","freezeMethods","toObjectSet","arrayOrString","delimiter","define","toFiniteNumber","isSpecCompliantForm","toJSONObject","visited","visit","reducedValue","isAsyncFn","isThenable","_setImmediate","setImmediateSupported","postMessageSupported","token","asap","isIterable","utils$1","ignoreDuplicateOf","utils","parseHeaders","rawHeaders","line","trimSPorHTAB","INVALID_UNICODE_HEADER_VALUE_CHARS","INVALID_BYTE_STRING_HEADER_VALUE_CHARS","sanitizeValue","invalidChars","sanitizeHeaderValue","sanitizeByteStringHeaderValue","toByteStringHeaderObject","byteStringHeaders","$internals","normalizeHeader","normalizeValue","parseTokens","tokens","tokensRE","isValidHeaderName","matchHeaderValue","isHeaderNameFilter","formatHeader","char","buildAccessors","accessorName","arg1","arg2","arg3","AxiosHeaders$1","valueOrRewrite","rewrite","self","setHeader","_header","_rewrite","lHeader","setHeaders","dest","parser","matcher","deleted","deleteHeader","format","normalized","asStrings","accessors","defineAccessor","AxiosHeaders","headerValue","REDACTED","hasOwnOrPrototypeToJSON","redactConfig","redactKeys","lowerKeys","AxiosError","customProps","axiosError","serializedConfig","httpAdapter","DEFAULT_FORM_DATA_MAX_DEPTH","isVisitable","removeBrackets","renderKey","dots","isFlatArray","predicates","toFormData","option","metaTokens","visitor","defaultVisitor","_Blob","useBlob","convertValue","throwIfMaxDepthExceeded","stringifyWithDepthLimit","ancestors","currentValue","exposedHelpers","build","encode","charMap","AxiosURLSearchParams","encoder","_encode","buildURL","_options","serializeFn","serializedParams","hashmarkIndex","InterceptorManager","transitionalDefaults","platform$2","hasBrowserEnv","_navigator","hasStandardBrowserEnv","hasStandardBrowserWebWorkerEnv","origin","platform$1","platform","toURLEncodedForm","helpers","MAX_DEPTH","throwIfDepthExceeded","parsePropPath","arrayToObject","formDataToJSON","buildPath","isNumericKey","isLast","own","stringifySafely","contentType","hasJSONContentType","isObjectPayload","formSerializer","_FormData","transitional","forcedJSONParsing","JSONRequested","strictJSONParsing","transformData","fns","isCancel","settle","validateStatus","parseProtocol","speedometer","samplesCount","timestamps","firstSampleTS","chunkLength","startedAt","bytesCount","passed","freq","threshold","timer","progressEventReducer","isDownloadStream","bytesNotified","_speedometer","rawLoaded","total","loaded","progressBytes","rate","progressEventDecorator","throttled","lengthComputable","asyncDecorator","isURLSameOrigin","isMSIE","expires","domain","isAbsoluteURL","combineURLs","baseURL","relativeURL","malformedHttpProtocol","httpProtocolControlCharacters","stripLeadingC0ControlOrSpace","normalizeURLForProtocolCheck","assertValidHttpProtocolURL","buildFullPath","requestedURL","allowAbsoluteUrls","isRelativeUrl","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","getMergedTransitionalOption","transitional2","transitional1","mergeDirectKeys","mergeMap","configValue","FORM_DATA_CONTENT_HEADERS","setFormDataHeaders","formHeaders","policy","encodeUTF8","hex","resolveConfig","newConfig","withXSRFToken","xsrfHeaderName","xsrfCookieName","auth","password","xsrfValue","xhrAdapter","_config","requestData","requestHeaders","onUploadProgress","onDownloadProgress","onCanceled","uploadThrottled","downloadThrottled","flushUpload","flushDownload","onloadend","msg","timeoutErrorMessage","CanceledError","protocol","composeSignals","signals","aborted","onabort","reason","unsubscribe","signal","streamChunk","chunkSize","pos","readBytes","readStream","stream","reader","trackStream","onProgress","onFinish","_onFinish","loadedBytes","isHexDigit","charCode","isPercentEncodedByte","estimateDataURLDecodedBytes","comma","body","effectiveLen","idx","tailIsPct3D","DEFAULT_CHUNK_SIZE","decodeURIComponentSafe","test","maybeWithAuthCredentials","protocolIndex","urlToCheck","factory","globalObject","ReadableStream","TextEncoder","envFetch","Request","Response","isFetchSupported","isRequestSupported","isResponseSupported","isReadableStreamSupported","encodeText","supportsRequestStream","duplexAccessed","hasContentType","supportsResponseStream","resolvers","getBodyLength","resolveBodyLength","cancelToken","withCredentials","fetchOptions","maxContentLength","maxBodyLength","hasMaxContentLength","hasMaxBodyLength","_fetch","composedSignal","requestContentLength","pendingBodyError","maxBodyLengthError","configAuth","parsedURL","urlUsername","urlPassword","outboundLength","mustEnforceStreamBody","trackRequestStream","_request","contentTypeHeader","isCredentialsSupported","declaredLength","isStreamResponse","responseContentLength","bytesRead","onChunkProgress","responseData","materializedSize","canceledError","seedCache","getFetch","fetch","seeds","seed","knownAdapters","fetchAdapter.getFetch","renderReason","isResolvedHandle","adapter","getAdapter","adapters","nameOrAdapter","rejectedReasons","reasons","throwIfCancellationRequested","dispatchRequest","validators","deprecatedWarnings","validator","formatMessage","opt","correctSpelling","assertOptions","allowUnknown","Axios$1","instanceConfig","configOrUrl","dummy","firstNewlineIndex","secondNewlineIndex","stackWithoutTwoTopLines","paramsSerializer","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","responseInterceptorChain","onFulfilled","onRejected","fullPath","Axios","generateHTTPMethod","isForm","CancelToken$1","CancelToken","executor","resolvePromise","onfulfilled","abort","isAxiosError","HttpStatusCode","createInstance","defaultConfig","axios","promises","all","Cancel","formToJSON","falsyToString","cx","cva","base","_config_compoundVariants","variants","defaultVariants","getVariantClassNames","variant","variantProp","defaultVariantProp","variantKey","propsWithoutUndefined","getCompoundVariantClassNames","cvClass","cvClassName","compoundVariantOptions","CLASS_PART_SEPARATOR","createClassGroupUtils","classMap","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","classParts","getGroupRecursive","getGroupIdForArbitraryProperty","classGroupId","hasPostfixModifier","conflicts","classPartObject","currentClassPart","nextClassPartObject","classGroupFromNextClassPart","classRest","arbitraryPropertyRegex","arbitraryPropertyClassName","theme","getPrefixedClassGroupEntries","classGroup","processClassesRecursively","classDefinition","classPartObjectToEdit","getPart","isThemeGetter","currentClassPartObject","pathPart","classGroupEntries","prefixedClassGroup","createLruCache","maxCacheSize","cacheSize","previousCache","IMPORTANT_MODIFIER","createParseClassName","experimentalParseClassName","isSeparatorSingleCharacter","firstSeparatorCharacter","separatorLength","parseClassName","modifiers","bracketDepth","modifierStart","postfixModifierPosition","currentCharacter","baseClassNameWithImportantModifier","hasImportantModifier","baseClassName","maybePostfixModifierPosition","sortModifiers","sortedModifiers","unsortedModifiers","createConfigUtils","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","getClassGroupId","getConflictingClassGroupIds","classGroupsInConflict","classNames","originalClassName","variantModifier","classId","conflictGroups","twJoin","argument","toValue","mix","createTailwindMerge","createConfigFirst","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","fromTheme","themeGetter","arbitraryValueRegex","fractionRegex","stringLengths","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isArbitraryLength","getIsArbitraryValue","isLengthOnly","isArbitraryNumber","isPercent","isArbitraryValue","isTshirtSize","sizeLabels","isArbitrarySize","isNever","isArbitraryPosition","imageLabels","isArbitraryImage","isImage","isArbitraryShadow","isShadow","isAny","label","testValue","twMerge","colors","spacing","blur","brightness","borderColor","borderRadius","borderSpacing","borderWidth","contrast","grayscale","hueRotate","gradientColorStops","gradientColorStopPositions","inset","margin","opacity","padding","saturate","scale","sepia","skew","space","translate","getOverscroll","getOverflow","getSpacingWithAutoAndArbitrary","getSpacingWithArbitrary","getLengthWithEmptyAndArbitrary","getNumberWithAutoAndArbitrary","getPositions","getLineStyles","getBlendModes","getAlign","getZeroAndEmpty","getBreaks","getNumberAndArbitrary","cn","inputs","getUserInfoFromLocal","dataLogin","user","getAccessTokenInfoFromLocal","badgeVariants","Badge","buttonVariants","Button","usePrevious","useSize","setSize","resizeObserver","borderSizeEntry","borderSize","CHECKBOX_NAME","createCheckboxContext","CheckboxProviderImpl","useCheckboxContext","CheckboxProvider","__scopeCheckbox","checkedProp","defaultChecked","disabled","onCheckedChange","required","internal_do_not_use_render","checked","setChecked","control","setControl","bubbleInput","setBubbleInput","hasConsumerStoppedPropagationRef","isFormControl","isIndeterminate","CheckboxTrigger","onKeyDown","onClick","checkboxProps","initialCheckedStateRef","reset","prevChecked","Checkbox","jsxs","CheckboxBubbleInput","INDICATOR_NAME","CheckboxIndicator","indicatorProps","BUBBLE_INPUT_NAME","controlSize","inputProto","bubbles","defaultCheckedRef","CheckboxPrimitive.Root","CheckboxPrimitive.Indicator","DialogPrimitive.Root","DialogPrimitive.Trigger","DialogPrimitive.Portal","DialogPrimitive.Overlay","DialogPrimitive.Content","DialogPrimitive.Close","DialogHeader","DialogFooter","DialogPrimitive.Title","DialogPrimitive.Description","Table","TableHeader","TableBody","TableFooter","TableRow","TableHead","TableCell","TableCaption","sides","createCoords","oppositeSideMap","evaluate","getSide","placement","getAlignment","getOppositeAxis","getAxisLength","getSideAxis","firstChar","getAlignmentAxis","getAlignmentSides","rects","rtl","alignment","alignmentAxis","mainAlignmentSide","getOppositePlacement","getExpandedPlacements","oppositePlacement","getOppositeAlignmentPlacement","lrPlacement","rlPlacement","tbPlacement","btPlacement","getSideList","side","isStart","getOppositeAxisPlacements","flipAlignment","list","expandPaddingObject","getPaddingObject","rectToClientRect","rect","computeCoordsFromPlacement","sideAxis","alignLength","isVertical","commonX","commonY","commonAlign","coords","detectOverflow","_await$platform$isEle","strategy","boundary","rootBoundary","elementContext","altBoundary","paddingObject","clippingClientRect","offsetParent","offsetScale","elementClientRect","MAX_RESET_COUNT","computePosition","platformWithDetectOverflow","statefulPlacement","resetCount","middlewareData","currentMiddleware","nextX","nextY","arrow","arrowDimensions","isYAxis","minProp","maxProp","clientProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","largestPossiblePadding","minPadding","maxPadding","min$1","shouldAddOffset","alignmentOffset","_middlewareData$arrow","_middlewareData$flip","initialPlacement","checkMainAxis","checkCrossAxis","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","detectOverflowOptions","initialSideAxis","isBasePlacement","fallbackPlacements","hasFallbackAxisSideDirection","placements","overflows","overflowsData","_middlewareData$flip2","_overflowsData$filter","nextIndex","nextPlacement","resetPlacement","_overflowsData$filter2","currentSideAxis","getSideOffsets","isAnySideFullyClipped","hide","originSides","convertValueToCoords","mainAxisMulti","crossAxisMulti","mainAxis","crossAxis","_middlewareData$offse","diffCoords","shift","limiter","mainAxisCoord","crossAxisCoord","minSide","maxSide","limitedCoords","limitShift","rawOffset","computedOffset","limitMin","limitMax","_middlewareData$offse2","isOriginSide","_state$middlewareData","_state$middlewareData2","heightSide","widthSide","maximumClippingHeight","maximumClippingWidth","overflowAvailableHeight","overflowAvailableWidth","noShift","availableHeight","availableWidth","xMin","xMax","yMin","yMax","nextDimensions","hasWindow","getNodeName","isNode","getWindow","_node$ownerDocument","getDocumentElement","isHTMLElement","isShadowRoot","isOverflowElement","overflowX","overflowY","display","getComputedStyle","isTableElement","isTopLayer","willChangeRe","containRe","isNotNone","isWebKitValue","isContainingBlock","elementOrCss","isWebKit","getContainingBlock","currentNode","getParentNode","isLastTraversableNode","getNodeScroll","getNearestOverflowAncestor","getOverflowAncestors","traverseIframes","_node$ownerDocument2","scrollableAncestor","isBody","win","frameElement","getFrameElement","getCssDimensions","getComputedStyle$1","hasOffset","offsetWidth","offsetHeight","shouldFallback","unwrapElement","getScale","domElement","noOffsets","getVisualOffsets","shouldAddVisualOffsets","isFixed","floatingOffsetParent","getBoundingClientRect","includeScale","isFixedStrategy","clientRect","visualOffsets","offsetWin","currentWin","currentIFrame","iframeScale","iframeRect","getWindowScrollBarX","leftScroll","getHTMLOffset","documentElement","scroll","htmlRect","convertOffsetParentRelativeRectToViewportRelativeRect","topLayer","isOffsetParentAnElement","offsetRect","htmlOffset","getClientRects","getDocumentRect","html","SCROLLBAR_MAX","getViewportRect","visualViewport","visualViewportBased","windowScrollbarX","doc","bodyStyles","bodyMarginInline","clippingStableScrollbarWidth","getInnerBoundingClientRect","getClientRectFromClippingAncestor","clippingAncestor","hasFixedPositionAncestor","stopNode","getClippingElementAncestors","currentContainingBlockComputedStyle","elementIsFixed","computedStyle","currentNodeIsContaining","ancestor","getClippingRect","clippingAncestors","firstRect","getDimensions","getRectRelativeToOffsetParent","setLeftRTLScrollbarOffset","isStaticPositioned","getTrueOffsetParent","polyfill","rawOffsetParent","getOffsetParent","svgOffsetParent","getElementRects","getOffsetParentFn","getDimensionsFn","floatingDimensions","isRTL","rectsAreEqual","observeMove","_io","refresh","elementRectForRootMargin","insetTop","insetRight","insetBottom","insetLeft","isFirstUpdate","handleObserve","ratio","autoUpdate","ancestorScroll","ancestorResize","elementResize","layoutShift","animationFrame","referenceEl","cleanupIo","reobserveFrame","firstEntry","_resizeObserver","frameId","prevRefRect","frameLoop","nextRefRect","_resizeObserver2","offset$1","shift$1","flip$1","size$1","hide$1","arrow$1","limitShift$1","mergedOptions","platformWithCache","computePosition$1","isClient","deepEqual","getDPR","roundByDPR","dpr","useLatestRef","useFloating","externalReference","externalFloating","whileElementsMounted","latestMiddleware","setLatestMiddleware","_reference","_setReference","_floating","_setFloating","setReference","referenceRef","setFloating","floatingRef","floatingEl","dataRef","hasWhileElementsMounted","whileElementsMountedRef","platformRef","openRef","fullData","isMountedRef","floatingStyles","initialStyles","isRef","arrow$2","NAME","Arrow","arrowProps","POPPER_NAME","createPopperContext","createPopperScope","PopperProvider","usePopperContext","Popper","__scopePopper","anchor","setAnchor","placementState","setPlacementState","ANCHOR_NAME","PopperAnchor","virtualRef","anchorProps","onAnchorChange","anchorRef","previousAnchor","sideAndAlign","getSideAndAlignFromPlacement","placedSide","placedAlign","PopperContentProvider","useContentContext","PopperContent","sideOffset","align","alignOffset","arrowPadding","avoidCollisions","collisionBoundary","collisionPaddingProp","sticky","hideWhenDetached","updatePositionStrategy","onPlaced","setContent","setArrow","arrowSize","arrowWidth","arrowHeight","desiredPlacement","collisionPadding","hasExplicitBoundaries","isNotNull","isPositioned","anchorWidth","anchorHeight","contentStyle","floatingUIarrow","transformOrigin","handlePlaced","arrowX","arrowY","cannotCenterArrow","contentZIndex","setContentZIndex","ARROW_NAME","OPPOSITE_SIDE","PopperArrow","contentContext","baseSide","ArrowPrimitive.Root","isArrowHidden","noArrowAlign","arrowXCenter","arrowYCenter","Root2","Anchor","Content","VISUALLY_HIDDEN_STYLES","VisuallyHidden","createTooltipContext","usePopperScope","PROVIDER_NAME","DEFAULT_DELAY_DURATION","TOOLTIP_OPEN","TooltipProviderContextProvider","useTooltipProviderContext","TooltipProvider","__scopeTooltip","delayDuration","skipDelayDuration","disableHoverableContent","isOpenDelayedRef","isPointerInTransitRef","skipDelayTimerRef","skipDelayTimer","inTransit","TOOLTIP_NAME","TooltipContextProvider","useTooltipContext","Tooltip","disableHoverableContentProp","delayDurationProp","providerContext","popperScope","trigger","setTrigger","contentId","openTimerRef","wasOpenDelayedRef","open2","stateAttribute","handleOpen","handleClose","handleDelayedOpen","PopperPrimitive.Root","TooltipTrigger","isPointerDownRef","hasPointerMoveOpenedRef","handlePointerUp","PopperPrimitive.Anchor","TooltipPortal","TooltipContent","TooltipContentImpl","TooltipContentHoverable","pointerGraceArea","setPointerGraceArea","onClose","onPointerInTransitChange","handleRemoveGraceArea","handleCreateGraceArea","hoverTarget","currentTarget","exitPoint","exitSide","getExitSideFromRect","paddedExitPoints","getPaddedExitPoints","hoverTargetPoints","getPointsFromRect","graceArea","getHull","handleTriggerLeave","handleContentLeave","handleTrackPointerGrace","pointerPosition","hasEnteredTarget","isPointerOutsideGraceArea","isPointInPolygon","VisuallyHiddenContentContextProvider","useVisuallyHiddenContentContext","Slottable","ariaLabel","PopperPrimitive.Content","VisuallyHiddenPrimitive.Root","TooltipArrow","PopperPrimitive.Arrow","point","polygon","inside","ii","jj","xi","yi","xj","yj","points","newPoints","getHullPresorted","upperHull","lowerHull","Root3","Trigger","Content2","TooltipPrimitive.Provider","TooltipPrimitive.Root","TooltipPrimitive.Trigger","TooltipPrimitive.Portal","TooltipPrimitive.Content","API_ENDPOINT_BASE","getPendingDocuments","apiBaseUrl","approveDocument","rejectDocument","bulkApproveDocuments","bulkRejectDocuments","getPendingDocumentStats","formatFileSize","sizes","formatDate","dateString","getBreadcrumbPaths","folderPath","segments","breadcrumbs","currentPath","seg","ApproveConfirmDialog","onConfirm","document","loading","Loader2","RejectConfirmDialog","EmptyPendingState","isFetching","CheckCircle","PendingApprovalPage","currentPrefix","isUploading","hasAdminRole","role","keyword","setKeyword","page","setPage","selectedKeys","setSelectedKeys","documents","setDocuments","setTotal","totalAllItems","setTotalAllItems","isLoading","setIsLoading","isApproving","setIsApproving","isRejecting","setIsRejecting","isBulkApproving","setIsBulkApproving","isBulkRejecting","setIsBulkRejecting","setIsFetching","showTableDialog","setShowTableDialog","approveDialogOpen","setApproveDialogOpen","rejectDialogOpen","setRejectDialogOpen","rejectionReason","setRejectionReason","activeDocument","setActiveDocument","currentFolderPath","setCurrentFolderPath","fetchPendingDocuments","fetchStats","totalPages","filteredDocuments","selectableDocuments","handleFolderClick","cleanPath","handleApprove","handleConfirmApprove","metadataPath","targetPath","handleReject","handleConfirmReject","handleBulkApprove","metadataPaths","handleBulkReject","handleRefresh","breadcrumbPaths","handleDownload","contentDisposition","filenameMatch","filename","isInFolder","bp","XCircle","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbLink","BreadcrumbPage","BreadcrumbSeparator","Input","Label","labelVariants","LabelPrimitive.Root","Pagination","PaginationContent","PaginationItem","PaginationLink","isActive","PaginationPrevious","PaginationNext","PaginationEllipsis","MoreHorizontal","createCollection","createCollectionContext","createCollectionScope","CollectionProviderImpl","useCollectionContext","CollectionProvider","itemMap","COLLECTION_SLOT_NAME","CollectionSlotImpl","CollectionSlot","ITEM_SLOT_NAME","ITEM_DATA_ATTR","CollectionItemSlotImpl","CollectionItemSlot","itemData","useCollection","collectionNode","orderedNodes","DirectionContext","useDirection","localDir","globalDir","OPEN_KEYS","SELECTION_KEYS","SELECT_NAME","Collection","createSelectContext","SelectProviderImpl","useSelectContext","SelectNativeOptionsProvider","useSelectNativeOptionsContext","SelectProvider","__scopeSelect","valueProp","onValueChange","autoComplete","valueNode","setValueNode","valueNodeHasChildren","setValueNodeHasChildren","triggerPointerDownPosRef","nativeOptionsSet","setNativeOptionsSet","nativeSelectKey","handleNativeOptionAdd","handleNativeOptionRemove","optionsSet","Select","providerProps","Fragment2","SelectBubbleInput","SelectTrigger","isDisabled","getItems","pointerTypeRef","searchRef","handleTypeaheadSearch","resetTypeahead","useTypeaheadSearch","enabledItems","currentItem","nextItem","findNextItem","pointerEvent","shouldShowPlaceholder","isTypingAhead","VALUE_NAME","SelectValue","valueProps","onValueNodeHasChildrenChange","hasChildren","showPlaceholder","ICON_NAME","SelectIcon","iconProps","SelectPortal","SelectContent","fragment","setFragment","SelectContentImpl","SelectContentFragment","SelectContentProvider","CONTENT_MARGIN","useSelectContentContext","CONTENT_IMPL_NAME","viewport","setViewport","selectedItem","setSelectedItem","selectedItemText","setSelectedItemText","setIsPositioned","firstValidItemFoundRef","firstItem","restItems","lastItem","PREVIOUSLY_FOCUSED_ELEMENT","focusSelectedItem","pointerMoveDelta","handlePointerMove","close","itemRefCallback","isFirstValidItem","handleItemLeave","itemTextRefCallback","SelectPosition","SelectPopperPosition","SelectItemAlignedPosition","popperContentProps","isModifierKey","candidateNodes","currentElement","currentIndex","ITEM_ALIGNED_POSITION_NAME","popperProps","contentWrapper","setContentWrapper","shouldExpandOnScrollRef","shouldRepositionRef","triggerRect","contentRect","valueNodeRect","itemTextRect","itemTextOffset","leftDelta","minContentWidth","contentWidth","rightEdge","clampedLeft","rightDelta","leftEdge","clampedRight","itemsHeight","contentStyles","contentBorderTopWidth","contentPaddingTop","contentBorderBottomWidth","contentPaddingBottom","fullContentHeight","minContentHeight","viewportStyles","viewportPaddingTop","viewportPaddingBottom","topEdgeToTriggerMiddle","triggerMiddleToBottomEdge","selectedItemHalfHeight","itemOffsetMiddle","contentTopToItemMiddle","itemMiddleToContentBottom","isLastItem","viewportOffsetBottom","clampedTriggerMiddleToBottomEdge","isFirstItem","handleScrollButtonChange","SelectViewportProvider","POPPER_POSITION_NAME","useSelectViewportContext","VIEWPORT_NAME","SelectViewport","viewportProps","viewportContext","prevScrollTopRef","scrolledBy","cssMinHeight","cssHeight","prevHeight","nextHeight","clampedNextHeight","heightDiff","GROUP_NAME","SelectGroupContextProvider","useSelectGroupContext","SelectGroup","groupProps","groupId","LABEL_NAME","SelectLabel","labelProps","groupContext","ITEM_NAME","SelectItemContextProvider","useSelectItemContext","SelectItem","textValueProp","itemProps","textValue","setTextValue","isFocused","setIsFocused","handleItemRefCallback","textId","handleSelect","prevTextValue","ITEM_TEXT_NAME","SelectItemText","itemTextProps","itemContext","nativeOptionsContext","itemTextNode","setItemTextNode","handleItemTextRefCallback","textContent","nativeOption","onNativeOptionAdd","onNativeOptionRemove","ITEM_INDICATOR_NAME","SelectItemIndicator","itemIndicatorProps","SCROLL_UP_BUTTON_NAME","SelectScrollUpButton","canScrollUp","setCanScrollUp","handleScroll2","canScrollUp2","SelectScrollButtonImpl","SCROLL_DOWN_BUTTON_NAME","SelectScrollDownButton","canScrollDown","setCanScrollDown","maxScroll","canScrollDown2","onAutoScroll","scrollIndicatorProps","autoScrollTimerRef","clearAutoScrollTimer","activeItem","SEPARATOR_NAME","SelectSeparator","separatorProps","SelectArrow","nativeOptions","selectValue","prevValue","hasEmptyValueOption","selectProto","onSearchChange","handleSearchChange","timerRef","updateSearch","normalizedSearch","currentItemIndex","wrappedItems","wrapArray","SelectPrimitive.Root","SelectPrimitive.Value","SelectPrimitive.Trigger","SelectPrimitive.Icon","SelectPrimitive.Portal","SelectPrimitive.Content","SelectPrimitive.Viewport","SelectPrimitive.Label","SelectPrimitive.Item","SelectPrimitive.ItemIndicator","SelectPrimitive.ItemText","SelectPrimitive.Separator","SWITCH_NAME","createSwitchContext","SwitchProviderImpl","useSwitchContext","SwitchProvider","__scopeSwitch","SwitchTrigger","switchProps","Switch","SwitchBubbleInput","THUMB_NAME","SwitchThumb","thumbProps","SwitchPrimitive.Root","SwitchPrimitive.Thumb","ENTRY_FOCUS","createRovingFocusGroupContext","createRovingFocusGroupScope","RovingFocusProvider","useRovingFocusContext","RovingFocusGroup","RovingFocusGroupImpl","__scopeRovingFocusGroup","orientation","currentTabStopIdProp","defaultCurrentTabStopId","onCurrentTabStopIdChange","onEntryFocus","preventScrollOnEntryFocus","currentTabStopId","setCurrentTabStopId","isTabbingBackOut","setIsTabbingBackOut","handleEntryFocus","isClickFocusRef","focusableItemsCount","setFocusableItemsCount","tabStopId","prevCount","isKeyboardFocus","entryFocusEvent","RovingFocusGroupItem","focusable","active","autoId","isCurrentTabStop","onFocusableItemAdd","onFocusableItemRemove","focusIntent","getFocusIntent","MAP_KEY_TO_FOCUS_INTENT","getDirectionAwareKey","preventScroll","Item","TABS_NAME","createTabsContext","useRovingFocusGroupScope","TabsProvider","useTabsContext","Tabs","__scopeTabs","activationMode","tabsProps","TAB_LIST_NAME","TabsList","listProps","rovingFocusGroupScope","RovingFocusGroup.Root","TabsTrigger","triggerId","makeTriggerId","makeContentId","RovingFocusGroup.Item","isAutomaticActivation","TabsContent","isMountAnimationPreventedRef","rAF","baseId","List","TabsPrimitive.Root","TabsPrimitive.List","TabsPrimitive.Trigger","TabsPrimitive.Content","Textarea","createToastContext","ToastProviderProvider","useToastProviderContext","ToastProvider","__scopeToast","duration","swipeDirection","swipeThreshold","announcerContainer","toastCount","setToastCount","isFocusedToastEscapeKeyDownRef","isClosePausedRef","VIEWPORT_DEFAULT_HOTKEY","VIEWPORT_PAUSE","VIEWPORT_RESUME","ToastViewport","hotkey","wrapperRef","headFocusProxyRef","tailFocusProxyRef","hotkeyLabel","hasToasts","handlePause","pauseEvent","handleResume","resumeEvent","handleFocusOutResume","handlePointerLeaveResume","getSortedTabbableCandidates","tabbingDirection","tabbableCandidates","toastItem","toastNode","toastTabbableCandidates","isMetaKey","isTabbingBackwards","sortedCandidates","DismissableLayer.Branch","FocusProxy","FOCUS_PROXY_NAME","onFocusFromOutsideViewport","proxyProps","prevFocusedElement","TOAST_NAME","TOAST_SWIPE_START","TOAST_SWIPE_MOVE","TOAST_SWIPE_CANCEL","TOAST_SWIPE_END","Toast","toastProps","ToastImpl","ToastInteractiveProvider","useToastInteractiveContext","durationProp","onPause","onResume","onSwipeStart","onSwipeMove","onSwipeCancel","onSwipeEnd","pointerStartRef","swipeDeltaRef","closeTimerStartTimeRef","closeTimerRemainingTimeRef","closeTimerRef","onToastAdd","onToastRemove","startTimer","duration2","elapsedTime","announceTextContent","getAnnounceTextContent","ToastAnnounce","DismissableLayer.Root","hasSwipeMoveStarted","isHorizontalSwipe","clampedX","clampedY","moveStartBuffer","isDeltaInDirection","event2","announceProps","renderAnnounceText","setRenderAnnounceText","isAnnounced","setIsAnnounced","useNextFrame","ToastTitle","ToastDescription","ACTION_NAME","ToastAction","altText","actionProps","ToastAnnounceExclude","ToastClose","interactiveContext","announceExcludeProps","isExcluded","isDeltaX","raf1","raf2","Viewport","Title","Description","Action","Close","ToastPrimitives.Provider","ToastPrimitives.Viewport","toastVariants","ToastPrimitives.Root","ToastPrimitives.Action","ToastPrimitives.Close","ToastPrimitives.Title","ToastPrimitives.Description","TOAST_LIMIT","TOAST_REMOVE_DELAY","genId","toastTimeouts","addToRemoveQueue","toastId","dispatch","listeners","memoryState","dismiss","useToast","Toaster","toasts","XMarkIcon","createUpdateEffect","hook","effect","isMounted","isDev","useUpdateEffect","useLatest","useUnmount","fnRef","isObject_1","_freeGlobal","require$$0","_root","now_1","_trimmedEndIndex","_baseTrim","_Symbol","_getRawTag","_objectToString","require$$1","require$$2","_baseGetTag","isObjectLike_1","isSymbol_1","toNumber_1","debounce_1","isNodeOrWeb","useDebounceFn","_i","useDebounceEffect","flag","setFlag","run","SearchBox","searchInputRef","searchQuery","setSearchQuery","isDebouncing","setIsDebouncing","useImperativeHandle","showSpinner","DEFAULT_HOST_API_PATH","resolveApiBaseUrl","envUrl","getApiBaseUrl","API_BASE_URL","denyList","isRetryAllowed","namespace","isNetworkError","CODE_EXCLUDE_LIST","SAFE_HTTP_METHODS","IDEMPOTENT_HTTP_METHODS","isRetryableError","isSafeRequestError","isIdempotentRequestError","isNetworkOrIdempotentRequestError","retryAfter","retryAfterHeader","retryAfterMs","noDelay","_retryNumber","exponentialDelay","retryNumber","delayFactor","calculatedDelay","randomSum","linearDelay","DEFAULT_OPTIONS","getRequestOptions","setCurrentState","resetLastRequestTime","currentState","fixConfig","axiosInstance","shouldRetry","retries","retryCondition","shouldRetryOrPromise","handleRetry","retryDelay","shouldResetTimeout","onRetry","lastRequestDuration","abortListener","handleMaxRetryTimesExceeded","axiosRetry","requestInterceptorId","responseInterceptorId","API_KEY_PROTECTED_URL_SEGMENTS","DEFAULT_API_KEY","apiKeyHeaders","segment","apiKey","__vite_import_meta_env__","BLD_REPORTS_FOLDER_SEGMENT","isBldReportsFolderPrefix","BLD_SOURCE_KEYS","BLD_SOURCE_LABELS","isSharePointUrl","isMailboxAddress","parseTeamsChannelUrl","teamId","channelId","marker","extractError","fallback","firstIssue","issue","getBldReportsConfig","saveBldReportsConfig","BLD_HISTORY_TIMEZONE","BLD_PERIOD_TYPE_LABELS","BLD_PERIOD_TYPE_OPTIONS","BLD_RUN_STATUS_LABELS","BLD_RUN_STATUS_OPTIONS","BLD_RUN_TRIGGER_LABELS","BLD_RUN_STATUS_CLASSES","formatBldDuration","durationMs","truncated","minutes","restSeconds","formatBldDateTime","formatBldPeriodLabel","periodType","periodKey","resolveBldApiUrl","extractBldError","toStringArray","listBldReportHistory","normalizeStats","raw","normalizeSourceDates","TEST_GENERATE_POLL_INTERVAL_MS","TEST_GENERATE_TIMEOUT_MS","waitOrAbort","ms","finish","normalizeTestGenerateResult","runBldTestGenerate","poll","pollIntervalMs","timeoutMs","jobId","deadline","job","MS_PER_DAY","toUtc","dateOnly","year","month","day","part","fromUtc","shiftDate","days","daysBackToMonday","startOfIsoWeek","lastDayOfMonth","formatDmy","getMonthDayGrid","gridStart","getMonthWeeks","lastDay","weeks","makeDaySelection","makeWeekSelection","weekStart","indexInMonth","periodEnd","makeMonthSelection","makeQuarterSelection","quarter","startMonth","getDefaultPeriodSelection","week","isPeriodInFuture","periodStart","FIELD_LABELS","WEEKDAY_HEADERS","MONTHS","QUARTERS","dmyShort","dmyFull","viewFromValue","cellBase","cellIdle","cellSelected","cellDisabled","NavButton","BldPeriodPicker","setView","rootRef","todayYear","todayMonth","toggle","isMonthScoped","shiftMonth","shiftYear","atCurrentMonth","atCurrentYear","selected","months","PAGE_SIZE","AUTO_REFRESH_MS","ALL_VALUE","getTodayInVietnam","createAllSourcesEnabled","openInNewTab","ReportHistory","layout","setItems","setLoading","refreshing","setRefreshing","setError","setPeriodType","setStatus","setFrom","setTo","errorDetail","setErrorDetail","testOpen","setTestOpen","testPeriod","setTestPeriod","testSources","setTestSources","testPersist","setTestPersist","testRunning","setTestRunning","testResult","setTestResult","testError","setTestError","testAbortRef","load","targetPage","silent","hasRunning","handleRunTest","selectedSources","renderPagination","pageNumber","isEmbedded","PlayCircle","startedLabel","finishedLabel","durationLabel","sentAtLabel","htmlUrl","pngUrl","stat","warning","ReportHistoryModal","URL_ERROR_TEXT","CRON_PRESETS","EMPTY_DRAFT","buildDraft","urls","BldReportsConfigForm","draft","setDraft","snapshot","setSnapshot","saving","setSaving","cancelled","updateDraft","invalidUrlKeys","emptyUrlKeys","trimmedTeamId","trimmedChannelId","teamsChannelPartial","cronEmpty","trimmedMailbox","mailboxInvalid","canSave","handleValidateUrls","handleParseChannelUrl","handleSave","teamsPrivateChannel","sharepointUrls","saved","fresh","preset","resolveEmailCrawlerSourceByFolder","createEmailCrawlerSource","updateEmailCrawlerSource","sourceKey","runEmailCrawlerSource","getRecruitmentOutlookStatus","VN_TIME_OPTIONS","totalMinutes","hours","vnTimeToUtcCron","vnTime","vnHour","vnMinute","utcHour","utcCronToVnTime","cron","minute","hour","utcMinute","RECRUITMENT_CRON","DEFAULT_DRAFT","buildDraftFromSource","buildDraftFromDefaults","normalizeUiFolder","trimmed","isSimplifiedProcessor","processorType","EmailCrawlerSourceModal","createDefaults","bldReports","onSourceUpdated","onSourceCreated","mode","resolvedProcessorType","simplified","isRecruitment","running","setRunning","initializedKey","setInitializedKey","recruitmentOutlookStatus","setRecruitmentOutlookStatus","updated","splitFilterText","created","handleRun","isAuthReauth","isAuthConnected","runNowDisabled","DocumentPermission","useSharingApi","apiUrl","rootUrlHostApi","users","setUsers","groups","setGroups","sharedUsers","setSharedUsers","sharedGroups","setSharedGroups","loadingGrandted","setLoadingGrandted","postGranted","grandtedBy","fetchData","fetchAllUsers","fetchAllGroups","fetchShared","usersShared","groupsShared","urs","shared","gr","buildBootstrapRequest","folder","matchesBootstrapContext","KNOWN_CRAWLER_FOLDERS","findKnownCrawlerFolder","useEmailCrawlerSourceByFolder","setSource","knownFolder","FailedFilesDisplay","failureReasons","onNavigateToFile","handleFileClick","filePath","parseFailureReasons","parsedErrors","filesMatch","errorMessageMatch","errorMsg","errorType","getErrorIcon","AlertTriangle","getErrorColor","getErrorTextColor","fileIndex","reactIs_production_min","hasSymbol","REACT_ELEMENT_TYPE","REACT_PORTAL_TYPE","REACT_FRAGMENT_TYPE","REACT_STRICT_MODE_TYPE","REACT_PROFILER_TYPE","REACT_PROVIDER_TYPE","REACT_CONTEXT_TYPE","REACT_ASYNC_MODE_TYPE","REACT_CONCURRENT_MODE_TYPE","REACT_FORWARD_REF_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_MEMO_TYPE","REACT_BLOCK_TYPE","REACT_FUNDAMENTAL_TYPE","REACT_RESPONDER_TYPE","REACT_SCOPE_TYPE","isValidElementType","typeOf","$$typeof","$$typeofType","AsyncMode","ConcurrentMode","ContextConsumer","ContextProvider","Element","Lazy","Memo","Profiler","StrictMode","Suspense","hasWarnedAboutDeprecatedIsAsyncMode","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isForwardRef","isFragment","isMemo","isPortal","isProfiler","isStrictMode","isSuspense","reactIs_development","reactIsModule","getOwnPropertySymbols","propIsEnumerable","toObject","shouldUseNative","test1","test2","order2","test3","letter","objectAssign","ReactPropTypesSecret","ReactPropTypesSecret_1","printWarning","loggedTypeFailures","checkPropTypes","typeSpecs","location","componentName","getStack","typeSpecName","ex","checkPropTypes_1","ReactIs","require$$3","require$$4","emptyFunctionThatReturnsNull","factoryWithTypeCheckers","isValidElement","throwOnDirectAccess","ITERATOR_SYMBOL","FAUX_ITERATOR_SYMBOL","getIteratorFn","maybeIterable","iteratorFn","ANONYMOUS","ReactPropTypes","createPrimitiveTypeChecker","createAnyTypeChecker","createArrayOfTypeChecker","createElementTypeChecker","createElementTypeTypeChecker","createInstanceTypeChecker","createNodeChecker","createObjectOfTypeChecker","createEnumTypeChecker","createUnionTypeChecker","createShapeTypeChecker","createStrictShapeTypeChecker","is","PropTypeError","createChainableTypeChecker","validate","manualPropTypeCallCache","manualPropTypeWarningCount","checkType","isRequired","propFullName","chainedCheckType","expectedType","propValue","propType","getPropType","preciseType","getPreciseType","typeChecker","expectedClass","expectedClassName","actualClassName","getClassName","expectedValues","valuesString","arrayOfTypeCheckers","checker","getPostfixForTypeWarning","expectedTypes","checkerResult","expectedTypesMessage","invalidValidatorError","shapeTypes","allKeys","emptyFunction","emptyFunctionWithReset","factoryWithThrowingShims","shim","getShim","propTypesModule","COMMON_MIME_TYPES","toFileWithPath","withMimeType","webkitRelativePath","setObjProp","FILES_TO_IGNORE","fromEvent","evt","isDataTransfer","getDataTransferFiles","isChangeEvt","getInputFiles","getFsHandleFiles","fromList","handles","toFilePromises","noIgnoredFiles","fromDataTransferItem","fromDirEntry","fromEntry","fromFileEntry","readEntries","batch","fwp","_default","acceptedFiles","acceptedFilesArray","fileName","mimeType","baseMimeType","validType","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","iter","_arrayLikeToArray","ownKeys","enumerableOnly","sym","_objectSpread","_defineProperty","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","minLen","arr2","_arr","_n","_s","accepts","_accepts","FILE_INVALID_TYPE","FILE_TOO_LARGE","FILE_TOO_SMALL","TOO_MANY_FILES","getInvalidTypeRejectionErr","accept","acceptArr","getTooLargeRejectionErr","maxSize","getTooSmallRejectionErr","minSize","TOO_MANY_FILES_REJECTION","isDataTransferItemWithEmptyType","fileAccepted","isAcceptable","fileMatchSize","isDefined","allFilesAccepted","multiple","maxFiles","_fileAccepted","_fileAccepted2","accepted","_fileMatchSize","_fileMatchSize2","sizeMatch","customErrors","isPropagationStopped","isEvtWithFiles","onDocumentDragOver","isIe","userAgent","isEdge","isIeOrEdge","_len","_len2","_key2","canUseFileSystemAccessAPI","pickerOptionsFromAccept","acceptForPicker","ok","isMIMEType","isExt","agg","acceptPropAsAcceptAttr","_ref6","_ref7","isAbort","isSecurityError","_excluded","_excluded2","_excluded3","_excluded4","_objectWithoutProperties","excluded","_objectWithoutPropertiesLoose","sourceSymbolKeys","sourceKeys","Dropzone","_useDropzone","useDropzone","defaultProps","PropTypes","_defaultProps$props","getFilesFromEvent","onDragEnter","onDragLeave","onDragOver","onDrop","onDropAccepted","onDropRejected","onFileDialogCancel","onFileDialogOpen","useFsAccessApi","autoFocus","preventDropOnDocument","noClick","noKeyboard","noDrag","noDragEventsBubbling","acceptAttr","pickerTypes","onFileDialogOpenCb","onFileDialogCancelCb","inputRef","_useReducer","useReducer","_useReducer2","isFileDialogActive","fsAccessApiWorksRef","onWindowFocus","dragTargetsRef","globalDragTargetsRef","onDocumentDrop","onDocumentDragEnter","onDocumentDragLeave","onDocumentDragEnd","onDocumentDropGlobal","onErrCb","onDragEnterCb","stopPropagation","fileCount","isDragAccept","isDragReject","onDragOverCb","hasFiles","onDragLeaveCb","targetIdx","setFiles","fileRejections","acceptError","sizeError","onDropCb","openFileDialog","onKeyDownCb","onFocusCb","onBlurCb","onClickCb","composeHandler","composeKeyboardHandler","composeDragHandler","getRootProps","_ref2$refKey","refKey","onFocus","onBlur","onInputElementClick","getInputProps","_ref3$refKey","inputProps","FileUpload","onFilesSelected","isDragging","setIsDragging","processedFiles","pathValueCustom","handleDragLeave","CrawlProgressDialog","currentJob","onStop","pagesProp","pages","showStopConfirm","setShowStopConfirm","isStopping","setIsStopping","virtualProgress","setVirtualProgress","virtualUploadProgress","setVirtualUploadProgress","completed","crawledCount","totalCount","isInitializing","isUploadPhase","realProgress","displayProgress","interval","increment","formatTime","mins","secs","getStatusDisplay","percentage","progressText","CheckCircle2","AlertCircle","handleStop","statusDisplay","isInProgress","isTerminal","isOpen","DialogRemoveFiles","openDialogRename","setOpenDialogRename","setFileToMove","fileToMove","refreshFiles","ignoreCache","autoSyncAfterFileOperation","structureMap","setStructureMap","isRemoving","setIsRemoving","selectPath","setSelectPath","fetchS3Folders","handleMoveFile","oldPath","normalizedOldPath","normalizedNewPath","permissionOptions","DialogShare","setMode","searchUser","setSearchUser","searchGroup","setSearchGroup","searchSharedUser","setSearchSharedUser","searchSharedGroup","setSearchSharedGroup","permission","setPermission","docPermissions","setDocPermissions","currentUser","filteredUsers","filteredGroups","filteredSharedUsers","filteredSharedGroups","handleClearSelection","handleChangeTab","handleToggleUser","userId","docPermission","newDocPermission","handleToggleGroup","groupname","handleChangeShared","newPermission","newShared","handleShare","resposne","listContainerStyle","dp","PrivacyDialog","onSave","setEnabled","S3FolderTreeSelector","showSelectedInfo","treeData","setTreeData","expandedFolders","setExpandedFolders","isInitialLoading","setIsInitialLoading","fetchFoldersAndUpdate","targetNodeKey","apiPrefix","folders","newNodes","convertToTree","updateNode","folderMap","prefixForChildren","cleanKey","fullKey","folderName","childPrefix","relativeKey","prefixStripped","relativeParts","handleExpand","nodeKey","findNode","found","handleCollapse","folderKey","handleSelectFolder","isNodeMatchingSearch","lowerQuery","filterTreeBySearch","expandAllMatchingNodes","processNode","renderTreeNode","isExpanded","isFolder","filteredTree","defaultUploadMetadata","UPLOAD_EXTENSION_RULES","CHAT_CN_LEGAL_PREFIX","BO_CHI_TIEU_PREFIX","mergePdfParseStatuses","incoming","currentTime","candidateTime","currentIsTerminal","candidateIsActive","PDF_PARSE_STATE_KEY","BO_CHI_TIEU_OCR_STATE_KEY","isChatCnLegalKey","isBoChiTieuPrefix","isBoChiTieuImageName","extension","isBoChiTieuImageKey","normalizedKey","isPdfName","getUploadExtensionRule","normalizedPrefix","allowed","keyWithoutSlash","getFileExtension","toFileList","validateFilesForAllowedExtensions","fileArray","rule","validFiles","invalidFiles","validateExpirationDate","effectiveDate","expirationDate","dateEffective","validateUploadForm","PICKER_BUILDER_DEVELOPER_KEY","SCOPES","runNowPollInterval","CRAWL_JOBS_KEY","CURRENT_CRAWL_JOB_KEY","DAILY_REPORT_FILTER_FIELDS","normalizeDailyReportSubjectFilters","createEmptyDailyReportSubjectFilters","field","useCurrentCrawlJob","setCurrentJob","setElapsedTime","setPages","savedJob","parsedJob","pollStatus","getAllFilesUnderFolder","fileSystem","searchInPrefix","getAllFilesInCurrentView","fetchModifierByKey","metadataMap","collectFileKeys","fileData","attachModifiers","modifierByKey","useFiles","rootPrefix","displayPrefixes","currentPage","browsePage","_idCreator","selectStates","estimatedTotalHits","setEstimatedTotalHits","viewOnly","setViewOnly","pagination","setPagination","rootPrefixRef","newSelectedKeys","paginationData","viewOnlyData","fileKeys","handleSearch","searchData","isTextFile","isImageFile","getOcrFilePath","msalConfig","msalInstance","weightPermission","isViewOnlyMode","setViewOnlyMode","canEditDocument","canDownloadDocument","canViewDocument","HomeWithoutContext","homeLabel","hiddenSynchronization","asSelector","onSelected","preSelectedFiles","idCreator","setSorting","setCurrentPrefix","forcePrefix","setForcePrefix","isCreateFolderOpen","setIsCreateFolderOpen","newFolderName","setNewFolderName","isCreatingFolder","setIsCreatingFolder","fileToDelete","setFileToDelete","isBulkDeleting","setIsBulkDeleting","showBulkDeleteDialog","setShowBulkDeleteDialog","setUploadType","searchBoxRef","fileToRename","setFileToRename","fileToView","setFileToView","metadataForEdit","setMetadataForEdit","newName","setNewName","isRenaming","setIsRenaming","downloadingItems","setDownloadingItems","fileContent","setFileContent","isLoadingContent","setIsLoadingContent","isSavingContent","setIsSavingContent","activeTab","setActiveTab","isWebsiteDialogOpen","setIsWebsiteDialogOpen","websiteUrl","setWebsiteUrl","websiteUrlError","setWebsiteUrlError","crawlLimit","setCrawlLimit","setMaxDepth","isCrawling","setIsCrawling","maxPagesToCrawl","setMaxPagesToCrawl","selectedS3Folder","setSelectedS3Folder","isFetchingFolders","setIsFetchingFolders","isSyncing","setIsSyncing","_isUploading","setIsUploading","isDeleting","setIsDeleting","setCurrentPage","setBrowsePage","isFolderClicking","setIsFolderClicking","duplicateFiles","setDuplicateFiles","folderExist","setFolderExist","showDuplicateDialog","setShowDuplicateDialog","folderToShowFlow","setFolderToShowFlow","showInfoFlowsDialogs","setShowInfoFlowsDialogs","loadingFlowsDialogs","setLoadingFlowsDialogs","dataFlowModels","setDataFlowModels","isLoadingHandleExportReport","setIsLoadingHandleExportReport","rootFolderName","setRootFolderName","fileToShare","setFileToShare","fileToEditPrivacy","setFileToEditPrivacy","isCrawlProgressDialogOpen","setIsCrawlProgressDialogOpen","outlookEmailsBySource","setOutlookEmailsBySource","outlookDialogOpen","setOutlookDialogOpen","bootstrapContext","setBootstrapContext","outlookDialogContext","setOutlookDialogContext","bootstrapId","setBootstrapId","bootstrapInfo","setBootstrapInfo","bootstrapStatus","setBootstrapStatus","bootstrapError","setBootstrapError","bootstrapLoading","setBootstrapLoading","copied","setCopied","outlookSettingsOpen","setOutlookSettingsOpen","emailConfig","setEmailConfig","configLoading","setConfigLoading","configSaving","setConfigSaving","formCron","setFormCron","vnTimeOptions","formVnTime","formEnabled","setFormEnabled","formFilters","setFormFilters","formFiltersWeek","setFormFiltersWeek","formFiltersMonth","setFormFiltersMonth","formFiltersQuarter","setFormFiltersQuarter","settingsRunResult","setSettingsRunResult","settingsRunning","setSettingsRunning","crawlerSourceModalOpen","setCrawlerSourceModalOpen","reportHistoryOpen","setReportHistoryOpen","crawlerSource","setCrawlerSource","crawlerCreateDefaults","setCrawlerCreateDefaults","crawlerBldReports","setCrawlerBldReports","resolvedCrawlerSource","resolvedCrawlerKnownFolder","resolvedCrawlerSourceLoading","refreshResolvedCrawlerSource","activeCrawlerFolder","displayedOutlookFolder","outlookEmail","crawlerProcessorType","isBldReportsFolder","showCrawlerSettingsButton","openCrawlerSettingsModal","uploadMetadataForm","setUploadMetadataForm","showUploadFormDialog","setShowUploadFormDialog","pendingUploadInfo","setPendingUploadInfo","uploadFormErrors","setUploadFormErrors","expirationDateError","setExpirationDateError","pdfParseStatus","setPdfParseStatus","trackedPdfKeys","setTrackedPdfKeys","record","toastedPdfKeysRef","boChiTieuOcrStatus","setBoChiTieuOcrStatus","trackedBoChiTieuKeys","setTrackedBoChiTieuKeys","statuses","toastedBoChiTieuKeysRef","trackPdfParseKeys","legalKeys","trackUploadedPdfParse","uploadedFiles","observePdfParseKeys","trackBoChiTieuOcrKeys","imageKeys","trackUploadedBoChiTieuOcr","observeBoChiTieuOcrKeys","anyFinished","handleBootstrap","handleCopyCode","loadEmailConfig","cfg","saveConfig","renderSubjectFilterInput","displayResult","lastRunResult","resultMsg","startPolling","handleRunNow","handleGetInfoFlows","dataResponse","syncJobStatus","setSyncJobStatus","_isMsalReady","setIsMsalReady","_isAuthenticated","setIsAuthenticated","showOneDriveModal","setShowOneDriveModal","setFolders","breadcrumbOneDrive","setBreadcrumbOneDrive","isLoadingOneDrive","setIsLoadingOneDrive","selectedOneDriveItems","setSelectedOneDriveItems","excludedOneDriveChildIds","setExcludedOneDriveChildIds","isLoadingSharePoint","setIsLoadingSharePoint","sharePointFiles","setSharePointFiles","sharePointFolders","setSharePointFolders","selectedSharePointItems","setSelectedSharePointItems","excludedSharePointChildIds","setExcludedSharePointChildIds","sharePointBreadcrumbs","setSharePointBreadcrumbs","sharePointCache","setSharePointCache","isSharePointModalOpen","setIsSharePointModalOpen","sharePointSites","setSharePointSites","selectedSite","setSelectedSite","isSharePointLogoutConfirmOpen","setIsSharePointLogoutConfirmOpen","isOneDriveLogoutConfirmOpen","setIsOneDriveLogoutConfirmOpen","isAutoUpdateKB","setIsAutoUpdateKB","effectivePrefix","_token","setToken","metadataErrors","setMetadataErrors","validateMetadataFields","requiredFields","isViewOnly","pdfKeys","boChiTieuKeys","showAddFileMenu","setShowAddFileMenu","addFileMenuRef","handleClickOutside","loginSharePoint","loginUrl","popup","currentUrl","authorizationCode","fetchSharePointAccessToken","hotToast","logoutSharePoint","fetchSharePointSites","handleSelectSite","site","fetchSharePointFiles","folderId","hostname","sitePath","cacheItems","newCache","isSharePointAncestorSelected","_item","selectedItems","currentAncestorIds","getKnownDescendantIds","descendants","hasExcludedDescendantsInCache","excludedIds","areAllKnownDescendantsExcluded","isChildExcluded","getSharePointItemSelectionState","isDirectlySelected","ancestorSelected","propagateAutoUncheck","newExcludedIds","currentSelectedItems","updatedSelected","updatedExcluded","changed","handleSharePointSelectItem","ancestorIsSelected","prevItems","newSet","handleSharePointFolderNavigation","syncSharePointToS3","selectedFolderIds","addedIds","ancestorId","handleCloseSharePointModal","checkLoginStatus","isOneDriveAncestorSelected","findOneDriveSelectedAncestor","selectedAncestor","getOneDriveItemSelectionState","excludedId","excludedItem","handleOneDriveSelectItem","allVisibleItems","visibleItem","formatBytes","isoString","loginOneDrive","fetchAccessToken","logoutOneDrive","fetchOneDriveFiles","handleOneDriveFolderNavigation","targetFolder","syncOneDriveToS3","handleCloseOneDriveModal","login","tokenResponse","loadGooglePicker","script","initializePicker","docsView","driveView","selectedFiles","syncDriveToS3","handleLogoutMessage","filteredData","getFolderSelectionState","filesUnderFolder","selectedCount","isReplace","basePath","newUrl","handleNavigateToFailedFile","lastSlashIndex","createFolder","folderPrefix","filterFilesByAllowedExtensions","hasRule","allowedLabel","requiresMetadataForm","isCompressedFile","validateFilesForCompression","compressedFiles","uploadFiles","inputFiles","compressionCheck","emptyFiles","fileNames","checkResponse","filesFound","overwriteFiles","handleSubmitUpload","handleDelete","updatedPrefix","firstPart","slashPart","handleRowSelectionChange","updaterOrValue","indexStr","handleRemoveSelected","selectedKeysArray","commonPrefix","handleRename","parentPath","newPath","handlePublicDocument","isPublic","prefixSegments","getSelectedFiles","currentSelections","haveFile","baseColumns","filesInView","allSelected","allSelection","selectedKey","selectionState","newSelection","parentPrefix","showPrefix","percent","dayjs","displayName","EyeIcon","loadFileContent","pathToLoad","responseContentFile","responseMetadata","metadataAttributes","saveFileContent","pathToSave","saveJsonFile","editableMetadata","crawlWebsite","urlPattern","pathParts","userInfo","jobInfo","storedJobs","crawlJobs","stopCurrentJob","handlePopState","changeSelectKey","prefixParam","handleExportReport","handleSyncKnowledgeBase","checkSyncingStatus","operationType","calculateSelectedFiles","newRootFolderName","searchQuery1","pickedFiles","timeStr","statusText","Modal.Root","Modal.Overlay","Modal.Content","Modal.Close","isProcessingStatus","isStatus","fieldError","newMetadata","typeUpload","_col","colIndex","Home","ToastContainer","isCheckBoxInput","isDateObject","isNullOrUndefined","isObjectType","getEventValue","isNameInFieldArray","names","tempObject","prototypeCopy","isWeb","cloneObject","isFileListInstance","copy","EVENTS","VALIDATION_MODE","INPUT_VALIDATION_RULES","ROOT_ERROR_TYPE","PROTOTYPE_KEYWORDS","IS_KEY_RE","FIELD_PATH_RE","tempPath","HookFormControlContext","getProxyFormState","formState","localProxyFormState","isRoot","generateWatchOutput","_names","formValues","isGlobal","fieldName","isPrimitive","isEmptyObjectWithCustomPrototype","object1","object2","keys1","keys2","visitedPairs","ws","val1","val2","HookFormContext","appendErrors","validateAllFieldCriteria","convertToArrayPayload","createSubject","_observers","observer","extractFormValues","fieldsState","fieldState","fieldValue","nestedFieldsState","isFileInput","owner","isMultipleSelect","isRadioInput","isRadioOrCheckbox","live","updatePath","isEmptyArray","childObject","objectHasFunction","isTraversable","markFieldsDirty","fields","pruneDirtyFields","pruned","getDirtyFields","dirtyFieldsFromValues","formValue","defaultResult","validResult","getCheckboxValue","getFieldValueAs","valueAsNumber","valueAsDate","setValueAs","defaultReturn","getRadioValue","getFieldValue","getResolverOptions","fieldsNames","_fields","criteriaMode","shouldUseNativeValidation","isRegex","getRuleValue","getValidationModes","ASYNC_FUNCTION","hasPromiseValidation","fieldReference","hasValidation","isWatched","isBlurEvent","watchName","iterateFieldsByAction","abortEarly","currentField","schemaErrorLookup","foundError","shouldRenderFormState","formStateData","_proxyFormState","updateFormState","shouldSubscribeByName","signalName","exact","currentName","skipValidation","isTouched","isSubmitted","reValidateMode","unsetEmptyArray","updateFieldArrayRootError","existingErrors","fieldArrayErrors","getValidateError","getValueAndMessage","validationData","validateField","disabledFieldNames","isFieldArray","minLength","mount","inputValue","setCustomValidity","validityMessage","isRadio","isCheckBox","appendErrorsCurry","getMinMaxMessage","exceedMax","maxLengthMessage","minLengthMessage","maxType","minType","exceedMin","maxOutput","minOutput","valueNumber","valueDate","convertTimeToDate","isTime","isWeek","maxLengthOutput","minLengthOutput","patternValue","validateError","validationResult","FORM_ERROR_TYPE","DEFAULT_FORM_STATE","createFormControl","_formState","_defaultValues","_formValues","_state","delayErrorCallback","_valuesSubscriberCount","_validationModeBeforeSubmit","_validationModeAfterSubmit","defaultProxyFormState","_proxySubscribeFormState","_subjects","shouldDisplayAllAssociatedErrors","_setValid","shouldUpdateValid","isValid","_runSchema","_updateIsValidating","executeBuiltInValidation","isValidating","_updateDirtyFields","_setFieldArray","shouldSetValues","shouldUpdateFieldsAndState","fieldValues","touchedFields","_getDirty","updateErrors","_setErrors","hasExplicitNullIntermediate","defaultValues","updateValidAndValue","shouldSkipSetValueAs","wasUnsetInFormValues","setFieldValue","updateTouchAndDirty","shouldDirty","shouldRender","shouldUpdateField","isPreviousDirty","output","isCurrentFieldPristine","isPreviousFieldTouched","shouldRenderByError","previousFieldError","updatedFormState","executeSchemaAndUpdateState","validateForm","clearErrors","onlyCheckValid","isFieldArrayRoot","isPromiseFunction","shouldTrackIsValidatingState","_removeUnmounted","unregister","_getWatch","_getFieldArray","skipClone","skipRender","optionRef","checkboxRef","radioRef","setFieldValues","fieldKey","_setValue","skipStateEmit","cloneValue","previousValue","isValueUnchanged","watched","setValues","updatedFormValues","isFieldValueUpdated","_updateIsFieldValueUpdated","hasNoValidationEffect","shouldSkipValidation","previousErrorLookupResult","errorLookupResult","_focusInput","fieldNames","getValues","getFieldState","inputName","currentError","currentRef","restOfErrorTree","watch","called","_subscribe","needsValues","_setFormState","subscribe","_setDisabledField","disabledStateChanged","register","disabledIsDefined","shouldRevalidateRemount","fieldRef","radioOrCheckbox","_focusError","_disableForm","handleSubmit","onValid","onInvalid","onValidError","resetField","_reset","keepStateOptions","cloneUpdatedValues","isEmptyResetValues","fieldsToCheck","isDirty","existingValue","setFocus","methods","newDirtyFields","useForm","_formControl","_values","_formControlProp","formControl","TooltipS","TooltipComponent","useDebounce","debouncedValue","setDebouncedValue","Summary","setColumnFilters","setTotalPages","loadingPage","setLoadingPage","debouncedSearchQuery","extractMonthYearFromFilename","dateStr","mapConversation","extracted","handleConversation","summaryRes","isPublished","formattedDate","openPopup","setOpenPopup","showFullContent","setShowFullContent","publishLoading","setPublishLoading","handleTogglePublish","newStatus","prevData","handleEditQuestion","bool","ITEMS_PER_PAGE","Job","jobs","setJobs","retryingJobs","setRetryingJobs","isRefreshing","setIsRefreshing","fetchJobs","formatStartTime","formatExecutionTime","remainingSeconds"],"mappings":"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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,269,270,271,275,276,277,278,279,280,281,282,283,288,291,292,293,294,296,298,299,302,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,332,333,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,373]}