@verdaccio/ui-components 5.0.0-next-9.20 → 5.0.0-next-9.21
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/api/use-data-mutation.js +1 -4
- package/build/api/use-data-mutation.js.map +1 -1
- package/build/api/use-data-mutation.mjs +1 -4
- package/build/api/use-data-mutation.mjs.map +1 -1
- package/build/api/use-data.d.ts +1 -0
- package/build/api/use-data.js +3 -2
- package/build/api/use-data.js.map +1 -1
- package/build/api/use-data.mjs +3 -3
- package/build/api/use-data.mjs.map +1 -1
- package/build/components/ActionBar/ActionBar.js +4 -2
- package/build/components/ActionBar/ActionBar.js.map +1 -1
- package/build/components/ActionBar/ActionBar.mjs +4 -2
- package/build/components/ActionBar/ActionBar.mjs.map +1 -1
- package/build/components/ActionBar/ActionBarAction.js +1 -1
- package/build/components/ActionBar/ActionBarAction.mjs +1 -1
- package/build/components/Author/Author.js +1 -1
- package/build/components/Author/Author.mjs +1 -1
- package/build/components/CopyClipboard/CopyToClipBoard.js +5 -0
- package/build/components/CopyClipboard/CopyToClipBoard.js.map +1 -1
- package/build/components/CopyClipboard/CopyToClipBoard.mjs +5 -0
- package/build/components/CopyClipboard/CopyToClipBoard.mjs.map +1 -1
- package/build/components/CopyClipboard/utils.js +14 -1
- package/build/components/CopyClipboard/utils.js.map +1 -1
- package/build/components/CopyClipboard/utils.mjs +14 -1
- package/build/components/CopyClipboard/utils.mjs.map +1 -1
- package/build/components/Dependencies/Dependencies.js +2 -1
- package/build/components/Dependencies/Dependencies.js.map +1 -1
- package/build/components/Dependencies/Dependencies.mjs +2 -1
- package/build/components/Dependencies/Dependencies.mjs.map +1 -1
- package/build/components/Dependencies/DependencyBlock.js +1 -1
- package/build/components/Dependencies/DependencyBlock.mjs +1 -1
- package/build/components/Developers/Title.js +1 -1
- package/build/components/Developers/Title.mjs +1 -1
- package/build/components/Developers/get-unique-developer-values.js +2 -1
- package/build/components/Developers/get-unique-developer-values.js.map +1 -1
- package/build/components/Developers/get-unique-developer-values.mjs +2 -1
- package/build/components/Developers/get-unique-developer-values.mjs.map +1 -1
- package/build/components/Distribution/Dist.js +3 -3
- package/build/components/Distribution/Dist.js.map +1 -1
- package/build/components/Distribution/Dist.mjs +3 -3
- package/build/components/Distribution/Dist.mjs.map +1 -1
- package/build/components/Engines/Engines.js +1 -1
- package/build/components/Engines/Engines.mjs +1 -1
- package/build/components/Forbidden/Forbidden.js +1 -1
- package/build/components/Forbidden/Forbidden.mjs +1 -1
- package/build/components/FundButton/FundButton.js +4 -3
- package/build/components/FundButton/FundButton.js.map +1 -1
- package/build/components/FundButton/FundButton.mjs +4 -3
- package/build/components/FundButton/FundButton.mjs.map +1 -1
- package/build/components/GenericError/GenericError.d.ts +3 -0
- package/build/components/GenericError/GenericError.js +60 -0
- package/build/components/GenericError/GenericError.js.map +1 -0
- package/build/components/GenericError/GenericError.mjs +54 -0
- package/build/components/GenericError/GenericError.mjs.map +1 -0
- package/build/components/GenericError/index.d.ts +1 -0
- package/build/components/GenericError/index.js +2 -0
- package/build/components/GenericError/index.mjs +2 -0
- package/build/components/Help/Help.js +1 -1
- package/build/components/Help/Help.mjs +1 -1
- package/build/components/Install/Install.js +1 -1
- package/build/components/Install/Install.mjs +1 -1
- package/build/components/Install/InstallListItem.js +2 -2
- package/build/components/Install/InstallListItem.js.map +1 -1
- package/build/components/Install/InstallListItem.mjs +2 -2
- package/build/components/Install/InstallListItem.mjs.map +1 -1
- package/build/components/Keywords/KeywordListItems.js +1 -1
- package/build/components/Keywords/KeywordListItems.js.map +1 -1
- package/build/components/Keywords/KeywordListItems.mjs +1 -1
- package/build/components/Keywords/KeywordListItems.mjs.map +1 -1
- package/build/components/Keywords/Keywords.js +2 -2
- package/build/components/Keywords/Keywords.js.map +1 -1
- package/build/components/Keywords/Keywords.mjs +2 -2
- package/build/components/Keywords/Keywords.mjs.map +1 -1
- package/build/components/LoginDialog/LoginDialogCloseButton.js +1 -1
- package/build/components/LoginDialog/LoginDialogCloseButton.mjs +1 -1
- package/build/components/LoginDialog/LoginDialogForm.js +2 -1
- package/build/components/LoginDialog/LoginDialogForm.js.map +1 -1
- package/build/components/LoginDialog/LoginDialogForm.mjs +2 -1
- package/build/components/LoginDialog/LoginDialogForm.mjs.map +1 -1
- package/build/components/LoginForm/Login.d.ts +1 -0
- package/build/components/LoginForm/Login.js +6 -4
- package/build/components/LoginForm/Login.js.map +1 -1
- package/build/components/LoginForm/Login.mjs +9 -7
- package/build/components/LoginForm/Login.mjs.map +1 -1
- package/build/components/LoginForm/PasswordField.js +4 -6
- package/build/components/LoginForm/PasswordField.js.map +1 -1
- package/build/components/LoginForm/PasswordField.mjs +4 -6
- package/build/components/LoginForm/PasswordField.mjs.map +1 -1
- package/build/components/LoginForm/UsernameField.js +4 -6
- package/build/components/LoginForm/UsernameField.js.map +1 -1
- package/build/components/LoginForm/UsernameField.mjs +4 -6
- package/build/components/LoginForm/UsernameField.mjs.map +1 -1
- package/build/components/LoginForm/styles.js +1 -1
- package/build/components/LoginForm/styles.mjs +1 -1
- package/build/components/LoginForm/useLoginForm.js +13 -3
- package/build/components/LoginForm/useLoginForm.js.map +1 -1
- package/build/components/LoginForm/useLoginForm.mjs +14 -4
- package/build/components/LoginForm/useLoginForm.mjs.map +1 -1
- package/build/components/NoItems/NoItems.js +2 -2
- package/build/components/NoItems/NoItems.mjs +1 -1
- package/build/components/NotFound/NotFound.js +1 -1
- package/build/components/NotFound/NotFound.mjs +1 -1
- package/build/components/Package/Package.d.ts +1 -1
- package/build/components/Package/Package.js +28 -29
- package/build/components/Package/Package.js.map +1 -1
- package/build/components/Package/Package.mjs +29 -30
- package/build/components/Package/Package.mjs.map +1 -1
- package/build/components/Person/Person.js +1 -1
- package/build/components/Person/Person.js.map +1 -1
- package/build/components/Person/Person.mjs +1 -1
- package/build/components/Person/Person.mjs.map +1 -1
- package/build/components/RawViewer/RawViewer.js +1 -1
- package/build/components/RawViewer/RawViewer.mjs +1 -1
- package/build/components/RegistryInfoDialog/RegistryInfoDialog.js +1 -1
- package/build/components/RegistryInfoDialog/RegistryInfoDialog.mjs +1 -1
- package/build/components/Repository/Repository.js +5 -8
- package/build/components/Repository/Repository.js.map +1 -1
- package/build/components/Repository/Repository.mjs +5 -8
- package/build/components/Repository/Repository.mjs.map +1 -1
- package/build/components/Search/AutoComplete/AutoComplete.d.ts +1 -0
- package/build/components/Search/AutoComplete/AutoComplete.js +4 -4
- package/build/components/Search/AutoComplete/AutoComplete.js.map +1 -1
- package/build/components/Search/AutoComplete/AutoComplete.mjs +4 -4
- package/build/components/Search/AutoComplete/AutoComplete.mjs.map +1 -1
- package/build/components/Search/Search.js +12 -4
- package/build/components/Search/Search.js.map +1 -1
- package/build/components/Search/Search.mjs +13 -5
- package/build/components/Search/Search.mjs.map +1 -1
- package/build/components/Search/SearchItem.js +1 -1
- package/build/components/Search/SearchItem.mjs +1 -1
- package/build/components/SettingsMenu/SettingsMenu.js +1 -1
- package/build/components/SettingsMenu/SettingsMenu.mjs +1 -1
- package/build/components/SideBarTitle/SideBarTitle.js +2 -2
- package/build/components/SideBarTitle/SideBarTitle.js.map +1 -1
- package/build/components/SideBarTitle/SideBarTitle.mjs +2 -2
- package/build/components/SideBarTitle/SideBarTitle.mjs.map +1 -1
- package/build/components/UpLinks/UpLinks.js +1 -1
- package/build/components/UpLinks/UpLinks.mjs +1 -1
- package/build/components/Versions/HistoryList.js +2 -2
- package/build/components/Versions/HistoryList.js.map +1 -1
- package/build/components/Versions/HistoryList.mjs +2 -2
- package/build/components/Versions/HistoryList.mjs.map +1 -1
- package/build/components/Versions/Versions.js +22 -21
- package/build/components/Versions/Versions.js.map +1 -1
- package/build/components/Versions/Versions.mjs +22 -21
- package/build/components/Versions/Versions.mjs.map +1 -1
- package/build/index.d.ts +1 -0
- package/build/index.js +4 -0
- package/build/index.mjs +4 -2
- package/build/pages/Version/Version.js +4 -1
- package/build/pages/Version/Version.js.map +1 -1
- package/build/pages/Version/Version.mjs +4 -1
- package/build/pages/Version/Version.mjs.map +1 -1
- package/build/providers/AuthProvider/AuthProvider.js +9 -7
- package/build/providers/AuthProvider/AuthProvider.js.map +1 -1
- package/build/providers/AuthProvider/AuthProvider.mjs +10 -8
- package/build/providers/AuthProvider/AuthProvider.mjs.map +1 -1
- package/build/providers/AuthProvider/utils.d.ts +12 -0
- package/build/providers/AuthProvider/utils.js +22 -0
- package/build/providers/AuthProvider/utils.js.map +1 -1
- package/build/providers/AuthProvider/utils.mjs +21 -2
- package/build/providers/AuthProvider/utils.mjs.map +1 -1
- package/build/providers/DownloadProvider/DownloadProvider.d.ts +1 -0
- package/build/providers/DownloadProvider/DownloadProvider.js +27 -4
- package/build/providers/DownloadProvider/DownloadProvider.js.map +1 -1
- package/build/providers/DownloadProvider/DownloadProvider.mjs +27 -6
- package/build/providers/DownloadProvider/DownloadProvider.mjs.map +1 -1
- 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/SearchProvider/SearchProvider.d.ts +1 -0
- package/build/providers/SearchProvider/SearchProvider.js +8 -6
- package/build/providers/SearchProvider/SearchProvider.js.map +1 -1
- package/build/providers/SearchProvider/SearchProvider.mjs +8 -6
- package/build/providers/SearchProvider/SearchProvider.mjs.map +1 -1
- package/build/providers/TranslatorProvider/TranslatorProvider.js +5 -3
- package/build/providers/TranslatorProvider/TranslatorProvider.js.map +1 -1
- package/build/providers/TranslatorProvider/TranslatorProvider.mjs +5 -3
- package/build/providers/TranslatorProvider/TranslatorProvider.mjs.map +1 -1
- package/build/providers/VersionProvider/VersionProvider.js +3 -3
- package/build/providers/VersionProvider/VersionProvider.js.map +1 -1
- package/build/providers/VersionProvider/VersionProvider.mjs +3 -3
- package/build/providers/VersionProvider/VersionProvider.mjs.map +1 -1
- package/build/sections/Detail/Tabs.js +1 -1
- package/build/sections/Detail/Tabs.mjs +1 -1
- package/build/sections/Footer/Footer.js +1 -1
- package/build/sections/Footer/Footer.mjs +1 -1
- package/build/sections/Header/Header.d.ts +0 -1
- package/build/sections/Header/Header.js +16 -14
- package/build/sections/Header/Header.js.map +1 -1
- package/build/sections/Header/Header.mjs +17 -15
- package/build/sections/Header/Header.mjs.map +1 -1
- package/build/sections/Header/HeaderGreetings.js +1 -1
- package/build/sections/Header/HeaderGreetings.mjs +1 -1
- package/build/sections/Header/HeaderMenu.js +1 -1
- package/build/sections/Header/HeaderMenu.mjs +1 -1
- package/build/sections/Header/HeaderRight.js +1 -1
- package/build/sections/Header/HeaderRight.mjs +1 -1
- package/build/sections/Header/HeaderSettingsDialog.js +1 -1
- package/build/sections/Header/HeaderSettingsDialog.mjs +1 -1
- package/build/sections/Header/LanguageSwitch.js +1 -1
- package/build/sections/Header/LanguageSwitch.mjs +1 -1
- package/build/sections/Header/RegistryInfoContent/RegistryInfoContent.js +1 -1
- package/build/sections/Header/RegistryInfoContent/RegistryInfoContent.mjs +1 -1
- package/build/sections/Home/Home.js +4 -3
- package/build/sections/Home/Home.js.map +1 -1
- package/build/sections/Home/Home.mjs +5 -4
- package/build/sections/Home/Home.mjs.map +1 -1
- package/build/sections/Security/AddUser.js +33 -18
- package/build/sections/Security/AddUser.js.map +1 -1
- package/build/sections/Security/AddUser.mjs +37 -22
- package/build/sections/Security/AddUser.mjs.map +1 -1
- package/build/sections/Security/ChangePassword.js +17 -15
- package/build/sections/Security/ChangePassword.js.map +1 -1
- package/build/sections/Security/ChangePassword.mjs +19 -17
- package/build/sections/Security/ChangePassword.mjs.map +1 -1
- package/build/sections/Security/Login.js +51 -35
- package/build/sections/Security/Login.js.map +1 -1
- package/build/sections/Security/Login.mjs +54 -38
- package/build/sections/Security/Login.mjs.map +1 -1
- package/build/sections/Security/Success.js +28 -24
- package/build/sections/Security/Success.js.map +1 -1
- package/build/sections/Security/Success.mjs +29 -25
- package/build/sections/Security/Success.mjs.map +1 -1
- package/build/sections/Stage/StageActions.js +1 -1
- package/build/sections/Stage/StageActions.mjs +1 -1
- package/build/sections/Stage/StageDetail.js +1 -1
- package/build/sections/Stage/StageDetail.mjs +1 -1
- package/build/sections/Stage/StageList.js +15 -2
- package/build/sections/Stage/StageList.js.map +1 -1
- package/build/sections/Stage/StageList.mjs +15 -2
- package/build/sections/Stage/StageList.mjs.map +1 -1
- package/build/store/api.js +7 -4
- package/build/store/api.js.map +1 -1
- package/build/store/api.mjs +7 -4
- package/build/store/api.mjs.map +1 -1
- package/build/types/packageMeta.d.ts +3 -2
- package/build/utils/cli-utils.js +2 -2
- package/build/utils/cli-utils.js.map +1 -1
- package/build/utils/cli-utils.mjs +2 -2
- package/build/utils/cli-utils.mjs.map +1 -1
- package/build/utils/index.js +1 -0
- package/build/utils/index.mjs +2 -2
- package/build/utils/routes.d.ts +1 -0
- package/build/utils/routes.js +1 -0
- package/build/utils/routes.js.map +1 -1
- package/build/utils/routes.mjs +1 -0
- package/build/utils/routes.mjs.map +1 -1
- package/build/utils/schemas.d.ts +1 -0
- package/build/utils/schemas.js +4 -4
- package/build/utils/schemas.js.map +1 -1
- package/build/utils/schemas.mjs +4 -4
- package/build/utils/schemas.mjs.map +1 -1
- package/build/utils/session-id.d.ts +8 -0
- package/build/utils/session-id.js +26 -0
- package/build/utils/session-id.js.map +1 -0
- package/build/utils/session-id.mjs +26 -0
- package/build/utils/session-id.mjs.map +1 -0
- package/build/utils/token.d.ts +1 -0
- package/build/utils/token.js +12 -8
- package/build/utils/token.js.map +1 -1
- package/build/utils/token.mjs +12 -9
- package/build/utils/token.mjs.map +1 -1
- package/build/utils/url.js +1 -1
- package/build/utils/url.js.map +1 -1
- package/build/utils/url.mjs +1 -1
- package/build/utils/url.mjs.map +1 -1
- package/build/utils/utils.d.ts +10 -0
- package/build/utils/utils.js +26 -0
- package/build/utils/utils.js.map +1 -1
- package/build/utils/utils.mjs +25 -1
- package/build/utils/utils.mjs.map +1 -1
- package/package.json +6 -6
|
@@ -1,27 +1,48 @@
|
|
|
1
1
|
import { downloadFile, extractFileName } from "../../utils/url.mjs";
|
|
2
2
|
import { useTarballDownload } from "../../api/use-data-mutation.mjs";
|
|
3
|
-
import { createContext, useCallback, useContext } from "react";
|
|
4
|
-
import {
|
|
3
|
+
import { createContext, useCallback, useContext, useState } from "react";
|
|
4
|
+
import { useTranslation } from "react-i18next";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
import Alert from "@mui/material/Alert";
|
|
7
|
+
import Snackbar from "@mui/material/Snackbar";
|
|
5
8
|
//#region src/providers/DownloadProvider/DownloadProvider.tsx
|
|
6
9
|
var DownloadContext = createContext(void 0);
|
|
7
10
|
var DownloadProvider = ({ children }) => {
|
|
11
|
+
const { t } = useTranslation();
|
|
8
12
|
const { download, isDownloading } = useTarballDownload();
|
|
13
|
+
const [hasDownloadError, setHasDownloadError] = useState(false);
|
|
9
14
|
const downloadTarball = useCallback(async ({ link }) => {
|
|
10
15
|
try {
|
|
16
|
+
setHasDownloadError(false);
|
|
11
17
|
const fileStream = await download({ link });
|
|
12
|
-
if (!fileStream)
|
|
18
|
+
if (!fileStream) {
|
|
19
|
+
setHasDownloadError(true);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
13
22
|
const fileName = extractFileName(link);
|
|
14
23
|
downloadFile(fileStream, fileName);
|
|
15
24
|
} catch (error) {
|
|
16
25
|
console.error("Error during tarball download:", error);
|
|
26
|
+
setHasDownloadError(true);
|
|
17
27
|
}
|
|
18
28
|
}, [download]);
|
|
19
|
-
return /* @__PURE__ */
|
|
29
|
+
return /* @__PURE__ */ jsxs(DownloadContext.Provider, {
|
|
20
30
|
value: {
|
|
21
31
|
downloadTarball,
|
|
22
|
-
isDownloading
|
|
32
|
+
isDownloading,
|
|
33
|
+
hasDownloadError
|
|
23
34
|
},
|
|
24
|
-
children
|
|
35
|
+
children: [children, /* @__PURE__ */ jsx(Snackbar, {
|
|
36
|
+
autoHideDuration: 6e3,
|
|
37
|
+
onClose: () => setHasDownloadError(false),
|
|
38
|
+
open: hasDownloadError,
|
|
39
|
+
children: /* @__PURE__ */ jsx(Alert, {
|
|
40
|
+
onClose: () => setHasDownloadError(false),
|
|
41
|
+
severity: "error",
|
|
42
|
+
variant: "filled",
|
|
43
|
+
children: t("error.download-tarball")
|
|
44
|
+
})
|
|
45
|
+
})]
|
|
25
46
|
});
|
|
26
47
|
};
|
|
27
48
|
var useDownload = () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DownloadProvider.mjs","names":[],"sources":["../../../src/providers/DownloadProvider/DownloadProvider.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport React, { createContext, useCallback, useContext } from 'react';\n\nimport { useTarballDownload } from '../../api/use-data-mutation';\nimport { downloadFile, extractFileName } from '../../utils/url';\n\nexport interface DownloadContextProps {\n downloadTarball: (args: { link: string }) => Promise<void>;\n isDownloading: boolean;\n}\n\nexport const DownloadContext = createContext<DownloadContextProps | undefined>(undefined);\n\nexport const DownloadProvider: React.FC<{ children: ReactNode }> = ({ children }) => {\n const { download, isDownloading } = useTarballDownload();\n\n const downloadTarball = useCallback(\n async ({ link }: { link: string }) => {\n try {\n const fileStream = await download({ link });\n if (!fileStream) return;\n\n const fileName = extractFileName(link);\n downloadFile(fileStream, fileName);\n } catch (error) {\n console.error('Error during tarball download:', error);\n }\n },\n [download]\n );\n\n return (\n <DownloadContext.Provider value={{ downloadTarball, isDownloading }}>\n {children}\n </DownloadContext.Provider>\n );\n};\n\nexport const useDownload = () => {\n const context = useContext(DownloadContext);\n if (!context) {\n throw new Error('useDownload must be used within a DownloadProvider');\n }\n return context;\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"DownloadProvider.mjs","names":[],"sources":["../../../src/providers/DownloadProvider/DownloadProvider.tsx"],"sourcesContent":["import Alert from '@mui/material/Alert';\nimport Snackbar from '@mui/material/Snackbar';\nimport type { ReactNode } from 'react';\nimport React, { createContext, useCallback, useContext, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { useTarballDownload } from '../../api/use-data-mutation';\nimport { downloadFile, extractFileName } from '../../utils/url';\n\nexport interface DownloadContextProps {\n downloadTarball: (args: { link: string }) => Promise<void>;\n isDownloading: boolean;\n hasDownloadError: boolean;\n}\n\nexport const DownloadContext = createContext<DownloadContextProps | undefined>(undefined);\n\nexport const DownloadProvider: React.FC<{ children: ReactNode }> = ({ children }) => {\n const { t } = useTranslation();\n const { download, isDownloading } = useTarballDownload();\n const [hasDownloadError, setHasDownloadError] = useState(false);\n\n const downloadTarball = useCallback(\n async ({ link }: { link: string }) => {\n try {\n setHasDownloadError(false);\n const fileStream = await download({ link });\n if (!fileStream) {\n // clicking download and having nothing happen sends the user\n // retrying blindly; an empty response is an error too\n setHasDownloadError(true);\n return;\n }\n\n const fileName = extractFileName(link);\n downloadFile(fileStream, fileName);\n } catch (error) {\n console.error('Error during tarball download:', error);\n setHasDownloadError(true);\n }\n },\n [download]\n );\n\n return (\n <DownloadContext.Provider value={{ downloadTarball, isDownloading, hasDownloadError }}>\n {children}\n <Snackbar\n autoHideDuration={6000}\n onClose={() => setHasDownloadError(false)}\n open={hasDownloadError}\n >\n {/* @ts-ignore - Alert does accept children despite the type error */}\n <Alert onClose={() => setHasDownloadError(false)} severity=\"error\" variant=\"filled\">\n {t('error.download-tarball')}\n </Alert>\n </Snackbar>\n </DownloadContext.Provider>\n );\n};\n\nexport const useDownload = () => {\n const context = useContext(DownloadContext);\n if (!context) {\n throw new Error('useDownload must be used within a DownloadProvider');\n }\n return context;\n};\n"],"mappings":";;;;;;;;AAeA,IAAa,kBAAkB,cAAgD,KAAA,CAAS;AAExF,IAAa,oBAAuD,EAAE,eAAe;CACnF,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,EAAE,UAAU,kBAAkB,mBAAmB;CACvD,MAAM,CAAC,kBAAkB,uBAAuB,SAAS,KAAK;CAE9D,MAAM,kBAAkB,YACtB,OAAO,EAAE,WAA6B;EACpC,IAAI;GACF,oBAAoB,KAAK;GACzB,MAAM,aAAa,MAAM,SAAS,EAAE,KAAK,CAAC;GAC1C,IAAI,CAAC,YAAY;IAGf,oBAAoB,IAAI;IACxB;GACF;GAEA,MAAM,WAAW,gBAAgB,IAAI;GACrC,aAAa,YAAY,QAAQ;EACnC,SAAS,OAAO;GACd,QAAQ,MAAM,kCAAkC,KAAK;GACrD,oBAAoB,IAAI;EAC1B;CACF,GACA,CAAC,QAAQ,CACX;CAEA,OACE,qBAAC,gBAAgB,UAAjB;EAA0B,OAAO;GAAE;GAAiB;GAAe;EAAiB;EAApF,UAAA,CACG,UACD,oBAAC,UAAD;GACE,kBAAkB;GAClB,eAAe,oBAAoB,KAAK;GACxC,MAAM;GAGN,UAAA,oBAAC,OAAD;IAAO,eAAe,oBAAoB,KAAK;IAAG,UAAS;IAAQ,SAAQ;IACxE,UAAA,EAAE,wBAAwB;GACtB,CAAA;EACC,CAAA,CACc;;AAE9B;AAEA,IAAa,oBAAoB;CAC/B,MAAM,UAAU,WAAW,eAAe;CAC1C,IAAI,CAAC,SACH,MAAM,IAAI,MAAM,oDAAoD;CAEtE,OAAO;AACT"}
|
|
@@ -16,7 +16,7 @@ var ManifestsProvider = ({ children }) => {
|
|
|
16
16
|
value: {
|
|
17
17
|
manifests: data.data ?? [],
|
|
18
18
|
isLoading: data.isLoading,
|
|
19
|
-
isError: typeof data.error
|
|
19
|
+
isError: typeof data.error !== "undefined" && typeof data.data === "undefined"
|
|
20
20
|
},
|
|
21
21
|
children
|
|
22
22
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ManifestsProvider.js","names":[],"sources":["../../../src/providers/ManifestsProvider/ManifestsProvider.tsx"],"sourcesContent":["import type { ReactElement } from 'react';\nimport React, { createContext, useContext } from 'react';\n\nimport type { Manifest } from '@verdaccio/types';\n\nimport { useData } from '../../api/use-data';\nimport { getConfiguration } from '../../configuration';\nimport { APIRoute } from '../../store/routes';\nimport { stripTrailingSlash } from '../../store/utils';\n\nexport interface ManifestsContextProps {\n isError: boolean;\n isLoading: boolean;\n manifests: ManifestWeb[];\n}\n\nexport interface Author {\n name?: string;\n email?: string;\n url?: string;\n avatar?: string;\n}\n\nexport interface ManifestWeb extends Omit<Manifest, 'time' | 'author'> {\n time: string;\n author: Author;\n version: string;\n dist: any;\n}\n\nexport const ManifestsContext = createContext<Partial<ManifestsContextProps>>({});\n\nconst configuration = getConfiguration();\n\nconst ManifestsProvider: React.FC<{ children: ReactElement }> = ({ children }) => {\n const basePath = stripTrailingSlash(configuration.base);\n\n const data = useData<ManifestWeb[]>(basePath, APIRoute.PACKAGES);\n\n return (\n <ManifestsContext.Provider\n value={{\n manifests: (data.data as ManifestWeb[]) ?? [],\n isLoading: data.isLoading,\n isError: typeof data.error
|
|
1
|
+
{"version":3,"file":"ManifestsProvider.js","names":[],"sources":["../../../src/providers/ManifestsProvider/ManifestsProvider.tsx"],"sourcesContent":["import type { ReactElement } from 'react';\nimport React, { createContext, useContext } from 'react';\n\nimport type { Manifest } from '@verdaccio/types';\n\nimport { useData } from '../../api/use-data';\nimport { getConfiguration } from '../../configuration';\nimport { APIRoute } from '../../store/routes';\nimport { stripTrailingSlash } from '../../store/utils';\n\nexport interface ManifestsContextProps {\n isError: boolean;\n isLoading: boolean;\n manifests: ManifestWeb[];\n}\n\nexport interface Author {\n name?: string;\n email?: string;\n url?: string;\n avatar?: string;\n}\n\nexport interface ManifestWeb extends Omit<Manifest, 'time' | 'author'> {\n time: string;\n author: Author;\n version: string;\n dist: any;\n}\n\nexport const ManifestsContext = createContext<Partial<ManifestsContextProps>>({});\n\nconst configuration = getConfiguration();\n\nconst ManifestsProvider: React.FC<{ children: ReactElement }> = ({ children }) => {\n const basePath = stripTrailingSlash(configuration.base);\n\n const data = useData<ManifestWeb[]>(basePath, APIRoute.PACKAGES);\n\n return (\n <ManifestsContext.Provider\n value={{\n manifests: (data.data as ManifestWeb[]) ?? [],\n isLoading: data.isLoading,\n // any error counts (network failures have no `.code`), but a failed\n // revalidation must not hide an already-cached, renderable list\n isError: typeof data.error !== 'undefined' && typeof data.data === 'undefined',\n }}\n >\n {children}\n </ManifestsContext.Provider>\n );\n};\n\nexport default ManifestsProvider;\n\nexport const useManifests = () => useContext(ManifestsContext);\n"],"mappings":";;;;;;;;;AA8BA,IAAa,oBAAA,GAAmB,MAAA,cAAA,CAA8C,CAAC,CAAC;AAEhF,IAAM,gBAAgB,sBAAA,iBAAiB;AAEvC,IAAM,qBAA2D,EAAE,eAAe;CAChF,MAAM,WAAW,cAAA,mBAAmB,cAAc,IAAI;CAEtD,MAAM,OAAO,iBAAA,QAAuB,UAAU,eAAA,SAAS,QAAQ;CAE/D,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,iBAAiB,UAAlB;EACE,OAAO;GACL,WAAY,KAAK,QAA0B,CAAC;GAC5C,WAAW,KAAK;GAGhB,SAAS,OAAO,KAAK,UAAU,eAAe,OAAO,KAAK,SAAS;EACrE;EAEC;CACwB,CAAA;AAE/B;AAIA,IAAa,sBAAA,GAAqB,MAAA,WAAA,CAAW,gBAAgB"}
|
|
@@ -14,7 +14,7 @@ var ManifestsProvider = ({ children }) => {
|
|
|
14
14
|
value: {
|
|
15
15
|
manifests: data.data ?? [],
|
|
16
16
|
isLoading: data.isLoading,
|
|
17
|
-
isError: typeof data.error
|
|
17
|
+
isError: typeof data.error !== "undefined" && typeof data.data === "undefined"
|
|
18
18
|
},
|
|
19
19
|
children
|
|
20
20
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ManifestsProvider.mjs","names":[],"sources":["../../../src/providers/ManifestsProvider/ManifestsProvider.tsx"],"sourcesContent":["import type { ReactElement } from 'react';\nimport React, { createContext, useContext } from 'react';\n\nimport type { Manifest } from '@verdaccio/types';\n\nimport { useData } from '../../api/use-data';\nimport { getConfiguration } from '../../configuration';\nimport { APIRoute } from '../../store/routes';\nimport { stripTrailingSlash } from '../../store/utils';\n\nexport interface ManifestsContextProps {\n isError: boolean;\n isLoading: boolean;\n manifests: ManifestWeb[];\n}\n\nexport interface Author {\n name?: string;\n email?: string;\n url?: string;\n avatar?: string;\n}\n\nexport interface ManifestWeb extends Omit<Manifest, 'time' | 'author'> {\n time: string;\n author: Author;\n version: string;\n dist: any;\n}\n\nexport const ManifestsContext = createContext<Partial<ManifestsContextProps>>({});\n\nconst configuration = getConfiguration();\n\nconst ManifestsProvider: React.FC<{ children: ReactElement }> = ({ children }) => {\n const basePath = stripTrailingSlash(configuration.base);\n\n const data = useData<ManifestWeb[]>(basePath, APIRoute.PACKAGES);\n\n return (\n <ManifestsContext.Provider\n value={{\n manifests: (data.data as ManifestWeb[]) ?? [],\n isLoading: data.isLoading,\n isError: typeof data.error
|
|
1
|
+
{"version":3,"file":"ManifestsProvider.mjs","names":[],"sources":["../../../src/providers/ManifestsProvider/ManifestsProvider.tsx"],"sourcesContent":["import type { ReactElement } from 'react';\nimport React, { createContext, useContext } from 'react';\n\nimport type { Manifest } from '@verdaccio/types';\n\nimport { useData } from '../../api/use-data';\nimport { getConfiguration } from '../../configuration';\nimport { APIRoute } from '../../store/routes';\nimport { stripTrailingSlash } from '../../store/utils';\n\nexport interface ManifestsContextProps {\n isError: boolean;\n isLoading: boolean;\n manifests: ManifestWeb[];\n}\n\nexport interface Author {\n name?: string;\n email?: string;\n url?: string;\n avatar?: string;\n}\n\nexport interface ManifestWeb extends Omit<Manifest, 'time' | 'author'> {\n time: string;\n author: Author;\n version: string;\n dist: any;\n}\n\nexport const ManifestsContext = createContext<Partial<ManifestsContextProps>>({});\n\nconst configuration = getConfiguration();\n\nconst ManifestsProvider: React.FC<{ children: ReactElement }> = ({ children }) => {\n const basePath = stripTrailingSlash(configuration.base);\n\n const data = useData<ManifestWeb[]>(basePath, APIRoute.PACKAGES);\n\n return (\n <ManifestsContext.Provider\n value={{\n manifests: (data.data as ManifestWeb[]) ?? [],\n isLoading: data.isLoading,\n // any error counts (network failures have no `.code`), but a failed\n // revalidation must not hide an already-cached, renderable list\n isError: typeof data.error !== 'undefined' && typeof data.data === 'undefined',\n }}\n >\n {children}\n </ManifestsContext.Provider>\n );\n};\n\nexport default ManifestsProvider;\n\nexport const useManifests = () => useContext(ManifestsContext);\n"],"mappings":";;;;;;;AA8BA,IAAa,mBAAmB,cAA8C,CAAC,CAAC;AAEhF,IAAM,gBAAgB,iBAAiB;AAEvC,IAAM,qBAA2D,EAAE,eAAe;CAChF,MAAM,WAAW,mBAAmB,cAAc,IAAI;CAEtD,MAAM,OAAO,QAAuB,UAAU,SAAS,QAAQ;CAE/D,OACE,oBAAC,iBAAiB,UAAlB;EACE,OAAO;GACL,WAAY,KAAK,QAA0B,CAAC;GAC5C,WAAW,KAAK;GAGhB,SAAS,OAAO,KAAK,UAAU,eAAe,OAAO,KAAK,SAAS;EACrE;EAEC;CACwB,CAAA;AAE/B;AAIA,IAAa,qBAAqB,WAAW,gBAAgB"}
|
|
@@ -10,6 +10,7 @@ export interface SearchContextProps {
|
|
|
10
10
|
text: string;
|
|
11
11
|
signal?: AbortSignal;
|
|
12
12
|
}) => Promise<void>;
|
|
13
|
+
resetSearch: () => void;
|
|
13
14
|
}
|
|
14
15
|
export declare const SearchContext: React.Context<Partial<SearchContextProps>>;
|
|
15
16
|
export declare const SearchProvider: React.FC<{
|
|
@@ -16,18 +16,19 @@ var SearchContext = (0, react.createContext)({
|
|
|
16
16
|
var configuration = require_configuration.getConfiguration();
|
|
17
17
|
function useDataSearchMutation(basePath, route, method = "POST") {
|
|
18
18
|
const key = `${basePath}${route}`;
|
|
19
|
-
const { data, error, isMutating, trigger } = (0, swr_mutation.default)(key, (url, { arg }) => {
|
|
19
|
+
const { data, error, isMutating, trigger, reset } = (0, swr_mutation.default)(key, (url, { arg }) => {
|
|
20
20
|
return require_use_data_mutation.fetcher(`${url}${encodeURIComponent(arg?.text ?? "")}`, method, arg ?? {}, { signal: arg?.signal });
|
|
21
21
|
});
|
|
22
22
|
return {
|
|
23
23
|
data,
|
|
24
24
|
error,
|
|
25
25
|
isMutating,
|
|
26
|
-
trigger
|
|
26
|
+
trigger,
|
|
27
|
+
reset
|
|
27
28
|
};
|
|
28
29
|
}
|
|
29
30
|
var SearchProvider = ({ children }) => {
|
|
30
|
-
const { data, isMutating, error, trigger } = useDataSearchMutation(require_utils.stripTrailingSlash(configuration.base), require_routes.APIRoute.SEARCH, "GET");
|
|
31
|
+
const { data, isMutating, error, trigger, reset } = useDataSearchMutation(require_utils.stripTrailingSlash(configuration.base), require_routes.APIRoute.SEARCH, "GET");
|
|
31
32
|
const doSearch = async (query) => {
|
|
32
33
|
try {
|
|
33
34
|
await trigger({
|
|
@@ -35,15 +36,16 @@ var SearchProvider = ({ children }) => {
|
|
|
35
36
|
signal: query.signal
|
|
36
37
|
});
|
|
37
38
|
} catch (err) {
|
|
38
|
-
console.error("Search failed:", err);
|
|
39
|
+
if (err?.name !== "AbortError") console.error("Search failed:", err);
|
|
39
40
|
}
|
|
40
41
|
};
|
|
41
42
|
const value = {
|
|
42
43
|
searchResults: data ?? [],
|
|
43
44
|
isLoading: isMutating,
|
|
44
|
-
isError: !!error,
|
|
45
|
+
isError: !!error && error.name !== "AbortError",
|
|
45
46
|
error,
|
|
46
|
-
doSearch
|
|
47
|
+
doSearch,
|
|
48
|
+
resetSearch: reset
|
|
47
49
|
};
|
|
48
50
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SearchContext.Provider, {
|
|
49
51
|
value,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchProvider.js","names":[],"sources":["../../../src/providers/SearchProvider/SearchProvider.tsx"],"sourcesContent":["import type { ReactElement } from 'react';\nimport React, { createContext, useContext } from 'react';\nimport useSWRMutation from 'swr/mutation';\n\nimport type { SearchResultWeb } from '@verdaccio/types';\n\nimport { fetcher } from '../../api/use-data-mutation';\nimport { getConfiguration } from '../../configuration';\nimport { APIRoute } from '../../store/routes';\nimport { stripTrailingSlash } from '../../store/utils';\n\nexport interface SearchContextProps {\n error: Error | undefined;\n isLoading: boolean;\n isError: boolean;\n searchResults: SearchResultWeb[];\n doSearch: (query: { text: string; signal?: AbortSignal }) => Promise<void>;\n}\n\nexport const SearchContext = createContext<Partial<SearchContextProps>>({\n searchResults: [],\n isLoading: false,\n});\n\nconst configuration = getConfiguration();\n\nfunction useDataSearchMutation<T>(basePath: string, route: APIRoute | string, method = 'POST') {\n const key = `${basePath}${route}`;\n\n const { data, error, isMutating, trigger } = useSWRMutation<T, any, string, any>(\n key,\n (url, { arg }) => {\n return fetcher<T>(`${url}${encodeURIComponent(arg?.text ?? '')}`, method, arg ?? {}, {\n signal: arg?.signal,\n });\n }\n );\n\n return { data, error, isMutating, trigger };\n}\n\nexport const SearchProvider: React.FC<{ children: ReactElement }> = ({ children }) => {\n const basePath = stripTrailingSlash(configuration.base);\n\n const { data, isMutating, error, trigger } = useDataSearchMutation<SearchResultWeb[]>(\n basePath,\n APIRoute.SEARCH,\n 'GET'\n );\n\n const doSearch = async (query: { text: string; signal?: AbortSignal }) => {\n try {\n await trigger({ text: query.text, signal: query.signal });\n } catch (err: any) {\n console.error('Search failed:', err);\n }\n };\n\n const value: SearchContextProps = {\n searchResults: data ?? [],\n isLoading: isMutating,\n isError: !!error,\n error,\n doSearch,\n };\n\n return <SearchContext.Provider value={value}>{children}</SearchContext.Provider>;\n};\n\nexport default SearchProvider;\n\nexport const useSearch = () => useContext(SearchContext);\n"],"mappings":";;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"SearchProvider.js","names":[],"sources":["../../../src/providers/SearchProvider/SearchProvider.tsx"],"sourcesContent":["import type { ReactElement } from 'react';\nimport React, { createContext, useContext } from 'react';\nimport useSWRMutation from 'swr/mutation';\n\nimport type { SearchResultWeb } from '@verdaccio/types';\n\nimport { fetcher } from '../../api/use-data-mutation';\nimport { getConfiguration } from '../../configuration';\nimport { APIRoute } from '../../store/routes';\nimport { stripTrailingSlash } from '../../store/utils';\n\nexport interface SearchContextProps {\n error: Error | undefined;\n isLoading: boolean;\n isError: boolean;\n searchResults: SearchResultWeb[];\n doSearch: (query: { text: string; signal?: AbortSignal }) => Promise<void>;\n resetSearch: () => void;\n}\n\nexport const SearchContext = createContext<Partial<SearchContextProps>>({\n searchResults: [],\n isLoading: false,\n});\n\nconst configuration = getConfiguration();\n\nfunction useDataSearchMutation<T>(basePath: string, route: APIRoute | string, method = 'POST') {\n const key = `${basePath}${route}`;\n\n const { data, error, isMutating, trigger, reset } = useSWRMutation<T, any, string, any>(\n key,\n (url, { arg }) => {\n return fetcher<T>(`${url}${encodeURIComponent(arg?.text ?? '')}`, method, arg ?? {}, {\n signal: arg?.signal,\n });\n }\n );\n\n return { data, error, isMutating, trigger, reset };\n}\n\nexport const SearchProvider: React.FC<{ children: ReactElement }> = ({ children }) => {\n const basePath = stripTrailingSlash(configuration.base);\n\n const { data, isMutating, error, trigger, reset } = useDataSearchMutation<SearchResultWeb[]>(\n basePath,\n APIRoute.SEARCH,\n 'GET'\n );\n\n const doSearch = async (query: { text: string; signal?: AbortSignal }) => {\n try {\n await trigger({ text: query.text, signal: query.signal });\n } catch (err: any) {\n // an abort (user kept typing or navigated away) is expected control flow;\n // real failures are surfaced through the `isError` state below\n if (err?.name !== 'AbortError') {\n console.error('Search failed:', err);\n }\n }\n };\n\n const value: SearchContextProps = {\n searchResults: data ?? [],\n isLoading: isMutating,\n // an aborted request (user kept typing) is not an error worth showing\n isError: !!error && error.name !== 'AbortError',\n error,\n doSearch,\n resetSearch: reset,\n };\n\n return <SearchContext.Provider value={value}>{children}</SearchContext.Provider>;\n};\n\nexport default SearchProvider;\n\nexport const useSearch = () => useContext(SearchContext);\n"],"mappings":";;;;;;;;;;;AAoBA,IAAa,iBAAA,GAAgB,MAAA,cAAA,CAA2C;CACtE,eAAe,CAAC;CAChB,WAAW;AACb,CAAC;AAED,IAAM,gBAAgB,sBAAA,iBAAiB;AAEvC,SAAS,sBAAyB,UAAkB,OAA0B,SAAS,QAAQ;CAC7F,MAAM,MAAM,GAAG,WAAW;CAE1B,MAAM,EAAE,MAAM,OAAO,YAAY,SAAS,WAAA,GAAU,aAAA,QAAA,CAClD,MACC,KAAK,EAAE,UAAU;EAChB,OAAO,0BAAA,QAAW,GAAG,MAAM,mBAAmB,KAAK,QAAQ,EAAE,KAAK,QAAQ,OAAO,CAAC,GAAG,EACnF,QAAQ,KAAK,OACf,CAAC;CACH,CACF;CAEA,OAAO;EAAE;EAAM;EAAO;EAAY;EAAS;CAAM;AACnD;AAEA,IAAa,kBAAwD,EAAE,eAAe;CAGpF,MAAM,EAAE,MAAM,YAAY,OAAO,SAAS,UAAU,sBAFnC,cAAA,mBAAmB,cAAc,IAGhD,GACA,eAAA,SAAS,QACT,KACF;CAEA,MAAM,WAAW,OAAO,UAAkD;EACxE,IAAI;GACF,MAAM,QAAQ;IAAE,MAAM,MAAM;IAAM,QAAQ,MAAM;GAAO,CAAC;EAC1D,SAAS,KAAU;GAGjB,IAAI,KAAK,SAAS,cAChB,QAAQ,MAAM,kBAAkB,GAAG;EAEvC;CACF;CAEA,MAAM,QAA4B;EAChC,eAAe,QAAQ,CAAC;EACxB,WAAW;EAEX,SAAS,CAAC,CAAC,SAAS,MAAM,SAAS;EACnC;EACA;EACA,aAAa;CACf;CAEA,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAc,UAAf;EAA+B;EAAQ;CAAiC,CAAA;AACjF;AAIA,IAAa,mBAAA,GAAkB,MAAA,WAAA,CAAW,aAAa"}
|
|
@@ -13,18 +13,19 @@ var SearchContext = createContext({
|
|
|
13
13
|
var configuration = getConfiguration();
|
|
14
14
|
function useDataSearchMutation(basePath, route, method = "POST") {
|
|
15
15
|
const key = `${basePath}${route}`;
|
|
16
|
-
const { data, error, isMutating, trigger } = useSWRMutation(key, (url, { arg }) => {
|
|
16
|
+
const { data, error, isMutating, trigger, reset } = useSWRMutation(key, (url, { arg }) => {
|
|
17
17
|
return fetcher(`${url}${encodeURIComponent(arg?.text ?? "")}`, method, arg ?? {}, { signal: arg?.signal });
|
|
18
18
|
});
|
|
19
19
|
return {
|
|
20
20
|
data,
|
|
21
21
|
error,
|
|
22
22
|
isMutating,
|
|
23
|
-
trigger
|
|
23
|
+
trigger,
|
|
24
|
+
reset
|
|
24
25
|
};
|
|
25
26
|
}
|
|
26
27
|
var SearchProvider = ({ children }) => {
|
|
27
|
-
const { data, isMutating, error, trigger } = useDataSearchMutation(stripTrailingSlash(configuration.base), APIRoute.SEARCH, "GET");
|
|
28
|
+
const { data, isMutating, error, trigger, reset } = useDataSearchMutation(stripTrailingSlash(configuration.base), APIRoute.SEARCH, "GET");
|
|
28
29
|
const doSearch = async (query) => {
|
|
29
30
|
try {
|
|
30
31
|
await trigger({
|
|
@@ -32,15 +33,16 @@ var SearchProvider = ({ children }) => {
|
|
|
32
33
|
signal: query.signal
|
|
33
34
|
});
|
|
34
35
|
} catch (err) {
|
|
35
|
-
console.error("Search failed:", err);
|
|
36
|
+
if (err?.name !== "AbortError") console.error("Search failed:", err);
|
|
36
37
|
}
|
|
37
38
|
};
|
|
38
39
|
const value = {
|
|
39
40
|
searchResults: data ?? [],
|
|
40
41
|
isLoading: isMutating,
|
|
41
|
-
isError: !!error,
|
|
42
|
+
isError: !!error && error.name !== "AbortError",
|
|
42
43
|
error,
|
|
43
|
-
doSearch
|
|
44
|
+
doSearch,
|
|
45
|
+
resetSearch: reset
|
|
44
46
|
};
|
|
45
47
|
return /* @__PURE__ */ jsx(SearchContext.Provider, {
|
|
46
48
|
value,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchProvider.mjs","names":[],"sources":["../../../src/providers/SearchProvider/SearchProvider.tsx"],"sourcesContent":["import type { ReactElement } from 'react';\nimport React, { createContext, useContext } from 'react';\nimport useSWRMutation from 'swr/mutation';\n\nimport type { SearchResultWeb } from '@verdaccio/types';\n\nimport { fetcher } from '../../api/use-data-mutation';\nimport { getConfiguration } from '../../configuration';\nimport { APIRoute } from '../../store/routes';\nimport { stripTrailingSlash } from '../../store/utils';\n\nexport interface SearchContextProps {\n error: Error | undefined;\n isLoading: boolean;\n isError: boolean;\n searchResults: SearchResultWeb[];\n doSearch: (query: { text: string; signal?: AbortSignal }) => Promise<void>;\n}\n\nexport const SearchContext = createContext<Partial<SearchContextProps>>({\n searchResults: [],\n isLoading: false,\n});\n\nconst configuration = getConfiguration();\n\nfunction useDataSearchMutation<T>(basePath: string, route: APIRoute | string, method = 'POST') {\n const key = `${basePath}${route}`;\n\n const { data, error, isMutating, trigger } = useSWRMutation<T, any, string, any>(\n key,\n (url, { arg }) => {\n return fetcher<T>(`${url}${encodeURIComponent(arg?.text ?? '')}`, method, arg ?? {}, {\n signal: arg?.signal,\n });\n }\n );\n\n return { data, error, isMutating, trigger };\n}\n\nexport const SearchProvider: React.FC<{ children: ReactElement }> = ({ children }) => {\n const basePath = stripTrailingSlash(configuration.base);\n\n const { data, isMutating, error, trigger } = useDataSearchMutation<SearchResultWeb[]>(\n basePath,\n APIRoute.SEARCH,\n 'GET'\n );\n\n const doSearch = async (query: { text: string; signal?: AbortSignal }) => {\n try {\n await trigger({ text: query.text, signal: query.signal });\n } catch (err: any) {\n console.error('Search failed:', err);\n }\n };\n\n const value: SearchContextProps = {\n searchResults: data ?? [],\n isLoading: isMutating,\n isError: !!error,\n error,\n doSearch,\n };\n\n return <SearchContext.Provider value={value}>{children}</SearchContext.Provider>;\n};\n\nexport default SearchProvider;\n\nexport const useSearch = () => useContext(SearchContext);\n"],"mappings":";;;;;;;;
|
|
1
|
+
{"version":3,"file":"SearchProvider.mjs","names":[],"sources":["../../../src/providers/SearchProvider/SearchProvider.tsx"],"sourcesContent":["import type { ReactElement } from 'react';\nimport React, { createContext, useContext } from 'react';\nimport useSWRMutation from 'swr/mutation';\n\nimport type { SearchResultWeb } from '@verdaccio/types';\n\nimport { fetcher } from '../../api/use-data-mutation';\nimport { getConfiguration } from '../../configuration';\nimport { APIRoute } from '../../store/routes';\nimport { stripTrailingSlash } from '../../store/utils';\n\nexport interface SearchContextProps {\n error: Error | undefined;\n isLoading: boolean;\n isError: boolean;\n searchResults: SearchResultWeb[];\n doSearch: (query: { text: string; signal?: AbortSignal }) => Promise<void>;\n resetSearch: () => void;\n}\n\nexport const SearchContext = createContext<Partial<SearchContextProps>>({\n searchResults: [],\n isLoading: false,\n});\n\nconst configuration = getConfiguration();\n\nfunction useDataSearchMutation<T>(basePath: string, route: APIRoute | string, method = 'POST') {\n const key = `${basePath}${route}`;\n\n const { data, error, isMutating, trigger, reset } = useSWRMutation<T, any, string, any>(\n key,\n (url, { arg }) => {\n return fetcher<T>(`${url}${encodeURIComponent(arg?.text ?? '')}`, method, arg ?? {}, {\n signal: arg?.signal,\n });\n }\n );\n\n return { data, error, isMutating, trigger, reset };\n}\n\nexport const SearchProvider: React.FC<{ children: ReactElement }> = ({ children }) => {\n const basePath = stripTrailingSlash(configuration.base);\n\n const { data, isMutating, error, trigger, reset } = useDataSearchMutation<SearchResultWeb[]>(\n basePath,\n APIRoute.SEARCH,\n 'GET'\n );\n\n const doSearch = async (query: { text: string; signal?: AbortSignal }) => {\n try {\n await trigger({ text: query.text, signal: query.signal });\n } catch (err: any) {\n // an abort (user kept typing or navigated away) is expected control flow;\n // real failures are surfaced through the `isError` state below\n if (err?.name !== 'AbortError') {\n console.error('Search failed:', err);\n }\n }\n };\n\n const value: SearchContextProps = {\n searchResults: data ?? [],\n isLoading: isMutating,\n // an aborted request (user kept typing) is not an error worth showing\n isError: !!error && error.name !== 'AbortError',\n error,\n doSearch,\n resetSearch: reset,\n };\n\n return <SearchContext.Provider value={value}>{children}</SearchContext.Provider>;\n};\n\nexport default SearchProvider;\n\nexport const useSearch = () => useContext(SearchContext);\n"],"mappings":";;;;;;;;AAoBA,IAAa,gBAAgB,cAA2C;CACtE,eAAe,CAAC;CAChB,WAAW;AACb,CAAC;AAED,IAAM,gBAAgB,iBAAiB;AAEvC,SAAS,sBAAyB,UAAkB,OAA0B,SAAS,QAAQ;CAC7F,MAAM,MAAM,GAAG,WAAW;CAE1B,MAAM,EAAE,MAAM,OAAO,YAAY,SAAS,UAAU,eAClD,MACC,KAAK,EAAE,UAAU;EAChB,OAAO,QAAW,GAAG,MAAM,mBAAmB,KAAK,QAAQ,EAAE,KAAK,QAAQ,OAAO,CAAC,GAAG,EACnF,QAAQ,KAAK,OACf,CAAC;CACH,CACF;CAEA,OAAO;EAAE;EAAM;EAAO;EAAY;EAAS;CAAM;AACnD;AAEA,IAAa,kBAAwD,EAAE,eAAe;CAGpF,MAAM,EAAE,MAAM,YAAY,OAAO,SAAS,UAAU,sBAFnC,mBAAmB,cAAc,IAGhD,GACA,SAAS,QACT,KACF;CAEA,MAAM,WAAW,OAAO,UAAkD;EACxE,IAAI;GACF,MAAM,QAAQ;IAAE,MAAM,MAAM;IAAM,QAAQ,MAAM;GAAO,CAAC;EAC1D,SAAS,KAAU;GAGjB,IAAI,KAAK,SAAS,cAChB,QAAQ,MAAM,kBAAkB,GAAG;EAEvC;CACF;CAEA,MAAM,QAA4B;EAChC,eAAe,QAAQ,CAAC;EACxB,WAAW;EAEX,SAAS,CAAC,CAAC,SAAS,MAAM,SAAS;EACnC;EACA;EACA,aAAa;CACf;CAEA,OAAO,oBAAC,cAAc,UAAf;EAA+B;EAAQ;CAAiC,CAAA;AACjF;AAIA,IAAa,kBAAkB,WAAW,aAAa"}
|
|
@@ -2,8 +2,8 @@ const require_runtime = require("../../_virtual/_rolldown/runtime.js");
|
|
|
2
2
|
const require_useLocalStorage = require("../../hooks/useLocalStorage.js");
|
|
3
3
|
let react = require("react");
|
|
4
4
|
react = require_runtime.__toESM(react);
|
|
5
|
-
let react_jsx_runtime = require("react/jsx-runtime");
|
|
6
5
|
let react_i18next = require("react-i18next");
|
|
6
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
7
7
|
//#region src/providers/TranslatorProvider/TranslatorProvider.tsx
|
|
8
8
|
var I18nTranslatorContext = (0, react.createContext)({
|
|
9
9
|
setLanguage: (_lng) => {},
|
|
@@ -21,8 +21,10 @@ var TranslatorProvider = ({ children, onMount, i18n, listLanguages }) => {
|
|
|
21
21
|
await i18n.changeLanguage(language);
|
|
22
22
|
}, [i18n, language]);
|
|
23
23
|
(0, react.useEffect)(() => {
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
(async () => {
|
|
25
|
+
await changeLanguage();
|
|
26
|
+
onMount();
|
|
27
|
+
})();
|
|
26
28
|
}, [
|
|
27
29
|
language,
|
|
28
30
|
onMount,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TranslatorProvider.js","names":[],"sources":["../../../src/providers/TranslatorProvider/TranslatorProvider.tsx"],"sourcesContent":["import type { i18n } from 'i18next';\nimport type { FunctionComponent } from 'react';\nimport React, { createContext, useCallback, useContext, useEffect } from 'react';\nimport { I18nextProvider } from 'react-i18next';\n\nimport useLocalStorage from '../../hooks/useLocalStorage';\n\nexport type TranslatorProviderProps = {\n setLanguage: (lng: string) => void;\n language: string;\n listLanguages: LanguageItem[];\n};\n\nexport type LanguageItem = { lng: string; icon: any; menuKey: string };\n\nconst I18nTranslatorContext = createContext<TranslatorProviderProps>({\n setLanguage: (_lng: string) => {},\n language: 'en-US',\n listLanguages: [],\n});\n\n/**\n * Translator provider\n * @category Provider\n */\nconst TranslatorProvider: FunctionComponent<{\n children: React.ReactElement<any>;\n i18n: i18n;\n listLanguages: any;\n onMount: () => {};\n}> = ({ children, onMount, i18n, listLanguages }) => {\n const currentLanguage = i18n.languages?.[0];\n const [language, setLanguage] = useLocalStorage<string>('language', currentLanguage);\n const changeLanguage = useCallback(async () => {\n await i18n.changeLanguage(language);\n }, [i18n, language]);\n\n useEffect(() => {\n changeLanguage();\n
|
|
1
|
+
{"version":3,"file":"TranslatorProvider.js","names":[],"sources":["../../../src/providers/TranslatorProvider/TranslatorProvider.tsx"],"sourcesContent":["import type { i18n } from 'i18next';\nimport type { FunctionComponent } from 'react';\nimport React, { createContext, useCallback, useContext, useEffect } from 'react';\nimport { I18nextProvider } from 'react-i18next';\n\nimport useLocalStorage from '../../hooks/useLocalStorage';\n\nexport type TranslatorProviderProps = {\n setLanguage: (lng: string) => void;\n language: string;\n listLanguages: LanguageItem[];\n};\n\nexport type LanguageItem = { lng: string; icon: any; menuKey: string };\n\nconst I18nTranslatorContext = createContext<TranslatorProviderProps>({\n setLanguage: (_lng: string) => {},\n language: 'en-US',\n listLanguages: [],\n});\n\n/**\n * Translator provider\n * @category Provider\n */\nconst TranslatorProvider: FunctionComponent<{\n children: React.ReactElement<any>;\n i18n: i18n;\n listLanguages: any;\n onMount: () => {};\n}> = ({ children, onMount, i18n, listLanguages }) => {\n const currentLanguage = i18n.languages?.[0];\n const [language, setLanguage] = useLocalStorage<string>('language', currentLanguage);\n const changeLanguage = useCallback(async () => {\n await i18n.changeLanguage(language);\n }, [i18n, language]);\n\n useEffect(() => {\n // apply the persisted language first, so onMount consumers (e.g. the dayjs\n // locale loader) read the final i18n.language instead of the default\n (async () => {\n await changeLanguage();\n onMount();\n })();\n }, [language, onMount, changeLanguage]);\n\n return (\n <I18nextProvider i18n={i18n}>\n <I18nTranslatorContext.Provider value={{ setLanguage, language, listLanguages }}>\n {children}\n </I18nTranslatorContext.Provider>\n </I18nextProvider>\n );\n};\n\nexport default TranslatorProvider;\n\nexport const useLanguage = () => useContext(I18nTranslatorContext);\n"],"mappings":";;;;;;;AAeA,IAAM,yBAAA,GAAwB,MAAA,cAAA,CAAuC;CACnE,cAAc,SAAiB,CAAC;CAChC,UAAU;CACV,eAAe,CAAC;AAClB,CAAC;;;;;AAMD,IAAM,sBAKA,EAAE,UAAU,SAAS,MAAM,oBAAoB;CACnD,MAAM,kBAAkB,KAAK,YAAY;CACzC,MAAM,CAAC,UAAU,eAAe,wBAAA,QAAwB,YAAY,eAAe;CACnF,MAAM,kBAAA,GAAiB,MAAA,YAAA,CAAY,YAAY;EAC7C,MAAM,KAAK,eAAe,QAAQ;CACpC,GAAG,CAAC,MAAM,QAAQ,CAAC;CAEnB,CAAA,GAAA,MAAA,UAAA,OAAgB;EAGd,CAAC,YAAY;GACX,MAAM,eAAe;GACrB,QAAQ;EACV,EAAA,CAAG;CACL,GAAG;EAAC;EAAU;EAAS;CAAc,CAAC;CAEtC,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAA,iBAAD;EAAuB;EACrB,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,sBAAsB,UAAvB;GAAgC,OAAO;IAAE;IAAa;IAAU;GAAc;GAC3E;EAC6B,CAAA;CACjB,CAAA;AAErB;AAIA,IAAa,qBAAA,GAAoB,MAAA,WAAA,CAAW,qBAAqB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import useLocalStorage from "../../hooks/useLocalStorage.mjs";
|
|
2
2
|
import { createContext, useCallback, useContext, useEffect } from "react";
|
|
3
|
-
import { jsx } from "react/jsx-runtime";
|
|
4
3
|
import { I18nextProvider } from "react-i18next";
|
|
4
|
+
import { jsx } from "react/jsx-runtime";
|
|
5
5
|
//#region src/providers/TranslatorProvider/TranslatorProvider.tsx
|
|
6
6
|
var I18nTranslatorContext = createContext({
|
|
7
7
|
setLanguage: (_lng) => {},
|
|
@@ -19,8 +19,10 @@ var TranslatorProvider = ({ children, onMount, i18n, listLanguages }) => {
|
|
|
19
19
|
await i18n.changeLanguage(language);
|
|
20
20
|
}, [i18n, language]);
|
|
21
21
|
useEffect(() => {
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
(async () => {
|
|
23
|
+
await changeLanguage();
|
|
24
|
+
onMount();
|
|
25
|
+
})();
|
|
24
26
|
}, [
|
|
25
27
|
language,
|
|
26
28
|
onMount,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TranslatorProvider.mjs","names":[],"sources":["../../../src/providers/TranslatorProvider/TranslatorProvider.tsx"],"sourcesContent":["import type { i18n } from 'i18next';\nimport type { FunctionComponent } from 'react';\nimport React, { createContext, useCallback, useContext, useEffect } from 'react';\nimport { I18nextProvider } from 'react-i18next';\n\nimport useLocalStorage from '../../hooks/useLocalStorage';\n\nexport type TranslatorProviderProps = {\n setLanguage: (lng: string) => void;\n language: string;\n listLanguages: LanguageItem[];\n};\n\nexport type LanguageItem = { lng: string; icon: any; menuKey: string };\n\nconst I18nTranslatorContext = createContext<TranslatorProviderProps>({\n setLanguage: (_lng: string) => {},\n language: 'en-US',\n listLanguages: [],\n});\n\n/**\n * Translator provider\n * @category Provider\n */\nconst TranslatorProvider: FunctionComponent<{\n children: React.ReactElement<any>;\n i18n: i18n;\n listLanguages: any;\n onMount: () => {};\n}> = ({ children, onMount, i18n, listLanguages }) => {\n const currentLanguage = i18n.languages?.[0];\n const [language, setLanguage] = useLocalStorage<string>('language', currentLanguage);\n const changeLanguage = useCallback(async () => {\n await i18n.changeLanguage(language);\n }, [i18n, language]);\n\n useEffect(() => {\n changeLanguage();\n
|
|
1
|
+
{"version":3,"file":"TranslatorProvider.mjs","names":[],"sources":["../../../src/providers/TranslatorProvider/TranslatorProvider.tsx"],"sourcesContent":["import type { i18n } from 'i18next';\nimport type { FunctionComponent } from 'react';\nimport React, { createContext, useCallback, useContext, useEffect } from 'react';\nimport { I18nextProvider } from 'react-i18next';\n\nimport useLocalStorage from '../../hooks/useLocalStorage';\n\nexport type TranslatorProviderProps = {\n setLanguage: (lng: string) => void;\n language: string;\n listLanguages: LanguageItem[];\n};\n\nexport type LanguageItem = { lng: string; icon: any; menuKey: string };\n\nconst I18nTranslatorContext = createContext<TranslatorProviderProps>({\n setLanguage: (_lng: string) => {},\n language: 'en-US',\n listLanguages: [],\n});\n\n/**\n * Translator provider\n * @category Provider\n */\nconst TranslatorProvider: FunctionComponent<{\n children: React.ReactElement<any>;\n i18n: i18n;\n listLanguages: any;\n onMount: () => {};\n}> = ({ children, onMount, i18n, listLanguages }) => {\n const currentLanguage = i18n.languages?.[0];\n const [language, setLanguage] = useLocalStorage<string>('language', currentLanguage);\n const changeLanguage = useCallback(async () => {\n await i18n.changeLanguage(language);\n }, [i18n, language]);\n\n useEffect(() => {\n // apply the persisted language first, so onMount consumers (e.g. the dayjs\n // locale loader) read the final i18n.language instead of the default\n (async () => {\n await changeLanguage();\n onMount();\n })();\n }, [language, onMount, changeLanguage]);\n\n return (\n <I18nextProvider i18n={i18n}>\n <I18nTranslatorContext.Provider value={{ setLanguage, language, listLanguages }}>\n {children}\n </I18nTranslatorContext.Provider>\n </I18nextProvider>\n );\n};\n\nexport default TranslatorProvider;\n\nexport const useLanguage = () => useContext(I18nTranslatorContext);\n"],"mappings":";;;;;AAeA,IAAM,wBAAwB,cAAuC;CACnE,cAAc,SAAiB,CAAC;CAChC,UAAU;CACV,eAAe,CAAC;AAClB,CAAC;;;;;AAMD,IAAM,sBAKA,EAAE,UAAU,SAAS,MAAM,oBAAoB;CACnD,MAAM,kBAAkB,KAAK,YAAY;CACzC,MAAM,CAAC,UAAU,eAAe,gBAAwB,YAAY,eAAe;CACnF,MAAM,iBAAiB,YAAY,YAAY;EAC7C,MAAM,KAAK,eAAe,QAAQ;CACpC,GAAG,CAAC,MAAM,QAAQ,CAAC;CAEnB,gBAAgB;EAGd,CAAC,YAAY;GACX,MAAM,eAAe;GACrB,QAAQ;EACV,EAAA,CAAG;CACL,GAAG;EAAC;EAAU;EAAS;CAAc,CAAC;CAEtC,OACE,oBAAC,iBAAD;EAAuB;EACrB,UAAA,oBAAC,sBAAsB,UAAvB;GAAgC,OAAO;IAAE;IAAa;IAAU;GAAc;GAC3E;EAC6B,CAAA;CACjB,CAAA;AAErB;AAIA,IAAa,oBAAoB,WAAW,qBAAqB"}
|
|
@@ -20,8 +20,8 @@ var VersionProvider = ({ children }) => {
|
|
|
20
20
|
const readmeData = require_use_data.useData(basePath, require_routes.APIRoute.README, packageName, packageVersion);
|
|
21
21
|
const sidebarData = require_use_data.useData(basePath, require_routes.APIRoute.SIDEBAR, packageName, packageVersion);
|
|
22
22
|
const isLoading = readmeData.isLoading || sidebarData.isLoading;
|
|
23
|
-
const error =
|
|
24
|
-
const errorCode =
|
|
23
|
+
const error = sidebarData.error;
|
|
24
|
+
const errorCode = sidebarData.error?.code;
|
|
25
25
|
const value = (0, react.useMemo)(() => ({
|
|
26
26
|
packageMeta: sidebarData.data,
|
|
27
27
|
readMe: readmeData.data,
|
|
@@ -31,7 +31,7 @@ var VersionProvider = ({ children }) => {
|
|
|
31
31
|
isForbidden: errorCode === 403,
|
|
32
32
|
isUnAuthorized: errorCode === 401,
|
|
33
33
|
hasNotBeenFound: errorCode === 404,
|
|
34
|
-
isError:
|
|
34
|
+
isError: error !== void 0,
|
|
35
35
|
error
|
|
36
36
|
}), [
|
|
37
37
|
sidebarData.data,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VersionProvider.js","names":[],"sources":["../../../src/providers/VersionProvider/VersionProvider.tsx"],"sourcesContent":["import React, { createContext, useContext, useMemo } from 'react';\nimport { useParams } from 'react-router';\n\nimport { useData } from '../../api/use-data';\nimport { getConfiguration } from '../../configuration';\nimport { APIRoute } from '../../store/routes';\nimport { stripTrailingSlash } from '../../store/utils';\nimport type { PackageMetaInterface } from '../../types/packageMeta';\n\nfunction getRouterPackageName(packageName: string, scope?: string): string {\n return scope ? `${scope}/${packageName}` : packageName;\n}\n\nexport interface ApiError extends Error {\n code?: number;\n}\n\nexport interface DetailContextProps {\n error: ApiError | undefined;\n hasNotBeenFound: boolean;\n isForbidden: boolean;\n isUnAuthorized: boolean;\n isError: boolean;\n isLoading: boolean;\n packageMeta?: PackageMetaInterface;\n packageName: string;\n packageVersion?: string;\n readMe?: string;\n}\n\nexport const DetailContext = createContext<DetailContextProps | undefined>(undefined);\n\nconst VersionProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n const {\n scope,\n package: pkgName,\n version: packageVersion,\n } = useParams<Record<'scope' | 'package' | 'version', string | undefined>>();\n\n const configuration = getConfiguration();\n const basePath = stripTrailingSlash(configuration.base);\n const packageName = getRouterPackageName(pkgName ?? '', scope);\n\n const readmeData = useData<string>(basePath, APIRoute.README, packageName, packageVersion);\n\n const sidebarData = useData<PackageMetaInterface>(\n basePath,\n APIRoute.SIDEBAR,\n packageName,\n packageVersion\n );\n const isLoading = readmeData.isLoading || sidebarData.isLoading;\n const error: ApiError | undefined =
|
|
1
|
+
{"version":3,"file":"VersionProvider.js","names":[],"sources":["../../../src/providers/VersionProvider/VersionProvider.tsx"],"sourcesContent":["import React, { createContext, useContext, useMemo } from 'react';\nimport { useParams } from 'react-router';\n\nimport { useData } from '../../api/use-data';\nimport { getConfiguration } from '../../configuration';\nimport { APIRoute } from '../../store/routes';\nimport { stripTrailingSlash } from '../../store/utils';\nimport type { PackageMetaInterface } from '../../types/packageMeta';\n\nfunction getRouterPackageName(packageName: string, scope?: string): string {\n return scope ? `${scope}/${packageName}` : packageName;\n}\n\nexport interface ApiError extends Error {\n code?: number;\n}\n\nexport interface DetailContextProps {\n error: ApiError | undefined;\n hasNotBeenFound: boolean;\n isForbidden: boolean;\n isUnAuthorized: boolean;\n isError: boolean;\n isLoading: boolean;\n packageMeta?: PackageMetaInterface;\n packageName: string;\n packageVersion?: string;\n readMe?: string;\n}\n\nexport const DetailContext = createContext<DetailContextProps | undefined>(undefined);\n\nconst VersionProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n const {\n scope,\n package: pkgName,\n version: packageVersion,\n } = useParams<Record<'scope' | 'package' | 'version', string | undefined>>();\n\n const configuration = getConfiguration();\n const basePath = stripTrailingSlash(configuration.base);\n const packageName = getRouterPackageName(pkgName ?? '', scope);\n\n const readmeData = useData<string>(basePath, APIRoute.README, packageName, packageVersion);\n\n const sidebarData = useData<PackageMetaInterface>(\n basePath,\n APIRoute.SIDEBAR,\n packageName,\n packageVersion\n );\n const isLoading = readmeData.isLoading || sidebarData.isLoading;\n // only the sidebar data drives the whole page; a readme-only failure must\n // not blank a page that can render from sidebar data\n const error: ApiError | undefined = sidebarData.error;\n const errorCode = (sidebarData.error as ApiError)?.code;\n\n const value = useMemo<DetailContextProps>(\n () => ({\n packageMeta: sidebarData.data,\n readMe: readmeData.data,\n packageName,\n packageVersion,\n isLoading,\n isForbidden: errorCode === 403,\n isUnAuthorized: errorCode === 401,\n hasNotBeenFound: errorCode === 404,\n // network failures reject without a `.code`, they are still errors\n isError: error !== undefined,\n error,\n }),\n [sidebarData.data, readmeData.data, packageName, packageVersion, isLoading, errorCode, error]\n );\n\n return <DetailContext.Provider value={value}>{children}</DetailContext.Provider>;\n};\n\nexport default VersionProvider;\n\nexport const useVersion = (): DetailContextProps => {\n const context = useContext(DetailContext);\n if (context === undefined) {\n throw new Error('useVersion must be used within a VersionProvider');\n }\n return context;\n};\n"],"mappings":";;;;;;;;;;AASA,SAAS,qBAAqB,aAAqB,OAAwB;CACzE,OAAO,QAAQ,GAAG,MAAM,GAAG,gBAAgB;AAC7C;AAmBA,IAAa,iBAAA,GAAgB,MAAA,cAAA,CAA8C,KAAA,CAAS;AAEpF,IAAM,mBAA4D,EAAE,eAAe;CACjF,MAAM,EACJ,OACA,SAAS,SACT,SAAS,oBAAA,GACP,aAAA,UAAA,CAAuE;CAE3E,MAAM,gBAAgB,sBAAA,iBAAiB;CACvC,MAAM,WAAW,cAAA,mBAAmB,cAAc,IAAI;CACtD,MAAM,cAAc,qBAAqB,WAAW,IAAI,KAAK;CAE7D,MAAM,aAAa,iBAAA,QAAgB,UAAU,eAAA,SAAS,QAAQ,aAAa,cAAc;CAEzF,MAAM,cAAc,iBAAA,QAClB,UACA,eAAA,SAAS,SACT,aACA,cACF;CACA,MAAM,YAAY,WAAW,aAAa,YAAY;CAGtD,MAAM,QAA8B,YAAY;CAChD,MAAM,YAAa,YAAY,OAAoB;CAEnD,MAAM,SAAA,GAAQ,MAAA,QAAA,QACL;EACL,aAAa,YAAY;EACzB,QAAQ,WAAW;EACnB;EACA;EACA;EACA,aAAa,cAAc;EAC3B,gBAAgB,cAAc;EAC9B,iBAAiB,cAAc;EAE/B,SAAS,UAAU,KAAA;EACnB;CACF,IACA;EAAC,YAAY;EAAM,WAAW;EAAM;EAAa;EAAgB;EAAW;EAAW;CAAK,CAC9F;CAEA,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAc,UAAf;EAA+B;EAAQ;CAAiC,CAAA;AACjF;AAIA,IAAa,mBAAuC;CAClD,MAAM,WAAA,GAAU,MAAA,WAAA,CAAW,aAAa;CACxC,IAAI,YAAY,KAAA,GACd,MAAM,IAAI,MAAM,kDAAkD;CAEpE,OAAO;AACT"}
|
|
@@ -18,8 +18,8 @@ var VersionProvider = ({ children }) => {
|
|
|
18
18
|
const readmeData = useData(basePath, APIRoute.README, packageName, packageVersion);
|
|
19
19
|
const sidebarData = useData(basePath, APIRoute.SIDEBAR, packageName, packageVersion);
|
|
20
20
|
const isLoading = readmeData.isLoading || sidebarData.isLoading;
|
|
21
|
-
const error =
|
|
22
|
-
const errorCode =
|
|
21
|
+
const error = sidebarData.error;
|
|
22
|
+
const errorCode = sidebarData.error?.code;
|
|
23
23
|
const value = useMemo(() => ({
|
|
24
24
|
packageMeta: sidebarData.data,
|
|
25
25
|
readMe: readmeData.data,
|
|
@@ -29,7 +29,7 @@ var VersionProvider = ({ children }) => {
|
|
|
29
29
|
isForbidden: errorCode === 403,
|
|
30
30
|
isUnAuthorized: errorCode === 401,
|
|
31
31
|
hasNotBeenFound: errorCode === 404,
|
|
32
|
-
isError:
|
|
32
|
+
isError: error !== void 0,
|
|
33
33
|
error
|
|
34
34
|
}), [
|
|
35
35
|
sidebarData.data,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VersionProvider.mjs","names":[],"sources":["../../../src/providers/VersionProvider/VersionProvider.tsx"],"sourcesContent":["import React, { createContext, useContext, useMemo } from 'react';\nimport { useParams } from 'react-router';\n\nimport { useData } from '../../api/use-data';\nimport { getConfiguration } from '../../configuration';\nimport { APIRoute } from '../../store/routes';\nimport { stripTrailingSlash } from '../../store/utils';\nimport type { PackageMetaInterface } from '../../types/packageMeta';\n\nfunction getRouterPackageName(packageName: string, scope?: string): string {\n return scope ? `${scope}/${packageName}` : packageName;\n}\n\nexport interface ApiError extends Error {\n code?: number;\n}\n\nexport interface DetailContextProps {\n error: ApiError | undefined;\n hasNotBeenFound: boolean;\n isForbidden: boolean;\n isUnAuthorized: boolean;\n isError: boolean;\n isLoading: boolean;\n packageMeta?: PackageMetaInterface;\n packageName: string;\n packageVersion?: string;\n readMe?: string;\n}\n\nexport const DetailContext = createContext<DetailContextProps | undefined>(undefined);\n\nconst VersionProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n const {\n scope,\n package: pkgName,\n version: packageVersion,\n } = useParams<Record<'scope' | 'package' | 'version', string | undefined>>();\n\n const configuration = getConfiguration();\n const basePath = stripTrailingSlash(configuration.base);\n const packageName = getRouterPackageName(pkgName ?? '', scope);\n\n const readmeData = useData<string>(basePath, APIRoute.README, packageName, packageVersion);\n\n const sidebarData = useData<PackageMetaInterface>(\n basePath,\n APIRoute.SIDEBAR,\n packageName,\n packageVersion\n );\n const isLoading = readmeData.isLoading || sidebarData.isLoading;\n const error: ApiError | undefined =
|
|
1
|
+
{"version":3,"file":"VersionProvider.mjs","names":[],"sources":["../../../src/providers/VersionProvider/VersionProvider.tsx"],"sourcesContent":["import React, { createContext, useContext, useMemo } from 'react';\nimport { useParams } from 'react-router';\n\nimport { useData } from '../../api/use-data';\nimport { getConfiguration } from '../../configuration';\nimport { APIRoute } from '../../store/routes';\nimport { stripTrailingSlash } from '../../store/utils';\nimport type { PackageMetaInterface } from '../../types/packageMeta';\n\nfunction getRouterPackageName(packageName: string, scope?: string): string {\n return scope ? `${scope}/${packageName}` : packageName;\n}\n\nexport interface ApiError extends Error {\n code?: number;\n}\n\nexport interface DetailContextProps {\n error: ApiError | undefined;\n hasNotBeenFound: boolean;\n isForbidden: boolean;\n isUnAuthorized: boolean;\n isError: boolean;\n isLoading: boolean;\n packageMeta?: PackageMetaInterface;\n packageName: string;\n packageVersion?: string;\n readMe?: string;\n}\n\nexport const DetailContext = createContext<DetailContextProps | undefined>(undefined);\n\nconst VersionProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n const {\n scope,\n package: pkgName,\n version: packageVersion,\n } = useParams<Record<'scope' | 'package' | 'version', string | undefined>>();\n\n const configuration = getConfiguration();\n const basePath = stripTrailingSlash(configuration.base);\n const packageName = getRouterPackageName(pkgName ?? '', scope);\n\n const readmeData = useData<string>(basePath, APIRoute.README, packageName, packageVersion);\n\n const sidebarData = useData<PackageMetaInterface>(\n basePath,\n APIRoute.SIDEBAR,\n packageName,\n packageVersion\n );\n const isLoading = readmeData.isLoading || sidebarData.isLoading;\n // only the sidebar data drives the whole page; a readme-only failure must\n // not blank a page that can render from sidebar data\n const error: ApiError | undefined = sidebarData.error;\n const errorCode = (sidebarData.error as ApiError)?.code;\n\n const value = useMemo<DetailContextProps>(\n () => ({\n packageMeta: sidebarData.data,\n readMe: readmeData.data,\n packageName,\n packageVersion,\n isLoading,\n isForbidden: errorCode === 403,\n isUnAuthorized: errorCode === 401,\n hasNotBeenFound: errorCode === 404,\n // network failures reject without a `.code`, they are still errors\n isError: error !== undefined,\n error,\n }),\n [sidebarData.data, readmeData.data, packageName, packageVersion, isLoading, errorCode, error]\n );\n\n return <DetailContext.Provider value={value}>{children}</DetailContext.Provider>;\n};\n\nexport default VersionProvider;\n\nexport const useVersion = (): DetailContextProps => {\n const context = useContext(DetailContext);\n if (context === undefined) {\n throw new Error('useVersion must be used within a VersionProvider');\n }\n return context;\n};\n"],"mappings":";;;;;;;;AASA,SAAS,qBAAqB,aAAqB,OAAwB;CACzE,OAAO,QAAQ,GAAG,MAAM,GAAG,gBAAgB;AAC7C;AAmBA,IAAa,gBAAgB,cAA8C,KAAA,CAAS;AAEpF,IAAM,mBAA4D,EAAE,eAAe;CACjF,MAAM,EACJ,OACA,SAAS,SACT,SAAS,mBACP,UAAuE;CAE3E,MAAM,gBAAgB,iBAAiB;CACvC,MAAM,WAAW,mBAAmB,cAAc,IAAI;CACtD,MAAM,cAAc,qBAAqB,WAAW,IAAI,KAAK;CAE7D,MAAM,aAAa,QAAgB,UAAU,SAAS,QAAQ,aAAa,cAAc;CAEzF,MAAM,cAAc,QAClB,UACA,SAAS,SACT,aACA,cACF;CACA,MAAM,YAAY,WAAW,aAAa,YAAY;CAGtD,MAAM,QAA8B,YAAY;CAChD,MAAM,YAAa,YAAY,OAAoB;CAEnD,MAAM,QAAQ,eACL;EACL,aAAa,YAAY;EACzB,QAAQ,WAAW;EACnB;EACA;EACA;EACA,aAAa,cAAc;EAC3B,gBAAgB,cAAc;EAC9B,iBAAiB,cAAc;EAE/B,SAAS,UAAU,KAAA;EACnB;CACF,IACA;EAAC,YAAY;EAAM,WAAW;EAAM;EAAa;EAAgB;EAAW;EAAW;CAAK,CAC9F;CAEA,OAAO,oBAAC,cAAc,UAAf;EAA+B;EAAQ;CAAiC,CAAA;AACjF;AAIA,IAAa,mBAAuC;CAClD,MAAM,UAAU,WAAW,aAAa;CACxC,IAAI,YAAY,KAAA,GACd,MAAM,IAAI,MAAM,kDAAkD;CAEpE,OAAO;AACT"}
|
|
@@ -3,8 +3,8 @@ let _emotion_styled = require("@emotion/styled");
|
|
|
3
3
|
_emotion_styled = require_runtime.__toESM(_emotion_styled);
|
|
4
4
|
let react = require("react");
|
|
5
5
|
react = require_runtime.__toESM(react);
|
|
6
|
-
let react_jsx_runtime = require("react/jsx-runtime");
|
|
7
6
|
let react_i18next = require("react-i18next");
|
|
7
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
8
8
|
let _mui_material_Tab = require("@mui/material/Tab");
|
|
9
9
|
_mui_material_Tab = require_runtime.__toESM(_mui_material_Tab);
|
|
10
10
|
let _mui_material_Tabs = require("@mui/material/Tabs");
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import styled from "@emotion/styled";
|
|
2
2
|
import "react";
|
|
3
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
3
|
import { useTranslation } from "react-i18next";
|
|
4
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
5
|
import Tab from "@mui/material/Tab";
|
|
6
6
|
import Tabs from "@mui/material/Tabs";
|
|
7
7
|
import useMediaQuery from "@mui/material/useMediaQuery";
|
|
@@ -9,8 +9,8 @@ let _emotion_styled = require("@emotion/styled");
|
|
|
9
9
|
_emotion_styled = require_runtime.__toESM(_emotion_styled);
|
|
10
10
|
let react = require("react");
|
|
11
11
|
react = require_runtime.__toESM(react);
|
|
12
|
-
let react_jsx_runtime = require("react/jsx-runtime");
|
|
13
12
|
let react_i18next = require("react-i18next");
|
|
13
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
14
14
|
let country_flag_icons_react_3x2 = require("country-flag-icons/react/3x2");
|
|
15
15
|
country_flag_icons_react_3x2 = require_runtime.__toESM(country_flag_icons_react_3x2);
|
|
16
16
|
//#region src/sections/Footer/Footer.tsx
|
|
@@ -6,8 +6,8 @@ import { Inner, Left, Love, Right, Wrapper } from "./styles.mjs";
|
|
|
6
6
|
import "../../index.mjs";
|
|
7
7
|
import styled from "@emotion/styled";
|
|
8
8
|
import "react";
|
|
9
|
-
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
10
9
|
import { Trans, useTranslation } from "react-i18next";
|
|
10
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
11
11
|
import * as FlagsIcon from "country-flag-icons/react/3x2";
|
|
12
12
|
//#region src/sections/Footer/Footer.tsx
|
|
13
13
|
function goToVerdaccioWebsite() {
|
|
@@ -11,12 +11,12 @@ const require_HeaderSettingsDialog = require("./HeaderSettingsDialog.js");
|
|
|
11
11
|
require("../../index.js");
|
|
12
12
|
let react = require("react");
|
|
13
13
|
react = require_runtime.__toESM(react);
|
|
14
|
-
let react_jsx_runtime = require("react/jsx-runtime");
|
|
15
14
|
let react_i18next = require("react-i18next");
|
|
15
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
16
16
|
let _mui_material_Button = require("@mui/material/Button");
|
|
17
17
|
_mui_material_Button = require_runtime.__toESM(_mui_material_Button);
|
|
18
18
|
//#region src/sections/Header/Header.tsx
|
|
19
|
-
var Header = ({ HeaderInfoDialog, isPlainHeader
|
|
19
|
+
var Header = ({ HeaderInfoDialog, isPlainHeader }) => {
|
|
20
20
|
const { t } = (0, react_i18next.useTranslation)();
|
|
21
21
|
const [isInfoDialogOpen, setOpenInfoDialog] = (0, react.useState)(false);
|
|
22
22
|
const [isSettingsDialogOpen, setSettingsDialogOpen] = (0, react.useState)(false);
|
|
@@ -24,23 +24,25 @@ var Header = ({ HeaderInfoDialog, isPlainHeader, tokenCheckIntervalMs = 36e5 })
|
|
|
24
24
|
const [showLoginModal, setShowLoginModal] = (0, react.useState)(false);
|
|
25
25
|
const { configOptions } = require_AppConfigurationProvider.useConfig();
|
|
26
26
|
const { userState, logOutUser } = require_AuthProvider.useAuth();
|
|
27
|
-
const tokenRef = (0, react.useRef)(userState?.token);
|
|
28
27
|
const logOutUserRef = (0, react.useRef)(logOutUser);
|
|
29
|
-
(0, react.useEffect)(() => {
|
|
30
|
-
tokenRef.current = userState?.token;
|
|
31
|
-
}, [userState?.token]);
|
|
32
28
|
(0, react.useEffect)(() => {
|
|
33
29
|
logOutUserRef.current = logOutUser;
|
|
34
30
|
}, [logOutUser]);
|
|
35
31
|
(0, react.useEffect)(() => {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
32
|
+
const token = userState?.token;
|
|
33
|
+
if (!token) return;
|
|
34
|
+
let timer;
|
|
35
|
+
const arm = () => {
|
|
36
|
+
const remaining = require_token.tokenExpireInMs(token);
|
|
37
|
+
if (remaining === null || remaining <= 0) {
|
|
38
|
+
logOutUserRef.current?.();
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
timer = setTimeout(arm, Math.min(remaining, 2 ** 31 - 1));
|
|
42
|
+
};
|
|
43
|
+
arm();
|
|
44
|
+
return () => clearTimeout(timer);
|
|
45
|
+
}, [userState?.token]);
|
|
44
46
|
const handleLogout = () => {
|
|
45
47
|
logOutUser?.();
|
|
46
48
|
setShowLoginModal(false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Header.js","names":[],"sources":["../../../src/sections/Header/Header.tsx"],"sourcesContent":["import Button from '@mui/material/Button';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { LoginDialog, Search, useAuth, useConfig } from '../../';\nimport {
|
|
1
|
+
{"version":3,"file":"Header.js","names":[],"sources":["../../../src/sections/Header/Header.tsx"],"sourcesContent":["import Button from '@mui/material/Button';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { LoginDialog, Search, useAuth, useConfig } from '../../';\nimport { tokenExpireInMs } from '../../utils/token';\nimport HeaderLeft from './HeaderLeft';\nimport HeaderRight from './HeaderRight';\nimport HeaderSettingsDialog from './HeaderSettingsDialog';\nimport { InnerMobileNavBar, InnerNavBar, MobileNavBar, NavBar } from './styles';\n\ntype Props = {\n HeaderInfoDialog?: React.FC<any>;\n isPlainHeader?: boolean;\n};\n\nconst Header: React.FC<Props> = ({ HeaderInfoDialog, isPlainHeader }) => {\n const { t } = useTranslation();\n const [isInfoDialogOpen, setOpenInfoDialog] = useState<boolean>(false);\n const [isSettingsDialogOpen, setSettingsDialogOpen] = useState<boolean>(false);\n const [showMobileNavBar, setShowMobileNavBar] = useState<boolean>(false);\n const [showLoginModal, setShowLoginModal] = useState<boolean>(false);\n const { configOptions } = useConfig();\n const { userState, logOutUser } = useAuth();\n\n // Use a ref to always have the latest logout in the timer callback\n const logOutUserRef = useRef(logOutUser);\n useEffect(() => {\n logOutUserRef.current = logOutUser;\n }, [logOutUser]);\n\n // log out exactly when the token expires; polling reloaded the page at an\n // arbitrary moment up to a minute later, mid-interaction\n useEffect(() => {\n const token = userState?.token;\n if (!token) {\n return;\n }\n let timer: ReturnType<typeof setTimeout> | undefined;\n const arm = () => {\n const remaining = tokenExpireInMs(token);\n if (remaining === null || remaining <= 0) {\n logOutUserRef.current?.();\n return;\n }\n // setTimeout overflows above 2^31-1 ms; re-arm for far-away expiries\n timer = setTimeout(arm, Math.min(remaining, 2 ** 31 - 1));\n };\n arm();\n return () => clearTimeout(timer);\n }, [userState?.token]);\n\n const handleLogout = () => {\n logOutUser?.();\n setShowLoginModal(false);\n };\n if (isPlainHeader) {\n return (\n <NavBar data-testid=\"header\" position=\"static\">\n <InnerNavBar data-testid=\"inner-nav-bar\">\n <HeaderLeft showSearch={false} />\n <HeaderRight\n hasLogin={false}\n onLogout={() => {}}\n onOpenRegistryInfoDialog={() => {}}\n onOpenSettingsDialog={() => {}}\n onToggleLogin={() => {}}\n onToggleMobileNav={() => {}}\n showInfo={false}\n showSearch={false}\n showSettings={false}\n showThemeSwitch={false}\n username={''}\n />\n </InnerNavBar>\n </NavBar>\n );\n }\n\n return (\n <>\n <NavBar data-testid=\"header\" position=\"static\">\n <InnerNavBar data-testid=\"inner-nav-bar\">\n <HeaderLeft showSearch={configOptions.showSearch} />\n <HeaderRight\n hasLogin={configOptions?.login}\n onLogout={handleLogout}\n onOpenRegistryInfoDialog={() => setOpenInfoDialog(true)}\n onOpenSettingsDialog={() => setSettingsDialogOpen(true)}\n onToggleLogin={() => setShowLoginModal(!showLoginModal)}\n onToggleMobileNav={() => setShowMobileNavBar(!showMobileNavBar)}\n showInfo={configOptions.showInfo}\n showSearch={configOptions.showSearch}\n showSettings={configOptions.showSettings}\n showThemeSwitch={configOptions.showThemeSwitch}\n username={userState?.username}\n />\n </InnerNavBar>\n <HeaderSettingsDialog\n isOpen={isSettingsDialogOpen}\n onCloseDialog={() => setSettingsDialogOpen(false)}\n />\n {HeaderInfoDialog ? (\n <HeaderInfoDialog\n dialogTitle={t('dialog.registry-info.title')}\n isOpen={isInfoDialogOpen}\n onCloseDialog={() => setOpenInfoDialog(false)}\n />\n ) : null}\n </NavBar>\n {showMobileNavBar && (\n <MobileNavBar data-testid=\"mobile-nav-bar\">\n <InnerMobileNavBar>\n <Search />\n </InnerMobileNavBar>\n <Button color=\"inherit\" onClick={() => setShowMobileNavBar(false)}>\n {t('button.cancel')}\n </Button>\n </MobileNavBar>\n )}\n {!userState?.username && (\n <LoginDialog onClose={() => setShowLoginModal(false)} open={showLoginModal} />\n )}\n </>\n );\n};\n\nexport default Header;\n"],"mappings":";;;;;;;;;;;;;;;;;;AAgBA,IAAM,UAA2B,EAAE,kBAAkB,oBAAoB;CACvE,MAAM,EAAE,OAAA,GAAM,cAAA,eAAA,CAAe;CAC7B,MAAM,CAAC,kBAAkB,sBAAA,GAAqB,MAAA,SAAA,CAAkB,KAAK;CACrE,MAAM,CAAC,sBAAsB,0BAAA,GAAyB,MAAA,SAAA,CAAkB,KAAK;CAC7E,MAAM,CAAC,kBAAkB,wBAAA,GAAuB,MAAA,SAAA,CAAkB,KAAK;CACvE,MAAM,CAAC,gBAAgB,sBAAA,GAAqB,MAAA,SAAA,CAAkB,KAAK;CACnE,MAAM,EAAE,kBAAkB,iCAAA,UAAU;CACpC,MAAM,EAAE,WAAW,eAAe,qBAAA,QAAQ;CAG1C,MAAM,iBAAA,GAAgB,MAAA,OAAA,CAAO,UAAU;CACvC,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,cAAc,UAAU;CAC1B,GAAG,CAAC,UAAU,CAAC;CAIf,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,MAAM,QAAQ,WAAW;EACzB,IAAI,CAAC,OACH;EAEF,IAAI;EACJ,MAAM,YAAY;GAChB,MAAM,YAAY,cAAA,gBAAgB,KAAK;GACvC,IAAI,cAAc,QAAQ,aAAa,GAAG;IACxC,cAAc,UAAU;IACxB;GACF;GAEA,QAAQ,WAAW,KAAK,KAAK,IAAI,WAAW,KAAK,KAAK,CAAC,CAAC;EAC1D;EACA,IAAI;EACJ,aAAa,aAAa,KAAK;CACjC,GAAG,CAAC,WAAW,KAAK,CAAC;CAErB,MAAM,qBAAqB;EACzB,aAAa;EACb,kBAAkB,KAAK;CACzB;CACA,IAAI,eACF,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAA,QAAD;EAAQ,eAAY;EAAS,UAAS;EACpC,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,eAAA,aAAD;GAAa,eAAY;GAAzB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,mBAAA,SAAD,EAAY,YAAY,MAAQ,CAAA,GAChC,iBAAA,GAAA,kBAAA,IAAA,CAAC,oBAAA,SAAD;IACE,UAAU;IACV,gBAAgB,CAAC;IACjB,gCAAgC,CAAC;IACjC,4BAA4B,CAAC;IAC7B,qBAAqB,CAAC;IACtB,yBAAyB,CAAC;IAC1B,UAAU;IACV,YAAY;IACZ,cAAc;IACd,iBAAiB;IACjB,UAAU;GACX,CAAA,CACU;;CACP,CAAA;CAIZ,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAA,kBAAA,UAAA,EAAA,UAAA;EACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,eAAA,QAAD;GAAQ,eAAY;GAAS,UAAS;GAAtC,UAAA;IACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,eAAA,aAAD;KAAa,eAAY;KAAzB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,mBAAA,SAAD,EAAY,YAAY,cAAc,WAAa,CAAA,GACnD,iBAAA,GAAA,kBAAA,IAAA,CAAC,oBAAA,SAAD;MACE,UAAU,eAAe;MACzB,UAAU;MACV,gCAAgC,kBAAkB,IAAI;MACtD,4BAA4B,sBAAsB,IAAI;MACtD,qBAAqB,kBAAkB,CAAC,cAAc;MACtD,yBAAyB,oBAAoB,CAAC,gBAAgB;MAC9D,UAAU,cAAc;MACxB,YAAY,cAAc;MAC1B,cAAc,cAAc;MAC5B,iBAAiB,cAAc;MAC/B,UAAU,WAAW;KACtB,CAAA,CACU;;IACb,iBAAA,GAAA,kBAAA,IAAA,CAAC,6BAAA,SAAD;KACE,QAAQ;KACR,qBAAqB,sBAAsB,KAAK;IACjD,CAAA;IACA,mBACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,kBAAD;KACE,aAAa,EAAE,4BAA4B;KAC3C,QAAQ;KACR,qBAAqB,kBAAkB,KAAK;IAC7C,CAAA,IACC;GACE;;EACP,oBACC,iBAAA,GAAA,kBAAA,KAAA,CAAC,eAAA,cAAD;GAAc,eAAY;GAA1B,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAA,mBAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAA,SAAD,CAAS,CAAA,EACQ,CAAA,GACnB,iBAAA,GAAA,kBAAA,IAAA,CAAC,qBAAA,SAAD;IAAQ,OAAM;IAAU,eAAe,oBAAoB,KAAK;IAC7D,UAAA,EAAE,eAAe;GACZ,CAAA,CACI;;EAEf,CAAC,WAAW,YACX,iBAAA,GAAA,kBAAA,IAAA,CAAC,oBAAA,SAAD;GAAa,eAAe,kBAAkB,KAAK;GAAG,MAAM;EAAiB,CAAA;CAE/E,EAAA,CAAA;AAEN"}
|