@verdaccio/ui-components 5.0.0-next-9.21 → 5.0.0-next-9.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/Theme/ResetStyles.js.map +1 -1
- package/build/Theme/ResetStyles.mjs.map +1 -1
- package/build/Theme/StyleBaseline.js.map +1 -1
- package/build/Theme/StyleBaseline.mjs.map +1 -1
- package/build/Theme/ThemeProvider.js.map +1 -1
- package/build/Theme/ThemeProvider.mjs.map +1 -1
- package/build/Theme/colors.js.map +1 -1
- package/build/Theme/modes.js.map +1 -1
- package/build/Theme/theme.js.map +1 -1
- package/build/api/use-data-mutation.d.ts +1 -1
- package/build/api/use-data-mutation.js.map +1 -1
- package/build/api/use-data-mutation.mjs.map +1 -1
- package/build/api/use-data.d.ts +1 -1
- package/build/api/use-data.js.map +1 -1
- package/build/api/use-data.mjs.map +1 -1
- package/build/components/ActionBar/ActionBar.js.map +1 -1
- package/build/components/ActionBar/ActionBar.mjs.map +1 -1
- package/build/components/ActionBar/ActionBarAction.js.map +1 -1
- package/build/components/ActionBar/index.mjs +1 -2
- package/build/components/AppRoute/AppRoute.js.map +1 -1
- package/build/components/AppRoute/AppRoute.mjs.map +1 -1
- package/build/components/Author/Author.js.map +1 -1
- package/build/components/Author/index.mjs +1 -2
- package/build/components/Author/styles.js.map +1 -1
- package/build/components/CopyClipboard/CopyToClipBoard.js.map +1 -1
- package/build/components/Dependencies/Dependencies.js.map +1 -1
- package/build/components/Dependencies/DependencyBlock.js.map +1 -1
- package/build/components/Dependencies/DependencyBlock.mjs.map +1 -1
- package/build/components/Dependencies/index.mjs +1 -2
- package/build/components/Deprecated/Deprecated.js.map +1 -1
- package/build/components/Deprecated/index.mjs +1 -2
- package/build/components/Developers/Developers.js.map +1 -1
- package/build/components/Developers/Developers.mjs.map +1 -1
- package/build/components/Developers/Title.js.map +1 -1
- package/build/components/Distribution/Dist.js.map +1 -1
- package/build/components/Distribution/Dist.mjs.map +1 -1
- package/build/components/Distribution/index.mjs +1 -2
- package/build/components/Distribution/styles.js.map +1 -1
- package/build/components/Engines/Engines.js.map +1 -1
- package/build/components/Engines/index.mjs +1 -2
- package/build/components/Engines/styles.js.map +1 -1
- package/build/components/ErrorBoundary/ErrorBoundary.js.map +1 -1
- package/build/components/ErrorBoundary/index.mjs +1 -2
- package/build/components/Forbidden/Forbidden.js.map +1 -1
- package/build/components/Forbidden/index.mjs +1 -2
- package/build/components/FundButton/FundButton.js.map +1 -1
- package/build/components/FundButton/FundButton.mjs.map +1 -1
- package/build/components/FundButton/index.mjs +1 -2
- package/build/components/GenericError/GenericError.js.map +1 -1
- package/build/components/GenericError/index.mjs +1 -2
- package/build/components/HeaderInfoDialog/HeaderInfoDialog.js.map +1 -1
- package/build/components/HeaderInfoDialog/index.mjs +1 -2
- package/build/components/Heading/Heading.js.map +1 -1
- package/build/components/Heading/Heading.mjs.map +1 -1
- package/build/components/Heading/index.mjs +1 -2
- package/build/components/Help/Help.js.map +1 -1
- package/build/components/Help/Help.mjs.map +1 -1
- package/build/components/Help/index.mjs +1 -2
- package/build/components/Help/styles.js.map +1 -1
- package/build/components/Icons/DevsIcons/CommonJS2.js.map +1 -1
- package/build/components/Icons/DevsIcons/CommonJS2.mjs.map +1 -1
- package/build/components/Icons/DevsIcons/ES6Module2.js.map +1 -1
- package/build/components/Icons/DevsIcons/ES6Module2.mjs.map +1 -1
- package/build/components/Icons/DevsIcons/Git2.js.map +1 -1
- package/build/components/Icons/DevsIcons/Git2.mjs.map +1 -1
- package/build/components/Icons/DevsIcons/NodeJS2.js.map +1 -1
- package/build/components/Icons/DevsIcons/NodeJS2.mjs.map +1 -1
- package/build/components/Icons/DevsIcons/TypeScript2.js.map +1 -1
- package/build/components/Icons/DevsIcons/TypeScript2.mjs.map +1 -1
- package/build/components/Icons/Earth.js.map +1 -1
- package/build/components/Icons/FileBinary.js.map +1 -1
- package/build/components/Icons/Law.js.map +1 -1
- package/build/components/Icons/License.d.ts +2 -4
- package/build/components/Icons/License.js.map +1 -1
- package/build/components/Icons/License.mjs.map +1 -1
- package/build/components/Icons/Managers/Npm2.js.map +1 -1
- package/build/components/Icons/Managers/Npm2.mjs.map +1 -1
- package/build/components/Icons/Managers/Pnpm2.js.map +1 -1
- package/build/components/Icons/Managers/Pnpm2.mjs.map +1 -1
- package/build/components/Icons/Managers/Yarn2.js.map +1 -1
- package/build/components/Icons/Managers/Yarn2.mjs.map +1 -1
- package/build/components/Icons/SvgIcon.js.map +1 -1
- package/build/components/Icons/Time.js.map +1 -1
- package/build/components/Icons/Version.js.map +1 -1
- package/build/components/Install/Install.js.map +1 -1
- package/build/components/Install/Install.mjs.map +1 -1
- package/build/components/Install/InstallListItem.js.map +1 -1
- package/build/components/Install/index.mjs +1 -2
- package/build/components/Keywords/KeywordListItems.js.map +1 -1
- package/build/components/Keywords/Keywords.js.map +1 -1
- package/build/components/Keywords/index.mjs +1 -2
- package/build/components/Label/Label.js.map +1 -1
- package/build/components/Label/index.mjs +1 -2
- package/build/components/Link/Link.js.map +1 -1
- package/build/components/Link/Link.mjs.map +1 -1
- package/build/components/Link/index.mjs +1 -2
- package/build/components/LinkExternal/LinkExternal.js.map +1 -1
- package/build/components/LinkExternal/index.mjs +1 -2
- package/build/components/Loading/Loading.js.map +1 -1
- package/build/components/Loading/Spinner/Spinner.js.map +1 -1
- package/build/components/Loading/Spinner/index.mjs +1 -2
- package/build/components/Loading/index.mjs +1 -2
- package/build/components/Loading/styles.js.map +1 -1
- package/build/components/LoginDialog/LoginDialog.d.ts +1 -0
- package/build/components/LoginDialog/LoginDialog.js +11 -2
- package/build/components/LoginDialog/LoginDialog.js.map +1 -1
- package/build/components/LoginDialog/LoginDialog.mjs +10 -2
- package/build/components/LoginDialog/LoginDialog.mjs.map +1 -1
- package/build/components/LoginDialog/LoginDialogCloseButton.js.map +1 -1
- package/build/components/LoginDialog/LoginDialogForm.js.map +1 -1
- package/build/components/LoginDialog/LoginDialogFormError.js.map +1 -1
- package/build/components/LoginDialog/index.mjs +1 -2
- package/build/components/LoginForm/Login.js +0 -23
- package/build/components/LoginForm/Login.js.map +1 -1
- package/build/components/LoginForm/Login.mjs +0 -21
- package/build/components/LoginForm/Login.mjs.map +1 -1
- package/build/components/LoginForm/PasswordField.js.map +1 -1
- package/build/components/LoginForm/UsernameField.js.map +1 -1
- package/build/components/LoginForm/styles.js.map +1 -1
- package/build/components/LoginForm/useLoginForm.js.map +1 -1
- package/build/components/Logo/Logo.js.map +1 -1
- package/build/components/Logo/Logo.mjs.map +1 -1
- package/build/components/Logo/index.mjs +1 -2
- package/build/components/MenuItem/MenuItem.js.map +1 -1
- package/build/components/MenuItem/MenuItem.mjs.map +1 -1
- package/build/components/MenuItem/index.mjs +1 -2
- package/build/components/NoItems/NoItems.js.map +1 -1
- package/build/components/NoItems/index.mjs +1 -2
- package/build/components/NotFound/NotFound.js.map +1 -1
- package/build/components/NotFound/index.mjs +1 -2
- package/build/components/Package/Package.js.map +1 -1
- package/build/components/Package/Package.mjs.map +1 -1
- package/build/components/Package/index.mjs +1 -2
- package/build/components/Package/styles.js.map +1 -1
- package/build/components/Package/styles.mjs.map +1 -1
- package/build/components/PackageList/PackageList.js.map +1 -1
- package/build/components/PackageList/PackageList.mjs.map +1 -1
- package/build/components/PackageList/index.mjs +1 -2
- package/build/components/Person/Person.js.map +1 -1
- package/build/components/Person/Person.mjs.map +1 -1
- package/build/components/Person/PersonTooltip.js.map +1 -1
- package/build/components/Person/PersonTooltip.mjs.map +1 -1
- package/build/components/Person/index.mjs +1 -2
- package/build/components/Person/utils.mjs.map +1 -1
- package/build/components/RawViewer/RawViewer.js.map +1 -1
- package/build/components/RawViewer/index.mjs +1 -2
- package/build/components/Readme/Readme.js.map +1 -1
- package/build/components/Readme/index.mjs +1 -2
- package/build/components/Readme/utils.js.map +1 -1
- package/build/components/RegistryInfoDialog/RegistryInfoDialog.js.map +1 -1
- package/build/components/RegistryInfoDialog/index.mjs +1 -2
- package/build/components/RegistryInfoDialog/styles.js.map +1 -1
- package/build/components/Repository/Repository.js.map +1 -1
- package/build/components/Repository/Repository.mjs.map +1 -1
- package/build/components/Repository/index.mjs +1 -2
- package/build/components/Search/AutoComplete/AutoComplete.js.map +1 -1
- package/build/components/Search/AutoComplete/index.mjs +1 -2
- package/build/components/Search/AutoComplete/styles.js.map +1 -1
- package/build/components/Search/Search.js.map +1 -1
- package/build/components/Search/Search.mjs.map +1 -1
- package/build/components/Search/SearchItem.js.map +1 -1
- package/build/components/Search/index.mjs +1 -2
- package/build/components/Search/styles.js.map +1 -1
- package/build/components/SettingsMenu/SettingsMenu.js.map +1 -1
- package/build/components/SettingsMenu/SettingsMenu.mjs.map +1 -1
- package/build/components/SettingsMenu/index.mjs +1 -2
- package/build/components/SideBarTitle/SideBarTitle.js.map +1 -1
- package/build/components/SideBarTitle/SideBarTitle.mjs.map +1 -1
- package/build/components/SideBarTitle/index.mjs +1 -2
- package/build/components/UpLinks/UpLinks.js.map +1 -1
- package/build/components/UpLinks/UpLinks.mjs.map +1 -1
- package/build/components/UpLinks/UplinkLink.js.map +1 -1
- package/build/components/UpLinks/UplinkLink.mjs.map +1 -1
- package/build/components/UpLinks/index.mjs +1 -2
- package/build/components/UpLinks/styles.js.map +1 -1
- package/build/components/UpLinks/styles.mjs.map +1 -1
- package/build/components/Versions/HistoryList.js.map +1 -1
- package/build/components/Versions/HistoryList.mjs.map +1 -1
- package/build/components/Versions/TagList.js.map +1 -1
- package/build/components/Versions/Versions.js.map +1 -1
- package/build/components/Versions/Versions.mjs.map +1 -1
- package/build/components/Versions/index.mjs +1 -2
- package/build/components/Versions/styles.js.map +1 -1
- package/build/components/Versions/styles.mjs.map +1 -1
- package/build/hooks/useLocalStorage.js.map +1 -1
- package/build/layouts/Security/Dialog.js.map +1 -1
- package/build/layouts/Version/Version.js.map +1 -1
- package/build/layouts/Version/Version.mjs.map +1 -1
- package/build/layouts/Version/index.mjs +1 -2
- package/build/pages/Front/Home.js.map +1 -1
- package/build/pages/Front/index.mjs +1 -2
- package/build/pages/Security/AddUser.js.map +1 -1
- package/build/pages/Security/ChangePassword.js.map +1 -1
- package/build/pages/Security/Login.js.map +1 -1
- package/build/pages/Security/Success.js.map +1 -1
- package/build/pages/Stage/StageDetail.js.map +1 -1
- package/build/pages/Stage/StageList.js.map +1 -1
- package/build/pages/Version/Version.js.map +1 -1
- package/build/pages/Version/index.mjs +1 -2
- package/build/providers/AppConfigurationProvider/AppConfigurationProvider.js.map +1 -1
- package/build/providers/AppConfigurationProvider/index.mjs +1 -2
- package/build/providers/AuthProvider/AuthProvider.js +1 -1
- package/build/providers/AuthProvider/AuthProvider.js.map +1 -1
- package/build/providers/AuthProvider/AuthProvider.mjs +1 -1
- package/build/providers/AuthProvider/AuthProvider.mjs.map +1 -1
- package/build/providers/AuthProvider/index.mjs +1 -2
- package/build/providers/AuthProvider/utils.js.map +1 -1
- package/build/providers/DownloadProvider/DownloadProvider.js.map +1 -1
- package/build/providers/DownloadProvider/index.mjs +1 -2
- package/build/providers/ManifestsProvider/ManifestsProvider.js +1 -1
- package/build/providers/ManifestsProvider/ManifestsProvider.js.map +1 -1
- package/build/providers/ManifestsProvider/ManifestsProvider.mjs +1 -1
- package/build/providers/ManifestsProvider/ManifestsProvider.mjs.map +1 -1
- package/build/providers/ManifestsProvider/index.mjs +1 -2
- package/build/providers/PersistenceSettingProvider/PersistenceSettingProvider.js.map +1 -1
- package/build/providers/PersistenceSettingProvider/index.mjs +1 -2
- package/build/providers/SearchProvider/SearchProvider.js +1 -1
- package/build/providers/SearchProvider/SearchProvider.js.map +1 -1
- package/build/providers/SearchProvider/SearchProvider.mjs +1 -1
- package/build/providers/SearchProvider/SearchProvider.mjs.map +1 -1
- package/build/providers/SearchProvider/index.mjs +1 -2
- package/build/providers/TranslatorProvider/TranslatorProvider.js.map +1 -1
- package/build/providers/TranslatorProvider/index.mjs +1 -2
- package/build/providers/VersionProvider/VersionProvider.js +1 -1
- package/build/providers/VersionProvider/VersionProvider.js.map +1 -1
- package/build/providers/VersionProvider/VersionProvider.mjs +1 -1
- package/build/providers/VersionProvider/VersionProvider.mjs.map +1 -1
- package/build/providers/VersionProvider/index.mjs +1 -2
- package/build/sections/Detail/ContainerContent.js.map +1 -1
- package/build/sections/Detail/ContainerContent.mjs.map +1 -1
- package/build/sections/Detail/Detail.js.map +1 -1
- package/build/sections/Detail/Detail.mjs.map +1 -1
- package/build/sections/Detail/ReadmeSection.js.map +1 -1
- package/build/sections/Detail/Tabs.js.map +1 -1
- package/build/sections/Detail/Tabs.mjs.map +1 -1
- package/build/sections/Detail/index.mjs +1 -2
- package/build/sections/Footer/Footer.js.map +1 -1
- package/build/sections/Footer/Footer.mjs.map +1 -1
- package/build/sections/Footer/index.mjs +1 -2
- package/build/sections/Footer/styles.js.map +1 -1
- package/build/sections/Header/Header.js.map +1 -1
- package/build/sections/Header/Header.mjs.map +1 -1
- package/build/sections/Header/HeaderGreetings.js.map +1 -1
- package/build/sections/Header/HeaderGreetings.mjs.map +1 -1
- package/build/sections/Header/HeaderLeft.js.map +1 -1
- package/build/sections/Header/HeaderLeft.mjs.map +1 -1
- package/build/sections/Header/HeaderMenu.js +10 -0
- package/build/sections/Header/HeaderMenu.js.map +1 -1
- package/build/sections/Header/HeaderMenu.mjs +10 -0
- package/build/sections/Header/HeaderMenu.mjs.map +1 -1
- package/build/sections/Header/HeaderRight.js.map +1 -1
- package/build/sections/Header/HeaderRight.mjs.map +1 -1
- package/build/sections/Header/HeaderSettingsDialog.js.map +1 -1
- package/build/sections/Header/HeaderToolTip.js.map +1 -1
- package/build/sections/Header/HeaderToolTipIcon.js.map +1 -1
- package/build/sections/Header/HeaderToolTipIcon.mjs.map +1 -1
- package/build/sections/Header/LanguageSwitch.js.map +1 -1
- package/build/sections/Header/LanguageSwitch.mjs.map +1 -1
- package/build/sections/Header/RegistryInfoContent/RegistryInfoContent.js.map +1 -1
- package/build/sections/Header/RegistryInfoContent/RegistryInfoContent.mjs.map +1 -1
- package/build/sections/Header/RegistryInfoContent/index.mjs +1 -2
- package/build/sections/Header/RegistryInfoContent/styles.js.map +1 -1
- package/build/sections/Header/index.mjs +1 -2
- package/build/sections/Header/styles.js.map +1 -1
- package/build/sections/Home/Home.js.map +1 -1
- package/build/sections/Home/index.mjs +1 -2
- package/build/sections/Security/AddUser.js.map +1 -1
- package/build/sections/Security/AddUser.mjs.map +1 -1
- package/build/sections/Security/ChangePassword.js +41 -16
- package/build/sections/Security/ChangePassword.js.map +1 -1
- package/build/sections/Security/ChangePassword.mjs +41 -16
- package/build/sections/Security/ChangePassword.mjs.map +1 -1
- package/build/sections/Security/Login.js.map +1 -1
- package/build/sections/Security/Login.mjs.map +1 -1
- package/build/sections/Security/Success.js.map +1 -1
- package/build/sections/Security/styles.js.map +1 -1
- package/build/sections/Security/utils.js.map +1 -1
- package/build/sections/SideBar/Sidebar.js.map +1 -1
- package/build/sections/SideBar/Sidebar.mjs.map +1 -1
- package/build/sections/SideBar/index.mjs +1 -2
- package/build/sections/Stage/StageActions.js.map +1 -1
- package/build/sections/Stage/StageActions.mjs.map +1 -1
- package/build/sections/Stage/StageDetail.js.map +1 -1
- package/build/sections/Stage/StageDetail.mjs.map +1 -1
- package/build/sections/Stage/StageList.js.map +1 -1
- package/build/sections/Stage/StageList.mjs.map +1 -1
- package/build/sections/Stage/useRequireSession.js.map +1 -1
- package/build/sections/Stage/useRequireSession.mjs.map +1 -1
- package/build/sections/Stage/useStage.js.map +1 -1
- package/build/sections/Stage/useStage.mjs.map +1 -1
- package/build/store/api.js.map +1 -1
- package/build/store/api.mjs.map +1 -1
- package/build/store/index.mjs +1 -2
- package/build/store/storage.js.map +1 -1
- package/build/utils/loadable.js.map +1 -1
- package/build/utils/schemas.d.ts +0 -2
- package/build/utils/schemas.js +0 -1
- package/build/utils/schemas.js.map +1 -1
- package/build/utils/schemas.mjs +0 -1
- package/build/utils/schemas.mjs.map +1 -1
- package/build/utils/token.js.map +1 -1
- package/build/utils/url.js.map +1 -1
- package/build/utils/url.mjs.map +1 -1
- package/build/utils/utils.js.map +1 -1
- package/package.json +21 -21
- package/build/store/routes.d.ts +0 -12
- package/build/store/routes.js +0 -18
- package/build/store/routes.js.map +0 -1
- package/build/store/routes.mjs +0 -18
- package/build/store/routes.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Search.js","names":[],"sources":["../../../src/components/Search/Search.tsx"],"sourcesContent":["import SearchMui from '@mui/icons-material/Search';\nimport { debounce } from 'lodash-es';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useNavigate } from 'react-router';\n\nimport { useSearch } from '../../';\nimport { Route } from '../../utils';\nimport AutoComplete from './AutoComplete';\nimport SearchItem from './SearchItem';\nimport { StyledInputAdornment, StyledTextField } from './styles';\nimport { normalizeSearchOption } from './utils';\n\nconst CONSTANTS = {\n API_DELAY: 300,\n ABORT_ERROR: 'AbortError',\n};\n\nconst Search: React.FC = () => {\n const { t } = useTranslation();\n const navigate = useNavigate();\n const { searchResults, isLoading, isError, doSearch, resetSearch } = useSearch();\n\n const abortControllerRef = useRef<AbortController | null>(null);\n\n const cancelAllSearchRequests = useCallback(() => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n abortControllerRef.current = null;\n }\n }, []);\n\n const handleOnBlur = useCallback(\n (event: React.SyntheticEvent) => {\n event.stopPropagation();\n cancelAllSearchRequests();\n },\n [cancelAllSearchRequests]\n );\n\n const handleClickSearch = useCallback(\n (event: React.SyntheticEvent, value: any, reason: string): void => {\n event.stopPropagation();\n if (reason === 'selectOption') {\n const { name } = normalizeSearchOption(value);\n if (name) {\n navigate(`${Route.DETAIL}${name}`);\n }\n }\n },\n [navigate]\n );\n\n // Use a ref to always access the latest doSearch without re-creating the debounced function\n const doSearchRef = useRef(doSearch);\n doSearchRef.current = doSearch;\n\n // shows the dropdown as loading during the debounce window; without it the\n // immediate reset below reads as \"no results found\" on every keystroke\n const [isDebouncing, setIsDebouncing] = useState(false);\n\n /**\n * Stable fetch function that reads the latest doSearch from a ref,\n * avoiding dependency changes that would break the debounce.\n */\n const handleFetchPackages = useCallback(\n async ({ value }: { value: string }) => {\n setIsDebouncing(false);\n if (value?.trim() !== '') {\n // Abort any previous pending request before starting a new one\n cancelAllSearchRequests();\n\n // Create a new controller for the current request\n const controller = new AbortController();\n abortControllerRef.current = controller;\n\n try {\n await doSearchRef.current?.({\n text: value,\n signal: controller.signal,\n });\n } catch (err: any) {\n if (err.name === CONSTANTS.ABORT_ERROR) {\n console.warn('Search request aborted');\n } else {\n console.error('Search error:', err);\n }\n }\n }\n },\n [cancelAllSearchRequests]\n );\n\n // Memoize the debounced function so a single instance is reused across renders,\n // ensuring the debounce timer works correctly instead of creating a new timer per render.\n const debouncedFetch = useMemo(\n () => debounce(handleFetchPackages, CONSTANTS.API_DELAY),\n [handleFetchPackages]\n );\n\n // clear the previous query's results right away so the dropdown never lists\n // stale suggestions under the new input while the debounce timer runs\n const handleSuggestionsFetch = useCallback(\n ({ value }: { value: string }) => {\n resetSearch?.();\n if (value?.trim() !== '') {\n setIsDebouncing(true);\n }\n debouncedFetch({ value });\n },\n [resetSearch, debouncedFetch]\n );\n\n useEffect(() => {\n return () => {\n debouncedFetch.cancel?.();\n cancelAllSearchRequests();\n };\n }, [debouncedFetch, cancelAllSearchRequests]);\n\n const renderOption = (props, option) => {\n const { key, ...otherProps } = props;\n const { name, version, description, isPrivate, isCached, isRemote } =\n normalizeSearchOption(option);\n return (\n <SearchItem\n key={key}\n {...otherProps}\n description={description}\n isCached={isCached}\n isPrivate={isPrivate}\n isRemote={isRemote}\n name={name}\n version={version}\n />\n );\n };\n\n const renderInput = (params) => {\n return (\n <StyledTextField\n {...params}\n InputProps={{\n ...params.InputProps,\n startAdornment: (\n <StyledInputAdornment position=\"start\">\n <SearchMui />\n </StyledInputAdornment>\n ),\n }}\n label=\"\"\n placeholder={t('search.packages')}\n variant=\"standard\"\n />\n );\n };\n\n const getOptionLabel = (option) => {\n return normalizeSearchOption(option).name;\n };\n\n return (\n <AutoComplete\n getOptionLabel={getOptionLabel}\n hasError={isError}\n onCleanSuggestions={handleOnBlur}\n onSelectItem={handleClickSearch}\n onSuggestionsFetch={handleSuggestionsFetch}\n placeholder={t('search.packages')}\n renderInput={renderInput}\n renderOption={renderOption}\n suggestions={searchResults}\n suggestionsLoading={isLoading || isDebouncing}\n />\n );\n};\n\nexport default Search;\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAaA,IAAM,YAAY;CAChB,WAAW;CACX,aAAa;AACf;AAEA,IAAM,eAAyB;CAC7B,MAAM,EAAE,OAAA,
|
|
1
|
+
{"version":3,"file":"Search.js","names":["useTranslation","useNavigate","useSearch","useRef","useCallback","normalizeSearchOption","Route","useState","useMemo","debounce","SearchItem","StyledTextField","StyledInputAdornment","SearchMui","AutoComplete"],"sources":["../../../src/components/Search/Search.tsx"],"sourcesContent":["import SearchMui from '@mui/icons-material/Search';\nimport { debounce } from 'lodash-es';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useNavigate } from 'react-router';\n\nimport { useSearch } from '../../';\nimport { Route } from '../../utils';\nimport AutoComplete from './AutoComplete';\nimport SearchItem from './SearchItem';\nimport { StyledInputAdornment, StyledTextField } from './styles';\nimport { normalizeSearchOption } from './utils';\n\nconst CONSTANTS = {\n API_DELAY: 300,\n ABORT_ERROR: 'AbortError',\n};\n\nconst Search: React.FC = () => {\n const { t } = useTranslation();\n const navigate = useNavigate();\n const { searchResults, isLoading, isError, doSearch, resetSearch } = useSearch();\n\n const abortControllerRef = useRef<AbortController | null>(null);\n\n const cancelAllSearchRequests = useCallback(() => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n abortControllerRef.current = null;\n }\n }, []);\n\n const handleOnBlur = useCallback(\n (event: React.SyntheticEvent) => {\n event.stopPropagation();\n cancelAllSearchRequests();\n },\n [cancelAllSearchRequests]\n );\n\n const handleClickSearch = useCallback(\n (event: React.SyntheticEvent, value: any, reason: string): void => {\n event.stopPropagation();\n if (reason === 'selectOption') {\n const { name } = normalizeSearchOption(value);\n if (name) {\n navigate(`${Route.DETAIL}${name}`);\n }\n }\n },\n [navigate]\n );\n\n // Use a ref to always access the latest doSearch without re-creating the debounced function\n const doSearchRef = useRef(doSearch);\n doSearchRef.current = doSearch;\n\n // shows the dropdown as loading during the debounce window; without it the\n // immediate reset below reads as \"no results found\" on every keystroke\n const [isDebouncing, setIsDebouncing] = useState(false);\n\n /**\n * Stable fetch function that reads the latest doSearch from a ref,\n * avoiding dependency changes that would break the debounce.\n */\n const handleFetchPackages = useCallback(\n async ({ value }: { value: string }) => {\n setIsDebouncing(false);\n if (value?.trim() !== '') {\n // Abort any previous pending request before starting a new one\n cancelAllSearchRequests();\n\n // Create a new controller for the current request\n const controller = new AbortController();\n abortControllerRef.current = controller;\n\n try {\n await doSearchRef.current?.({\n text: value,\n signal: controller.signal,\n });\n } catch (err: any) {\n if (err.name === CONSTANTS.ABORT_ERROR) {\n console.warn('Search request aborted');\n } else {\n console.error('Search error:', err);\n }\n }\n }\n },\n [cancelAllSearchRequests]\n );\n\n // Memoize the debounced function so a single instance is reused across renders,\n // ensuring the debounce timer works correctly instead of creating a new timer per render.\n const debouncedFetch = useMemo(\n () => debounce(handleFetchPackages, CONSTANTS.API_DELAY),\n [handleFetchPackages]\n );\n\n // clear the previous query's results right away so the dropdown never lists\n // stale suggestions under the new input while the debounce timer runs\n const handleSuggestionsFetch = useCallback(\n ({ value }: { value: string }) => {\n resetSearch?.();\n if (value?.trim() !== '') {\n setIsDebouncing(true);\n }\n debouncedFetch({ value });\n },\n [resetSearch, debouncedFetch]\n );\n\n useEffect(() => {\n return () => {\n debouncedFetch.cancel?.();\n cancelAllSearchRequests();\n };\n }, [debouncedFetch, cancelAllSearchRequests]);\n\n const renderOption = (props, option) => {\n const { key, ...otherProps } = props;\n const { name, version, description, isPrivate, isCached, isRemote } =\n normalizeSearchOption(option);\n return (\n <SearchItem\n key={key}\n {...otherProps}\n description={description}\n isCached={isCached}\n isPrivate={isPrivate}\n isRemote={isRemote}\n name={name}\n version={version}\n />\n );\n };\n\n const renderInput = (params) => {\n return (\n <StyledTextField\n {...params}\n InputProps={{\n ...params.InputProps,\n startAdornment: (\n <StyledInputAdornment position=\"start\">\n <SearchMui />\n </StyledInputAdornment>\n ),\n }}\n label=\"\"\n placeholder={t('search.packages')}\n variant=\"standard\"\n />\n );\n };\n\n const getOptionLabel = (option) => {\n return normalizeSearchOption(option).name;\n };\n\n return (\n <AutoComplete\n getOptionLabel={getOptionLabel}\n hasError={isError}\n onCleanSuggestions={handleOnBlur}\n onSelectItem={handleClickSearch}\n onSuggestionsFetch={handleSuggestionsFetch}\n placeholder={t('search.packages')}\n renderInput={renderInput}\n renderOption={renderOption}\n suggestions={searchResults}\n suggestionsLoading={isLoading || isDebouncing}\n />\n );\n};\n\nexport default Search;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Search.mjs","names":[],"sources":["../../../src/components/Search/Search.tsx"],"sourcesContent":["import SearchMui from '@mui/icons-material/Search';\nimport { debounce } from 'lodash-es';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useNavigate } from 'react-router';\n\nimport { useSearch } from '../../';\nimport { Route } from '../../utils';\nimport AutoComplete from './AutoComplete';\nimport SearchItem from './SearchItem';\nimport { StyledInputAdornment, StyledTextField } from './styles';\nimport { normalizeSearchOption } from './utils';\n\nconst CONSTANTS = {\n API_DELAY: 300,\n ABORT_ERROR: 'AbortError',\n};\n\nconst Search: React.FC = () => {\n const { t } = useTranslation();\n const navigate = useNavigate();\n const { searchResults, isLoading, isError, doSearch, resetSearch } = useSearch();\n\n const abortControllerRef = useRef<AbortController | null>(null);\n\n const cancelAllSearchRequests = useCallback(() => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n abortControllerRef.current = null;\n }\n }, []);\n\n const handleOnBlur = useCallback(\n (event: React.SyntheticEvent) => {\n event.stopPropagation();\n cancelAllSearchRequests();\n },\n [cancelAllSearchRequests]\n );\n\n const handleClickSearch = useCallback(\n (event: React.SyntheticEvent, value: any, reason: string): void => {\n event.stopPropagation();\n if (reason === 'selectOption') {\n const { name } = normalizeSearchOption(value);\n if (name) {\n navigate(`${Route.DETAIL}${name}`);\n }\n }\n },\n [navigate]\n );\n\n // Use a ref to always access the latest doSearch without re-creating the debounced function\n const doSearchRef = useRef(doSearch);\n doSearchRef.current = doSearch;\n\n // shows the dropdown as loading during the debounce window; without it the\n // immediate reset below reads as \"no results found\" on every keystroke\n const [isDebouncing, setIsDebouncing] = useState(false);\n\n /**\n * Stable fetch function that reads the latest doSearch from a ref,\n * avoiding dependency changes that would break the debounce.\n */\n const handleFetchPackages = useCallback(\n async ({ value }: { value: string }) => {\n setIsDebouncing(false);\n if (value?.trim() !== '') {\n // Abort any previous pending request before starting a new one\n cancelAllSearchRequests();\n\n // Create a new controller for the current request\n const controller = new AbortController();\n abortControllerRef.current = controller;\n\n try {\n await doSearchRef.current?.({\n text: value,\n signal: controller.signal,\n });\n } catch (err: any) {\n if (err.name === CONSTANTS.ABORT_ERROR) {\n console.warn('Search request aborted');\n } else {\n console.error('Search error:', err);\n }\n }\n }\n },\n [cancelAllSearchRequests]\n );\n\n // Memoize the debounced function so a single instance is reused across renders,\n // ensuring the debounce timer works correctly instead of creating a new timer per render.\n const debouncedFetch = useMemo(\n () => debounce(handleFetchPackages, CONSTANTS.API_DELAY),\n [handleFetchPackages]\n );\n\n // clear the previous query's results right away so the dropdown never lists\n // stale suggestions under the new input while the debounce timer runs\n const handleSuggestionsFetch = useCallback(\n ({ value }: { value: string }) => {\n resetSearch?.();\n if (value?.trim() !== '') {\n setIsDebouncing(true);\n }\n debouncedFetch({ value });\n },\n [resetSearch, debouncedFetch]\n );\n\n useEffect(() => {\n return () => {\n debouncedFetch.cancel?.();\n cancelAllSearchRequests();\n };\n }, [debouncedFetch, cancelAllSearchRequests]);\n\n const renderOption = (props, option) => {\n const { key, ...otherProps } = props;\n const { name, version, description, isPrivate, isCached, isRemote } =\n normalizeSearchOption(option);\n return (\n <SearchItem\n key={key}\n {...otherProps}\n description={description}\n isCached={isCached}\n isPrivate={isPrivate}\n isRemote={isRemote}\n name={name}\n version={version}\n />\n );\n };\n\n const renderInput = (params) => {\n return (\n <StyledTextField\n {...params}\n InputProps={{\n ...params.InputProps,\n startAdornment: (\n <StyledInputAdornment position=\"start\">\n <SearchMui />\n </StyledInputAdornment>\n ),\n }}\n label=\"\"\n placeholder={t('search.packages')}\n variant=\"standard\"\n />\n );\n };\n\n const getOptionLabel = (option) => {\n return normalizeSearchOption(option).name;\n };\n\n return (\n <AutoComplete\n getOptionLabel={getOptionLabel}\n hasError={isError}\n onCleanSuggestions={handleOnBlur}\n onSelectItem={handleClickSearch}\n onSuggestionsFetch={handleSuggestionsFetch}\n placeholder={t('search.packages')}\n renderInput={renderInput}\n renderOption={renderOption}\n suggestions={searchResults}\n suggestionsLoading={isLoading || isDebouncing}\n />\n );\n};\n\nexport default Search;\n"],"mappings":";;;;;;;;;;;;;;;;AAaA,IAAM,YAAY;CAChB,WAAW;CACX,aAAa;AACf;AAEA,IAAM,eAAyB;CAC7B,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,WAAW,YAAY;CAC7B,MAAM,EAAE,eAAe,WAAW,SAAS,UAAU,gBAAgB,UAAU;CAE/E,MAAM,qBAAqB,OAA+B,IAAI;CAE9D,MAAM,0BAA0B,kBAAkB;EAChD,IAAI,mBAAmB,SAAS;GAC9B,mBAAmB,QAAQ,MAAM;GACjC,mBAAmB,UAAU;EAC/B;CACF,GAAG,CAAC,CAAC;CAEL,MAAM,eAAe,aAClB,UAAgC;EAC/B,MAAM,gBAAgB;EACtB,wBAAwB;CAC1B,GACA,CAAC,uBAAuB,CAC1B;CAEA,MAAM,oBAAoB,aACvB,OAA6B,OAAY,WAAyB;EACjE,MAAM,gBAAgB;EACtB,IAAI,WAAW,gBAAgB;GAC7B,MAAM,EAAE,SAAS,sBAAsB,KAAK;GAC5C,IAAI,MACF,SAAS,
|
|
1
|
+
{"version":3,"file":"Search.mjs","names":["Route"],"sources":["../../../src/components/Search/Search.tsx"],"sourcesContent":["import SearchMui from '@mui/icons-material/Search';\nimport { debounce } from 'lodash-es';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useNavigate } from 'react-router';\n\nimport { useSearch } from '../../';\nimport { Route } from '../../utils';\nimport AutoComplete from './AutoComplete';\nimport SearchItem from './SearchItem';\nimport { StyledInputAdornment, StyledTextField } from './styles';\nimport { normalizeSearchOption } from './utils';\n\nconst CONSTANTS = {\n API_DELAY: 300,\n ABORT_ERROR: 'AbortError',\n};\n\nconst Search: React.FC = () => {\n const { t } = useTranslation();\n const navigate = useNavigate();\n const { searchResults, isLoading, isError, doSearch, resetSearch } = useSearch();\n\n const abortControllerRef = useRef<AbortController | null>(null);\n\n const cancelAllSearchRequests = useCallback(() => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n abortControllerRef.current = null;\n }\n }, []);\n\n const handleOnBlur = useCallback(\n (event: React.SyntheticEvent) => {\n event.stopPropagation();\n cancelAllSearchRequests();\n },\n [cancelAllSearchRequests]\n );\n\n const handleClickSearch = useCallback(\n (event: React.SyntheticEvent, value: any, reason: string): void => {\n event.stopPropagation();\n if (reason === 'selectOption') {\n const { name } = normalizeSearchOption(value);\n if (name) {\n navigate(`${Route.DETAIL}${name}`);\n }\n }\n },\n [navigate]\n );\n\n // Use a ref to always access the latest doSearch without re-creating the debounced function\n const doSearchRef = useRef(doSearch);\n doSearchRef.current = doSearch;\n\n // shows the dropdown as loading during the debounce window; without it the\n // immediate reset below reads as \"no results found\" on every keystroke\n const [isDebouncing, setIsDebouncing] = useState(false);\n\n /**\n * Stable fetch function that reads the latest doSearch from a ref,\n * avoiding dependency changes that would break the debounce.\n */\n const handleFetchPackages = useCallback(\n async ({ value }: { value: string }) => {\n setIsDebouncing(false);\n if (value?.trim() !== '') {\n // Abort any previous pending request before starting a new one\n cancelAllSearchRequests();\n\n // Create a new controller for the current request\n const controller = new AbortController();\n abortControllerRef.current = controller;\n\n try {\n await doSearchRef.current?.({\n text: value,\n signal: controller.signal,\n });\n } catch (err: any) {\n if (err.name === CONSTANTS.ABORT_ERROR) {\n console.warn('Search request aborted');\n } else {\n console.error('Search error:', err);\n }\n }\n }\n },\n [cancelAllSearchRequests]\n );\n\n // Memoize the debounced function so a single instance is reused across renders,\n // ensuring the debounce timer works correctly instead of creating a new timer per render.\n const debouncedFetch = useMemo(\n () => debounce(handleFetchPackages, CONSTANTS.API_DELAY),\n [handleFetchPackages]\n );\n\n // clear the previous query's results right away so the dropdown never lists\n // stale suggestions under the new input while the debounce timer runs\n const handleSuggestionsFetch = useCallback(\n ({ value }: { value: string }) => {\n resetSearch?.();\n if (value?.trim() !== '') {\n setIsDebouncing(true);\n }\n debouncedFetch({ value });\n },\n [resetSearch, debouncedFetch]\n );\n\n useEffect(() => {\n return () => {\n debouncedFetch.cancel?.();\n cancelAllSearchRequests();\n };\n }, [debouncedFetch, cancelAllSearchRequests]);\n\n const renderOption = (props, option) => {\n const { key, ...otherProps } = props;\n const { name, version, description, isPrivate, isCached, isRemote } =\n normalizeSearchOption(option);\n return (\n <SearchItem\n key={key}\n {...otherProps}\n description={description}\n isCached={isCached}\n isPrivate={isPrivate}\n isRemote={isRemote}\n name={name}\n version={version}\n />\n );\n };\n\n const renderInput = (params) => {\n return (\n <StyledTextField\n {...params}\n InputProps={{\n ...params.InputProps,\n startAdornment: (\n <StyledInputAdornment position=\"start\">\n <SearchMui />\n </StyledInputAdornment>\n ),\n }}\n label=\"\"\n placeholder={t('search.packages')}\n variant=\"standard\"\n />\n );\n };\n\n const getOptionLabel = (option) => {\n return normalizeSearchOption(option).name;\n };\n\n return (\n <AutoComplete\n getOptionLabel={getOptionLabel}\n hasError={isError}\n onCleanSuggestions={handleOnBlur}\n onSelectItem={handleClickSearch}\n onSuggestionsFetch={handleSuggestionsFetch}\n placeholder={t('search.packages')}\n renderInput={renderInput}\n renderOption={renderOption}\n suggestions={searchResults}\n suggestionsLoading={isLoading || isDebouncing}\n />\n );\n};\n\nexport default Search;\n"],"mappings":";;;;;;;;;;;;;;;;AAaA,IAAM,YAAY;CAChB,WAAW;CACX,aAAa;AACf;AAEA,IAAM,eAAyB;CAC7B,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,WAAW,YAAY;CAC7B,MAAM,EAAE,eAAe,WAAW,SAAS,UAAU,gBAAgB,UAAU;CAE/E,MAAM,qBAAqB,OAA+B,IAAI;CAE9D,MAAM,0BAA0B,kBAAkB;EAChD,IAAI,mBAAmB,SAAS;GAC9B,mBAAmB,QAAQ,MAAM;GACjC,mBAAmB,UAAU;EAC/B;CACF,GAAG,CAAC,CAAC;CAEL,MAAM,eAAe,aAClB,UAAgC;EAC/B,MAAM,gBAAgB;EACtB,wBAAwB;CAC1B,GACA,CAAC,uBAAuB,CAC1B;CAEA,MAAM,oBAAoB,aACvB,OAA6B,OAAY,WAAyB;EACjE,MAAM,gBAAgB;EACtB,IAAI,WAAW,gBAAgB;GAC7B,MAAM,EAAE,SAAS,sBAAsB,KAAK;GAC5C,IAAI,MACF,SAAS,GAAGA,QAAM,SAAS,MAAM;EAErC;CACF,GACA,CAAC,QAAQ,CACX;CAGA,MAAM,cAAc,OAAO,QAAQ;CACnC,YAAY,UAAU;CAItB,MAAM,CAAC,cAAc,mBAAmB,SAAS,KAAK;;;;;CAMtD,MAAM,sBAAsB,YAC1B,OAAO,EAAE,YAA+B;EACtC,gBAAgB,KAAK;EACrB,IAAI,OAAO,KAAK,MAAM,IAAI;GAExB,wBAAwB;GAGxB,MAAM,aAAa,IAAI,gBAAgB;GACvC,mBAAmB,UAAU;GAE7B,IAAI;IACF,MAAM,YAAY,UAAU;KAC1B,MAAM;KACN,QAAQ,WAAW;IACrB,CAAC;GACH,SAAS,KAAU;IACjB,IAAI,IAAI,SAAS,UAAU,aACzB,QAAQ,KAAK,wBAAwB;SAErC,QAAQ,MAAM,iBAAiB,GAAG;GAEtC;EACF;CACF,GACA,CAAC,uBAAuB,CAC1B;CAIA,MAAM,iBAAiB,cACf,SAAS,qBAAqB,UAAU,SAAS,GACvD,CAAC,mBAAmB,CACtB;CAIA,MAAM,yBAAyB,aAC5B,EAAE,YAA+B;EAChC,cAAc;EACd,IAAI,OAAO,KAAK,MAAM,IACpB,gBAAgB,IAAI;EAEtB,eAAe,EAAE,MAAM,CAAC;CAC1B,GACA,CAAC,aAAa,cAAc,CAC9B;CAEA,gBAAgB;EACd,aAAa;GACX,eAAe,SAAS;GACxB,wBAAwB;EAC1B;CACF,GAAG,CAAC,gBAAgB,uBAAuB,CAAC;CAE5C,MAAM,gBAAgB,OAAO,WAAW;EACtC,MAAM,EAAE,KAAK,GAAG,eAAe;EAC/B,MAAM,EAAE,MAAM,SAAS,aAAa,WAAW,UAAU,aACvD,sBAAsB,MAAM;EAC9B,OACE,oBAAC,YAAD;GAEE,GAAI;GACS;GACH;GACC;GACD;GACJ;GACG;EACV,GARM,GAQN;CAEL;CAEA,MAAM,eAAe,WAAW;EAC9B,OACE,oBAAC,iBAAD;GACE,GAAI;GACJ,YAAY;IACV,GAAG,OAAO;IACV,gBACE,oBAAC,sBAAD;KAAsB,UAAS;KAC7B,UAAA,oBAAC,WAAD,CAAY,CAAA;IACQ,CAAA;GAE1B;GACA,OAAM;GACN,aAAa,EAAE,iBAAiB;GAChC,SAAQ;EACT,CAAA;CAEL;CAEA,MAAM,kBAAkB,WAAW;EACjC,OAAO,sBAAsB,MAAM,CAAC,CAAC;CACvC;CAEA,OACE,oBAAC,cAAD;EACkB;EAChB,UAAU;EACV,oBAAoB;EACpB,cAAc;EACd,oBAAoB;EACpB,aAAa,EAAE,iBAAiB;EACnB;EACC;EACd,aAAa;EACb,oBAAoB,aAAa;CAClC,CAAA;AAEL"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchItem.js","names":[],"sources":["../../../src/components/Search/SearchItem.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport Cached from '@mui/icons-material/Cached';\nimport HttpsIcon from '@mui/icons-material/Https';\nimport SyncAlt from '@mui/icons-material/SyncAlt';\nimport type { Theme } from '@mui/material';\nimport Chip from '@mui/material/Chip';\nimport Stack from '@mui/material/Stack';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { useConfig } from '../../';\nimport { cleanDescription } from './utils';\n\ntype SearchItemProps = {\n name: string;\n version?: string;\n description?: string;\n isPrivate?: boolean;\n isCached?: boolean;\n isRemote?: boolean;\n};\n\nconst Wrapper = styled.div({\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n});\n\nexport const Description = styled('div')<{ theme?: Theme }>(({ theme }) => ({\n display: 'none',\n color: theme.palette.greyLight2,\n lineHeight: '1.5rem',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n alignItems: 'center',\n overflow: 'hidden',\n paddingLeft: theme.spacing(),\n fontSize: theme.fontSize.ssm,\n [`@media (min-width: ${theme.breakPoints.medium}px)`]: {\n display: 'block',\n width: '300px',\n },\n [`@media (min-width: ${theme.breakPoints.large}px)`]: {\n display: 'block',\n width: '500px',\n },\n [`@media (min-width: 1440px)`]: {\n display: 'block',\n width: '600px',\n },\n}));\n\nconst NameGroup = styled.span({\n display: 'flex',\n flex: '1',\n});\n\nconst Name = styled('span')<{ theme?: Theme }>(({ theme }) => ({\n fontWeight: '700',\n fontSize: theme.fontSize.sm,\n}));\n\nconst Version = styled('span')<{ theme?: Theme }>(({ theme }) => ({\n fontSize: theme.fontSize.ssm,\n}));\n\nconst SearchItem: React.FC<SearchItemProps> = ({\n name,\n description,\n isPrivate = false,\n isRemote = false,\n isCached = false,\n version,\n ...props\n}) => {\n const { t } = useTranslation();\n const { configOptions } = useConfig();\n const handleDelete = () => {\n // no action assigned by default\n };\n return (\n <li {...props} style={{ flexDirection: 'column' }}>\n <Wrapper>\n <NameGroup>\n <Name>{name}</Name>\n {description && <Description>{cleanDescription(description)}</Description>}\n </NameGroup>\n {version && <Version>{version}</Version>}\n </Wrapper>\n {configOptions?.showUplinks && (\n <Wrapper>\n <Stack direction=\"row\" spacing={1}>\n {isPrivate && (\n <Chip\n color=\"primary\"\n deleteIcon={<HttpsIcon />}\n label={t('search.isPrivate')}\n onDelete={handleDelete}\n size=\"small\"\n />\n )}\n {isRemote && !isPrivate && (\n <Chip\n deleteIcon={<SyncAlt />}\n label={t('search.isRemote')}\n onDelete={handleDelete}\n size=\"small\"\n variant=\"outlined\"\n />\n )}\n {isCached && (\n <Chip\n deleteIcon={<Cached />}\n label={t('search.isCached')}\n onDelete={handleDelete}\n size=\"small\"\n variant=\"outlined\"\n />\n )}\n </Stack>\n </Wrapper>\n )}\n </li>\n );\n};\n\nexport default SearchItem;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAsBA,IAAM,
|
|
1
|
+
{"version":3,"file":"SearchItem.js","names":["styled","useTranslation","useConfig","cleanDescription","Stack","Chip","HttpsIcon","SyncAlt","Cached"],"sources":["../../../src/components/Search/SearchItem.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport Cached from '@mui/icons-material/Cached';\nimport HttpsIcon from '@mui/icons-material/Https';\nimport SyncAlt from '@mui/icons-material/SyncAlt';\nimport type { Theme } from '@mui/material';\nimport Chip from '@mui/material/Chip';\nimport Stack from '@mui/material/Stack';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { useConfig } from '../../';\nimport { cleanDescription } from './utils';\n\ntype SearchItemProps = {\n name: string;\n version?: string;\n description?: string;\n isPrivate?: boolean;\n isCached?: boolean;\n isRemote?: boolean;\n};\n\nconst Wrapper = styled.div({\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n});\n\nexport const Description = styled('div')<{ theme?: Theme }>(({ theme }) => ({\n display: 'none',\n color: theme.palette.greyLight2,\n lineHeight: '1.5rem',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n alignItems: 'center',\n overflow: 'hidden',\n paddingLeft: theme.spacing(),\n fontSize: theme.fontSize.ssm,\n [`@media (min-width: ${theme.breakPoints.medium}px)`]: {\n display: 'block',\n width: '300px',\n },\n [`@media (min-width: ${theme.breakPoints.large}px)`]: {\n display: 'block',\n width: '500px',\n },\n [`@media (min-width: 1440px)`]: {\n display: 'block',\n width: '600px',\n },\n}));\n\nconst NameGroup = styled.span({\n display: 'flex',\n flex: '1',\n});\n\nconst Name = styled('span')<{ theme?: Theme }>(({ theme }) => ({\n fontWeight: '700',\n fontSize: theme.fontSize.sm,\n}));\n\nconst Version = styled('span')<{ theme?: Theme }>(({ theme }) => ({\n fontSize: theme.fontSize.ssm,\n}));\n\nconst SearchItem: React.FC<SearchItemProps> = ({\n name,\n description,\n isPrivate = false,\n isRemote = false,\n isCached = false,\n version,\n ...props\n}) => {\n const { t } = useTranslation();\n const { configOptions } = useConfig();\n const handleDelete = () => {\n // no action assigned by default\n };\n return (\n <li {...props} style={{ flexDirection: 'column' }}>\n <Wrapper>\n <NameGroup>\n <Name>{name}</Name>\n {description && <Description>{cleanDescription(description)}</Description>}\n </NameGroup>\n {version && <Version>{version}</Version>}\n </Wrapper>\n {configOptions?.showUplinks && (\n <Wrapper>\n <Stack direction=\"row\" spacing={1}>\n {isPrivate && (\n <Chip\n color=\"primary\"\n deleteIcon={<HttpsIcon />}\n label={t('search.isPrivate')}\n onDelete={handleDelete}\n size=\"small\"\n />\n )}\n {isRemote && !isPrivate && (\n <Chip\n deleteIcon={<SyncAlt />}\n label={t('search.isRemote')}\n onDelete={handleDelete}\n size=\"small\"\n variant=\"outlined\"\n />\n )}\n {isCached && (\n <Chip\n deleteIcon={<Cached />}\n label={t('search.isCached')}\n onDelete={handleDelete}\n size=\"small\"\n variant=\"outlined\"\n />\n )}\n </Stack>\n </Wrapper>\n )}\n </li>\n );\n};\n\nexport default SearchItem;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAsBA,IAAM,UAAUA,gBAAAA,QAAO,IAAI;CACzB,SAAS;CACT,YAAY;CACZ,OAAO;AACT,CAAC;AAED,IAAa,eAAA,GAAcA,gBAAAA,QAAAA,CAAO,KAAK,CAAC,EAAqB,EAAE,aAAa;CAC1E,SAAS;CACT,OAAO,MAAM,QAAQ;CACrB,YAAY;CACZ,YAAY;CACZ,cAAc;CACd,YAAY;CACZ,UAAU;CACV,aAAa,MAAM,QAAQ;CAC3B,UAAU,MAAM,SAAS;EACxB,sBAAsB,MAAM,YAAY,OAAO,OAAO;EACrD,SAAS;EACT,OAAO;CACT;EACC,sBAAsB,MAAM,YAAY,MAAM,OAAO;EACpD,SAAS;EACT,OAAO;CACT;EACC,+BAA+B;EAC9B,SAAS;EACT,OAAO;CACT;AACF,EAAE;AAEF,IAAM,YAAYA,gBAAAA,QAAO,KAAK;CAC5B,SAAS;CACT,MAAM;AACR,CAAC;AAED,IAAM,QAAA,GAAOA,gBAAAA,QAAAA,CAAO,MAAM,CAAC,EAAqB,EAAE,aAAa;CAC7D,YAAY;CACZ,UAAU,MAAM,SAAS;AAC3B,EAAE;AAEF,IAAM,WAAA,GAAUA,gBAAAA,QAAAA,CAAO,MAAM,CAAC,EAAqB,EAAE,aAAa,EAChE,UAAU,MAAM,SAAS,IAC3B,EAAE;AAEF,IAAM,cAAyC,EAC7C,MACA,aACA,YAAY,OACZ,WAAW,OACX,WAAW,OACX,SACA,GAAG,YACC;CACJ,MAAM,EAAE,OAAA,GAAMC,cAAAA,eAAAA,CAAe;CAC7B,MAAM,EAAE,kBAAkBC,iCAAAA,UAAU;CACpC,MAAM,qBAAqB,CAE3B;CACA,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,MAAD;EAAI,GAAI;EAAO,OAAO,EAAE,eAAe,SAAS;EAAhD,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,WAAD,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAO,KAAW,CAAA,GACjB,eAAe,iBAAA,GAAA,kBAAA,IAAA,CAAC,aAAD,EAAA,UAAcC,cAAAA,iBAAiB,WAAW,EAAe,CAAA,CAChE,EAAA,CAAA,GACV,WAAW,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD,EAAA,UAAU,QAAiB,CAAA,CAChC,EAAA,CAAA,GACR,eAAe,eACd,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,KAAA,CAACC,oBAAAA,SAAD;GAAO,WAAU;GAAM,SAAS;GAAhC,UAAA;IACG,aACC,iBAAA,GAAA,kBAAA,IAAA,CAACC,mBAAAA,SAAD;KACE,OAAM;KACN,YAAY,iBAAA,GAAA,kBAAA,IAAA,CAACC,0BAAAA,SAAD,CAAY,CAAA;KACxB,OAAO,EAAE,kBAAkB;KAC3B,UAAU;KACV,MAAK;IACN,CAAA;IAEF,YAAY,CAAC,aACZ,iBAAA,GAAA,kBAAA,IAAA,CAACD,mBAAAA,SAAD;KACE,YAAY,iBAAA,GAAA,kBAAA,IAAA,CAACE,4BAAAA,SAAD,CAAU,CAAA;KACtB,OAAO,EAAE,iBAAiB;KAC1B,UAAU;KACV,MAAK;KACL,SAAQ;IACT,CAAA;IAEF,YACC,iBAAA,GAAA,kBAAA,IAAA,CAACF,mBAAAA,SAAD;KACE,YAAY,iBAAA,GAAA,kBAAA,IAAA,CAACG,2BAAAA,SAAD,CAAS,CAAA;KACrB,OAAO,EAAE,iBAAiB;KAC1B,UAAU;KACV,MAAK;KACL,SAAQ;IACT,CAAA;GAEE;EACA,CAAA,EAAA,CAAA,CAET;;AAER"}
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { Search as default };
|
|
1
|
+
export { default } from "./Search.mjs";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","names":[],"sources":["../../../src/components/Search/styles.ts"],"sourcesContent":["import styled from '@emotion/styled';\nimport { TextField } from '@mui/material';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport { common } from '@mui/material/colors';\n\nimport type { Theme } from '../../';\n\nexport interface InputFieldProps {\n color: string;\n}\n\nexport const StyledTextField = styled(TextField)<{ theme?: Theme }>((props) => ({\n '& .MuiInputBase-root': {\n ':before': {\n content: \"''\",\n border: 'none',\n },\n ':after': {\n borderColor: common.white,\n },\n ':hover:before': {\n content: 'none',\n },\n ':hover:after': {\n content: 'none',\n transform: 'scaleX(1)',\n },\n [`@media screen and (min-width: ${props.theme.breakPoints.medium}px)`]: {\n ':hover:after': {\n content: \"''\",\n },\n },\n },\n '& .MuiInputBase-input': {\n [`@media screen and (min-width: ${props.theme.breakPoints.medium}px)`]: {\n color: common.white,\n },\n },\n}));\n\nexport const StyledInputAdornment = styled(InputAdornment)<{ theme?: Theme }>(() => ({\n color: common.white,\n}));\n"],"mappings":";;;;;;;;AAWA,IAAa,mBAAA,
|
|
1
|
+
{"version":3,"file":"styles.js","names":["styled","TextField","common","InputAdornment"],"sources":["../../../src/components/Search/styles.ts"],"sourcesContent":["import styled from '@emotion/styled';\nimport { TextField } from '@mui/material';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport { common } from '@mui/material/colors';\n\nimport type { Theme } from '../../';\n\nexport interface InputFieldProps {\n color: string;\n}\n\nexport const StyledTextField = styled(TextField)<{ theme?: Theme }>((props) => ({\n '& .MuiInputBase-root': {\n ':before': {\n content: \"''\",\n border: 'none',\n },\n ':after': {\n borderColor: common.white,\n },\n ':hover:before': {\n content: 'none',\n },\n ':hover:after': {\n content: 'none',\n transform: 'scaleX(1)',\n },\n [`@media screen and (min-width: ${props.theme.breakPoints.medium}px)`]: {\n ':hover:after': {\n content: \"''\",\n },\n },\n },\n '& .MuiInputBase-input': {\n [`@media screen and (min-width: ${props.theme.breakPoints.medium}px)`]: {\n color: common.white,\n },\n },\n}));\n\nexport const StyledInputAdornment = styled(InputAdornment)<{ theme?: Theme }>(() => ({\n color: common.white,\n}));\n"],"mappings":";;;;;;;;AAWA,IAAa,mBAAA,GAAkBA,gBAAAA,QAAAA,CAAOC,cAAAA,SAAS,CAAC,EAAqB,WAAW;CAC9E,wBAAwB;EACtB,WAAW;GACT,SAAS;GACT,QAAQ;EACV;EACA,UAAU,EACR,aAAaC,qBAAAA,OAAO,MACtB;EACA,iBAAiB,EACf,SAAS,OACX;EACA,gBAAgB;GACd,SAAS;GACT,WAAW;EACb;GACC,iCAAiC,MAAM,MAAM,YAAY,OAAO,OAAO,EACtE,gBAAgB,EACd,SAAS,KACX,EACF;CACF;CACA,yBAAyB,GACtB,iCAAiC,MAAM,MAAM,YAAY,OAAO,OAAO,EACtE,OAAOA,qBAAAA,OAAO,MAChB,EACF;AACF,EAAE;AAEF,IAAa,wBAAA,GAAuBF,gBAAAA,QAAAA,CAAOG,6BAAAA,OAAc,CAAC,QAA2B,EACnF,OAAOD,qBAAAA,OAAO,MAChB,EAAE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsMenu.js","names":[],"sources":["../../../src/components/SettingsMenu/SettingsMenu.tsx"],"sourcesContent":["import Check from '@mui/icons-material/Check';\nimport Settings from '@mui/icons-material/Settings';\nimport IconButton from '@mui/material/IconButton';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { useConfig } from '../../providers';\nimport { useSettings } from '../../providers/PersistenceSettingProvider';\n\n// Workaround: MUI v7 MenuProps type resolution breaks inherited PopoverProps (anchorOrigin, transformOrigin, id, etc.)\nconst TypedMenu = Menu as React.FC<any>;\n\ninterface Props {\n packageName: string;\n}\n\nconst SettingsMenu: React.FC<Props> = ({ packageName }) => {\n const { t } = useTranslation();\n const { localSettings, updateSettings } = useSettings();\n const { configOptions } = useConfig();\n const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);\n const open = Boolean(anchorEl);\n const handleOpenMenu = (event: React.MouseEvent<HTMLButtonElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleLatestSelect = () => {\n updateSettings({\n ...localSettings,\n [packageName]: {\n global: localSettings[packageName]?.global,\n latest: !localSettings[packageName]?.latest,\n },\n });\n setAnchorEl(null);\n };\n\n const handleGlobalSelect = () => {\n updateSettings({\n ...localSettings,\n [packageName]: {\n global: !localSettings[packageName]?.global,\n latest: localSettings[packageName]?.latest,\n },\n });\n setAnchorEl(null);\n };\n\n const handleGlobalYarnModern = () => {\n const statusYarnModern = !localSettings?.yarnModern;\n updateSettings({ ...localSettings, yarnModern: statusYarnModern });\n setAnchorEl(null);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const statusLatest = localSettings[packageName]?.latest;\n const statusGlobal = localSettings[packageName]?.global;\n return (\n <>\n <IconButton\n aria-controls={open ? 'basic-menu' : undefined}\n aria-expanded={open ? 'true' : undefined}\n aria-haspopup=\"true\"\n id=\"basic-button\"\n onClick={handleOpenMenu}\n size=\"small\"\n >\n <Settings fontSize=\"small\" />\n </IconButton>\n <TypedMenu\n anchorEl={anchorEl}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right',\n }}\n id=\"basic-menu\"\n onClose={handleClose}\n open={open}\n slotProps={{\n list: {\n 'aria-labelledby': 'basic-button',\n },\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right',\n }}\n >\n <MenuItem onClick={handleLatestSelect}>\n {' '}\n {statusLatest === true ? (\n <ListItemIcon>\n <Check />\n </ListItemIcon>\n ) : null}\n {t('sidebar.installation.latest')}\n </MenuItem>\n <MenuItem onClick={handleGlobalSelect}>\n {' '}\n {statusGlobal === true ? (\n <ListItemIcon>\n <Check />\n </ListItemIcon>\n ) : null}\n {t('sidebar.installation.global')}\n </MenuItem>\n {configOptions?.pkgManagers?.includes('yarn') && (\n <MenuItem onClick={handleGlobalYarnModern}>\n {' '}\n {localSettings?.yarnModern ? (\n <ListItemIcon>\n <Check />\n </ListItemIcon>\n ) : null}\n {t('sidebar.installation.yarnModern')}\n </MenuItem>\n )}\n </TypedMenu>\n </>\n );\n};\n\nexport default SettingsMenu;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAaA,IAAM,
|
|
1
|
+
{"version":3,"file":"SettingsMenu.js","names":["Menu","useTranslation","useSettings","useConfig","React","_Fragment","IconButton","Settings","MenuItem","ListItemIcon","Check"],"sources":["../../../src/components/SettingsMenu/SettingsMenu.tsx"],"sourcesContent":["import Check from '@mui/icons-material/Check';\nimport Settings from '@mui/icons-material/Settings';\nimport IconButton from '@mui/material/IconButton';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { useConfig } from '../../providers';\nimport { useSettings } from '../../providers/PersistenceSettingProvider';\n\n// Workaround: MUI v7 MenuProps type resolution breaks inherited PopoverProps (anchorOrigin, transformOrigin, id, etc.)\nconst TypedMenu = Menu as React.FC<any>;\n\ninterface Props {\n packageName: string;\n}\n\nconst SettingsMenu: React.FC<Props> = ({ packageName }) => {\n const { t } = useTranslation();\n const { localSettings, updateSettings } = useSettings();\n const { configOptions } = useConfig();\n const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);\n const open = Boolean(anchorEl);\n const handleOpenMenu = (event: React.MouseEvent<HTMLButtonElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleLatestSelect = () => {\n updateSettings({\n ...localSettings,\n [packageName]: {\n global: localSettings[packageName]?.global,\n latest: !localSettings[packageName]?.latest,\n },\n });\n setAnchorEl(null);\n };\n\n const handleGlobalSelect = () => {\n updateSettings({\n ...localSettings,\n [packageName]: {\n global: !localSettings[packageName]?.global,\n latest: localSettings[packageName]?.latest,\n },\n });\n setAnchorEl(null);\n };\n\n const handleGlobalYarnModern = () => {\n const statusYarnModern = !localSettings?.yarnModern;\n updateSettings({ ...localSettings, yarnModern: statusYarnModern });\n setAnchorEl(null);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const statusLatest = localSettings[packageName]?.latest;\n const statusGlobal = localSettings[packageName]?.global;\n return (\n <>\n <IconButton\n aria-controls={open ? 'basic-menu' : undefined}\n aria-expanded={open ? 'true' : undefined}\n aria-haspopup=\"true\"\n id=\"basic-button\"\n onClick={handleOpenMenu}\n size=\"small\"\n >\n <Settings fontSize=\"small\" />\n </IconButton>\n <TypedMenu\n anchorEl={anchorEl}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right',\n }}\n id=\"basic-menu\"\n onClose={handleClose}\n open={open}\n slotProps={{\n list: {\n 'aria-labelledby': 'basic-button',\n },\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right',\n }}\n >\n <MenuItem onClick={handleLatestSelect}>\n {' '}\n {statusLatest === true ? (\n <ListItemIcon>\n <Check />\n </ListItemIcon>\n ) : null}\n {t('sidebar.installation.latest')}\n </MenuItem>\n <MenuItem onClick={handleGlobalSelect}>\n {' '}\n {statusGlobal === true ? (\n <ListItemIcon>\n <Check />\n </ListItemIcon>\n ) : null}\n {t('sidebar.installation.global')}\n </MenuItem>\n {configOptions?.pkgManagers?.includes('yarn') && (\n <MenuItem onClick={handleGlobalYarnModern}>\n {' '}\n {localSettings?.yarnModern ? (\n <ListItemIcon>\n <Check />\n </ListItemIcon>\n ) : null}\n {t('sidebar.installation.yarnModern')}\n </MenuItem>\n )}\n </TypedMenu>\n </>\n );\n};\n\nexport default SettingsMenu;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsMenu.mjs","names":[],"sources":["../../../src/components/SettingsMenu/SettingsMenu.tsx"],"sourcesContent":["import Check from '@mui/icons-material/Check';\nimport Settings from '@mui/icons-material/Settings';\nimport IconButton from '@mui/material/IconButton';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { useConfig } from '../../providers';\nimport { useSettings } from '../../providers/PersistenceSettingProvider';\n\n// Workaround: MUI v7 MenuProps type resolution breaks inherited PopoverProps (anchorOrigin, transformOrigin, id, etc.)\nconst TypedMenu = Menu as React.FC<any>;\n\ninterface Props {\n packageName: string;\n}\n\nconst SettingsMenu: React.FC<Props> = ({ packageName }) => {\n const { t } = useTranslation();\n const { localSettings, updateSettings } = useSettings();\n const { configOptions } = useConfig();\n const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);\n const open = Boolean(anchorEl);\n const handleOpenMenu = (event: React.MouseEvent<HTMLButtonElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleLatestSelect = () => {\n updateSettings({\n ...localSettings,\n [packageName]: {\n global: localSettings[packageName]?.global,\n latest: !localSettings[packageName]?.latest,\n },\n });\n setAnchorEl(null);\n };\n\n const handleGlobalSelect = () => {\n updateSettings({\n ...localSettings,\n [packageName]: {\n global: !localSettings[packageName]?.global,\n latest: localSettings[packageName]?.latest,\n },\n });\n setAnchorEl(null);\n };\n\n const handleGlobalYarnModern = () => {\n const statusYarnModern = !localSettings?.yarnModern;\n updateSettings({ ...localSettings, yarnModern: statusYarnModern });\n setAnchorEl(null);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const statusLatest = localSettings[packageName]?.latest;\n const statusGlobal = localSettings[packageName]?.global;\n return (\n <>\n <IconButton\n aria-controls={open ? 'basic-menu' : undefined}\n aria-expanded={open ? 'true' : undefined}\n aria-haspopup=\"true\"\n id=\"basic-button\"\n onClick={handleOpenMenu}\n size=\"small\"\n >\n <Settings fontSize=\"small\" />\n </IconButton>\n <TypedMenu\n anchorEl={anchorEl}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right',\n }}\n id=\"basic-menu\"\n onClose={handleClose}\n open={open}\n slotProps={{\n list: {\n 'aria-labelledby': 'basic-button',\n },\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right',\n }}\n >\n <MenuItem onClick={handleLatestSelect}>\n {' '}\n {statusLatest === true ? (\n <ListItemIcon>\n <Check />\n </ListItemIcon>\n ) : null}\n {t('sidebar.installation.latest')}\n </MenuItem>\n <MenuItem onClick={handleGlobalSelect}>\n {' '}\n {statusGlobal === true ? (\n <ListItemIcon>\n <Check />\n </ListItemIcon>\n ) : null}\n {t('sidebar.installation.global')}\n </MenuItem>\n {configOptions?.pkgManagers?.includes('yarn') && (\n <MenuItem onClick={handleGlobalYarnModern}>\n {' '}\n {localSettings?.yarnModern ? (\n <ListItemIcon>\n <Check />\n </ListItemIcon>\n ) : null}\n {t('sidebar.installation.yarnModern')}\n </MenuItem>\n )}\n </TypedMenu>\n </>\n );\n};\n\nexport default SettingsMenu;\n"],"mappings":";;;;;;;;;;;;;;AAaA,IAAM,YAAY;AAMlB,IAAM,gBAAiC,EAAE,kBAAkB;CACzD,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,EAAE,eAAe,mBAAmB,YAAY;CACtD,MAAM,EAAE,kBAAkB,UAAU;CACpC,MAAM,CAAC,UAAU,eAAe,MAAM,SAA6B,IAAI;CACvE,MAAM,OAAO,QAAQ,QAAQ;CAC7B,MAAM,kBAAkB,UAA+C;EACrE,YAAY,MAAM,aAAa;CACjC;CAEA,MAAM,2BAA2B;EAC/B,eAAe;GACb,GAAG;IACF,cAAc;IACb,QAAQ,cAAc,YAAY,EAAE;IACpC,QAAQ,CAAC,cAAc,YAAY,EAAE;GACvC;EACF,CAAC;EACD,YAAY,IAAI;CAClB;CAEA,MAAM,2BAA2B;EAC/B,eAAe;GACb,GAAG;IACF,cAAc;IACb,QAAQ,CAAC,cAAc,YAAY,EAAE;IACrC,QAAQ,cAAc,YAAY,EAAE;GACtC;EACF,CAAC;EACD,YAAY,IAAI;CAClB;CAEA,MAAM,+BAA+B;EACnC,MAAM,mBAAmB,CAAC,eAAe;EACzC,eAAe;GAAE,GAAG;GAAe,YAAY;EAAiB,CAAC;EACjE,YAAY,IAAI;CAClB;CAEA,MAAM,oBAAoB;EACxB,YAAY,IAAI;CAClB;CAEA,MAAM,eAAe,cAAc,YAAY,EAAE;CACjD,MAAM,eAAe,cAAc,YAAY,EAAE;CACjD,OACE,
|
|
1
|
+
{"version":3,"file":"SettingsMenu.mjs","names":["_Fragment"],"sources":["../../../src/components/SettingsMenu/SettingsMenu.tsx"],"sourcesContent":["import Check from '@mui/icons-material/Check';\nimport Settings from '@mui/icons-material/Settings';\nimport IconButton from '@mui/material/IconButton';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { useConfig } from '../../providers';\nimport { useSettings } from '../../providers/PersistenceSettingProvider';\n\n// Workaround: MUI v7 MenuProps type resolution breaks inherited PopoverProps (anchorOrigin, transformOrigin, id, etc.)\nconst TypedMenu = Menu as React.FC<any>;\n\ninterface Props {\n packageName: string;\n}\n\nconst SettingsMenu: React.FC<Props> = ({ packageName }) => {\n const { t } = useTranslation();\n const { localSettings, updateSettings } = useSettings();\n const { configOptions } = useConfig();\n const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);\n const open = Boolean(anchorEl);\n const handleOpenMenu = (event: React.MouseEvent<HTMLButtonElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleLatestSelect = () => {\n updateSettings({\n ...localSettings,\n [packageName]: {\n global: localSettings[packageName]?.global,\n latest: !localSettings[packageName]?.latest,\n },\n });\n setAnchorEl(null);\n };\n\n const handleGlobalSelect = () => {\n updateSettings({\n ...localSettings,\n [packageName]: {\n global: !localSettings[packageName]?.global,\n latest: localSettings[packageName]?.latest,\n },\n });\n setAnchorEl(null);\n };\n\n const handleGlobalYarnModern = () => {\n const statusYarnModern = !localSettings?.yarnModern;\n updateSettings({ ...localSettings, yarnModern: statusYarnModern });\n setAnchorEl(null);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const statusLatest = localSettings[packageName]?.latest;\n const statusGlobal = localSettings[packageName]?.global;\n return (\n <>\n <IconButton\n aria-controls={open ? 'basic-menu' : undefined}\n aria-expanded={open ? 'true' : undefined}\n aria-haspopup=\"true\"\n id=\"basic-button\"\n onClick={handleOpenMenu}\n size=\"small\"\n >\n <Settings fontSize=\"small\" />\n </IconButton>\n <TypedMenu\n anchorEl={anchorEl}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right',\n }}\n id=\"basic-menu\"\n onClose={handleClose}\n open={open}\n slotProps={{\n list: {\n 'aria-labelledby': 'basic-button',\n },\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right',\n }}\n >\n <MenuItem onClick={handleLatestSelect}>\n {' '}\n {statusLatest === true ? (\n <ListItemIcon>\n <Check />\n </ListItemIcon>\n ) : null}\n {t('sidebar.installation.latest')}\n </MenuItem>\n <MenuItem onClick={handleGlobalSelect}>\n {' '}\n {statusGlobal === true ? (\n <ListItemIcon>\n <Check />\n </ListItemIcon>\n ) : null}\n {t('sidebar.installation.global')}\n </MenuItem>\n {configOptions?.pkgManagers?.includes('yarn') && (\n <MenuItem onClick={handleGlobalYarnModern}>\n {' '}\n {localSettings?.yarnModern ? (\n <ListItemIcon>\n <Check />\n </ListItemIcon>\n ) : null}\n {t('sidebar.installation.yarnModern')}\n </MenuItem>\n )}\n </TypedMenu>\n </>\n );\n};\n\nexport default SettingsMenu;\n"],"mappings":";;;;;;;;;;;;;;AAaA,IAAM,YAAY;AAMlB,IAAM,gBAAiC,EAAE,kBAAkB;CACzD,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,EAAE,eAAe,mBAAmB,YAAY;CACtD,MAAM,EAAE,kBAAkB,UAAU;CACpC,MAAM,CAAC,UAAU,eAAe,MAAM,SAA6B,IAAI;CACvE,MAAM,OAAO,QAAQ,QAAQ;CAC7B,MAAM,kBAAkB,UAA+C;EACrE,YAAY,MAAM,aAAa;CACjC;CAEA,MAAM,2BAA2B;EAC/B,eAAe;GACb,GAAG;IACF,cAAc;IACb,QAAQ,cAAc,YAAY,EAAE;IACpC,QAAQ,CAAC,cAAc,YAAY,EAAE;GACvC;EACF,CAAC;EACD,YAAY,IAAI;CAClB;CAEA,MAAM,2BAA2B;EAC/B,eAAe;GACb,GAAG;IACF,cAAc;IACb,QAAQ,CAAC,cAAc,YAAY,EAAE;IACrC,QAAQ,cAAc,YAAY,EAAE;GACtC;EACF,CAAC;EACD,YAAY,IAAI;CAClB;CAEA,MAAM,+BAA+B;EACnC,MAAM,mBAAmB,CAAC,eAAe;EACzC,eAAe;GAAE,GAAG;GAAe,YAAY;EAAiB,CAAC;EACjE,YAAY,IAAI;CAClB;CAEA,MAAM,oBAAoB;EACxB,YAAY,IAAI;CAClB;CAEA,MAAM,eAAe,cAAc,YAAY,EAAE;CACjD,MAAM,eAAe,cAAc,YAAY,EAAE;CACjD,OACE,qBAAAA,YAAA,EAAA,UAAA,CACE,oBAAC,YAAD;EACE,iBAAe,OAAO,eAAe,KAAA;EACrC,iBAAe,OAAO,SAAS,KAAA;EAC/B,iBAAc;EACd,IAAG;EACH,SAAS;EACT,MAAK;EAEL,UAAA,oBAAC,UAAD,EAAU,UAAS,QAAS,CAAA;CAClB,CAAA,GACZ,qBAAC,WAAD;EACY;EACV,cAAc;GACZ,UAAU;GACV,YAAY;EACd;EACA,IAAG;EACH,SAAS;EACH;EACN,WAAW,EACT,MAAM,EACJ,mBAAmB,eACrB,EACF;EACA,iBAAiB;GACf,UAAU;GACV,YAAY;EACd;EAjBF,UAAA;GAmBE,qBAAC,UAAD;IAAU,SAAS;IAAnB,UAAA;KACG;KACA,iBAAiB,OAChB,oBAAC,cAAD,EAAA,UACE,oBAAC,OAAD,CAAQ,CAAA,EACI,CAAA,IACZ;KACH,EAAE,6BAA6B;IACxB;;GACV,qBAAC,UAAD;IAAU,SAAS;IAAnB,UAAA;KACG;KACA,iBAAiB,OAChB,oBAAC,cAAD,EAAA,UACE,oBAAC,OAAD,CAAQ,CAAA,EACI,CAAA,IACZ;KACH,EAAE,6BAA6B;IACxB;;GACT,eAAe,aAAa,SAAS,MAAM,KAC1C,qBAAC,UAAD;IAAU,SAAS;IAAnB,UAAA;KACG;KACA,eAAe,aACd,oBAAC,cAAD,EAAA,UACE,oBAAC,OAAD,CAAQ,CAAA,EACI,CAAA,IACZ;KACH,EAAE,iCAAiC;IAC5B;;EAEH;CACX,CAAA,CAAA,EAAA,CAAA;AAEN"}
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { SettingsMenu };
|
|
1
|
+
export { default as SettingsMenu } from "./SettingsMenu.mjs";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SideBarTitle.js","names":[],"sources":["../../../src/components/SideBarTitle/SideBarTitle.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport Box from '@mui/material/Box';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport type { Theme } from '../../Theme';\nimport Heading from '../Heading';\nimport { CommonJS, ES6Modules, TypeScript } from '../Icons';\nimport { formatDate, formatDateDistance } from './utils';\n\nexport type ModuleType = 'commonjs' | 'module';\n\ninterface Props {\n packageName: string;\n description?: string;\n version: string;\n isLatest: boolean;\n hasTypes?: boolean;\n moduleTypes: ModuleType[];\n time: string;\n}\n\nconst Icon = styled.div<{ theme?: Theme }>(({ theme }) => ({\n marginLeft: theme.spacing(1),\n}));\n\nconst ModuleJS: React.FC<{ module: ModuleType | void }> = ({ module }) => {\n if (module === 'commonjs') {\n return (\n <Icon>\n <CommonJS />\n </Icon>\n );\n } else if (module === 'module') {\n return (\n <Icon>\n <ES6Modules />\n </Icon>\n );\n } else {\n return null;\n }\n};\n\nconst DetailSidebarTitle: React.FC<Props> = ({\n description,\n packageName,\n version,\n isLatest,\n hasTypes,\n moduleTypes,\n time,\n}) => {\n const { t } = useTranslation();\n return (\n <Box className={'detail-info'} display=\"flex\" flexDirection=\"column\" marginBottom=\"8px\">\n <StyledHeading>\n <TitleWrapper>\n <>\n {packageName}\n {hasTypes && (\n <Icon>\n <TypeScript />\n </Icon>\n )}\n {moduleTypes.map((module, index) => (\n <ModuleJS key={index} module={module} />\n ))}\n </>\n </TitleWrapper>\n </StyledHeading>\n {description && <div>{description}</div>}\n <StyledBoxVersion title={time ? formatDate(time) : undefined}>\n {isLatest\n ? t('sidebar.detail.latest-version', { version })\n : t('sidebar.detail.version', { version })}\n {time\n ? ' - ' + t('sidebar.detail.published') + ' ' + formatDateDistance(time)\n : t('versions.not-available')}\n </StyledBoxVersion>\n </Box>\n );\n};\n\nexport default DetailSidebarTitle;\n\nconst TitleWrapper = styled.div({\n display: 'flex',\n alignItems: 'center',\n});\n\nconst StyledHeading = styled(Heading)({\n fontSize: '1rem',\n fontWeight: 700,\n});\n\nconst StyledBoxVersion = styled(Box)<{ theme?: Theme }>(({ theme }) => ({\n color: theme.palette.text.secondary,\n fontSize: theme.fontSize.sm,\n}));\n"],"mappings":";;;;;;;;;;;;;;;;;AAsBA,IAAM,
|
|
1
|
+
{"version":3,"file":"SideBarTitle.js","names":["styled","CommonJS","ES6Modules","useTranslation","Box","_Fragment","TypeScript","formatDate","formatDateDistance","Heading"],"sources":["../../../src/components/SideBarTitle/SideBarTitle.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport Box from '@mui/material/Box';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport type { Theme } from '../../Theme';\nimport Heading from '../Heading';\nimport { CommonJS, ES6Modules, TypeScript } from '../Icons';\nimport { formatDate, formatDateDistance } from './utils';\n\nexport type ModuleType = 'commonjs' | 'module';\n\ninterface Props {\n packageName: string;\n description?: string;\n version: string;\n isLatest: boolean;\n hasTypes?: boolean;\n moduleTypes: ModuleType[];\n time: string;\n}\n\nconst Icon = styled.div<{ theme?: Theme }>(({ theme }) => ({\n marginLeft: theme.spacing(1),\n}));\n\nconst ModuleJS: React.FC<{ module: ModuleType | void }> = ({ module }) => {\n if (module === 'commonjs') {\n return (\n <Icon>\n <CommonJS />\n </Icon>\n );\n } else if (module === 'module') {\n return (\n <Icon>\n <ES6Modules />\n </Icon>\n );\n } else {\n return null;\n }\n};\n\nconst DetailSidebarTitle: React.FC<Props> = ({\n description,\n packageName,\n version,\n isLatest,\n hasTypes,\n moduleTypes,\n time,\n}) => {\n const { t } = useTranslation();\n return (\n <Box className={'detail-info'} display=\"flex\" flexDirection=\"column\" marginBottom=\"8px\">\n <StyledHeading>\n <TitleWrapper>\n <>\n {packageName}\n {hasTypes && (\n <Icon>\n <TypeScript />\n </Icon>\n )}\n {moduleTypes.map((module, index) => (\n <ModuleJS key={index} module={module} />\n ))}\n </>\n </TitleWrapper>\n </StyledHeading>\n {description && <div>{description}</div>}\n <StyledBoxVersion title={time ? formatDate(time) : undefined}>\n {isLatest\n ? t('sidebar.detail.latest-version', { version })\n : t('sidebar.detail.version', { version })}\n {time\n ? ' - ' + t('sidebar.detail.published') + ' ' + formatDateDistance(time)\n : t('versions.not-available')}\n </StyledBoxVersion>\n </Box>\n );\n};\n\nexport default DetailSidebarTitle;\n\nconst TitleWrapper = styled.div({\n display: 'flex',\n alignItems: 'center',\n});\n\nconst StyledHeading = styled(Heading)({\n fontSize: '1rem',\n fontWeight: 700,\n});\n\nconst StyledBoxVersion = styled(Box)<{ theme?: Theme }>(({ theme }) => ({\n color: theme.palette.text.secondary,\n fontSize: theme.fontSize.sm,\n}));\n"],"mappings":";;;;;;;;;;;;;;;;;AAsBA,IAAM,OAAOA,gBAAAA,QAAO,KAAwB,EAAE,aAAa,EACzD,YAAY,MAAM,QAAQ,CAAC,EAC7B,EAAE;AAEF,IAAM,YAAqD,EAAE,aAAa;CACxE,IAAI,WAAW,YACb,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,iBAAAA,UAAD,CAAW,CAAA,EACP,CAAA;MAEH,IAAI,WAAW,UACpB,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,kBAAAA,YAAD,CAAa,CAAA,EACT,CAAA;MAGR,OAAO;AAEX;AAEA,IAAM,sBAAuC,EAC3C,aACA,aACA,SACA,UACA,UACA,aACA,WACI;CACJ,MAAM,EAAE,OAAA,GAAMC,cAAAA,eAAAA,CAAe;CAC7B,OACE,iBAAA,GAAA,kBAAA,KAAA,CAACC,kBAAAA,SAAD;EAAK,WAAW;EAAe,SAAQ;EAAO,eAAc;EAAS,cAAa;EAAlF,UAAA;GACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,KAAA,CAAAC,kBAAAA,UAAA,EAAA,UAAA;IACG;IACA,YACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,mBAAAA,YAAD,CAAa,CAAA,EACT,CAAA;IAEP,YAAY,KAAK,QAAQ,UACxB,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD,EAA8B,OAAS,GAAxB,KAAwB,CACxC;GACD,EAAA,CAAA,EACU,CAAA,EACD,CAAA;GACd,eAAe,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,EAAA,UAAM,YAAiB,CAAA;GACvC,iBAAA,GAAA,kBAAA,KAAA,CAAC,kBAAD;IAAkB,OAAO,OAAOC,cAAAA,WAAW,IAAI,IAAI,KAAA;IAAnD,UAAA,CACG,WACG,EAAE,iCAAiC,EAAE,QAAQ,CAAC,IAC9C,EAAE,0BAA0B,EAAE,QAAQ,CAAC,GAC1C,OACG,QAAQ,EAAE,0BAA0B,IAAI,MAAMC,cAAAA,mBAAmB,IAAI,IACrE,EAAE,wBAAwB,CACd;;EACf;;AAET;AAIA,IAAM,eAAeR,gBAAAA,QAAO,IAAI;CAC9B,SAAS;CACT,YAAY;AACd,CAAC;AAED,IAAM,iBAAA,GAAgBA,gBAAAA,QAAAA,CAAOS,gBAAAA,OAAO,CAAC,CAAC;CACpC,UAAU;CACV,YAAY;AACd,CAAC;AAED,IAAM,oBAAA,GAAmBT,gBAAAA,QAAAA,CAAOI,kBAAAA,OAAG,CAAC,EAAqB,EAAE,aAAa;CACtE,OAAO,MAAM,QAAQ,KAAK;CAC1B,UAAU,MAAM,SAAS;AAC3B,EAAE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SideBarTitle.mjs","names":[],"sources":["../../../src/components/SideBarTitle/SideBarTitle.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport Box from '@mui/material/Box';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport type { Theme } from '../../Theme';\nimport Heading from '../Heading';\nimport { CommonJS, ES6Modules, TypeScript } from '../Icons';\nimport { formatDate, formatDateDistance } from './utils';\n\nexport type ModuleType = 'commonjs' | 'module';\n\ninterface Props {\n packageName: string;\n description?: string;\n version: string;\n isLatest: boolean;\n hasTypes?: boolean;\n moduleTypes: ModuleType[];\n time: string;\n}\n\nconst Icon = styled.div<{ theme?: Theme }>(({ theme }) => ({\n marginLeft: theme.spacing(1),\n}));\n\nconst ModuleJS: React.FC<{ module: ModuleType | void }> = ({ module }) => {\n if (module === 'commonjs') {\n return (\n <Icon>\n <CommonJS />\n </Icon>\n );\n } else if (module === 'module') {\n return (\n <Icon>\n <ES6Modules />\n </Icon>\n );\n } else {\n return null;\n }\n};\n\nconst DetailSidebarTitle: React.FC<Props> = ({\n description,\n packageName,\n version,\n isLatest,\n hasTypes,\n moduleTypes,\n time,\n}) => {\n const { t } = useTranslation();\n return (\n <Box className={'detail-info'} display=\"flex\" flexDirection=\"column\" marginBottom=\"8px\">\n <StyledHeading>\n <TitleWrapper>\n <>\n {packageName}\n {hasTypes && (\n <Icon>\n <TypeScript />\n </Icon>\n )}\n {moduleTypes.map((module, index) => (\n <ModuleJS key={index} module={module} />\n ))}\n </>\n </TitleWrapper>\n </StyledHeading>\n {description && <div>{description}</div>}\n <StyledBoxVersion title={time ? formatDate(time) : undefined}>\n {isLatest\n ? t('sidebar.detail.latest-version', { version })\n : t('sidebar.detail.version', { version })}\n {time\n ? ' - ' + t('sidebar.detail.published') + ' ' + formatDateDistance(time)\n : t('versions.not-available')}\n </StyledBoxVersion>\n </Box>\n );\n};\n\nexport default DetailSidebarTitle;\n\nconst TitleWrapper = styled.div({\n display: 'flex',\n alignItems: 'center',\n});\n\nconst StyledHeading = styled(Heading)({\n fontSize: '1rem',\n fontWeight: 700,\n});\n\nconst StyledBoxVersion = styled(Box)<{ theme?: Theme }>(({ theme }) => ({\n color: theme.palette.text.secondary,\n fontSize: theme.fontSize.sm,\n}));\n"],"mappings":";;;;;;;;;;;;;AAsBA,IAAM,OAAO,OAAO,KAAwB,EAAE,aAAa,EACzD,YAAY,MAAM,QAAQ,CAAC,EAC7B,EAAE;AAEF,IAAM,YAAqD,EAAE,aAAa;CACxE,IAAI,WAAW,YACb,OACE,oBAAC,MAAD,EAAA,UACE,oBAAC,UAAD,CAAW,CAAA,EACP,CAAA;MAEH,IAAI,WAAW,UACpB,OACE,oBAAC,MAAD,EAAA,UACE,oBAAC,YAAD,CAAa,CAAA,EACT,CAAA;MAGR,OAAO;AAEX;AAEA,IAAM,sBAAuC,EAC3C,aACA,aACA,SACA,UACA,UACA,aACA,WACI;CACJ,MAAM,EAAE,MAAM,eAAe;CAC7B,OACE,qBAAC,KAAD;EAAK,WAAW;EAAe,SAAQ;EAAO,eAAc;EAAS,cAAa;EAAlF,UAAA;GACE,oBAAC,eAAD,EAAA,UACE,oBAAC,cAAD,EAAA,UACE,
|
|
1
|
+
{"version":3,"file":"SideBarTitle.mjs","names":["_Fragment"],"sources":["../../../src/components/SideBarTitle/SideBarTitle.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport Box from '@mui/material/Box';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport type { Theme } from '../../Theme';\nimport Heading from '../Heading';\nimport { CommonJS, ES6Modules, TypeScript } from '../Icons';\nimport { formatDate, formatDateDistance } from './utils';\n\nexport type ModuleType = 'commonjs' | 'module';\n\ninterface Props {\n packageName: string;\n description?: string;\n version: string;\n isLatest: boolean;\n hasTypes?: boolean;\n moduleTypes: ModuleType[];\n time: string;\n}\n\nconst Icon = styled.div<{ theme?: Theme }>(({ theme }) => ({\n marginLeft: theme.spacing(1),\n}));\n\nconst ModuleJS: React.FC<{ module: ModuleType | void }> = ({ module }) => {\n if (module === 'commonjs') {\n return (\n <Icon>\n <CommonJS />\n </Icon>\n );\n } else if (module === 'module') {\n return (\n <Icon>\n <ES6Modules />\n </Icon>\n );\n } else {\n return null;\n }\n};\n\nconst DetailSidebarTitle: React.FC<Props> = ({\n description,\n packageName,\n version,\n isLatest,\n hasTypes,\n moduleTypes,\n time,\n}) => {\n const { t } = useTranslation();\n return (\n <Box className={'detail-info'} display=\"flex\" flexDirection=\"column\" marginBottom=\"8px\">\n <StyledHeading>\n <TitleWrapper>\n <>\n {packageName}\n {hasTypes && (\n <Icon>\n <TypeScript />\n </Icon>\n )}\n {moduleTypes.map((module, index) => (\n <ModuleJS key={index} module={module} />\n ))}\n </>\n </TitleWrapper>\n </StyledHeading>\n {description && <div>{description}</div>}\n <StyledBoxVersion title={time ? formatDate(time) : undefined}>\n {isLatest\n ? t('sidebar.detail.latest-version', { version })\n : t('sidebar.detail.version', { version })}\n {time\n ? ' - ' + t('sidebar.detail.published') + ' ' + formatDateDistance(time)\n : t('versions.not-available')}\n </StyledBoxVersion>\n </Box>\n );\n};\n\nexport default DetailSidebarTitle;\n\nconst TitleWrapper = styled.div({\n display: 'flex',\n alignItems: 'center',\n});\n\nconst StyledHeading = styled(Heading)({\n fontSize: '1rem',\n fontWeight: 700,\n});\n\nconst StyledBoxVersion = styled(Box)<{ theme?: Theme }>(({ theme }) => ({\n color: theme.palette.text.secondary,\n fontSize: theme.fontSize.sm,\n}));\n"],"mappings":";;;;;;;;;;;;;AAsBA,IAAM,OAAO,OAAO,KAAwB,EAAE,aAAa,EACzD,YAAY,MAAM,QAAQ,CAAC,EAC7B,EAAE;AAEF,IAAM,YAAqD,EAAE,aAAa;CACxE,IAAI,WAAW,YACb,OACE,oBAAC,MAAD,EAAA,UACE,oBAAC,UAAD,CAAW,CAAA,EACP,CAAA;MAEH,IAAI,WAAW,UACpB,OACE,oBAAC,MAAD,EAAA,UACE,oBAAC,YAAD,CAAa,CAAA,EACT,CAAA;MAGR,OAAO;AAEX;AAEA,IAAM,sBAAuC,EAC3C,aACA,aACA,SACA,UACA,UACA,aACA,WACI;CACJ,MAAM,EAAE,MAAM,eAAe;CAC7B,OACE,qBAAC,KAAD;EAAK,WAAW;EAAe,SAAQ;EAAO,eAAc;EAAS,cAAa;EAAlF,UAAA;GACE,oBAAC,eAAD,EAAA,UACE,oBAAC,cAAD,EAAA,UACE,qBAAAA,YAAA,EAAA,UAAA;IACG;IACA,YACC,oBAAC,MAAD,EAAA,UACE,oBAAC,YAAD,CAAa,CAAA,EACT,CAAA;IAEP,YAAY,KAAK,QAAQ,UACxB,oBAAC,UAAD,EAA8B,OAAS,GAAxB,KAAwB,CACxC;GACD,EAAA,CAAA,EACU,CAAA,EACD,CAAA;GACd,eAAe,oBAAC,OAAD,EAAA,UAAM,YAAiB,CAAA;GACvC,qBAAC,kBAAD;IAAkB,OAAO,OAAO,WAAW,IAAI,IAAI,KAAA;IAAnD,UAAA,CACG,WACG,EAAE,iCAAiC,EAAE,QAAQ,CAAC,IAC9C,EAAE,0BAA0B,EAAE,QAAQ,CAAC,GAC1C,OACG,QAAQ,EAAE,0BAA0B,IAAI,MAAM,mBAAmB,IAAI,IACrE,EAAE,wBAAwB,CACd;;EACf;;AAET;AAIA,IAAM,eAAe,OAAO,IAAI;CAC9B,SAAS;CACT,YAAY;AACd,CAAC;AAED,IAAM,gBAAgB,OAAO,OAAO,CAAC,CAAC;CACpC,UAAU;CACV,YAAY;AACd,CAAC;AAED,IAAM,mBAAmB,OAAO,GAAG,CAAC,EAAqB,EAAE,aAAa;CACtE,OAAO,MAAM,QAAQ,KAAK;CAC1B,UAAU,MAAM,SAAS;AAC3B,EAAE"}
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { DetailSidebarTitle as default };
|
|
1
|
+
export { default } from "./SideBarTitle.mjs";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UpLinks.js","names":[],"sources":["../../../src/components/UpLinks/UpLinks.tsx"],"sourcesContent":["import Box from '@mui/material/Box';\nimport Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { utils } from '../../utils';\nimport NoItems from '../NoItems';\nimport UpLinkLink from './UplinkLink';\nimport { ListItemText, Spacer, StyledText } from './styles';\n\nconst UpLinks: React.FC<{ packageMeta: any }> = ({ packageMeta }) => {\n const { t } = useTranslation();\n\n if (!packageMeta?._uplinks || !packageMeta.latest) {\n return null;\n }\n\n const { _uplinks: uplinks, latest } = packageMeta;\n\n if (Object.keys(uplinks).length === 0) {\n return (\n <Card sx={{ mb: 2 }}>\n <CardContent>\n <NoItems data-testid=\"no-uplinks\" text={t('uplinks.no-items', { name: latest.name })} />\n </CardContent>\n </Card>\n );\n }\n\n return (\n <Card sx={{ mb: 2 }}>\n <CardContent>\n <Box data-testid=\"uplinks\" sx={{ m: 2 }}>\n <StyledText variant=\"subtitle1\">{t('uplinks.title')}</StyledText>\n <List dense={true}>\n {Object.keys(uplinks)\n .reverse()\n .map((name) => (\n <ListItem\n className=\"version-item\"\n data-testid={`uplink-${name}`}\n key={name}\n sx={{ pr: 0 }}\n >\n <ListItemText>\n <UpLinkLink packageName={latest.name} uplinkName={name} />\n </ListItemText>\n <Spacer />\n <ListItemText\n primary={utils.formatDateDistance(uplinks[name].fetched)}\n slotProps={{ primary: { title: utils.formatDate(uplinks[name].fetched) } }}\n />\n </ListItem>\n ))}\n </List>\n </Box>\n </CardContent>\n </Card>\n );\n};\n\nexport default UpLinks;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAaA,IAAM,WAA2C,EAAE,kBAAkB;CACnE,MAAM,EAAE,OAAA,
|
|
1
|
+
{"version":3,"file":"UpLinks.js","names":["useTranslation","Card","CardContent","NoItems","Box","StyledText","List","ListItem","ListItemText","UpLinkLink","Spacer"],"sources":["../../../src/components/UpLinks/UpLinks.tsx"],"sourcesContent":["import Box from '@mui/material/Box';\nimport Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { utils } from '../../utils';\nimport NoItems from '../NoItems';\nimport UpLinkLink from './UplinkLink';\nimport { ListItemText, Spacer, StyledText } from './styles';\n\nconst UpLinks: React.FC<{ packageMeta: any }> = ({ packageMeta }) => {\n const { t } = useTranslation();\n\n if (!packageMeta?._uplinks || !packageMeta.latest) {\n return null;\n }\n\n const { _uplinks: uplinks, latest } = packageMeta;\n\n if (Object.keys(uplinks).length === 0) {\n return (\n <Card sx={{ mb: 2 }}>\n <CardContent>\n <NoItems data-testid=\"no-uplinks\" text={t('uplinks.no-items', { name: latest.name })} />\n </CardContent>\n </Card>\n );\n }\n\n return (\n <Card sx={{ mb: 2 }}>\n <CardContent>\n <Box data-testid=\"uplinks\" sx={{ m: 2 }}>\n <StyledText variant=\"subtitle1\">{t('uplinks.title')}</StyledText>\n <List dense={true}>\n {Object.keys(uplinks)\n .reverse()\n .map((name) => (\n <ListItem\n className=\"version-item\"\n data-testid={`uplink-${name}`}\n key={name}\n sx={{ pr: 0 }}\n >\n <ListItemText>\n <UpLinkLink packageName={latest.name} uplinkName={name} />\n </ListItemText>\n <Spacer />\n <ListItemText\n primary={utils.formatDateDistance(uplinks[name].fetched)}\n slotProps={{ primary: { title: utils.formatDate(uplinks[name].fetched) } }}\n />\n </ListItem>\n ))}\n </List>\n </Box>\n </CardContent>\n </Card>\n );\n};\n\nexport default UpLinks;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAaA,IAAM,WAA2C,EAAE,kBAAkB;CACnE,MAAM,EAAE,OAAA,GAAMA,cAAAA,eAAAA,CAAe;CAE7B,IAAI,CAAC,aAAa,YAAY,CAAC,YAAY,QACzC,OAAO;CAGT,MAAM,EAAE,UAAU,SAAS,WAAW;CAEtC,IAAI,OAAO,KAAK,OAAO,CAAC,CAAC,WAAW,GAClC,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,mBAAAA,SAAD;EAAM,IAAI,EAAE,IAAI,EAAE;EAChB,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,0BAAAA,SAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,gBAAAA,SAAD;GAAS,eAAY;GAAa,MAAM,EAAE,oBAAoB,EAAE,MAAM,OAAO,KAAK,CAAC;EAAI,CAAA,EAC5E,CAAA;CACT,CAAA;CAIV,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACF,mBAAAA,SAAD;EAAM,IAAI,EAAE,IAAI,EAAE;EAChB,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,0BAAAA,SAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,KAAA,CAACE,kBAAAA,SAAD;GAAK,eAAY;GAAU,IAAI,EAAE,GAAG,EAAE;GAAtC,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,eAAAA,YAAD;IAAY,SAAQ;IAAa,UAAA,EAAE,eAAe;GAAc,CAAA,GAChE,iBAAA,GAAA,kBAAA,IAAA,CAACC,mBAAAA,SAAD;IAAM,OAAO;IACV,UAAA,OAAO,KAAK,OAAO,CAAC,CAClB,QAAQ,CAAC,CACT,KAAK,SACJ,iBAAA,GAAA,kBAAA,KAAA,CAACC,uBAAAA,SAAD;KACE,WAAU;KACV,eAAa,UAAU;KAEvB,IAAI,EAAE,IAAI,EAAE;KAJd,UAAA;MAME,iBAAA,GAAA,kBAAA,IAAA,CAACC,eAAAA,cAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,mBAAAA,SAAD;OAAY,aAAa,OAAO;OAAM,YAAY;MAAO,CAAA,EAC7C,CAAA;MACd,iBAAA,GAAA,kBAAA,IAAA,CAACC,eAAAA,QAAD,CAAS,CAAA;MACT,iBAAA,GAAA,kBAAA,IAAA,CAACF,eAAAA,cAAD;OACE,SAAA,cAAA,mBAAkC,QAAQ,KAAK,CAAC,OAAO;OACvD,WAAW,EAAE,SAAS,EAAE,OAAA,cAAA,WAAwB,QAAQ,KAAK,CAAC,OAAO,EAAE,EAAE;MAC1E,CAAA;KACO;IAXH,GAAA,IAWG,CACX;GACC,CAAA,CACH;EACM,CAAA,EAAA,CAAA;CACT,CAAA;AAEV"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UpLinks.mjs","names":[],"sources":["../../../src/components/UpLinks/UpLinks.tsx"],"sourcesContent":["import Box from '@mui/material/Box';\nimport Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { utils } from '../../utils';\nimport NoItems from '../NoItems';\nimport UpLinkLink from './UplinkLink';\nimport { ListItemText, Spacer, StyledText } from './styles';\n\nconst UpLinks: React.FC<{ packageMeta: any }> = ({ packageMeta }) => {\n const { t } = useTranslation();\n\n if (!packageMeta?._uplinks || !packageMeta.latest) {\n return null;\n }\n\n const { _uplinks: uplinks, latest } = packageMeta;\n\n if (Object.keys(uplinks).length === 0) {\n return (\n <Card sx={{ mb: 2 }}>\n <CardContent>\n <NoItems data-testid=\"no-uplinks\" text={t('uplinks.no-items', { name: latest.name })} />\n </CardContent>\n </Card>\n );\n }\n\n return (\n <Card sx={{ mb: 2 }}>\n <CardContent>\n <Box data-testid=\"uplinks\" sx={{ m: 2 }}>\n <StyledText variant=\"subtitle1\">{t('uplinks.title')}</StyledText>\n <List dense={true}>\n {Object.keys(uplinks)\n .reverse()\n .map((name) => (\n <ListItem\n className=\"version-item\"\n data-testid={`uplink-${name}`}\n key={name}\n sx={{ pr: 0 }}\n >\n <ListItemText>\n <UpLinkLink packageName={latest.name} uplinkName={name} />\n </ListItemText>\n <Spacer />\n <ListItemText\n primary={utils.formatDateDistance(uplinks[name].fetched)}\n slotProps={{ primary: { title: utils.formatDate(uplinks[name].fetched) } }}\n />\n </ListItem>\n ))}\n </List>\n </Box>\n </CardContent>\n </Card>\n );\n};\n\nexport default UpLinks;\n"],"mappings":";;;;;;;;;;;;;;;AAaA,IAAM,WAA2C,EAAE,kBAAkB;CACnE,MAAM,EAAE,MAAM,eAAe;CAE7B,IAAI,CAAC,aAAa,YAAY,CAAC,YAAY,QACzC,OAAO;CAGT,MAAM,EAAE,UAAU,SAAS,WAAW;CAEtC,IAAI,OAAO,KAAK,OAAO,CAAC,CAAC,WAAW,GAClC,OACE,oBAAC,MAAD;EAAM,IAAI,EAAE,IAAI,EAAE;EAChB,UAAA,oBAAC,aAAD,EAAA,UACE,oBAAC,SAAD;GAAS,eAAY;GAAa,MAAM,EAAE,oBAAoB,EAAE,MAAM,OAAO,KAAK,CAAC;EAAI,CAAA,EAC5E,CAAA;CACT,CAAA;CAIV,OACE,oBAAC,MAAD;EAAM,IAAI,EAAE,IAAI,EAAE;EAChB,UAAA,oBAAC,aAAD,EAAA,UACE,qBAAC,KAAD;GAAK,eAAY;GAAU,IAAI,EAAE,GAAG,EAAE;GAAtC,UAAA,CACE,oBAAC,YAAD;IAAY,SAAQ;IAAa,UAAA,EAAE,eAAe;GAAc,CAAA,GAChE,oBAAC,MAAD;IAAM,OAAO;IACV,UAAA,OAAO,KAAK,OAAO,CAAC,CAClB,QAAQ,CAAC,CACT,KAAK,SACJ,qBAAC,UAAD;KACE,WAAU;KACV,eAAa,UAAU;KAEvB,IAAI,EAAE,IAAI,EAAE;KAJd,UAAA;MAME,oBAAC,cAAD,EAAA,UACE,oBAAC,YAAD;OAAY,aAAa,OAAO;OAAM,YAAY;MAAO,CAAA,EAC7C,CAAA;MACd,oBAAC,QAAD,CAAS,CAAA;MACT,oBAAC,cAAD;OACE,
|
|
1
|
+
{"version":3,"file":"UpLinks.mjs","names":["utils.formatDateDistance","utils.formatDate"],"sources":["../../../src/components/UpLinks/UpLinks.tsx"],"sourcesContent":["import Box from '@mui/material/Box';\nimport Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { utils } from '../../utils';\nimport NoItems from '../NoItems';\nimport UpLinkLink from './UplinkLink';\nimport { ListItemText, Spacer, StyledText } from './styles';\n\nconst UpLinks: React.FC<{ packageMeta: any }> = ({ packageMeta }) => {\n const { t } = useTranslation();\n\n if (!packageMeta?._uplinks || !packageMeta.latest) {\n return null;\n }\n\n const { _uplinks: uplinks, latest } = packageMeta;\n\n if (Object.keys(uplinks).length === 0) {\n return (\n <Card sx={{ mb: 2 }}>\n <CardContent>\n <NoItems data-testid=\"no-uplinks\" text={t('uplinks.no-items', { name: latest.name })} />\n </CardContent>\n </Card>\n );\n }\n\n return (\n <Card sx={{ mb: 2 }}>\n <CardContent>\n <Box data-testid=\"uplinks\" sx={{ m: 2 }}>\n <StyledText variant=\"subtitle1\">{t('uplinks.title')}</StyledText>\n <List dense={true}>\n {Object.keys(uplinks)\n .reverse()\n .map((name) => (\n <ListItem\n className=\"version-item\"\n data-testid={`uplink-${name}`}\n key={name}\n sx={{ pr: 0 }}\n >\n <ListItemText>\n <UpLinkLink packageName={latest.name} uplinkName={name} />\n </ListItemText>\n <Spacer />\n <ListItemText\n primary={utils.formatDateDistance(uplinks[name].fetched)}\n slotProps={{ primary: { title: utils.formatDate(uplinks[name].fetched) } }}\n />\n </ListItem>\n ))}\n </List>\n </Box>\n </CardContent>\n </Card>\n );\n};\n\nexport default UpLinks;\n"],"mappings":";;;;;;;;;;;;;;;AAaA,IAAM,WAA2C,EAAE,kBAAkB;CACnE,MAAM,EAAE,MAAM,eAAe;CAE7B,IAAI,CAAC,aAAa,YAAY,CAAC,YAAY,QACzC,OAAO;CAGT,MAAM,EAAE,UAAU,SAAS,WAAW;CAEtC,IAAI,OAAO,KAAK,OAAO,CAAC,CAAC,WAAW,GAClC,OACE,oBAAC,MAAD;EAAM,IAAI,EAAE,IAAI,EAAE;EAChB,UAAA,oBAAC,aAAD,EAAA,UACE,oBAAC,SAAD;GAAS,eAAY;GAAa,MAAM,EAAE,oBAAoB,EAAE,MAAM,OAAO,KAAK,CAAC;EAAI,CAAA,EAC5E,CAAA;CACT,CAAA;CAIV,OACE,oBAAC,MAAD;EAAM,IAAI,EAAE,IAAI,EAAE;EAChB,UAAA,oBAAC,aAAD,EAAA,UACE,qBAAC,KAAD;GAAK,eAAY;GAAU,IAAI,EAAE,GAAG,EAAE;GAAtC,UAAA,CACE,oBAAC,YAAD;IAAY,SAAQ;IAAa,UAAA,EAAE,eAAe;GAAc,CAAA,GAChE,oBAAC,MAAD;IAAM,OAAO;IACV,UAAA,OAAO,KAAK,OAAO,CAAC,CAClB,QAAQ,CAAC,CACT,KAAK,SACJ,qBAAC,UAAD;KACE,WAAU;KACV,eAAa,UAAU;KAEvB,IAAI,EAAE,IAAI,EAAE;KAJd,UAAA;MAME,oBAAC,cAAD,EAAA,UACE,oBAAC,YAAD;OAAY,aAAa,OAAO;OAAM,YAAY;MAAO,CAAA,EAC7C,CAAA;MACd,oBAAC,QAAD,CAAS,CAAA;MACT,oBAAC,cAAD;OACE,SAASA,mBAAyB,QAAQ,KAAK,CAAC,OAAO;OACvD,WAAW,EAAE,SAAS,EAAE,OAAOC,WAAiB,QAAQ,KAAK,CAAC,OAAO,EAAE,EAAE;MAC1E,CAAA;KACO;IAXH,GAAA,IAWG,CACX;GACC,CAAA,CACH;EACM,CAAA,EAAA,CAAA;CACT,CAAA;AAEV"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UplinkLink.js","names":[],"sources":["../../../src/components/UpLinks/UplinkLink.tsx"],"sourcesContent":["import React from 'react';\n\nimport { utils } from '../../utils';\nimport LinkExternal from '../LinkExternal';\n\nconst UpLinkLink: React.FC<{ packageName: string; uplinkName: string }> = ({\n packageName,\n uplinkName,\n}) => {\n const link = utils.getUplink(uplinkName, packageName);\n return link ? (\n <LinkExternal to={link} variant=\"outline\">\n {uplinkName}\n </LinkExternal>\n ) : (\n <>{uplinkName}</>\n );\n};\n\nexport default UpLinkLink;\n"],"mappings":";;;;;;;;;AAKA,IAAM,cAAqE,EACzE,aACA,iBACI;CACJ,MAAM,OAAA,cAAA,UAAuB,YAAY,WAAW;CACpD,OAAO,OACL,iBAAA,GAAA,kBAAA,IAAA,
|
|
1
|
+
{"version":3,"file":"UplinkLink.js","names":["LinkExternal","_Fragment"],"sources":["../../../src/components/UpLinks/UplinkLink.tsx"],"sourcesContent":["import React from 'react';\n\nimport { utils } from '../../utils';\nimport LinkExternal from '../LinkExternal';\n\nconst UpLinkLink: React.FC<{ packageName: string; uplinkName: string }> = ({\n packageName,\n uplinkName,\n}) => {\n const link = utils.getUplink(uplinkName, packageName);\n return link ? (\n <LinkExternal to={link} variant=\"outline\">\n {uplinkName}\n </LinkExternal>\n ) : (\n <>{uplinkName}</>\n );\n};\n\nexport default UpLinkLink;\n"],"mappings":";;;;;;;;;AAKA,IAAM,cAAqE,EACzE,aACA,iBACI;CACJ,MAAM,OAAA,cAAA,UAAuB,YAAY,WAAW;CACpD,OAAO,OACL,iBAAA,GAAA,kBAAA,IAAA,CAACA,qBAAAA,SAAD;EAAc,IAAI;EAAM,SAAQ;EAC7B,UAAA;CACW,CAAA,IAEd,iBAAA,GAAA,kBAAA,IAAA,CAAAC,kBAAAA,UAAA,EAAA,UAAG,WAAa,CAAA;AAEpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UplinkLink.mjs","names":[],"sources":["../../../src/components/UpLinks/UplinkLink.tsx"],"sourcesContent":["import React from 'react';\n\nimport { utils } from '../../utils';\nimport LinkExternal from '../LinkExternal';\n\nconst UpLinkLink: React.FC<{ packageName: string; uplinkName: string }> = ({\n packageName,\n uplinkName,\n}) => {\n const link = utils.getUplink(uplinkName, packageName);\n return link ? (\n <LinkExternal to={link} variant=\"outline\">\n {uplinkName}\n </LinkExternal>\n ) : (\n <>{uplinkName}</>\n );\n};\n\nexport default UpLinkLink;\n"],"mappings":";;;;;;;AAKA,IAAM,cAAqE,EACzE,aACA,iBACI;CACJ,MAAM,
|
|
1
|
+
{"version":3,"file":"UplinkLink.mjs","names":["utils.getUplink","_Fragment"],"sources":["../../../src/components/UpLinks/UplinkLink.tsx"],"sourcesContent":["import React from 'react';\n\nimport { utils } from '../../utils';\nimport LinkExternal from '../LinkExternal';\n\nconst UpLinkLink: React.FC<{ packageName: string; uplinkName: string }> = ({\n packageName,\n uplinkName,\n}) => {\n const link = utils.getUplink(uplinkName, packageName);\n return link ? (\n <LinkExternal to={link} variant=\"outline\">\n {uplinkName}\n </LinkExternal>\n ) : (\n <>{uplinkName}</>\n );\n};\n\nexport default UpLinkLink;\n"],"mappings":";;;;;;;AAKA,IAAM,cAAqE,EACzE,aACA,iBACI;CACJ,MAAM,OAAOA,UAAgB,YAAY,WAAW;CACpD,OAAO,OACL,oBAAC,cAAD;EAAc,IAAI;EAAM,SAAQ;EAC7B,UAAA;CACW,CAAA,IAEd,oBAAAC,YAAA,EAAA,UAAG,WAAa,CAAA;AAEpB"}
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { UpLinks as default };
|
|
1
|
+
export { default } from "./UpLinks.mjs";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","names":[],"sources":["../../../src/components/UpLinks/styles.ts"],"sourcesContent":["import styled from '@emotion/styled';\nimport { default as MuiListItemText } from '@mui/material/ListItemText';\nimport Typography from '@mui/material/Typography';\nimport { common } from '@mui/material/colors';\n\nimport type { Theme } from '../../Theme';\n\nexport const StyledText = styled(Typography)<{ theme?: Theme }>((props) => ({\n fontWeight: props.theme.fontWeight.bold,\n}));\n\nexport const Spacer = styled('div')<{ theme?: Theme }>(({ theme }) => ({\n flex: '1 1 auto',\n borderBottom: `1px dotted ${\n theme.palette.mode == 'light' ? 'rgba(0, 0, 0, 0.2)' : 'rgba(255, 255, 255, 0.2)'\n } `,\n whiteSpace: 'nowrap',\n height: '0.5em',\n margin: '0 16px',\n}));\n\nexport const ListItemText = styled(MuiListItemText)<{ theme?: Theme }>(({ theme }) => ({\n flex: 'none',\n color: theme.palette.mode == 'light' ? theme.palette.black : common.white,\n opacity: 0.6,\n}));\n"],"mappings":";;;;;;;;;AAOA,IAAa,cAAA,
|
|
1
|
+
{"version":3,"file":"styles.js","names":["styled","Typography","MuiListItemText","common"],"sources":["../../../src/components/UpLinks/styles.ts"],"sourcesContent":["import styled from '@emotion/styled';\nimport { default as MuiListItemText } from '@mui/material/ListItemText';\nimport Typography from '@mui/material/Typography';\nimport { common } from '@mui/material/colors';\n\nimport type { Theme } from '../../Theme';\n\nexport const StyledText = styled(Typography)<{ theme?: Theme }>((props) => ({\n fontWeight: props.theme.fontWeight.bold,\n}));\n\nexport const Spacer = styled('div')<{ theme?: Theme }>(({ theme }) => ({\n flex: '1 1 auto',\n borderBottom: `1px dotted ${\n theme.palette.mode == 'light' ? 'rgba(0, 0, 0, 0.2)' : 'rgba(255, 255, 255, 0.2)'\n } `,\n whiteSpace: 'nowrap',\n height: '0.5em',\n margin: '0 16px',\n}));\n\nexport const ListItemText = styled(MuiListItemText)<{ theme?: Theme }>(({ theme }) => ({\n flex: 'none',\n color: theme.palette.mode == 'light' ? theme.palette.black : common.white,\n opacity: 0.6,\n}));\n"],"mappings":";;;;;;;;;AAOA,IAAa,cAAA,GAAaA,gBAAAA,QAAAA,CAAOC,yBAAAA,OAAU,CAAC,EAAqB,WAAW,EAC1E,YAAY,MAAM,MAAM,WAAW,KACrC,EAAE;AAEF,IAAa,UAAA,GAASD,gBAAAA,QAAAA,CAAO,KAAK,CAAC,EAAqB,EAAE,aAAa;CACrE,MAAM;CACN,cAAc,cACZ,MAAM,QAAQ,QAAQ,UAAU,uBAAuB,2BACxD;CACD,YAAY;CACZ,QAAQ;CACR,QAAQ;AACV,EAAE;AAEF,IAAa,gBAAA,GAAeA,gBAAAA,QAAAA,CAAOE,2BAAAA,OAAe,CAAC,EAAqB,EAAE,aAAa;CACrF,MAAM;CACN,OAAO,MAAM,QAAQ,QAAQ,UAAU,MAAM,QAAQ,QAAQC,qBAAAA,OAAO;CACpE,SAAS;AACX,EAAE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.mjs","names":[],"sources":["../../../src/components/UpLinks/styles.ts"],"sourcesContent":["import styled from '@emotion/styled';\nimport { default as MuiListItemText } from '@mui/material/ListItemText';\nimport Typography from '@mui/material/Typography';\nimport { common } from '@mui/material/colors';\n\nimport type { Theme } from '../../Theme';\n\nexport const StyledText = styled(Typography)<{ theme?: Theme }>((props) => ({\n fontWeight: props.theme.fontWeight.bold,\n}));\n\nexport const Spacer = styled('div')<{ theme?: Theme }>(({ theme }) => ({\n flex: '1 1 auto',\n borderBottom: `1px dotted ${\n theme.palette.mode == 'light' ? 'rgba(0, 0, 0, 0.2)' : 'rgba(255, 255, 255, 0.2)'\n } `,\n whiteSpace: 'nowrap',\n height: '0.5em',\n margin: '0 16px',\n}));\n\nexport const ListItemText = styled(MuiListItemText)<{ theme?: Theme }>(({ theme }) => ({\n flex: 'none',\n color: theme.palette.mode == 'light' ? theme.palette.black : common.white,\n opacity: 0.6,\n}));\n"],"mappings":";;;;;AAOA,IAAa,aAAa,OAAO,UAAU,CAAC,EAAqB,WAAW,EAC1E,YAAY,MAAM,MAAM,WAAW,KACrC,EAAE;AAEF,IAAa,SAAS,OAAO,KAAK,CAAC,EAAqB,EAAE,aAAa;CACrE,MAAM;CACN,cAAc,cACZ,MAAM,QAAQ,QAAQ,UAAU,uBAAuB,2BACxD;CACD,YAAY;CACZ,QAAQ;CACR,QAAQ;AACV,EAAE;AAEF,
|
|
1
|
+
{"version":3,"file":"styles.mjs","names":["ListItemText","MuiListItemText"],"sources":["../../../src/components/UpLinks/styles.ts"],"sourcesContent":["import styled from '@emotion/styled';\nimport { default as MuiListItemText } from '@mui/material/ListItemText';\nimport Typography from '@mui/material/Typography';\nimport { common } from '@mui/material/colors';\n\nimport type { Theme } from '../../Theme';\n\nexport const StyledText = styled(Typography)<{ theme?: Theme }>((props) => ({\n fontWeight: props.theme.fontWeight.bold,\n}));\n\nexport const Spacer = styled('div')<{ theme?: Theme }>(({ theme }) => ({\n flex: '1 1 auto',\n borderBottom: `1px dotted ${\n theme.palette.mode == 'light' ? 'rgba(0, 0, 0, 0.2)' : 'rgba(255, 255, 255, 0.2)'\n } `,\n whiteSpace: 'nowrap',\n height: '0.5em',\n margin: '0 16px',\n}));\n\nexport const ListItemText = styled(MuiListItemText)<{ theme?: Theme }>(({ theme }) => ({\n flex: 'none',\n color: theme.palette.mode == 'light' ? theme.palette.black : common.white,\n opacity: 0.6,\n}));\n"],"mappings":";;;;;AAOA,IAAa,aAAa,OAAO,UAAU,CAAC,EAAqB,WAAW,EAC1E,YAAY,MAAM,MAAM,WAAW,KACrC,EAAE;AAEF,IAAa,SAAS,OAAO,KAAK,CAAC,EAAqB,EAAE,aAAa;CACrE,MAAM;CACN,cAAc,cACZ,MAAM,QAAQ,QAAQ,UAAU,uBAAuB,2BACxD;CACD,YAAY;CACZ,QAAQ;CACR,QAAQ;AACV,EAAE;AAEF,IAAaA,iBAAe,OAAOC,YAAe,CAAC,EAAqB,EAAE,aAAa;CACrF,MAAM;CACN,OAAO,MAAM,QAAQ,QAAQ,UAAU,MAAM,QAAQ,QAAQ,OAAO;CACpE,SAAS;AACX,EAAE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HistoryList.js","names":[],"sources":["../../../src/components/Versions/HistoryList.tsx"],"sourcesContent":["import Chip from '@mui/material/Chip';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { useConfig } from '../../providers';\nimport type { Time, Versions } from '../../types/packageMeta';\nimport { Route, utils } from '../../utils';\nimport Link from '../Link';\nimport { ListItemText, Spacer } from './styles';\n\ninterface Props {\n versions: Versions;\n packageName: string;\n time: Time;\n}\n\nexport function filterDeprecated(versions: Versions) {\n const versionsIds = Object.keys(versions);\n return versionsIds.reduce((prev, current) => {\n if (!versions[current].deprecated) {\n prev[current] = versions[current];\n }\n\n return prev;\n }, {});\n}\n\nconst VersionsHistoryList: React.FC<Props> = ({ versions, packageName, time }) => {\n const { t } = useTranslation();\n const { configOptions } = useConfig();\n const hideDeprecatedVersions = configOptions.hideDeprecatedVersions;\n const listVersions = hideDeprecatedVersions ? filterDeprecated(versions) : versions;\n\n return (\n <List dense={true}>\n {Object.keys(listVersions)\n .sort((a, b) => {\n const timeA = time[a] ? new Date(time[a]).getTime() : 0;\n const timeB = time[b] ? new Date(time[b]).getTime() : 0;\n return timeB - timeA;\n })\n .map((version) => (\n <ListItem\n className=\"version-item\"\n data-testid={`version-${version}`}\n key={version}\n sx={{ pr: 0 }}\n >\n <Link to={`${Route.DETAIL}${packageName}/v/${version}`} variant=\"outline\">\n <ListItemText\n data-testid={`version-list-link`}\n disableTypography={false}\n primary={version}\n sx={\n typeof versions[version]?.deprecated === 'string'\n ? { textDecoration: 'line-through' }\n : undefined\n }\n />\n </Link>\n {typeof versions[version]?.deprecated === 'string' ? (\n <Chip\n color=\"warning\"\n data-testid=\"deprecated-badge\"\n label={t('versions.deprecated')}\n size=\"small\"\n sx={{ marginLeft: 1 }}\n variant=\"outlined\"\n />\n ) : null}\n <Spacer />\n <ListItemText\n data-testid={`version-list-text`}\n primary={\n time[version]\n ? utils.formatDateDistance(time[version])\n : t('versions.not-available')\n }\n slotProps={{\n primary: { title: time[version] ? utils.formatDate(time[version]) : undefined },\n }}\n />\n </ListItem>\n ))}\n </List>\n );\n};\n\nexport default VersionsHistoryList;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAkBA,SAAgB,iBAAiB,UAAoB;CAEnD,OADoB,OAAO,KAAK,QACzB,CAAA,CAAY,QAAQ,MAAM,YAAY;EAC3C,IAAI,CAAC,SAAS,QAAQ,CAAC,YACrB,KAAK,WAAW,SAAS;EAG3B,OAAO;CACT,GAAG,CAAC,CAAC;AACP;AAEA,IAAM,uBAAwC,EAAE,UAAU,aAAa,WAAW;CAChF,MAAM,EAAE,OAAA,
|
|
1
|
+
{"version":3,"file":"HistoryList.js","names":["useTranslation","useConfig","List","ListItem","Link","Route","ListItemText","Chip","Spacer"],"sources":["../../../src/components/Versions/HistoryList.tsx"],"sourcesContent":["import Chip from '@mui/material/Chip';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { useConfig } from '../../providers';\nimport type { Time, Versions } from '../../types/packageMeta';\nimport { Route, utils } from '../../utils';\nimport Link from '../Link';\nimport { ListItemText, Spacer } from './styles';\n\ninterface Props {\n versions: Versions;\n packageName: string;\n time: Time;\n}\n\nexport function filterDeprecated(versions: Versions) {\n const versionsIds = Object.keys(versions);\n return versionsIds.reduce((prev, current) => {\n if (!versions[current].deprecated) {\n prev[current] = versions[current];\n }\n\n return prev;\n }, {});\n}\n\nconst VersionsHistoryList: React.FC<Props> = ({ versions, packageName, time }) => {\n const { t } = useTranslation();\n const { configOptions } = useConfig();\n const hideDeprecatedVersions = configOptions.hideDeprecatedVersions;\n const listVersions = hideDeprecatedVersions ? filterDeprecated(versions) : versions;\n\n return (\n <List dense={true}>\n {Object.keys(listVersions)\n .sort((a, b) => {\n const timeA = time[a] ? new Date(time[a]).getTime() : 0;\n const timeB = time[b] ? new Date(time[b]).getTime() : 0;\n return timeB - timeA;\n })\n .map((version) => (\n <ListItem\n className=\"version-item\"\n data-testid={`version-${version}`}\n key={version}\n sx={{ pr: 0 }}\n >\n <Link to={`${Route.DETAIL}${packageName}/v/${version}`} variant=\"outline\">\n <ListItemText\n data-testid={`version-list-link`}\n disableTypography={false}\n primary={version}\n sx={\n typeof versions[version]?.deprecated === 'string'\n ? { textDecoration: 'line-through' }\n : undefined\n }\n />\n </Link>\n {typeof versions[version]?.deprecated === 'string' ? (\n <Chip\n color=\"warning\"\n data-testid=\"deprecated-badge\"\n label={t('versions.deprecated')}\n size=\"small\"\n sx={{ marginLeft: 1 }}\n variant=\"outlined\"\n />\n ) : null}\n <Spacer />\n <ListItemText\n data-testid={`version-list-text`}\n primary={\n time[version]\n ? utils.formatDateDistance(time[version])\n : t('versions.not-available')\n }\n slotProps={{\n primary: { title: time[version] ? utils.formatDate(time[version]) : undefined },\n }}\n />\n </ListItem>\n ))}\n </List>\n );\n};\n\nexport default VersionsHistoryList;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAkBA,SAAgB,iBAAiB,UAAoB;CAEnD,OADoB,OAAO,KAAK,QACzB,CAAA,CAAY,QAAQ,MAAM,YAAY;EAC3C,IAAI,CAAC,SAAS,QAAQ,CAAC,YACrB,KAAK,WAAW,SAAS;EAG3B,OAAO;CACT,GAAG,CAAC,CAAC;AACP;AAEA,IAAM,uBAAwC,EAAE,UAAU,aAAa,WAAW;CAChF,MAAM,EAAE,OAAA,GAAMA,cAAAA,eAAAA,CAAe;CAC7B,MAAM,EAAE,kBAAkBC,iCAAAA,UAAU;CAEpC,MAAM,eADyB,cAAc,yBACC,iBAAiB,QAAQ,IAAI;CAE3E,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,mBAAAA,SAAD;EAAM,OAAO;EACV,UAAA,OAAO,KAAK,YAAY,CAAC,CACvB,MAAM,GAAG,MAAM;GACd,MAAM,QAAQ,KAAK,KAAK,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,QAAQ,IAAI;GAEtD,QADc,KAAK,KAAK,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,QAAQ,IAAI,KACvC;EACjB,CAAC,CAAC,CACD,KAAK,YACJ,iBAAA,GAAA,kBAAA,KAAA,CAACC,uBAAAA,SAAD;GACE,WAAU;GACV,eAAa,WAAW;GAExB,IAAI,EAAE,IAAI,EAAE;GAJd,UAAA;IAME,iBAAA,GAAA,kBAAA,IAAA,CAACC,aAAAA,SAAD;KAAM,IAAI,GAAGC,eAAAA,MAAM,SAAS,YAAY,KAAK;KAAW,SAAQ;KAC9D,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,eAAAA,cAAD;MACE,eAAa;MACb,mBAAmB;MACnB,SAAS;MACT,IACE,OAAO,SAAS,QAAQ,EAAE,eAAe,WACrC,EAAE,gBAAgB,eAAe,IACjC,KAAA;KAEP,CAAA;IACG,CAAA;IACL,OAAO,SAAS,QAAQ,EAAE,eAAe,WACxC,iBAAA,GAAA,kBAAA,IAAA,CAACC,mBAAAA,SAAD;KACE,OAAM;KACN,eAAY;KACZ,OAAO,EAAE,qBAAqB;KAC9B,MAAK;KACL,IAAI,EAAE,YAAY,EAAE;KACpB,SAAQ;IACT,CAAA,IACC;IACJ,iBAAA,GAAA,kBAAA,IAAA,CAACC,eAAAA,QAAD,CAAS,CAAA;IACT,iBAAA,GAAA,kBAAA,IAAA,CAACF,eAAAA,cAAD;KACE,eAAa;KACb,SACE,KAAK,WAAA,cAAA,mBACwB,KAAK,QAAQ,IACtC,EAAE,wBAAwB;KAEhC,WAAW,EACT,SAAS,EAAE,OAAO,KAAK,WAAA,cAAA,WAA4B,KAAK,QAAQ,IAAI,KAAA,EAAU,EAChF;IACD,CAAA;GACO;EArCH,GAAA,OAqCG,CACX;CACC,CAAA;AAEV"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HistoryList.mjs","names":[],"sources":["../../../src/components/Versions/HistoryList.tsx"],"sourcesContent":["import Chip from '@mui/material/Chip';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { useConfig } from '../../providers';\nimport type { Time, Versions } from '../../types/packageMeta';\nimport { Route, utils } from '../../utils';\nimport Link from '../Link';\nimport { ListItemText, Spacer } from './styles';\n\ninterface Props {\n versions: Versions;\n packageName: string;\n time: Time;\n}\n\nexport function filterDeprecated(versions: Versions) {\n const versionsIds = Object.keys(versions);\n return versionsIds.reduce((prev, current) => {\n if (!versions[current].deprecated) {\n prev[current] = versions[current];\n }\n\n return prev;\n }, {});\n}\n\nconst VersionsHistoryList: React.FC<Props> = ({ versions, packageName, time }) => {\n const { t } = useTranslation();\n const { configOptions } = useConfig();\n const hideDeprecatedVersions = configOptions.hideDeprecatedVersions;\n const listVersions = hideDeprecatedVersions ? filterDeprecated(versions) : versions;\n\n return (\n <List dense={true}>\n {Object.keys(listVersions)\n .sort((a, b) => {\n const timeA = time[a] ? new Date(time[a]).getTime() : 0;\n const timeB = time[b] ? new Date(time[b]).getTime() : 0;\n return timeB - timeA;\n })\n .map((version) => (\n <ListItem\n className=\"version-item\"\n data-testid={`version-${version}`}\n key={version}\n sx={{ pr: 0 }}\n >\n <Link to={`${Route.DETAIL}${packageName}/v/${version}`} variant=\"outline\">\n <ListItemText\n data-testid={`version-list-link`}\n disableTypography={false}\n primary={version}\n sx={\n typeof versions[version]?.deprecated === 'string'\n ? { textDecoration: 'line-through' }\n : undefined\n }\n />\n </Link>\n {typeof versions[version]?.deprecated === 'string' ? (\n <Chip\n color=\"warning\"\n data-testid=\"deprecated-badge\"\n label={t('versions.deprecated')}\n size=\"small\"\n sx={{ marginLeft: 1 }}\n variant=\"outlined\"\n />\n ) : null}\n <Spacer />\n <ListItemText\n data-testid={`version-list-text`}\n primary={\n time[version]\n ? utils.formatDateDistance(time[version])\n : t('versions.not-available')\n }\n slotProps={{\n primary: { title: time[version] ? utils.formatDate(time[version]) : undefined },\n }}\n />\n </ListItem>\n ))}\n </List>\n );\n};\n\nexport default VersionsHistoryList;\n"],"mappings":";;;;;;;;;;;;;;;AAkBA,SAAgB,iBAAiB,UAAoB;CAEnD,OADoB,OAAO,KAAK,QACzB,CAAA,CAAY,QAAQ,MAAM,YAAY;EAC3C,IAAI,CAAC,SAAS,QAAQ,CAAC,YACrB,KAAK,WAAW,SAAS;EAG3B,OAAO;CACT,GAAG,CAAC,CAAC;AACP;AAEA,IAAM,uBAAwC,EAAE,UAAU,aAAa,WAAW;CAChF,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,EAAE,kBAAkB,UAAU;CAEpC,MAAM,eADyB,cAAc,yBACC,iBAAiB,QAAQ,IAAI;CAE3E,OACE,oBAAC,MAAD;EAAM,OAAO;EACV,UAAA,OAAO,KAAK,YAAY,CAAC,CACvB,MAAM,GAAG,MAAM;GACd,MAAM,QAAQ,KAAK,KAAK,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,QAAQ,IAAI;GAEtD,QADc,KAAK,KAAK,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,QAAQ,IAAI,KACvC;EACjB,CAAC,CAAC,CACD,KAAK,YACJ,qBAAC,UAAD;GACE,WAAU;GACV,eAAa,WAAW;GAExB,IAAI,EAAE,IAAI,EAAE;GAJd,UAAA;IAME,oBAAC,MAAD;KAAM,IAAI,GAAG,MAAM,SAAS,YAAY,KAAK;KAAW,SAAQ;KAC9D,UAAA,oBAAC,cAAD;MACE,eAAa;MACb,mBAAmB;MACnB,SAAS;MACT,IACE,OAAO,SAAS,QAAQ,EAAE,eAAe,WACrC,EAAE,gBAAgB,eAAe,IACjC,KAAA;KAEP,CAAA;IACG,CAAA;IACL,OAAO,SAAS,QAAQ,EAAE,eAAe,WACxC,oBAAC,MAAD;KACE,OAAM;KACN,eAAY;KACZ,OAAO,EAAE,qBAAqB;KAC9B,MAAK;KACL,IAAI,EAAE,YAAY,EAAE;KACpB,SAAQ;IACT,CAAA,IACC;IACJ,oBAAC,QAAD,CAAS,CAAA;IACT,oBAAC,cAAD;KACE,eAAa;KACb,SACE,KAAK,
|
|
1
|
+
{"version":3,"file":"HistoryList.mjs","names":["utils.formatDateDistance","utils.formatDate"],"sources":["../../../src/components/Versions/HistoryList.tsx"],"sourcesContent":["import Chip from '@mui/material/Chip';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { useConfig } from '../../providers';\nimport type { Time, Versions } from '../../types/packageMeta';\nimport { Route, utils } from '../../utils';\nimport Link from '../Link';\nimport { ListItemText, Spacer } from './styles';\n\ninterface Props {\n versions: Versions;\n packageName: string;\n time: Time;\n}\n\nexport function filterDeprecated(versions: Versions) {\n const versionsIds = Object.keys(versions);\n return versionsIds.reduce((prev, current) => {\n if (!versions[current].deprecated) {\n prev[current] = versions[current];\n }\n\n return prev;\n }, {});\n}\n\nconst VersionsHistoryList: React.FC<Props> = ({ versions, packageName, time }) => {\n const { t } = useTranslation();\n const { configOptions } = useConfig();\n const hideDeprecatedVersions = configOptions.hideDeprecatedVersions;\n const listVersions = hideDeprecatedVersions ? filterDeprecated(versions) : versions;\n\n return (\n <List dense={true}>\n {Object.keys(listVersions)\n .sort((a, b) => {\n const timeA = time[a] ? new Date(time[a]).getTime() : 0;\n const timeB = time[b] ? new Date(time[b]).getTime() : 0;\n return timeB - timeA;\n })\n .map((version) => (\n <ListItem\n className=\"version-item\"\n data-testid={`version-${version}`}\n key={version}\n sx={{ pr: 0 }}\n >\n <Link to={`${Route.DETAIL}${packageName}/v/${version}`} variant=\"outline\">\n <ListItemText\n data-testid={`version-list-link`}\n disableTypography={false}\n primary={version}\n sx={\n typeof versions[version]?.deprecated === 'string'\n ? { textDecoration: 'line-through' }\n : undefined\n }\n />\n </Link>\n {typeof versions[version]?.deprecated === 'string' ? (\n <Chip\n color=\"warning\"\n data-testid=\"deprecated-badge\"\n label={t('versions.deprecated')}\n size=\"small\"\n sx={{ marginLeft: 1 }}\n variant=\"outlined\"\n />\n ) : null}\n <Spacer />\n <ListItemText\n data-testid={`version-list-text`}\n primary={\n time[version]\n ? utils.formatDateDistance(time[version])\n : t('versions.not-available')\n }\n slotProps={{\n primary: { title: time[version] ? utils.formatDate(time[version]) : undefined },\n }}\n />\n </ListItem>\n ))}\n </List>\n );\n};\n\nexport default VersionsHistoryList;\n"],"mappings":";;;;;;;;;;;;;;;AAkBA,SAAgB,iBAAiB,UAAoB;CAEnD,OADoB,OAAO,KAAK,QACzB,CAAA,CAAY,QAAQ,MAAM,YAAY;EAC3C,IAAI,CAAC,SAAS,QAAQ,CAAC,YACrB,KAAK,WAAW,SAAS;EAG3B,OAAO;CACT,GAAG,CAAC,CAAC;AACP;AAEA,IAAM,uBAAwC,EAAE,UAAU,aAAa,WAAW;CAChF,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,EAAE,kBAAkB,UAAU;CAEpC,MAAM,eADyB,cAAc,yBACC,iBAAiB,QAAQ,IAAI;CAE3E,OACE,oBAAC,MAAD;EAAM,OAAO;EACV,UAAA,OAAO,KAAK,YAAY,CAAC,CACvB,MAAM,GAAG,MAAM;GACd,MAAM,QAAQ,KAAK,KAAK,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,QAAQ,IAAI;GAEtD,QADc,KAAK,KAAK,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,QAAQ,IAAI,KACvC;EACjB,CAAC,CAAC,CACD,KAAK,YACJ,qBAAC,UAAD;GACE,WAAU;GACV,eAAa,WAAW;GAExB,IAAI,EAAE,IAAI,EAAE;GAJd,UAAA;IAME,oBAAC,MAAD;KAAM,IAAI,GAAG,MAAM,SAAS,YAAY,KAAK;KAAW,SAAQ;KAC9D,UAAA,oBAAC,cAAD;MACE,eAAa;MACb,mBAAmB;MACnB,SAAS;MACT,IACE,OAAO,SAAS,QAAQ,EAAE,eAAe,WACrC,EAAE,gBAAgB,eAAe,IACjC,KAAA;KAEP,CAAA;IACG,CAAA;IACL,OAAO,SAAS,QAAQ,EAAE,eAAe,WACxC,oBAAC,MAAD;KACE,OAAM;KACN,eAAY;KACZ,OAAO,EAAE,qBAAqB;KAC9B,MAAK;KACL,IAAI,EAAE,YAAY,EAAE;KACpB,SAAQ;IACT,CAAA,IACC;IACJ,oBAAC,QAAD,CAAS,CAAA;IACT,oBAAC,cAAD;KACE,eAAa;KACb,SACE,KAAK,WACDA,mBAAyB,KAAK,QAAQ,IACtC,EAAE,wBAAwB;KAEhC,WAAW,EACT,SAAS,EAAE,OAAO,KAAK,WAAWC,WAAiB,KAAK,QAAQ,IAAI,KAAA,EAAU,EAChF;IACD,CAAA;GACO;EArCH,GAAA,OAqCG,CACX;CACC,CAAA;AAEV"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TagList.js","names":[],"sources":["../../../src/components/Versions/TagList.tsx"],"sourcesContent":["import List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport React from 'react';\n\nimport type { DistTags, Time } from '../../types/packageMeta';\nimport { Route } from '../../utils';\nimport Link from '../Link';\nimport { ListItemText, Spacer } from './styles';\n\ninterface Props {\n tags: DistTags;\n packageName: string;\n time: Time;\n}\n\nconst VersionsTagList: React.FC<Props> = ({ tags, packageName, time }) => (\n <List dense={true}>\n {Object.keys(tags)\n .sort((a, b) => {\n return time[tags[a]] < time[tags[b]] ? 1 : time[tags[a]] > time[tags[b]] ? -1 : 0;\n })\n .map((tag) => (\n <ListItem className=\"version-item\" data-testid={`tag-${tag}`} key={tag} sx={{ pr: 0 }}>\n <Link to={`${Route.DETAIL}${packageName}/v/${tags[tag]}`} variant=\"outline\">\n <ListItemText>{tag}</ListItemText>\n </Link>\n <Spacer />\n <ListItemText>{tags[tag]}</ListItemText>\n </ListItem>\n ))}\n </List>\n);\n\nexport default VersionsTagList;\n"],"mappings":";;;;;;;;;;;;;;AAeA,IAAM,mBAAoC,EAAE,MAAM,aAAa,WAC7D,iBAAA,GAAA,kBAAA,IAAA,
|
|
1
|
+
{"version":3,"file":"TagList.js","names":["List","ListItem","Link","Route","ListItemText","Spacer"],"sources":["../../../src/components/Versions/TagList.tsx"],"sourcesContent":["import List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport React from 'react';\n\nimport type { DistTags, Time } from '../../types/packageMeta';\nimport { Route } from '../../utils';\nimport Link from '../Link';\nimport { ListItemText, Spacer } from './styles';\n\ninterface Props {\n tags: DistTags;\n packageName: string;\n time: Time;\n}\n\nconst VersionsTagList: React.FC<Props> = ({ tags, packageName, time }) => (\n <List dense={true}>\n {Object.keys(tags)\n .sort((a, b) => {\n return time[tags[a]] < time[tags[b]] ? 1 : time[tags[a]] > time[tags[b]] ? -1 : 0;\n })\n .map((tag) => (\n <ListItem className=\"version-item\" data-testid={`tag-${tag}`} key={tag} sx={{ pr: 0 }}>\n <Link to={`${Route.DETAIL}${packageName}/v/${tags[tag]}`} variant=\"outline\">\n <ListItemText>{tag}</ListItemText>\n </Link>\n <Spacer />\n <ListItemText>{tags[tag]}</ListItemText>\n </ListItem>\n ))}\n </List>\n);\n\nexport default VersionsTagList;\n"],"mappings":";;;;;;;;;;;;;;AAeA,IAAM,mBAAoC,EAAE,MAAM,aAAa,WAC7D,iBAAA,GAAA,kBAAA,IAAA,CAACA,mBAAAA,SAAD;CAAM,OAAO;CACV,UAAA,OAAO,KAAK,IAAI,CAAC,CACf,MAAM,GAAG,MAAM;EACd,OAAO,KAAK,KAAK,MAAM,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK;CAClF,CAAC,CAAC,CACD,KAAK,QACJ,iBAAA,GAAA,kBAAA,KAAA,CAACC,uBAAAA,SAAD;EAAU,WAAU;EAAe,eAAa,OAAO;EAAiB,IAAI,EAAE,IAAI,EAAE;EAApF,UAAA;GACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,aAAAA,SAAD;IAAM,IAAI,GAAGC,eAAAA,MAAM,SAAS,YAAY,KAAK,KAAK;IAAQ,SAAQ;IAChE,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,eAAAA,cAAD,EAAA,UAAe,IAAkB,CAAA;GAC7B,CAAA;GACN,iBAAA,GAAA,kBAAA,IAAA,CAACC,eAAAA,QAAD,CAAS,CAAA;GACT,iBAAA,GAAA,kBAAA,IAAA,CAACD,eAAAA,cAAD,EAAA,UAAe,KAAK,KAAmB,CAAA;EAC/B;CANyD,GAAA,GAMzD,CACX;AACC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Versions.js","names":[],"sources":["../../../src/components/Versions/Versions.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport Alert from '@mui/material/Alert';\nimport Box from '@mui/material/Box';\nimport Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\nimport TextField from '@mui/material/TextField';\nimport Typography from '@mui/material/Typography';\nimport { debounce } from 'lodash-es';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport semver from 'semver';\n\nimport type { Theme } from '../../Theme';\nimport { useConfig } from '../../providers';\nimport VersionsHistoryList from './HistoryList';\nimport VersionsTagList from './TagList';\n\nexport type Props = { packageMeta: any; packageName: string };\n\nexport const StyledText = styled(Typography)<{ theme?: Theme }>((props) => ({\n fontWeight: props.theme && props.theme.fontWeight.bold,\n textTransform: 'capitalize',\n}));\n\nconst Versions: React.FC<Props> = ({ packageMeta, packageName }) => {\n const { t } = useTranslation();\n const { configOptions } = useConfig();\n const { versions = {}, time = {}, ['dist-tags']: distTags = {} } = packageMeta ?? {};\n\n const [textSearch, setTextSearch] = useState('');\n // the detail routes reuse this mounted component across packages: reset the\n // filter so the previous package's text does not apply to the next one\n useEffect(() => {\n setTextSearch('');\n }, [packageName]);\n const packageVersions = useMemo(() => {\n if (textSearch === '') {\n return versions;\n }\n return Object.keys(versions).reduce((acc, version) => {\n if (typeof versions[version] !== 'undefined') {\n if (semver.satisfies(version, textSearch, { includePrerelease: true, loose: true })) {\n acc[version] = versions[version];\n }\n }\n return acc;\n }, {});\n }, [versions, textSearch]);\n\n if (!packageMeta || Object.keys(packageMeta).length === 0) {\n return null;\n }\n const hideDeprecatedVersions = configOptions.hideDeprecatedVersions;\n const hasDistTags = distTags && Object.keys(distTags).length > 0 && packageName;\n const hasVersionHistory =\n packageVersions && Object.keys(packageVersions).length > 0 && packageName;\n\n return (\n <Card sx={{ mb: 2 }}>\n <CardContent>\n <Box data-testid=\"versions\" sx={{ m: 2 }}>\n {hasDistTags ? (\n <>\n <StyledText variant=\"subtitle1\">\n {t('versions.current-tags')}\n <span>{` (${Object.keys(distTags).length})`}</span>\n </StyledText>\n <VersionsTagList packageName={packageName} tags={distTags} time={time} />\n </>\n ) : null}\n <>\n <StyledText variant=\"subtitle1\">\n {t('versions.version-history')}\n <span>{` (${Object.keys(packageVersions).length})`}</span>\n </StyledText>\n <TextField\n // uncontrolled input: remount on navigation to clear its text\n key={packageName}\n helperText={t('versions.search.placeholder')}\n onChange={debounce((e) => {\n setTextSearch(e.target.value);\n }, 200)}\n size=\"small\"\n variant=\"standard\"\n sx={{ width: '50%' }}\n />\n </>\n {hasVersionHistory ? (\n <>\n {hideDeprecatedVersions === true && (\n // @ts-ignore - Alert does accept children despite the type error\n <Alert severity=\"info\" sx={{ marginTop: 1, marginBottom: 1 }}>\n {t('versions.hide-deprecated')}\n </Alert>\n )}\n <VersionsHistoryList\n packageName={packageName}\n time={time}\n versions={packageVersions}\n />\n </>\n ) : null}\n </Box>\n </CardContent>\n </Card>\n );\n};\n\nexport default Versions;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,IAAa,cAAA,
|
|
1
|
+
{"version":3,"file":"Versions.js","names":["styled","Typography","useTranslation","useConfig","useState","useMemo","Card","CardContent","Box","_Fragment","VersionsTagList","TextField","debounce","Alert","VersionsHistoryList"],"sources":["../../../src/components/Versions/Versions.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport Alert from '@mui/material/Alert';\nimport Box from '@mui/material/Box';\nimport Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\nimport TextField from '@mui/material/TextField';\nimport Typography from '@mui/material/Typography';\nimport { debounce } from 'lodash-es';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport semver from 'semver';\n\nimport type { Theme } from '../../Theme';\nimport { useConfig } from '../../providers';\nimport VersionsHistoryList from './HistoryList';\nimport VersionsTagList from './TagList';\n\nexport type Props = { packageMeta: any; packageName: string };\n\nexport const StyledText = styled(Typography)<{ theme?: Theme }>((props) => ({\n fontWeight: props.theme && props.theme.fontWeight.bold,\n textTransform: 'capitalize',\n}));\n\nconst Versions: React.FC<Props> = ({ packageMeta, packageName }) => {\n const { t } = useTranslation();\n const { configOptions } = useConfig();\n const { versions = {}, time = {}, ['dist-tags']: distTags = {} } = packageMeta ?? {};\n\n const [textSearch, setTextSearch] = useState('');\n // the detail routes reuse this mounted component across packages: reset the\n // filter so the previous package's text does not apply to the next one\n useEffect(() => {\n setTextSearch('');\n }, [packageName]);\n const packageVersions = useMemo(() => {\n if (textSearch === '') {\n return versions;\n }\n return Object.keys(versions).reduce((acc, version) => {\n if (typeof versions[version] !== 'undefined') {\n if (semver.satisfies(version, textSearch, { includePrerelease: true, loose: true })) {\n acc[version] = versions[version];\n }\n }\n return acc;\n }, {});\n }, [versions, textSearch]);\n\n if (!packageMeta || Object.keys(packageMeta).length === 0) {\n return null;\n }\n const hideDeprecatedVersions = configOptions.hideDeprecatedVersions;\n const hasDistTags = distTags && Object.keys(distTags).length > 0 && packageName;\n const hasVersionHistory =\n packageVersions && Object.keys(packageVersions).length > 0 && packageName;\n\n return (\n <Card sx={{ mb: 2 }}>\n <CardContent>\n <Box data-testid=\"versions\" sx={{ m: 2 }}>\n {hasDistTags ? (\n <>\n <StyledText variant=\"subtitle1\">\n {t('versions.current-tags')}\n <span>{` (${Object.keys(distTags).length})`}</span>\n </StyledText>\n <VersionsTagList packageName={packageName} tags={distTags} time={time} />\n </>\n ) : null}\n <>\n <StyledText variant=\"subtitle1\">\n {t('versions.version-history')}\n <span>{` (${Object.keys(packageVersions).length})`}</span>\n </StyledText>\n <TextField\n // uncontrolled input: remount on navigation to clear its text\n key={packageName}\n helperText={t('versions.search.placeholder')}\n onChange={debounce((e) => {\n setTextSearch(e.target.value);\n }, 200)}\n size=\"small\"\n variant=\"standard\"\n sx={{ width: '50%' }}\n />\n </>\n {hasVersionHistory ? (\n <>\n {hideDeprecatedVersions === true && (\n // @ts-ignore - Alert does accept children despite the type error\n <Alert severity=\"info\" sx={{ marginTop: 1, marginBottom: 1 }}>\n {t('versions.hide-deprecated')}\n </Alert>\n )}\n <VersionsHistoryList\n packageName={packageName}\n time={time}\n versions={packageVersions}\n />\n </>\n ) : null}\n </Box>\n </CardContent>\n </Card>\n );\n};\n\nexport default Versions;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Versions.mjs","names":[],"sources":["../../../src/components/Versions/Versions.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport Alert from '@mui/material/Alert';\nimport Box from '@mui/material/Box';\nimport Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\nimport TextField from '@mui/material/TextField';\nimport Typography from '@mui/material/Typography';\nimport { debounce } from 'lodash-es';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport semver from 'semver';\n\nimport type { Theme } from '../../Theme';\nimport { useConfig } from '../../providers';\nimport VersionsHistoryList from './HistoryList';\nimport VersionsTagList from './TagList';\n\nexport type Props = { packageMeta: any; packageName: string };\n\nexport const StyledText = styled(Typography)<{ theme?: Theme }>((props) => ({\n fontWeight: props.theme && props.theme.fontWeight.bold,\n textTransform: 'capitalize',\n}));\n\nconst Versions: React.FC<Props> = ({ packageMeta, packageName }) => {\n const { t } = useTranslation();\n const { configOptions } = useConfig();\n const { versions = {}, time = {}, ['dist-tags']: distTags = {} } = packageMeta ?? {};\n\n const [textSearch, setTextSearch] = useState('');\n // the detail routes reuse this mounted component across packages: reset the\n // filter so the previous package's text does not apply to the next one\n useEffect(() => {\n setTextSearch('');\n }, [packageName]);\n const packageVersions = useMemo(() => {\n if (textSearch === '') {\n return versions;\n }\n return Object.keys(versions).reduce((acc, version) => {\n if (typeof versions[version] !== 'undefined') {\n if (semver.satisfies(version, textSearch, { includePrerelease: true, loose: true })) {\n acc[version] = versions[version];\n }\n }\n return acc;\n }, {});\n }, [versions, textSearch]);\n\n if (!packageMeta || Object.keys(packageMeta).length === 0) {\n return null;\n }\n const hideDeprecatedVersions = configOptions.hideDeprecatedVersions;\n const hasDistTags = distTags && Object.keys(distTags).length > 0 && packageName;\n const hasVersionHistory =\n packageVersions && Object.keys(packageVersions).length > 0 && packageName;\n\n return (\n <Card sx={{ mb: 2 }}>\n <CardContent>\n <Box data-testid=\"versions\" sx={{ m: 2 }}>\n {hasDistTags ? (\n <>\n <StyledText variant=\"subtitle1\">\n {t('versions.current-tags')}\n <span>{` (${Object.keys(distTags).length})`}</span>\n </StyledText>\n <VersionsTagList packageName={packageName} tags={distTags} time={time} />\n </>\n ) : null}\n <>\n <StyledText variant=\"subtitle1\">\n {t('versions.version-history')}\n <span>{` (${Object.keys(packageVersions).length})`}</span>\n </StyledText>\n <TextField\n // uncontrolled input: remount on navigation to clear its text\n key={packageName}\n helperText={t('versions.search.placeholder')}\n onChange={debounce((e) => {\n setTextSearch(e.target.value);\n }, 200)}\n size=\"small\"\n variant=\"standard\"\n sx={{ width: '50%' }}\n />\n </>\n {hasVersionHistory ? (\n <>\n {hideDeprecatedVersions === true && (\n // @ts-ignore - Alert does accept children despite the type error\n <Alert severity=\"info\" sx={{ marginTop: 1, marginBottom: 1 }}>\n {t('versions.hide-deprecated')}\n </Alert>\n )}\n <VersionsHistoryList\n packageName={packageName}\n time={time}\n versions={packageVersions}\n />\n </>\n ) : null}\n </Box>\n </CardContent>\n </Card>\n );\n};\n\nexport default Versions;\n"],"mappings":";;;;;;;;;;;;;;;;;AAmBA,IAAa,aAAa,OAAO,UAAU,CAAC,EAAqB,WAAW;CAC1E,YAAY,MAAM,SAAS,MAAM,MAAM,WAAW;CAClD,eAAe;AACjB,EAAE;AAEF,IAAM,YAA6B,EAAE,aAAa,kBAAkB;CAClE,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,EAAE,kBAAkB,UAAU;CACpC,MAAM,EAAE,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,cAAc,WAAW,CAAC,MAAM,eAAe,CAAC;CAEnF,MAAM,CAAC,YAAY,iBAAiB,SAAS,EAAE;CAG/C,gBAAgB;EACd,cAAc,EAAE;CAClB,GAAG,CAAC,WAAW,CAAC;CAChB,MAAM,kBAAkB,cAAc;EACpC,IAAI,eAAe,IACjB,OAAO;EAET,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,QAAQ,KAAK,YAAY;GACpD,IAAI,OAAO,SAAS,aAAa,aAC3B;QAAA,OAAO,UAAU,SAAS,YAAY;KAAE,mBAAmB;KAAM,OAAO;IAAK,CAAC,GAChF,IAAI,WAAW,SAAS;GAAA;GAG5B,OAAO;EACT,GAAG,CAAC,CAAC;CACP,GAAG,CAAC,UAAU,UAAU,CAAC;CAEzB,IAAI,CAAC,eAAe,OAAO,KAAK,WAAW,CAAC,CAAC,WAAW,GACtD,OAAO;CAET,MAAM,yBAAyB,cAAc;CAC7C,MAAM,cAAc,YAAY,OAAO,KAAK,QAAQ,CAAC,CAAC,SAAS,KAAK;CACpE,MAAM,oBACJ,mBAAmB,OAAO,KAAK,eAAe,CAAC,CAAC,SAAS,KAAK;CAEhE,OACE,oBAAC,MAAD;EAAM,IAAI,EAAE,IAAI,EAAE;EAChB,UAAA,oBAAC,aAAD,EAAA,UACE,qBAAC,KAAD;GAAK,eAAY;GAAW,IAAI,EAAE,GAAG,EAAE;GAAvC,UAAA;IACG,cACC,
|
|
1
|
+
{"version":3,"file":"Versions.mjs","names":["_Fragment"],"sources":["../../../src/components/Versions/Versions.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport Alert from '@mui/material/Alert';\nimport Box from '@mui/material/Box';\nimport Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\nimport TextField from '@mui/material/TextField';\nimport Typography from '@mui/material/Typography';\nimport { debounce } from 'lodash-es';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport semver from 'semver';\n\nimport type { Theme } from '../../Theme';\nimport { useConfig } from '../../providers';\nimport VersionsHistoryList from './HistoryList';\nimport VersionsTagList from './TagList';\n\nexport type Props = { packageMeta: any; packageName: string };\n\nexport const StyledText = styled(Typography)<{ theme?: Theme }>((props) => ({\n fontWeight: props.theme && props.theme.fontWeight.bold,\n textTransform: 'capitalize',\n}));\n\nconst Versions: React.FC<Props> = ({ packageMeta, packageName }) => {\n const { t } = useTranslation();\n const { configOptions } = useConfig();\n const { versions = {}, time = {}, ['dist-tags']: distTags = {} } = packageMeta ?? {};\n\n const [textSearch, setTextSearch] = useState('');\n // the detail routes reuse this mounted component across packages: reset the\n // filter so the previous package's text does not apply to the next one\n useEffect(() => {\n setTextSearch('');\n }, [packageName]);\n const packageVersions = useMemo(() => {\n if (textSearch === '') {\n return versions;\n }\n return Object.keys(versions).reduce((acc, version) => {\n if (typeof versions[version] !== 'undefined') {\n if (semver.satisfies(version, textSearch, { includePrerelease: true, loose: true })) {\n acc[version] = versions[version];\n }\n }\n return acc;\n }, {});\n }, [versions, textSearch]);\n\n if (!packageMeta || Object.keys(packageMeta).length === 0) {\n return null;\n }\n const hideDeprecatedVersions = configOptions.hideDeprecatedVersions;\n const hasDistTags = distTags && Object.keys(distTags).length > 0 && packageName;\n const hasVersionHistory =\n packageVersions && Object.keys(packageVersions).length > 0 && packageName;\n\n return (\n <Card sx={{ mb: 2 }}>\n <CardContent>\n <Box data-testid=\"versions\" sx={{ m: 2 }}>\n {hasDistTags ? (\n <>\n <StyledText variant=\"subtitle1\">\n {t('versions.current-tags')}\n <span>{` (${Object.keys(distTags).length})`}</span>\n </StyledText>\n <VersionsTagList packageName={packageName} tags={distTags} time={time} />\n </>\n ) : null}\n <>\n <StyledText variant=\"subtitle1\">\n {t('versions.version-history')}\n <span>{` (${Object.keys(packageVersions).length})`}</span>\n </StyledText>\n <TextField\n // uncontrolled input: remount on navigation to clear its text\n key={packageName}\n helperText={t('versions.search.placeholder')}\n onChange={debounce((e) => {\n setTextSearch(e.target.value);\n }, 200)}\n size=\"small\"\n variant=\"standard\"\n sx={{ width: '50%' }}\n />\n </>\n {hasVersionHistory ? (\n <>\n {hideDeprecatedVersions === true && (\n // @ts-ignore - Alert does accept children despite the type error\n <Alert severity=\"info\" sx={{ marginTop: 1, marginBottom: 1 }}>\n {t('versions.hide-deprecated')}\n </Alert>\n )}\n <VersionsHistoryList\n packageName={packageName}\n time={time}\n versions={packageVersions}\n />\n </>\n ) : null}\n </Box>\n </CardContent>\n </Card>\n );\n};\n\nexport default Versions;\n"],"mappings":";;;;;;;;;;;;;;;;;AAmBA,IAAa,aAAa,OAAO,UAAU,CAAC,EAAqB,WAAW;CAC1E,YAAY,MAAM,SAAS,MAAM,MAAM,WAAW;CAClD,eAAe;AACjB,EAAE;AAEF,IAAM,YAA6B,EAAE,aAAa,kBAAkB;CAClE,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,EAAE,kBAAkB,UAAU;CACpC,MAAM,EAAE,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,cAAc,WAAW,CAAC,MAAM,eAAe,CAAC;CAEnF,MAAM,CAAC,YAAY,iBAAiB,SAAS,EAAE;CAG/C,gBAAgB;EACd,cAAc,EAAE;CAClB,GAAG,CAAC,WAAW,CAAC;CAChB,MAAM,kBAAkB,cAAc;EACpC,IAAI,eAAe,IACjB,OAAO;EAET,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,QAAQ,KAAK,YAAY;GACpD,IAAI,OAAO,SAAS,aAAa,aAC3B;QAAA,OAAO,UAAU,SAAS,YAAY;KAAE,mBAAmB;KAAM,OAAO;IAAK,CAAC,GAChF,IAAI,WAAW,SAAS;GAAA;GAG5B,OAAO;EACT,GAAG,CAAC,CAAC;CACP,GAAG,CAAC,UAAU,UAAU,CAAC;CAEzB,IAAI,CAAC,eAAe,OAAO,KAAK,WAAW,CAAC,CAAC,WAAW,GACtD,OAAO;CAET,MAAM,yBAAyB,cAAc;CAC7C,MAAM,cAAc,YAAY,OAAO,KAAK,QAAQ,CAAC,CAAC,SAAS,KAAK;CACpE,MAAM,oBACJ,mBAAmB,OAAO,KAAK,eAAe,CAAC,CAAC,SAAS,KAAK;CAEhE,OACE,oBAAC,MAAD;EAAM,IAAI,EAAE,IAAI,EAAE;EAChB,UAAA,oBAAC,aAAD,EAAA,UACE,qBAAC,KAAD;GAAK,eAAY;GAAW,IAAI,EAAE,GAAG,EAAE;GAAvC,UAAA;IACG,cACC,qBAAAA,YAAA,EAAA,UAAA,CACE,qBAAC,YAAD;KAAY,SAAQ;KAApB,UAAA,CACG,EAAE,uBAAuB,GAC1B,oBAAC,QAAD,EAAA,UAAO,KAAK,OAAO,KAAK,QAAQ,CAAC,CAAC,OAAO,GAAS,CAAA,CACxC;IACZ,CAAA,GAAA,oBAAC,iBAAD;KAA8B;KAAa,MAAM;KAAgB;IAAO,CAAA,CACxE,EAAA,CAAA,IACA;IACJ,qBAAAA,YAAA,EAAA,UAAA,CACE,qBAAC,YAAD;KAAY,SAAQ;KAApB,UAAA,CACG,EAAE,0BAA0B,GAC7B,oBAAC,QAAD,EAAA,UAAO,KAAK,OAAO,KAAK,eAAe,CAAC,CAAC,OAAO,GAAS,CAAA,CAC/C;IACZ,CAAA,GAAA,oBAAC,WAAD;KAGE,YAAY,EAAE,6BAA6B;KAC3C,UAAU,UAAU,MAAM;MACxB,cAAc,EAAE,OAAO,KAAK;KAC9B,GAAG,GAAG;KACN,MAAK;KACL,SAAQ;KACR,IAAI,EAAE,OAAO,MAAM;IACpB,GARM,WAQN,CACD,EAAA,CAAA;IACD,oBACC,qBAAAA,YAAA,EAAA,UAAA,CACG,2BAA2B,QAE1B,oBAAC,OAAD;KAAO,UAAS;KAAO,IAAI;MAAE,WAAW;MAAG,cAAc;KAAE;KACxD,UAAA,EAAE,0BAA0B;IACxB,CAAA,GAET,oBAAC,qBAAD;KACe;KACP;KACN,UAAU;IACX,CAAA,CACD,EAAA,CAAA,IACA;GACD;EACM,CAAA,EAAA,CAAA;CACT,CAAA;AAEV"}
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { Versions as default };
|
|
1
|
+
export { default } from "./Versions.mjs";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","names":[],"sources":["../../../src/components/Versions/styles.ts"],"sourcesContent":["import styled from '@emotion/styled';\nimport { default as MuiListItemText } from '@mui/material/ListItemText';\nimport { common } from '@mui/material/colors';\n\nimport type { Theme } from '../../Theme';\n\nexport const Spacer = styled('div')<{ theme?: Theme }>(({ theme }) => ({\n flex: '1 1 auto',\n borderBottom: `1px dotted ${\n theme.palette.mode == 'light' ? 'rgba(0, 0, 0, 0.2)' : 'rgba(255, 255, 255, 0.2)'\n } `,\n whiteSpace: 'nowrap',\n height: '0.5em',\n margin: '0 16px',\n}));\n\nexport const ListItemText = styled(MuiListItemText)<{ theme?: Theme }>(({ theme }) => ({\n flex: 'none',\n opacity: 0.6,\n color: theme.palette.mode == 'light' ? theme.palette.black : common.white,\n}));\n"],"mappings":";;;;;;;AAMA,IAAa,UAAA,
|
|
1
|
+
{"version":3,"file":"styles.js","names":["styled","MuiListItemText","common"],"sources":["../../../src/components/Versions/styles.ts"],"sourcesContent":["import styled from '@emotion/styled';\nimport { default as MuiListItemText } from '@mui/material/ListItemText';\nimport { common } from '@mui/material/colors';\n\nimport type { Theme } from '../../Theme';\n\nexport const Spacer = styled('div')<{ theme?: Theme }>(({ theme }) => ({\n flex: '1 1 auto',\n borderBottom: `1px dotted ${\n theme.palette.mode == 'light' ? 'rgba(0, 0, 0, 0.2)' : 'rgba(255, 255, 255, 0.2)'\n } `,\n whiteSpace: 'nowrap',\n height: '0.5em',\n margin: '0 16px',\n}));\n\nexport const ListItemText = styled(MuiListItemText)<{ theme?: Theme }>(({ theme }) => ({\n flex: 'none',\n opacity: 0.6,\n color: theme.palette.mode == 'light' ? theme.palette.black : common.white,\n}));\n"],"mappings":";;;;;;;AAMA,IAAa,UAAA,GAASA,gBAAAA,QAAAA,CAAO,KAAK,CAAC,EAAqB,EAAE,aAAa;CACrE,MAAM;CACN,cAAc,cACZ,MAAM,QAAQ,QAAQ,UAAU,uBAAuB,2BACxD;CACD,YAAY;CACZ,QAAQ;CACR,QAAQ;AACV,EAAE;AAEF,IAAa,gBAAA,GAAeA,gBAAAA,QAAAA,CAAOC,2BAAAA,OAAe,CAAC,EAAqB,EAAE,aAAa;CACrF,MAAM;CACN,SAAS;CACT,OAAO,MAAM,QAAQ,QAAQ,UAAU,MAAM,QAAQ,QAAQC,qBAAAA,OAAO;AACtE,EAAE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.mjs","names":[],"sources":["../../../src/components/Versions/styles.ts"],"sourcesContent":["import styled from '@emotion/styled';\nimport { default as MuiListItemText } from '@mui/material/ListItemText';\nimport { common } from '@mui/material/colors';\n\nimport type { Theme } from '../../Theme';\n\nexport const Spacer = styled('div')<{ theme?: Theme }>(({ theme }) => ({\n flex: '1 1 auto',\n borderBottom: `1px dotted ${\n theme.palette.mode == 'light' ? 'rgba(0, 0, 0, 0.2)' : 'rgba(255, 255, 255, 0.2)'\n } `,\n whiteSpace: 'nowrap',\n height: '0.5em',\n margin: '0 16px',\n}));\n\nexport const ListItemText = styled(MuiListItemText)<{ theme?: Theme }>(({ theme }) => ({\n flex: 'none',\n opacity: 0.6,\n color: theme.palette.mode == 'light' ? theme.palette.black : common.white,\n}));\n"],"mappings":";;;;AAMA,IAAa,SAAS,OAAO,KAAK,CAAC,EAAqB,EAAE,aAAa;CACrE,MAAM;CACN,cAAc,cACZ,MAAM,QAAQ,QAAQ,UAAU,uBAAuB,2BACxD;CACD,YAAY;CACZ,QAAQ;CACR,QAAQ;AACV,EAAE;AAEF,
|
|
1
|
+
{"version":3,"file":"styles.mjs","names":["ListItemText","MuiListItemText"],"sources":["../../../src/components/Versions/styles.ts"],"sourcesContent":["import styled from '@emotion/styled';\nimport { default as MuiListItemText } from '@mui/material/ListItemText';\nimport { common } from '@mui/material/colors';\n\nimport type { Theme } from '../../Theme';\n\nexport const Spacer = styled('div')<{ theme?: Theme }>(({ theme }) => ({\n flex: '1 1 auto',\n borderBottom: `1px dotted ${\n theme.palette.mode == 'light' ? 'rgba(0, 0, 0, 0.2)' : 'rgba(255, 255, 255, 0.2)'\n } `,\n whiteSpace: 'nowrap',\n height: '0.5em',\n margin: '0 16px',\n}));\n\nexport const ListItemText = styled(MuiListItemText)<{ theme?: Theme }>(({ theme }) => ({\n flex: 'none',\n opacity: 0.6,\n color: theme.palette.mode == 'light' ? theme.palette.black : common.white,\n}));\n"],"mappings":";;;;AAMA,IAAa,SAAS,OAAO,KAAK,CAAC,EAAqB,EAAE,aAAa;CACrE,MAAM;CACN,cAAc,cACZ,MAAM,QAAQ,QAAQ,UAAU,uBAAuB,2BACxD;CACD,YAAY;CACZ,QAAQ;CACR,QAAQ;AACV,EAAE;AAEF,IAAaA,iBAAe,OAAOC,YAAe,CAAC,EAAqB,EAAE,aAAa;CACrF,MAAM;CACN,SAAS;CACT,OAAO,MAAM,QAAQ,QAAQ,UAAU,MAAM,QAAQ,QAAQ,OAAO;AACtE,EAAE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLocalStorage.js","names":[],"sources":["../../src/hooks/useLocalStorage.ts"],"sourcesContent":["import { useState } from 'react';\n\n/**\n* \n* @example\n ```jsx\n const [isDarkModeStorage, setIsDarkMode] = useLocalStorage('darkMode', isDarkModeDefault);\n ```\n\n based on https://usehooks.com/useLocalStorage/\n @category Hooks\n */\nconst useLocalStorage = <V>(key: string, initialValue: V) => {\n // State to store our value\n // Pass initial state function to useState so logic is only executed once\n const [storedValue, setStoredValue] = useState(() => {\n try {\n // Get from local storage by key\n const item = window.localStorage.getItem(key);\n // Parse stored json or if none return initialValue\n return item ? JSON.parse(item) : initialValue;\n } catch (error: unknown) {\n // If error also return initialValue\n\n console.error('An error occurred getting a sessionStorage key', error);\n return initialValue;\n }\n });\n\n // Return a wrapped version of useState's setter function that ...\n // ... persists the new value to localStorage.\n const setValue = (value: V) => {\n try {\n // Allow value to be a function so we have same API as useState\n const valueToStore = value instanceof Function ? value(storedValue) : value;\n // Save state\n setStoredValue(valueToStore);\n // Save to local storage\n window.localStorage.setItem(key, JSON.stringify(valueToStore));\n } catch (error: unknown) {\n console.error('An error occurred writing to sessionStorage', error);\n }\n };\n\n return [storedValue, setValue];\n};\n\nexport default useLocalStorage;\n"],"mappings":";;;;;;;;;;;;AAYA,IAAM,mBAAsB,KAAa,iBAAoB;CAG3D,MAAM,CAAC,aAAa,mBAAA,
|
|
1
|
+
{"version":3,"file":"useLocalStorage.js","names":["useState"],"sources":["../../src/hooks/useLocalStorage.ts"],"sourcesContent":["import { useState } from 'react';\n\n/**\n* \n* @example\n ```jsx\n const [isDarkModeStorage, setIsDarkMode] = useLocalStorage('darkMode', isDarkModeDefault);\n ```\n\n based on https://usehooks.com/useLocalStorage/\n @category Hooks\n */\nconst useLocalStorage = <V>(key: string, initialValue: V) => {\n // State to store our value\n // Pass initial state function to useState so logic is only executed once\n const [storedValue, setStoredValue] = useState(() => {\n try {\n // Get from local storage by key\n const item = window.localStorage.getItem(key);\n // Parse stored json or if none return initialValue\n return item ? JSON.parse(item) : initialValue;\n } catch (error: unknown) {\n // If error also return initialValue\n\n console.error('An error occurred getting a sessionStorage key', error);\n return initialValue;\n }\n });\n\n // Return a wrapped version of useState's setter function that ...\n // ... persists the new value to localStorage.\n const setValue = (value: V) => {\n try {\n // Allow value to be a function so we have same API as useState\n const valueToStore = value instanceof Function ? value(storedValue) : value;\n // Save state\n setStoredValue(valueToStore);\n // Save to local storage\n window.localStorage.setItem(key, JSON.stringify(valueToStore));\n } catch (error: unknown) {\n console.error('An error occurred writing to sessionStorage', error);\n }\n };\n\n return [storedValue, setValue];\n};\n\nexport default useLocalStorage;\n"],"mappings":";;;;;;;;;;;;AAYA,IAAM,mBAAsB,KAAa,iBAAoB;CAG3D,MAAM,CAAC,aAAa,mBAAA,GAAkBA,MAAAA,SAAAA,OAAe;EACnD,IAAI;GAEF,MAAM,OAAO,OAAO,aAAa,QAAQ,GAAG;GAE5C,OAAO,OAAO,KAAK,MAAM,IAAI,IAAI;EACnC,SAAS,OAAgB;GAGvB,QAAQ,MAAM,kDAAkD,KAAK;GACrE,OAAO;EACT;CACF,CAAC;CAID,MAAM,YAAY,UAAa;EAC7B,IAAI;GAEF,MAAM,eAAe,iBAAiB,WAAW,MAAM,WAAW,IAAI;GAEtE,eAAe,YAAY;GAE3B,OAAO,aAAa,QAAQ,KAAK,KAAK,UAAU,YAAY,CAAC;EAC/D,SAAS,OAAgB;GACvB,QAAQ,MAAM,+CAA+C,KAAK;EACpE;CACF;CAEA,OAAO,CAAC,aAAa,QAAQ;AAC/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dialog.js","names":[],"sources":["../../../src/layouts/Security/Dialog.tsx"],"sourcesContent":["import { Box } from '@mui/material';\nimport { styled } from '@mui/material/styles';\nimport React from 'react';\n\nconst LayoutContainer = styled(Box)({\n display: 'flex',\n flexDirection: 'column',\n minHeight: '100vh',\n maxWidth: '500px',\n margin: '0 auto',\n});\n\nconst MainContent = styled(Box)({\n flex: 1,\n marginTop: '100px',\n});\n\ninterface SecurityLayoutProps {\n children: React.ReactNode;\n}\n\nconst SecurityLayout: React.FC<SecurityLayoutProps> = ({ children }) => {\n return (\n <LayoutContainer>\n <MainContent>{children}</MainContent>\n </LayoutContainer>\n );\n};\n\nexport default SecurityLayout;\n"],"mappings":";;;;;;;AAIA,IAAM,mBAAA,
|
|
1
|
+
{"version":3,"file":"Dialog.js","names":["styled","Box"],"sources":["../../../src/layouts/Security/Dialog.tsx"],"sourcesContent":["import { Box } from '@mui/material';\nimport { styled } from '@mui/material/styles';\nimport React from 'react';\n\nconst LayoutContainer = styled(Box)({\n display: 'flex',\n flexDirection: 'column',\n minHeight: '100vh',\n maxWidth: '500px',\n margin: '0 auto',\n});\n\nconst MainContent = styled(Box)({\n flex: 1,\n marginTop: '100px',\n});\n\ninterface SecurityLayoutProps {\n children: React.ReactNode;\n}\n\nconst SecurityLayout: React.FC<SecurityLayoutProps> = ({ children }) => {\n return (\n <LayoutContainer>\n <MainContent>{children}</MainContent>\n </LayoutContainer>\n );\n};\n\nexport default SecurityLayout;\n"],"mappings":";;;;;;;AAIA,IAAM,mBAAA,GAAkBA,qBAAAA,OAAAA,CAAOC,cAAAA,GAAG,CAAC,CAAC;CAClC,SAAS;CACT,eAAe;CACf,WAAW;CACX,UAAU;CACV,QAAQ;AACV,CAAC;AAED,IAAM,eAAA,GAAcD,qBAAAA,OAAAA,CAAOC,cAAAA,GAAG,CAAC,CAAC;CAC9B,MAAM;CACN,WAAW;AACb,CAAC;AAMD,IAAM,kBAAiD,EAAE,eAAe;CACtE,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,iBAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,aAAD,EAAc,SAAsB,CAAA,EACrB,CAAA;AAErB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Version.js","names":[],"sources":["../../../src/layouts/Version/Version.tsx"],"sourcesContent":["import Grid from '@mui/material/Grid';\nimport React from 'react';\n\nimport { Detail, SideBar } from '../../sections';\n\nconst VersionLayout: React.FC = () => {\n return (\n <Grid className={'container content'} container={true} data-testid=\"version-layout\" spacing={0}>\n <Grid size={{ md: 8, xs: 12 }}>\n <Detail />\n </Grid>\n <Grid size={{ md: 4, xs: 12 }}>\n <SideBar />\n </Grid>\n </Grid>\n );\n};\n\nexport default VersionLayout;\n"],"mappings":";;;;;;;;;;AAKA,IAAM,sBAAgC;CACpC,OACE,iBAAA,GAAA,kBAAA,KAAA,
|
|
1
|
+
{"version":3,"file":"Version.js","names":["Grid","Detail","SideBar"],"sources":["../../../src/layouts/Version/Version.tsx"],"sourcesContent":["import Grid from '@mui/material/Grid';\nimport React from 'react';\n\nimport { Detail, SideBar } from '../../sections';\n\nconst VersionLayout: React.FC = () => {\n return (\n <Grid className={'container content'} container={true} data-testid=\"version-layout\" spacing={0}>\n <Grid size={{ md: 8, xs: 12 }}>\n <Detail />\n </Grid>\n <Grid size={{ md: 4, xs: 12 }}>\n <SideBar />\n </Grid>\n </Grid>\n );\n};\n\nexport default VersionLayout;\n"],"mappings":";;;;;;;;;;AAKA,IAAM,sBAAgC;CACpC,OACE,iBAAA,GAAA,kBAAA,KAAA,CAACA,mBAAAA,SAAD;EAAM,WAAW;EAAqB,WAAW;EAAM,eAAY;EAAiB,SAAS;EAA7F,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACA,mBAAAA,SAAD;GAAM,MAAM;IAAE,IAAI;IAAG,IAAI;GAAG;GAC1B,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,eAAAA,SAAD,CAAS,CAAA;EACL,CAAA,GACN,iBAAA,GAAA,kBAAA,IAAA,CAACD,mBAAAA,SAAD;GAAM,MAAM;IAAE,IAAI;IAAG,IAAI;GAAG;GAC1B,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACE,gBAAAA,SAAD,CAAU,CAAA;EACN,CAAA,CACF;;AAEV"}
|