@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
|
@@ -13,7 +13,6 @@ const require_FileBinary = require("../Icons/FileBinary.js");
|
|
|
13
13
|
const require_Law = require("../Icons/Law.js");
|
|
14
14
|
require("../Icons/index.js");
|
|
15
15
|
const require_KeywordListItems = require("../Keywords/KeywordListItems.js");
|
|
16
|
-
const require_Link = require("../Link/Link.js");
|
|
17
16
|
const require_styles = require("./styles.js");
|
|
18
17
|
require("../../index.js");
|
|
19
18
|
let _emotion_styled = require("@emotion/styled");
|
|
@@ -22,8 +21,8 @@ let _mui_material_Tooltip = require("@mui/material/Tooltip");
|
|
|
22
21
|
_mui_material_Tooltip = require_runtime.__toESM(_mui_material_Tooltip);
|
|
23
22
|
let react = require("react");
|
|
24
23
|
react = require_runtime.__toESM(react);
|
|
25
|
-
let react_jsx_runtime = require("react/jsx-runtime");
|
|
26
24
|
let react_i18next = require("react-i18next");
|
|
25
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
27
26
|
let _mui_icons_material_BugReport = require("@mui/icons-material/BugReport");
|
|
28
27
|
_mui_icons_material_BugReport = require_runtime.__toESM(_mui_icons_material_BugReport);
|
|
29
28
|
let _mui_icons_material_CloudDownload = require("@mui/icons-material/CloudDownload");
|
|
@@ -58,7 +57,7 @@ var Package = ({ author: { name: authorName, avatar: authorAvatar }, bugs, descr
|
|
|
58
57
|
src: authorAvatar
|
|
59
58
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_styles.Details, { children: name })] }) });
|
|
60
59
|
};
|
|
61
|
-
const renderFileSize = () => dist?.unpackedSize
|
|
60
|
+
const renderFileSize = () => dist?.unpackedSize ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_styles.OverviewItem, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(StyledFileBinary, {}), require_utils.fileSizeSI(dist.unpackedSize)] }) : null;
|
|
62
61
|
const renderLicenseInfo = () => license && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_styles.OverviewItem, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(StyledLaw, {}), license] });
|
|
63
62
|
const renderPublishedInfo = () => time && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_styles.OverviewItem, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(StyledTime, {}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_styles.Published, {
|
|
64
63
|
title: require_utils.formatDate(time),
|
|
@@ -77,34 +76,34 @@ var Package = ({ author: { name: authorName, avatar: authorAvatar }, bugs, descr
|
|
|
77
76
|
})
|
|
78
77
|
})
|
|
79
78
|
});
|
|
80
|
-
const renderBugsLink = () =>
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_styles.IconButton, {
|
|
79
|
+
const renderBugsLink = () => {
|
|
80
|
+
const bugsUrl = require_utils.getBugsUrl(bugs);
|
|
81
|
+
return bugsUrl && require_url.isURL(bugsUrl) && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_LinkExternal.default, {
|
|
82
|
+
to: bugsUrl,
|
|
83
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material_Tooltip.default, {
|
|
86
84
|
"aria-label": t("package.bugs"),
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
onClick: () => {
|
|
95
|
-
handleDownload(dist.tarball);
|
|
96
|
-
},
|
|
97
|
-
to: "#",
|
|
98
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material_Tooltip.default, {
|
|
99
|
-
"aria-label": t("package.download", { what: t("package.the-tar-file") }),
|
|
100
|
-
title: t("package.tarball"),
|
|
101
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_styles.IconButton, {
|
|
102
|
-
"aria-label": t("package.download"),
|
|
103
|
-
color: "primary",
|
|
104
|
-
"data-testid": "download-tarball",
|
|
105
|
-
size: "large",
|
|
106
|
-
children: isLoading ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material_CircularProgress.default, { size: 13 }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_icons_material_CloudDownload.default, {})
|
|
85
|
+
title: t("package.open-an-issue"),
|
|
86
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_styles.IconButton, {
|
|
87
|
+
"aria-label": t("package.bugs"),
|
|
88
|
+
color: "primary",
|
|
89
|
+
size: "large",
|
|
90
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_icons_material_BugReport.default, {})
|
|
91
|
+
})
|
|
107
92
|
})
|
|
93
|
+
});
|
|
94
|
+
};
|
|
95
|
+
const renderDownloadLink = () => dist?.tarball && require_url.isURL(dist.tarball) && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material_Tooltip.default, {
|
|
96
|
+
"aria-label": t("package.download", { what: t("package.the-tar-file") }),
|
|
97
|
+
title: t("package.tarball"),
|
|
98
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_styles.IconButton, {
|
|
99
|
+
"aria-label": t("package.download"),
|
|
100
|
+
color: "primary",
|
|
101
|
+
"data-testid": "download-tarball",
|
|
102
|
+
onClick: () => {
|
|
103
|
+
handleDownload(dist.tarball);
|
|
104
|
+
},
|
|
105
|
+
size: "large",
|
|
106
|
+
children: isLoading ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material_CircularProgress.default, { size: 13 }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_icons_material_CloudDownload.default, {})
|
|
108
107
|
})
|
|
109
108
|
});
|
|
110
109
|
const renderPrimaryComponent = () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Package.js","names":[],"sources":["../../../src/components/Package/Package.tsx"],"sourcesContent":["import { css } from '@emotion/react';\nimport styled from '@emotion/styled';\nimport BugReport from '@mui/icons-material/BugReport';\nimport DownloadIcon from '@mui/icons-material/CloudDownload';\nimport HomeIcon from '@mui/icons-material/Home';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport Grid from '@mui/material/Grid';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport Tooltip from '@mui/material/Tooltip';\nimport { common, grey } from '@mui/material/colors';\nimport React, { useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport type { Theme } from '../../';\nimport { Link, LinkExternal, useDownload, useManifests } from '../../';\nimport { FileBinary, Law, Time, Version } from '../../components/Icons';\nimport { getConfiguration } from '../../configuration';\nimport type { Author as PackageAuthor } from '../../providers/ManifestsProvider/ManifestsProvider';\nimport type { PackageMetaInterface } from '../../types/packageMeta';\nimport { Route, url, utils } from '../../utils';\nimport KeywordListItems from '../Keywords/KeywordListItems';\nimport {\n Author,\n Avatar,\n Description,\n Details,\n GridRightAligned,\n IconButton,\n OverviewItem,\n PackageListItemText,\n PackageTitle,\n Published,\n Wrapper,\n WrapperLink,\n} from './styles';\n\ninterface Bugs {\n url: string;\n}\n\ninterface Dist {\n unpackedSize: number;\n tarball: string;\n}\n\nexport interface PackageInterface {\n name: string;\n version: string;\n time?: number | string;\n author: PackageAuthor;\n description?: string;\n keywords?: PackageMetaInterface['latest']['keywords'];\n license?: PackageMetaInterface['latest']['license'];\n homepage?: string;\n bugs?: Bugs;\n dist?: Dist;\n showDownload?: boolean;\n}\n\nconst Package: React.FC<PackageInterface> = ({\n author: { name: authorName, avatar: authorAvatar },\n bugs,\n description,\n dist,\n homepage,\n keywords,\n license,\n name: packageName,\n time,\n showDownload = true,\n version,\n}) => {\n const config = getConfiguration();\n const { t } = useTranslation();\n const { isLoading } = useManifests();\n const { downloadTarball } = useDownload();\n\n const handleDownload = useCallback(\n async (tarballDist: string) => {\n // FIXME: check, the dist might be different thant npmjs\n const link = tarballDist.replace(`https://registry.npmjs.org/`, config.base);\n downloadTarball?.({ link });\n },\n [config, downloadTarball]\n );\n\n const renderVersionInfo = (): React.ReactNode =>\n version && (\n <OverviewItem>\n <StyledVersion />\n {t('package.version', { version })}\n </OverviewItem>\n );\n\n const renderAuthorInfo = (): React.ReactNode => {\n const name = utils.getAuthorName(authorName);\n return (\n <OverviewItem>\n <Author>\n <Avatar alt={name} src={authorAvatar} />\n <Details>{name}</Details>\n </Author>\n </OverviewItem>\n );\n };\n\n const renderFileSize = (): React.ReactNode =>\n dist?.unpackedSize && (\n <OverviewItem>\n <StyledFileBinary />\n {utils.fileSizeSI(dist.unpackedSize)}\n </OverviewItem>\n );\n\n const renderLicenseInfo = (): React.ReactNode =>\n license && (\n <OverviewItem>\n <StyledLaw />\n {license as string}\n </OverviewItem>\n );\n\n const renderPublishedInfo = (): React.ReactNode =>\n time && (\n <OverviewItem>\n <StyledTime />\n <Published title={utils.formatDate(time)}>\n {t('package.published-on', { time: utils.formatDateDistance(time) })}\n </Published>\n </OverviewItem>\n );\n\n const renderHomePageLink = (): React.ReactNode =>\n homepage &&\n url.isURL(homepage) && (\n <LinkExternal to={homepage}>\n <Tooltip aria-label={t('package.homepage')} title={t('package.visit-home-page')}>\n <IconButton aria-label={t('package.homepage')} color=\"primary\" size=\"large\">\n <HomeIcon />\n </IconButton>\n </Tooltip>\n </LinkExternal>\n );\n\n const renderBugsLink = (): React.ReactNode =>\n bugs?.url &&\n url.isURL(bugs.url) && (\n <LinkExternal to={bugs.url}>\n <Tooltip aria-label={t('package.bugs')} title={t('package.open-an-issue')}>\n <IconButton aria-label={t('package.bugs')} color=\"primary\" size=\"large\">\n <BugReport />\n </IconButton>\n </Tooltip>\n </LinkExternal>\n );\n\n const renderDownloadLink = (): React.ReactNode =>\n dist?.tarball &&\n url.isURL(dist.tarball) && (\n <Link\n onClick={() => {\n handleDownload(dist.tarball);\n }}\n to=\"#\"\n >\n <Tooltip\n aria-label={t('package.download', { what: t('package.the-tar-file') })}\n title={t('package.tarball')}\n >\n <IconButton\n aria-label={t('package.download')}\n color=\"primary\"\n data-testid=\"download-tarball\"\n size=\"large\"\n >\n {isLoading ? <CircularProgress size={13} /> : <DownloadIcon />}\n </IconButton>\n </Tooltip>\n </Link>\n );\n\n const renderPrimaryComponent = (): React.ReactNode => {\n return (\n <Grid alignItems=\"center\" container={true} size={{ xs: 12 }} wrap=\"wrap\">\n <Grid size=\"grow\">\n <WrapperLink to={`${Route.DETAIL}${packageName}`}>\n <PackageTitle className=\"package-title\" data-testid=\"package-title\">\n {packageName}\n </PackageTitle>\n </WrapperLink>\n </Grid>\n <GridRightAligned size=\"auto\">\n {renderHomePageLink()}\n {renderBugsLink()}\n {showDownload && renderDownloadLink()}\n </GridRightAligned>\n </Grid>\n );\n };\n\n const renderSecondaryComponent = (): React.ReactNode => <Description>{description}</Description>;\n\n const renderPackageListItemText = (): React.ReactNode => (\n <PackageListItemText\n primary={renderPrimaryComponent()}\n secondary={renderSecondaryComponent()}\n />\n );\n\n const renderKeywords = (): React.ReactNode => (\n <ListItem alignItems={'flex-start'} sx={{ py: 0, my: 0 }}>\n <List sx={{ p: 0, my: 0 }}>\n <KeywordListItems keywords={keywords} />\n </List>\n </ListItem>\n );\n\n return (\n <Wrapper className={'package'} data-testid=\"package-item-list\">\n <ListItem alignItems={'flex-start'} sx={{ mb: 0 }}>\n {renderPackageListItemText()}\n </ListItem>\n {keywords && keywords?.length > 0 ? renderKeywords() : null}\n <ListItem alignItems={'flex-start'} sx={{ mt: 0 }}>\n {renderAuthorInfo()}\n {renderVersionInfo()}\n {renderPublishedInfo()}\n {renderFileSize()}\n {renderLicenseInfo()}\n </ListItem>\n </Wrapper>\n );\n};\n\nexport default Package;\n\nconst iconStyle = ({ theme }: { theme: Theme }) => css`\n margin: 0 10px 0 0;\n fill: ${theme.palette.mode === 'light' ? grey[900] : common.white};\n`;\n\nconst StyledVersion = styled(Version)<{ theme?: Theme }>`\n ${iconStyle};\n`;\n\nconst StyledFileBinary = styled(FileBinary)<{ theme?: Theme }>`\n ${iconStyle};\n`;\n\nconst StyledLaw = styled(Law)<{ theme?: Theme }>`\n ${iconStyle};\n`;\n\nconst StyledTime = styled(Time)<{ theme?: Theme }>`\n ${iconStyle};\n`;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4DA,IAAM,WAAuC,EAC3C,QAAQ,EAAE,MAAM,YAAY,QAAQ,gBACpC,MACA,aACA,MACA,UACA,UACA,SACA,MAAM,aACN,MACA,eAAe,MACf,cACI;CACJ,MAAM,SAAS,sBAAA,iBAAiB;CAChC,MAAM,EAAE,OAAA,GAAM,cAAA,eAAA,CAAe;CAC7B,MAAM,EAAE,cAAc,0BAAA,aAAa;CACnC,MAAM,EAAE,oBAAoB,yBAAA,YAAY;CAExC,MAAM,kBAAA,GAAiB,MAAA,YAAA,CACrB,OAAO,gBAAwB;EAE7B,MAAM,OAAO,YAAY,QAAQ,+BAA+B,OAAO,IAAI;EAC3E,kBAAkB,EAAE,KAAK,CAAC;CAC5B,GACA,CAAC,QAAQ,eAAe,CAC1B;CAEA,MAAM,0BACJ,WACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,eAAA,cAAD,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAD,CAAgB,CAAA,GACf,EAAE,mBAAmB,EAAE,QAAQ,CAAC,CACrB,EAAA,CAAA;CAGlB,MAAM,yBAA0C;EAC9C,MAAM,OAAA,cAAA,cAA2B,UAAU;EAC3C,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAA,cAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,eAAA,QAAD,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAA,QAAD;GAAQ,KAAK;GAAM,KAAK;EAAe,CAAA,GACvC,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAA,SAAD,EAAA,UAAU,KAAc,CAAA,CAClB,EAAA,CAAA,EACI,CAAA;CAElB;CAEA,MAAM,uBACJ,MAAM,gBACJ,iBAAA,GAAA,kBAAA,KAAA,CAAC,eAAA,cAAD,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,kBAAD,CAAmB,CAAA,GAAA,cAAA,WACD,KAAK,YAAY,CACvB,EAAA,CAAA;CAGlB,MAAM,0BACJ,WACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,eAAA,cAAD,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD,CAAY,CAAA,GACX,OACW,EAAA,CAAA;CAGlB,MAAM,4BACJ,QACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,eAAA,cAAD,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD,CAAa,CAAA,GACb,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAA,WAAD;EAAW,OAAA,cAAA,WAAwB,IAAI;EACpC,UAAA,EAAE,wBAAwB,EAAE,MAAA,cAAA,mBAA+B,IAAI,EAAE,CAAC;CAC1D,CAAA,CACC,EAAA,CAAA;CAGlB,MAAM,2BACJ,YAAA,YAAA,MACU,QAAQ,KAChB,iBAAA,GAAA,kBAAA,IAAA,CAAC,qBAAA,SAAD;EAAc,IAAI;EAChB,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,sBAAA,SAAD;GAAS,cAAY,EAAE,kBAAkB;GAAG,OAAO,EAAE,yBAAyB;GAC5E,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAA,YAAD;IAAY,cAAY,EAAE,kBAAkB;IAAG,OAAM;IAAU,MAAK;IAClE,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,yBAAA,SAAD,CAAW,CAAA;GACD,CAAA;EACL,CAAA;CACG,CAAA;CAGlB,MAAM,uBACJ,MAAM,OAAA,YAAA,MACI,KAAK,GAAG,KAChB,iBAAA,GAAA,kBAAA,IAAA,CAAC,qBAAA,SAAD;EAAc,IAAI,KAAK;EACrB,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,sBAAA,SAAD;GAAS,cAAY,EAAE,cAAc;GAAG,OAAO,EAAE,uBAAuB;GACtE,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAA,YAAD;IAAY,cAAY,EAAE,cAAc;IAAG,OAAM;IAAU,MAAK;IAC9D,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,8BAAA,SAAD,CAAY,CAAA;GACF,CAAA;EACL,CAAA;CACG,CAAA;CAGlB,MAAM,2BACJ,MAAM,WAAA,YAAA,MACI,KAAK,OAAO,KACpB,iBAAA,GAAA,kBAAA,IAAA,CAAC,aAAA,SAAD;EACE,eAAe;GACb,eAAe,KAAK,OAAO;EAC7B;EACA,IAAG;EAEH,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,sBAAA,SAAD;GACE,cAAY,EAAE,oBAAoB,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC;GACrE,OAAO,EAAE,iBAAiB;GAE1B,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAA,YAAD;IACE,cAAY,EAAE,kBAAkB;IAChC,OAAM;IACN,eAAY;IACZ,MAAK;IAEJ,UAAA,YAAY,iBAAA,GAAA,kBAAA,IAAA,CAAC,+BAAA,SAAD,EAAkB,MAAM,GAAK,CAAA,IAAI,iBAAA,GAAA,kBAAA,IAAA,CAAC,kCAAA,SAAD,CAAe,CAAA;GACnD,CAAA;EACL,CAAA;CACL,CAAA;CAGV,MAAM,+BAAgD;EACpD,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,mBAAA,SAAD;GAAM,YAAW;GAAS,WAAW;GAAM,MAAM,EAAE,IAAI,GAAG;GAAG,MAAK;GAAlE,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,mBAAA,SAAD;IAAM,MAAK;IACT,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAA,aAAD;KAAa,IAAI,GAAG,eAAA,MAAM,SAAS;KACjC,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAA,cAAD;MAAc,WAAU;MAAgB,eAAY;MACjD,UAAA;KACW,CAAA;IACH,CAAA;GACT,CAAA,GACN,iBAAA,GAAA,kBAAA,KAAA,CAAC,eAAA,kBAAD;IAAkB,MAAK;IAAvB,UAAA;KACG,mBAAmB;KACnB,eAAe;KACf,gBAAgB,mBAAmB;IACpB;GACd,CAAA,CAAA;;CAEV;CAEA,MAAM,iCAAkD,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAA,aAAD,EAAA,UAAc,YAAyB,CAAA;CAE/F,MAAM,kCACJ,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAA,qBAAD;EACE,SAAS,uBAAuB;EAChC,WAAW,yBAAyB;CACrC,CAAA;CAGH,MAAM,uBACJ,iBAAA,GAAA,kBAAA,IAAA,CAAC,uBAAA,SAAD;EAAU,YAAY;EAAc,IAAI;GAAE,IAAI;GAAG,IAAI;EAAE;EACrD,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,mBAAA,SAAD;GAAM,IAAI;IAAE,GAAG;IAAG,IAAI;GAAE;GACtB,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,yBAAA,SAAD,EAA4B,SAAW,CAAA;EACnC,CAAA;CACE,CAAA;CAGZ,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,eAAA,SAAD;EAAS,WAAW;EAAW,eAAY;EAA3C,UAAA;GACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,uBAAA,SAAD;IAAU,YAAY;IAAc,IAAI,EAAE,IAAI,EAAE;IAC7C,UAAA,0BAA0B;GACnB,CAAA;GACT,YAAY,UAAU,SAAS,IAAI,eAAe,IAAI;GACvD,iBAAA,GAAA,kBAAA,KAAA,CAAC,uBAAA,SAAD;IAAU,YAAY;IAAc,IAAI,EAAE,IAAI,EAAE;IAAhD,UAAA;KACG,iBAAiB;KACjB,kBAAkB;KAClB,oBAAoB;KACpB,eAAe;KACf,kBAAkB;IACX;;EACH;;AAEb;AAIA,IAAM,aAAa,EAAE,YAA8B,eAAA,GAAG;;UAE5C,MAAM,QAAQ,SAAS,UAAU,qBAAA,KAAK,OAAO,qBAAA,OAAO,MAAM;;AAGpE,IAAM,gBAAgB,CAAA,GAAA,gBAAA,QAAA,CAAO,gBAAA,OAAO,CAAC;IACjC,UAAU;;AAGd,IAAM,mBAAmB,CAAA,GAAA,gBAAA,QAAA,CAAO,mBAAA,UAAU,CAAC;IACvC,UAAU;;AAGd,IAAM,YAAY,CAAA,GAAA,gBAAA,QAAA,CAAO,YAAA,GAAG,CAAC;IACzB,UAAU;;AAGd,IAAM,aAAa,CAAA,GAAA,gBAAA,QAAA,CAAO,aAAA,IAAI,CAAC;IAC3B,UAAU"}
|
|
1
|
+
{"version":3,"file":"Package.js","names":[],"sources":["../../../src/components/Package/Package.tsx"],"sourcesContent":["import { css } from '@emotion/react';\nimport styled from '@emotion/styled';\nimport BugReport from '@mui/icons-material/BugReport';\nimport DownloadIcon from '@mui/icons-material/CloudDownload';\nimport HomeIcon from '@mui/icons-material/Home';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport Grid from '@mui/material/Grid';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport Tooltip from '@mui/material/Tooltip';\nimport { common, grey } from '@mui/material/colors';\nimport React, { useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport type { Theme } from '../../';\nimport { LinkExternal, useDownload, useManifests } from '../../';\nimport { FileBinary, Law, Time, Version } from '../../components/Icons';\nimport { getConfiguration } from '../../configuration';\nimport type { Author as PackageAuthor } from '../../providers/ManifestsProvider/ManifestsProvider';\nimport type { PackageMetaInterface } from '../../types/packageMeta';\nimport { Route, url, utils } from '../../utils';\nimport KeywordListItems from '../Keywords/KeywordListItems';\nimport {\n Author,\n Avatar,\n Description,\n Details,\n GridRightAligned,\n IconButton,\n OverviewItem,\n PackageListItemText,\n PackageTitle,\n Published,\n Wrapper,\n WrapperLink,\n} from './styles';\n\ninterface Bugs {\n url: string;\n}\n\ninterface Dist {\n unpackedSize: number;\n tarball: string;\n}\n\nexport interface PackageInterface {\n name: string;\n version: string;\n time?: number | string;\n author: PackageAuthor;\n description?: string;\n keywords?: PackageMetaInterface['latest']['keywords'];\n license?: PackageMetaInterface['latest']['license'];\n homepage?: string;\n bugs?: Bugs | string;\n dist?: Dist;\n showDownload?: boolean;\n}\n\nconst Package: React.FC<PackageInterface> = ({\n author: { name: authorName, avatar: authorAvatar },\n bugs,\n description,\n dist,\n homepage,\n keywords,\n license,\n name: packageName,\n time,\n showDownload = true,\n version,\n}) => {\n const config = getConfiguration();\n const { t } = useTranslation();\n const { isLoading } = useManifests();\n const { downloadTarball } = useDownload();\n\n const handleDownload = useCallback(\n async (tarballDist: string) => {\n // FIXME: check, the dist might be different thant npmjs\n const link = tarballDist.replace(`https://registry.npmjs.org/`, config.base);\n downloadTarball?.({ link });\n },\n [config, downloadTarball]\n );\n\n const renderVersionInfo = (): React.ReactNode =>\n version && (\n <OverviewItem>\n <StyledVersion />\n {t('package.version', { version })}\n </OverviewItem>\n );\n\n const renderAuthorInfo = (): React.ReactNode => {\n const name = utils.getAuthorName(authorName);\n return (\n <OverviewItem>\n <Author>\n <Avatar alt={name} src={authorAvatar} />\n <Details>{name}</Details>\n </Author>\n </OverviewItem>\n );\n };\n\n const renderFileSize = (): React.ReactNode =>\n dist?.unpackedSize ? (\n <OverviewItem>\n <StyledFileBinary />\n {utils.fileSizeSI(dist.unpackedSize)}\n </OverviewItem>\n ) : null;\n\n const renderLicenseInfo = (): React.ReactNode =>\n license && (\n <OverviewItem>\n <StyledLaw />\n {license as string}\n </OverviewItem>\n );\n\n const renderPublishedInfo = (): React.ReactNode =>\n time && (\n <OverviewItem>\n <StyledTime />\n <Published title={utils.formatDate(time)}>\n {t('package.published-on', { time: utils.formatDateDistance(time) })}\n </Published>\n </OverviewItem>\n );\n\n const renderHomePageLink = (): React.ReactNode =>\n homepage &&\n url.isURL(homepage) && (\n <LinkExternal to={homepage}>\n <Tooltip aria-label={t('package.homepage')} title={t('package.visit-home-page')}>\n <IconButton aria-label={t('package.homepage')} color=\"primary\" size=\"large\">\n <HomeIcon />\n </IconButton>\n </Tooltip>\n </LinkExternal>\n );\n\n const renderBugsLink = (): React.ReactNode => {\n // bugs can be the object form or a plain url string, both valid in npm\n const bugsUrl = utils.getBugsUrl(bugs);\n return (\n bugsUrl &&\n url.isURL(bugsUrl) && (\n <LinkExternal to={bugsUrl}>\n <Tooltip aria-label={t('package.bugs')} title={t('package.open-an-issue')}>\n <IconButton aria-label={t('package.bugs')} color=\"primary\" size=\"large\">\n <BugReport />\n </IconButton>\n </Tooltip>\n </LinkExternal>\n )\n );\n };\n\n const renderDownloadLink = (): React.ReactNode =>\n dist?.tarball &&\n url.isURL(dist.tarball) && (\n // a plain button: wrapping it in <Link to=\"#\"> pushed a stray `#` entry\n // into the browser history on every download\n <Tooltip\n aria-label={t('package.download', { what: t('package.the-tar-file') })}\n title={t('package.tarball')}\n >\n <IconButton\n aria-label={t('package.download')}\n color=\"primary\"\n data-testid=\"download-tarball\"\n onClick={() => {\n handleDownload(dist.tarball);\n }}\n size=\"large\"\n >\n {isLoading ? <CircularProgress size={13} /> : <DownloadIcon />}\n </IconButton>\n </Tooltip>\n );\n\n const renderPrimaryComponent = (): React.ReactNode => {\n return (\n <Grid alignItems=\"center\" container={true} size={{ xs: 12 }} wrap=\"wrap\">\n <Grid size=\"grow\">\n <WrapperLink to={`${Route.DETAIL}${packageName}`}>\n <PackageTitle className=\"package-title\" data-testid=\"package-title\">\n {packageName}\n </PackageTitle>\n </WrapperLink>\n </Grid>\n <GridRightAligned size=\"auto\">\n {renderHomePageLink()}\n {renderBugsLink()}\n {showDownload && renderDownloadLink()}\n </GridRightAligned>\n </Grid>\n );\n };\n\n const renderSecondaryComponent = (): React.ReactNode => <Description>{description}</Description>;\n\n const renderPackageListItemText = (): React.ReactNode => (\n <PackageListItemText\n primary={renderPrimaryComponent()}\n secondary={renderSecondaryComponent()}\n />\n );\n\n const renderKeywords = (): React.ReactNode => (\n <ListItem alignItems={'flex-start'} sx={{ py: 0, my: 0 }}>\n <List sx={{ p: 0, my: 0 }}>\n <KeywordListItems keywords={keywords} />\n </List>\n </ListItem>\n );\n\n return (\n <Wrapper className={'package'} data-testid=\"package-item-list\">\n <ListItem alignItems={'flex-start'} sx={{ mb: 0 }}>\n {renderPackageListItemText()}\n </ListItem>\n {keywords && keywords?.length > 0 ? renderKeywords() : null}\n <ListItem alignItems={'flex-start'} sx={{ mt: 0 }}>\n {renderAuthorInfo()}\n {renderVersionInfo()}\n {renderPublishedInfo()}\n {renderFileSize()}\n {renderLicenseInfo()}\n </ListItem>\n </Wrapper>\n );\n};\n\nexport default Package;\n\nconst iconStyle = ({ theme }: { theme: Theme }) => css`\n margin: 0 10px 0 0;\n fill: ${theme.palette.mode === 'light' ? grey[900] : common.white};\n`;\n\nconst StyledVersion = styled(Version)<{ theme?: Theme }>`\n ${iconStyle};\n`;\n\nconst StyledFileBinary = styled(FileBinary)<{ theme?: Theme }>`\n ${iconStyle};\n`;\n\nconst StyledLaw = styled(Law)<{ theme?: Theme }>`\n ${iconStyle};\n`;\n\nconst StyledTime = styled(Time)<{ theme?: Theme }>`\n ${iconStyle};\n`;\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { isURL } from "../../utils/url.mjs";
|
|
2
|
-
import { fileSizeSI, formatDate, formatDateDistance, getAuthorName } from "../../utils/utils.mjs";
|
|
2
|
+
import { fileSizeSI, formatDate, formatDateDistance, getAuthorName, getBugsUrl } from "../../utils/utils.mjs";
|
|
3
3
|
import { Route } from "../../utils/routes.mjs";
|
|
4
4
|
import "../../utils/index.mjs";
|
|
5
5
|
import { getConfiguration } from "../../configuration.mjs";
|
|
@@ -12,14 +12,13 @@ import { FileBinary } from "../Icons/FileBinary.mjs";
|
|
|
12
12
|
import { Law } from "../Icons/Law.mjs";
|
|
13
13
|
import "../Icons/index.mjs";
|
|
14
14
|
import KeywordListItems from "../Keywords/KeywordListItems.mjs";
|
|
15
|
-
import Link from "../Link/Link.mjs";
|
|
16
15
|
import { Author, Avatar, Description, Details, GridRightAligned, IconButton, OverviewItem, PackageListItemText, PackageTitle, Published, Wrapper, WrapperLink } from "./styles.mjs";
|
|
17
16
|
import "../../index.mjs";
|
|
18
17
|
import styled from "@emotion/styled";
|
|
19
18
|
import Tooltip from "@mui/material/Tooltip";
|
|
20
19
|
import { useCallback } from "react";
|
|
21
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
22
20
|
import { useTranslation } from "react-i18next";
|
|
21
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
23
22
|
import BugReportIcon from "@mui/icons-material/BugReport";
|
|
24
23
|
import DownloadIcon from "@mui/icons-material/CloudDownload";
|
|
25
24
|
import HomeIcon from "@mui/icons-material/Home";
|
|
@@ -47,7 +46,7 @@ var Package = ({ author: { name: authorName, avatar: authorAvatar }, bugs, descr
|
|
|
47
46
|
src: authorAvatar
|
|
48
47
|
}), /* @__PURE__ */ jsx(Details, { children: name })] }) });
|
|
49
48
|
};
|
|
50
|
-
const renderFileSize = () => dist?.unpackedSize
|
|
49
|
+
const renderFileSize = () => dist?.unpackedSize ? /* @__PURE__ */ jsxs(OverviewItem, { children: [/* @__PURE__ */ jsx(StyledFileBinary, {}), fileSizeSI(dist.unpackedSize)] }) : null;
|
|
51
50
|
const renderLicenseInfo = () => license && /* @__PURE__ */ jsxs(OverviewItem, { children: [/* @__PURE__ */ jsx(StyledLaw, {}), license] });
|
|
52
51
|
const renderPublishedInfo = () => time && /* @__PURE__ */ jsxs(OverviewItem, { children: [/* @__PURE__ */ jsx(StyledTime, {}), /* @__PURE__ */ jsx(Published, {
|
|
53
52
|
title: formatDate(time),
|
|
@@ -66,34 +65,34 @@ var Package = ({ author: { name: authorName, avatar: authorAvatar }, bugs, descr
|
|
|
66
65
|
})
|
|
67
66
|
})
|
|
68
67
|
});
|
|
69
|
-
const renderBugsLink = () =>
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
children: /* @__PURE__ */ jsx(IconButton, {
|
|
68
|
+
const renderBugsLink = () => {
|
|
69
|
+
const bugsUrl = getBugsUrl(bugs);
|
|
70
|
+
return bugsUrl && isURL(bugsUrl) && /* @__PURE__ */ jsx(LinkExternal, {
|
|
71
|
+
to: bugsUrl,
|
|
72
|
+
children: /* @__PURE__ */ jsx(Tooltip, {
|
|
75
73
|
"aria-label": t("package.bugs"),
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
onClick: () => {
|
|
84
|
-
handleDownload(dist.tarball);
|
|
85
|
-
},
|
|
86
|
-
to: "#",
|
|
87
|
-
children: /* @__PURE__ */ jsx(Tooltip, {
|
|
88
|
-
"aria-label": t("package.download", { what: t("package.the-tar-file") }),
|
|
89
|
-
title: t("package.tarball"),
|
|
90
|
-
children: /* @__PURE__ */ jsx(IconButton, {
|
|
91
|
-
"aria-label": t("package.download"),
|
|
92
|
-
color: "primary",
|
|
93
|
-
"data-testid": "download-tarball",
|
|
94
|
-
size: "large",
|
|
95
|
-
children: isLoading ? /* @__PURE__ */ jsx(CircularProgress, { size: 13 }) : /* @__PURE__ */ jsx(DownloadIcon, {})
|
|
74
|
+
title: t("package.open-an-issue"),
|
|
75
|
+
children: /* @__PURE__ */ jsx(IconButton, {
|
|
76
|
+
"aria-label": t("package.bugs"),
|
|
77
|
+
color: "primary",
|
|
78
|
+
size: "large",
|
|
79
|
+
children: /* @__PURE__ */ jsx(BugReportIcon, {})
|
|
80
|
+
})
|
|
96
81
|
})
|
|
82
|
+
});
|
|
83
|
+
};
|
|
84
|
+
const renderDownloadLink = () => dist?.tarball && isURL(dist.tarball) && /* @__PURE__ */ jsx(Tooltip, {
|
|
85
|
+
"aria-label": t("package.download", { what: t("package.the-tar-file") }),
|
|
86
|
+
title: t("package.tarball"),
|
|
87
|
+
children: /* @__PURE__ */ jsx(IconButton, {
|
|
88
|
+
"aria-label": t("package.download"),
|
|
89
|
+
color: "primary",
|
|
90
|
+
"data-testid": "download-tarball",
|
|
91
|
+
onClick: () => {
|
|
92
|
+
handleDownload(dist.tarball);
|
|
93
|
+
},
|
|
94
|
+
size: "large",
|
|
95
|
+
children: isLoading ? /* @__PURE__ */ jsx(CircularProgress, { size: 13 }) : /* @__PURE__ */ jsx(DownloadIcon, {})
|
|
97
96
|
})
|
|
98
97
|
});
|
|
99
98
|
const renderPrimaryComponent = () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Package.mjs","names":[],"sources":["../../../src/components/Package/Package.tsx"],"sourcesContent":["import { css } from '@emotion/react';\nimport styled from '@emotion/styled';\nimport BugReport from '@mui/icons-material/BugReport';\nimport DownloadIcon from '@mui/icons-material/CloudDownload';\nimport HomeIcon from '@mui/icons-material/Home';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport Grid from '@mui/material/Grid';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport Tooltip from '@mui/material/Tooltip';\nimport { common, grey } from '@mui/material/colors';\nimport React, { useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport type { Theme } from '../../';\nimport { Link, LinkExternal, useDownload, useManifests } from '../../';\nimport { FileBinary, Law, Time, Version } from '../../components/Icons';\nimport { getConfiguration } from '../../configuration';\nimport type { Author as PackageAuthor } from '../../providers/ManifestsProvider/ManifestsProvider';\nimport type { PackageMetaInterface } from '../../types/packageMeta';\nimport { Route, url, utils } from '../../utils';\nimport KeywordListItems from '../Keywords/KeywordListItems';\nimport {\n Author,\n Avatar,\n Description,\n Details,\n GridRightAligned,\n IconButton,\n OverviewItem,\n PackageListItemText,\n PackageTitle,\n Published,\n Wrapper,\n WrapperLink,\n} from './styles';\n\ninterface Bugs {\n url: string;\n}\n\ninterface Dist {\n unpackedSize: number;\n tarball: string;\n}\n\nexport interface PackageInterface {\n name: string;\n version: string;\n time?: number | string;\n author: PackageAuthor;\n description?: string;\n keywords?: PackageMetaInterface['latest']['keywords'];\n license?: PackageMetaInterface['latest']['license'];\n homepage?: string;\n bugs?: Bugs;\n dist?: Dist;\n showDownload?: boolean;\n}\n\nconst Package: React.FC<PackageInterface> = ({\n author: { name: authorName, avatar: authorAvatar },\n bugs,\n description,\n dist,\n homepage,\n keywords,\n license,\n name: packageName,\n time,\n showDownload = true,\n version,\n}) => {\n const config = getConfiguration();\n const { t } = useTranslation();\n const { isLoading } = useManifests();\n const { downloadTarball } = useDownload();\n\n const handleDownload = useCallback(\n async (tarballDist: string) => {\n // FIXME: check, the dist might be different thant npmjs\n const link = tarballDist.replace(`https://registry.npmjs.org/`, config.base);\n downloadTarball?.({ link });\n },\n [config, downloadTarball]\n );\n\n const renderVersionInfo = (): React.ReactNode =>\n version && (\n <OverviewItem>\n <StyledVersion />\n {t('package.version', { version })}\n </OverviewItem>\n );\n\n const renderAuthorInfo = (): React.ReactNode => {\n const name = utils.getAuthorName(authorName);\n return (\n <OverviewItem>\n <Author>\n <Avatar alt={name} src={authorAvatar} />\n <Details>{name}</Details>\n </Author>\n </OverviewItem>\n );\n };\n\n const renderFileSize = (): React.ReactNode =>\n dist?.unpackedSize && (\n <OverviewItem>\n <StyledFileBinary />\n {utils.fileSizeSI(dist.unpackedSize)}\n </OverviewItem>\n );\n\n const renderLicenseInfo = (): React.ReactNode =>\n license && (\n <OverviewItem>\n <StyledLaw />\n {license as string}\n </OverviewItem>\n );\n\n const renderPublishedInfo = (): React.ReactNode =>\n time && (\n <OverviewItem>\n <StyledTime />\n <Published title={utils.formatDate(time)}>\n {t('package.published-on', { time: utils.formatDateDistance(time) })}\n </Published>\n </OverviewItem>\n );\n\n const renderHomePageLink = (): React.ReactNode =>\n homepage &&\n url.isURL(homepage) && (\n <LinkExternal to={homepage}>\n <Tooltip aria-label={t('package.homepage')} title={t('package.visit-home-page')}>\n <IconButton aria-label={t('package.homepage')} color=\"primary\" size=\"large\">\n <HomeIcon />\n </IconButton>\n </Tooltip>\n </LinkExternal>\n );\n\n const renderBugsLink = (): React.ReactNode =>\n bugs?.url &&\n url.isURL(bugs.url) && (\n <LinkExternal to={bugs.url}>\n <Tooltip aria-label={t('package.bugs')} title={t('package.open-an-issue')}>\n <IconButton aria-label={t('package.bugs')} color=\"primary\" size=\"large\">\n <BugReport />\n </IconButton>\n </Tooltip>\n </LinkExternal>\n );\n\n const renderDownloadLink = (): React.ReactNode =>\n dist?.tarball &&\n url.isURL(dist.tarball) && (\n <Link\n onClick={() => {\n handleDownload(dist.tarball);\n }}\n to=\"#\"\n >\n <Tooltip\n aria-label={t('package.download', { what: t('package.the-tar-file') })}\n title={t('package.tarball')}\n >\n <IconButton\n aria-label={t('package.download')}\n color=\"primary\"\n data-testid=\"download-tarball\"\n size=\"large\"\n >\n {isLoading ? <CircularProgress size={13} /> : <DownloadIcon />}\n </IconButton>\n </Tooltip>\n </Link>\n );\n\n const renderPrimaryComponent = (): React.ReactNode => {\n return (\n <Grid alignItems=\"center\" container={true} size={{ xs: 12 }} wrap=\"wrap\">\n <Grid size=\"grow\">\n <WrapperLink to={`${Route.DETAIL}${packageName}`}>\n <PackageTitle className=\"package-title\" data-testid=\"package-title\">\n {packageName}\n </PackageTitle>\n </WrapperLink>\n </Grid>\n <GridRightAligned size=\"auto\">\n {renderHomePageLink()}\n {renderBugsLink()}\n {showDownload && renderDownloadLink()}\n </GridRightAligned>\n </Grid>\n );\n };\n\n const renderSecondaryComponent = (): React.ReactNode => <Description>{description}</Description>;\n\n const renderPackageListItemText = (): React.ReactNode => (\n <PackageListItemText\n primary={renderPrimaryComponent()}\n secondary={renderSecondaryComponent()}\n />\n );\n\n const renderKeywords = (): React.ReactNode => (\n <ListItem alignItems={'flex-start'} sx={{ py: 0, my: 0 }}>\n <List sx={{ p: 0, my: 0 }}>\n <KeywordListItems keywords={keywords} />\n </List>\n </ListItem>\n );\n\n return (\n <Wrapper className={'package'} data-testid=\"package-item-list\">\n <ListItem alignItems={'flex-start'} sx={{ mb: 0 }}>\n {renderPackageListItemText()}\n </ListItem>\n {keywords && keywords?.length > 0 ? renderKeywords() : null}\n <ListItem alignItems={'flex-start'} sx={{ mt: 0 }}>\n {renderAuthorInfo()}\n {renderVersionInfo()}\n {renderPublishedInfo()}\n {renderFileSize()}\n {renderLicenseInfo()}\n </ListItem>\n </Wrapper>\n );\n};\n\nexport default Package;\n\nconst iconStyle = ({ theme }: { theme: Theme }) => css`\n margin: 0 10px 0 0;\n fill: ${theme.palette.mode === 'light' ? grey[900] : common.white};\n`;\n\nconst StyledVersion = styled(Version)<{ theme?: Theme }>`\n ${iconStyle};\n`;\n\nconst StyledFileBinary = styled(FileBinary)<{ theme?: Theme }>`\n ${iconStyle};\n`;\n\nconst StyledLaw = styled(Law)<{ theme?: Theme }>`\n ${iconStyle};\n`;\n\nconst StyledTime = styled(Time)<{ theme?: Theme }>`\n ${iconStyle};\n`;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Package.mjs","names":[],"sources":["../../../src/components/Package/Package.tsx"],"sourcesContent":["import { css } from '@emotion/react';\nimport styled from '@emotion/styled';\nimport BugReport from '@mui/icons-material/BugReport';\nimport DownloadIcon from '@mui/icons-material/CloudDownload';\nimport HomeIcon from '@mui/icons-material/Home';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport Grid from '@mui/material/Grid';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport Tooltip from '@mui/material/Tooltip';\nimport { common, grey } from '@mui/material/colors';\nimport React, { useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport type { Theme } from '../../';\nimport { LinkExternal, useDownload, useManifests } from '../../';\nimport { FileBinary, Law, Time, Version } from '../../components/Icons';\nimport { getConfiguration } from '../../configuration';\nimport type { Author as PackageAuthor } from '../../providers/ManifestsProvider/ManifestsProvider';\nimport type { PackageMetaInterface } from '../../types/packageMeta';\nimport { Route, url, utils } from '../../utils';\nimport KeywordListItems from '../Keywords/KeywordListItems';\nimport {\n Author,\n Avatar,\n Description,\n Details,\n GridRightAligned,\n IconButton,\n OverviewItem,\n PackageListItemText,\n PackageTitle,\n Published,\n Wrapper,\n WrapperLink,\n} from './styles';\n\ninterface Bugs {\n url: string;\n}\n\ninterface Dist {\n unpackedSize: number;\n tarball: string;\n}\n\nexport interface PackageInterface {\n name: string;\n version: string;\n time?: number | string;\n author: PackageAuthor;\n description?: string;\n keywords?: PackageMetaInterface['latest']['keywords'];\n license?: PackageMetaInterface['latest']['license'];\n homepage?: string;\n bugs?: Bugs | string;\n dist?: Dist;\n showDownload?: boolean;\n}\n\nconst Package: React.FC<PackageInterface> = ({\n author: { name: authorName, avatar: authorAvatar },\n bugs,\n description,\n dist,\n homepage,\n keywords,\n license,\n name: packageName,\n time,\n showDownload = true,\n version,\n}) => {\n const config = getConfiguration();\n const { t } = useTranslation();\n const { isLoading } = useManifests();\n const { downloadTarball } = useDownload();\n\n const handleDownload = useCallback(\n async (tarballDist: string) => {\n // FIXME: check, the dist might be different thant npmjs\n const link = tarballDist.replace(`https://registry.npmjs.org/`, config.base);\n downloadTarball?.({ link });\n },\n [config, downloadTarball]\n );\n\n const renderVersionInfo = (): React.ReactNode =>\n version && (\n <OverviewItem>\n <StyledVersion />\n {t('package.version', { version })}\n </OverviewItem>\n );\n\n const renderAuthorInfo = (): React.ReactNode => {\n const name = utils.getAuthorName(authorName);\n return (\n <OverviewItem>\n <Author>\n <Avatar alt={name} src={authorAvatar} />\n <Details>{name}</Details>\n </Author>\n </OverviewItem>\n );\n };\n\n const renderFileSize = (): React.ReactNode =>\n dist?.unpackedSize ? (\n <OverviewItem>\n <StyledFileBinary />\n {utils.fileSizeSI(dist.unpackedSize)}\n </OverviewItem>\n ) : null;\n\n const renderLicenseInfo = (): React.ReactNode =>\n license && (\n <OverviewItem>\n <StyledLaw />\n {license as string}\n </OverviewItem>\n );\n\n const renderPublishedInfo = (): React.ReactNode =>\n time && (\n <OverviewItem>\n <StyledTime />\n <Published title={utils.formatDate(time)}>\n {t('package.published-on', { time: utils.formatDateDistance(time) })}\n </Published>\n </OverviewItem>\n );\n\n const renderHomePageLink = (): React.ReactNode =>\n homepage &&\n url.isURL(homepage) && (\n <LinkExternal to={homepage}>\n <Tooltip aria-label={t('package.homepage')} title={t('package.visit-home-page')}>\n <IconButton aria-label={t('package.homepage')} color=\"primary\" size=\"large\">\n <HomeIcon />\n </IconButton>\n </Tooltip>\n </LinkExternal>\n );\n\n const renderBugsLink = (): React.ReactNode => {\n // bugs can be the object form or a plain url string, both valid in npm\n const bugsUrl = utils.getBugsUrl(bugs);\n return (\n bugsUrl &&\n url.isURL(bugsUrl) && (\n <LinkExternal to={bugsUrl}>\n <Tooltip aria-label={t('package.bugs')} title={t('package.open-an-issue')}>\n <IconButton aria-label={t('package.bugs')} color=\"primary\" size=\"large\">\n <BugReport />\n </IconButton>\n </Tooltip>\n </LinkExternal>\n )\n );\n };\n\n const renderDownloadLink = (): React.ReactNode =>\n dist?.tarball &&\n url.isURL(dist.tarball) && (\n // a plain button: wrapping it in <Link to=\"#\"> pushed a stray `#` entry\n // into the browser history on every download\n <Tooltip\n aria-label={t('package.download', { what: t('package.the-tar-file') })}\n title={t('package.tarball')}\n >\n <IconButton\n aria-label={t('package.download')}\n color=\"primary\"\n data-testid=\"download-tarball\"\n onClick={() => {\n handleDownload(dist.tarball);\n }}\n size=\"large\"\n >\n {isLoading ? <CircularProgress size={13} /> : <DownloadIcon />}\n </IconButton>\n </Tooltip>\n );\n\n const renderPrimaryComponent = (): React.ReactNode => {\n return (\n <Grid alignItems=\"center\" container={true} size={{ xs: 12 }} wrap=\"wrap\">\n <Grid size=\"grow\">\n <WrapperLink to={`${Route.DETAIL}${packageName}`}>\n <PackageTitle className=\"package-title\" data-testid=\"package-title\">\n {packageName}\n </PackageTitle>\n </WrapperLink>\n </Grid>\n <GridRightAligned size=\"auto\">\n {renderHomePageLink()}\n {renderBugsLink()}\n {showDownload && renderDownloadLink()}\n </GridRightAligned>\n </Grid>\n );\n };\n\n const renderSecondaryComponent = (): React.ReactNode => <Description>{description}</Description>;\n\n const renderPackageListItemText = (): React.ReactNode => (\n <PackageListItemText\n primary={renderPrimaryComponent()}\n secondary={renderSecondaryComponent()}\n />\n );\n\n const renderKeywords = (): React.ReactNode => (\n <ListItem alignItems={'flex-start'} sx={{ py: 0, my: 0 }}>\n <List sx={{ p: 0, my: 0 }}>\n <KeywordListItems keywords={keywords} />\n </List>\n </ListItem>\n );\n\n return (\n <Wrapper className={'package'} data-testid=\"package-item-list\">\n <ListItem alignItems={'flex-start'} sx={{ mb: 0 }}>\n {renderPackageListItemText()}\n </ListItem>\n {keywords && keywords?.length > 0 ? renderKeywords() : null}\n <ListItem alignItems={'flex-start'} sx={{ mt: 0 }}>\n {renderAuthorInfo()}\n {renderVersionInfo()}\n {renderPublishedInfo()}\n {renderFileSize()}\n {renderLicenseInfo()}\n </ListItem>\n </Wrapper>\n );\n};\n\nexport default Package;\n\nconst iconStyle = ({ theme }: { theme: Theme }) => css`\n margin: 0 10px 0 0;\n fill: ${theme.palette.mode === 'light' ? grey[900] : common.white};\n`;\n\nconst StyledVersion = styled(Version)<{ theme?: Theme }>`\n ${iconStyle};\n`;\n\nconst StyledFileBinary = styled(FileBinary)<{ theme?: Theme }>`\n ${iconStyle};\n`;\n\nconst StyledLaw = styled(Law)<{ theme?: Theme }>`\n ${iconStyle};\n`;\n\nconst StyledTime = styled(Time)<{ theme?: Theme }>`\n ${iconStyle};\n`;\n"],"mappings":"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"}
|
|
@@ -16,7 +16,7 @@ var Person = ({ person, packageName, version, withText = false }) => {
|
|
|
16
16
|
const link = require_utils.getLink(person, packageName, version);
|
|
17
17
|
const avatarComponent = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material_Avatar.default, {
|
|
18
18
|
alt: person.name,
|
|
19
|
-
src: person.avatar,
|
|
19
|
+
src: person.avatar ?? person._avatar,
|
|
20
20
|
sx: {
|
|
21
21
|
width: 40,
|
|
22
22
|
height: 40,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Person.js","names":[],"sources":["../../../src/components/Person/Person.tsx"],"sourcesContent":["import { Typography } from '@mui/material';\nimport Avatar from '@mui/material/Avatar';\nimport Tooltip from '@mui/material/Tooltip';\nimport React from 'react';\n\nimport type { Developer } from '../../types/packageMeta';\nimport LinkExternal from '../LinkExternal';\nimport PersonTooltip from './PersonTooltip';\nimport { getLink, getName } from './utils';\n\nconst Person: React.FC<{\n person: Developer;\n packageName: string;\n version: string;\n withText?: boolean;\n}> = ({ person, packageName, version, withText = false }) => {\n const link = getLink(person, packageName, version);\n\n const avatarComponent = (\n <Avatar
|
|
1
|
+
{"version":3,"file":"Person.js","names":[],"sources":["../../../src/components/Person/Person.tsx"],"sourcesContent":["import { Typography } from '@mui/material';\nimport Avatar from '@mui/material/Avatar';\nimport Tooltip from '@mui/material/Tooltip';\nimport React from 'react';\n\nimport type { Developer } from '../../types/packageMeta';\nimport LinkExternal from '../LinkExternal';\nimport PersonTooltip from './PersonTooltip';\nimport { getLink, getName } from './utils';\n\nconst Person: React.FC<{\n person: Developer;\n packageName: string;\n version: string;\n withText?: boolean;\n}> = ({ person, packageName, version, withText = false }) => {\n const link = getLink(person, packageName, version);\n\n const avatarComponent = (\n <Avatar\n alt={person.name}\n src={person.avatar ?? person._avatar}\n sx={{ width: 40, height: 40, ml: 0, mr: 1 }}\n />\n );\n\n return (\n <>\n <Tooltip\n data-testid={person.name}\n key={person.email}\n title={<PersonTooltip person={person} />}\n >\n {link.length > 0 ? (\n <LinkExternal to={link}>{avatarComponent}</LinkExternal>\n ) : (\n avatarComponent\n )}\n </Tooltip>\n {withText && (\n <Typography sx={{ ml: 1 }} variant=\"subtitle2\">\n {getName(person.name)}\n </Typography>\n )}\n </>\n );\n};\n\nexport default Person;\n"],"mappings":";;;;;;;;;;;;;;AAUA,IAAM,UAKA,EAAE,QAAQ,aAAa,SAAS,WAAW,YAAY;CAC3D,MAAM,OAAO,cAAA,QAAQ,QAAQ,aAAa,OAAO;CAEjD,MAAM,kBACJ,iBAAA,GAAA,kBAAA,IAAA,CAAC,qBAAA,SAAD;EACE,KAAK,OAAO;EACZ,KAAK,OAAO,UAAU,OAAO;EAC7B,IAAI;GAAE,OAAO;GAAI,QAAQ;GAAI,IAAI;GAAG,IAAI;EAAE;CAC3C,CAAA;CAGH,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAA,kBAAA,UAAA,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,sBAAA,SAAD;EACE,eAAa,OAAO;EAEpB,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,sBAAA,SAAD,EAAuB,OAAS,CAAA;EAEtC,UAAA,KAAK,SAAS,IACb,iBAAA,GAAA,kBAAA,IAAA,CAAC,qBAAA,SAAD;GAAc,IAAI;GAAO,UAAA;EAA8B,CAAA,IAEvD;CAEK,GARF,OAAO,KAQL,GACR,YACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAA,YAAD;EAAY,IAAI,EAAE,IAAI,EAAE;EAAG,SAAQ;EAChC,UAAA,cAAA,QAAQ,OAAO,IAAI;CACV,CAAA,CAEd,EAAA,CAAA;AAEN"}
|
|
@@ -12,7 +12,7 @@ var Person = ({ person, packageName, version, withText = false }) => {
|
|
|
12
12
|
const link = getLink(person, packageName, version);
|
|
13
13
|
const avatarComponent = /* @__PURE__ */ jsx(Avatar, {
|
|
14
14
|
alt: person.name,
|
|
15
|
-
src: person.avatar,
|
|
15
|
+
src: person.avatar ?? person._avatar,
|
|
16
16
|
sx: {
|
|
17
17
|
width: 40,
|
|
18
18
|
height: 40,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Person.mjs","names":[],"sources":["../../../src/components/Person/Person.tsx"],"sourcesContent":["import { Typography } from '@mui/material';\nimport Avatar from '@mui/material/Avatar';\nimport Tooltip from '@mui/material/Tooltip';\nimport React from 'react';\n\nimport type { Developer } from '../../types/packageMeta';\nimport LinkExternal from '../LinkExternal';\nimport PersonTooltip from './PersonTooltip';\nimport { getLink, getName } from './utils';\n\nconst Person: React.FC<{\n person: Developer;\n packageName: string;\n version: string;\n withText?: boolean;\n}> = ({ person, packageName, version, withText = false }) => {\n const link = getLink(person, packageName, version);\n\n const avatarComponent = (\n <Avatar
|
|
1
|
+
{"version":3,"file":"Person.mjs","names":[],"sources":["../../../src/components/Person/Person.tsx"],"sourcesContent":["import { Typography } from '@mui/material';\nimport Avatar from '@mui/material/Avatar';\nimport Tooltip from '@mui/material/Tooltip';\nimport React from 'react';\n\nimport type { Developer } from '../../types/packageMeta';\nimport LinkExternal from '../LinkExternal';\nimport PersonTooltip from './PersonTooltip';\nimport { getLink, getName } from './utils';\n\nconst Person: React.FC<{\n person: Developer;\n packageName: string;\n version: string;\n withText?: boolean;\n}> = ({ person, packageName, version, withText = false }) => {\n const link = getLink(person, packageName, version);\n\n const avatarComponent = (\n <Avatar\n alt={person.name}\n src={person.avatar ?? person._avatar}\n sx={{ width: 40, height: 40, ml: 0, mr: 1 }}\n />\n );\n\n return (\n <>\n <Tooltip\n data-testid={person.name}\n key={person.email}\n title={<PersonTooltip person={person} />}\n >\n {link.length > 0 ? (\n <LinkExternal to={link}>{avatarComponent}</LinkExternal>\n ) : (\n avatarComponent\n )}\n </Tooltip>\n {withText && (\n <Typography sx={{ ml: 1 }} variant=\"subtitle2\">\n {getName(person.name)}\n </Typography>\n )}\n </>\n );\n};\n\nexport default Person;\n"],"mappings":";;;;;;;;;;AAUA,IAAM,UAKA,EAAE,QAAQ,aAAa,SAAS,WAAW,YAAY;CAC3D,MAAM,OAAO,QAAQ,QAAQ,aAAa,OAAO;CAEjD,MAAM,kBACJ,oBAAC,QAAD;EACE,KAAK,OAAO;EACZ,KAAK,OAAO,UAAU,OAAO;EAC7B,IAAI;GAAE,OAAO;GAAI,QAAQ;GAAI,IAAI;GAAG,IAAI;EAAE;CAC3C,CAAA;CAGH,OACE,qBAAA,YAAA,EAAA,UAAA,CACE,oBAAC,SAAD;EACE,eAAa,OAAO;EAEpB,OAAO,oBAAC,eAAD,EAAuB,OAAS,CAAA;EAEtC,UAAA,KAAK,SAAS,IACb,oBAAC,cAAD;GAAc,IAAI;GAAO,UAAA;EAA8B,CAAA,IAEvD;CAEK,GARF,OAAO,KAQL,GACR,YACC,oBAAC,YAAD;EAAY,IAAI,EAAE,IAAI,EAAE;EAAG,SAAQ;EAChC,UAAA,QAAQ,OAAO,IAAI;CACV,CAAA,CAEd,EAAA,CAAA;AAEN"}
|
|
@@ -3,6 +3,7 @@ let _mui_material_IconButton = require("@mui/material/IconButton");
|
|
|
3
3
|
_mui_material_IconButton = require_runtime.__toESM(_mui_material_IconButton);
|
|
4
4
|
let react = require("react");
|
|
5
5
|
react = require_runtime.__toESM(react);
|
|
6
|
+
let react_i18next = require("react-i18next");
|
|
6
7
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
7
8
|
let _microlink_react_json_view = require("@microlink/react-json-view");
|
|
8
9
|
_microlink_react_json_view = require_runtime.__toESM(_microlink_react_json_view);
|
|
@@ -15,7 +16,6 @@ _mui_material_DialogContent = require_runtime.__toESM(_mui_material_DialogConten
|
|
|
15
16
|
let _mui_material_DialogTitle = require("@mui/material/DialogTitle");
|
|
16
17
|
_mui_material_DialogTitle = require_runtime.__toESM(_mui_material_DialogTitle);
|
|
17
18
|
let _mui_material_styles = require("@mui/material/styles");
|
|
18
|
-
let react_i18next = require("react-i18next");
|
|
19
19
|
//#region src/components/RawViewer/RawViewer.tsx
|
|
20
20
|
var ViewerTitle = (props) => {
|
|
21
21
|
const { children, onClose } = props;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import IconButton from "@mui/material/IconButton";
|
|
2
2
|
import "react";
|
|
3
|
+
import { useTranslation } from "react-i18next";
|
|
3
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
5
|
import ReactJsonView from "@microlink/react-json-view";
|
|
5
6
|
import CloseIcon from "@mui/icons-material/Close";
|
|
@@ -7,7 +8,6 @@ import Dialog from "@mui/material/Dialog";
|
|
|
7
8
|
import DialogContent from "@mui/material/DialogContent";
|
|
8
9
|
import DialogTitle from "@mui/material/DialogTitle";
|
|
9
10
|
import { useTheme } from "@mui/material/styles";
|
|
10
|
-
import { useTranslation } from "react-i18next";
|
|
11
11
|
//#region src/components/RawViewer/RawViewer.tsx
|
|
12
12
|
var ViewerTitle = (props) => {
|
|
13
13
|
const { children, onClose } = props;
|
|
@@ -2,10 +2,10 @@ const require_runtime = require("../../_virtual/_rolldown/runtime.js");
|
|
|
2
2
|
const require_styles = require("./styles.js");
|
|
3
3
|
let react = require("react");
|
|
4
4
|
react = require_runtime.__toESM(react);
|
|
5
|
+
let react_i18next = require("react-i18next");
|
|
5
6
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
6
7
|
let _mui_material_Dialog = require("@mui/material/Dialog");
|
|
7
8
|
_mui_material_Dialog = require_runtime.__toESM(_mui_material_Dialog);
|
|
8
|
-
let react_i18next = require("react-i18next");
|
|
9
9
|
let _mui_material_Button = require("@mui/material/Button");
|
|
10
10
|
_mui_material_Button = require_runtime.__toESM(_mui_material_Button);
|
|
11
11
|
let _mui_material_DialogActions = require("@mui/material/DialogActions");
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Content, Title } from "./styles.mjs";
|
|
2
2
|
import "react";
|
|
3
|
+
import { useTranslation } from "react-i18next";
|
|
3
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
5
|
import Dialog from "@mui/material/Dialog";
|
|
5
|
-
import { useTranslation } from "react-i18next";
|
|
6
6
|
import Button from "@mui/material/Button";
|
|
7
7
|
import DialogActions from "@mui/material/DialogActions";
|
|
8
8
|
//#region src/components/RegistryInfoDialog/RegistryInfoDialog.tsx
|
|
@@ -2,6 +2,7 @@ const require_runtime = require("../../_virtual/_rolldown/runtime.js");
|
|
|
2
2
|
const require_CopyToClipBoard = require("../CopyClipboard/CopyToClipBoard.js");
|
|
3
3
|
require("../CopyClipboard/index.js");
|
|
4
4
|
const require_url = require("../../utils/url.js");
|
|
5
|
+
const require_utils = require("../../utils/utils.js");
|
|
5
6
|
require("../../utils/index.js");
|
|
6
7
|
const require_LinkExternal = require("../LinkExternal/LinkExternal.js");
|
|
7
8
|
require("../LinkExternal/index.js");
|
|
@@ -11,8 +12,8 @@ let _emotion_styled = require("@emotion/styled");
|
|
|
11
12
|
_emotion_styled = require_runtime.__toESM(_emotion_styled);
|
|
12
13
|
let react = require("react");
|
|
13
14
|
react = require_runtime.__toESM(react);
|
|
14
|
-
let react_jsx_runtime = require("react/jsx-runtime");
|
|
15
15
|
let react_i18next = require("react-i18next");
|
|
16
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
16
17
|
let _mui_material_colors = require("@mui/material/colors");
|
|
17
18
|
let _mui_material_List = require("@mui/material/List");
|
|
18
19
|
_mui_material_List = require_runtime.__toESM(_mui_material_List);
|
|
@@ -44,13 +45,9 @@ var RepositoryAvatar = (0, _emotion_styled.default)(_mui_material_Avatar.default
|
|
|
44
45
|
});
|
|
45
46
|
var Repository = ({ packageMeta }) => {
|
|
46
47
|
const { t } = (0, react_i18next.useTranslation)();
|
|
47
|
-
const url = packageMeta?.latest?.repository
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
if (!url.includes("git+")) return url;
|
|
51
|
-
return url.split("git+")[1];
|
|
52
|
-
};
|
|
53
|
-
const repositoryURL = getCorrectRepositoryURL();
|
|
48
|
+
const url = require_utils.formatRepository(packageMeta?.latest?.repository);
|
|
49
|
+
const repositoryURL = url ? url.replace(/^git\+/, "").replace(/^ssh:\/\/(git@)?/, "https://").replace(/^git:\/\//, "https://") : null;
|
|
50
|
+
if (!repositoryURL || !require_url.isURL(repositoryURL)) return null;
|
|
54
51
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material_List.default, {
|
|
55
52
|
dense: true,
|
|
56
53
|
subheader: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(StyledText, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Repository.js","names":[],"sources":["../../../src/components/Repository/Repository.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport Avatar from '@mui/material/Avatar';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport ListItemText from '@mui/material/ListItemText';\nimport Typography from '@mui/material/Typography';\nimport { common } from '@mui/material/colors';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport type { Theme } from '../../Theme';\nimport { url as urlUtils } from '../../utils';\nimport CopyClipboard from '../CopyClipboard';\nimport { Git } from '../Icons';\nimport LinkExternal from '../LinkExternal';\n\nconst StyledText = styled(Typography)<{ theme?: Theme }>((props) => ({\n fontWeight: props.theme.fontWeight.bold,\n textTransform: 'capitalize',\n}));\n\nconst RepositoryListItem = styled(ListItem)({\n padding: 0,\n ':hover': {\n backgroundColor: 'transparent',\n },\n});\n\nconst RepositoryListItemText = styled(ListItemText)({\n padding: '0 0 0 10px',\n margin: 0,\n});\n\nconst RepositoryAvatar = styled(Avatar)({\n padding: 0,\n marginLeft: 0,\n backgroundColor: 'transparent',\n});\n\nconst Repository: React.FC<{ packageMeta: any }> = ({ packageMeta }) => {\n const { t } = useTranslation();\n
|
|
1
|
+
{"version":3,"file":"Repository.js","names":[],"sources":["../../../src/components/Repository/Repository.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport Avatar from '@mui/material/Avatar';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport ListItemText from '@mui/material/ListItemText';\nimport Typography from '@mui/material/Typography';\nimport { common } from '@mui/material/colors';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport type { Theme } from '../../Theme';\nimport { url as urlUtils, utils } from '../../utils';\nimport CopyClipboard from '../CopyClipboard';\nimport { Git } from '../Icons';\nimport LinkExternal from '../LinkExternal';\n\nconst StyledText = styled(Typography)<{ theme?: Theme }>((props) => ({\n fontWeight: props.theme.fontWeight.bold,\n textTransform: 'capitalize',\n}));\n\nconst RepositoryListItem = styled(ListItem)({\n padding: 0,\n ':hover': {\n backgroundColor: 'transparent',\n },\n});\n\nconst RepositoryListItemText = styled(ListItemText)({\n padding: '0 0 0 10px',\n margin: 0,\n});\n\nconst RepositoryAvatar = styled(Avatar)({\n padding: 0,\n marginLeft: 0,\n backgroundColor: 'transparent',\n});\n\nconst Repository: React.FC<{ packageMeta: any }> = ({ packageMeta }) => {\n const { t } = useTranslation();\n // repository can be the object form or a plain string, both valid in npm;\n // `git+ssh://git@host/...` and `git://host/...` are valid manifest urls but\n // dead links in a browser, so they are rewritten to https before validating\n const url = utils.formatRepository(packageMeta?.latest?.repository);\n const repositoryURL = url\n ? url\n .replace(/^git\\+/, '')\n .replace(/^ssh:\\/\\/(git@)?/, 'https://')\n .replace(/^git:\\/\\//, 'https://')\n : null;\n if (!repositoryURL || !urlUtils.isURL(repositoryURL)) {\n return null;\n }\n\n return (\n <List\n dense={true}\n subheader={<StyledText variant=\"subtitle1\">{t('sidebar.repository.title')}</StyledText>}\n >\n <RepositoryListItem>\n <RepositoryAvatar sx={{ bgcolor: common.white }}>\n <Git />\n </RepositoryAvatar>\n <RepositoryListItemText\n primary={\n <CopyClipboard dataTestId=\"repositoryID\" text={repositoryURL} title={repositoryURL}>\n <LinkExternal to={repositoryURL} variant=\"outline\">\n {repositoryURL}\n </LinkExternal>\n </CopyClipboard>\n }\n />\n </RepositoryListItem>\n </List>\n );\n};\n\nexport default Repository;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBA,IAAM,cAAA,GAAa,gBAAA,QAAA,CAAO,yBAAA,OAAU,CAAC,EAAqB,WAAW;CACnE,YAAY,MAAM,MAAM,WAAW;CACnC,eAAe;AACjB,EAAE;AAEF,IAAM,sBAAA,GAAqB,gBAAA,QAAA,CAAO,uBAAA,OAAQ,CAAC,CAAC;CAC1C,SAAS;CACT,UAAU,EACR,iBAAiB,cACnB;AACF,CAAC;AAED,IAAM,0BAAA,GAAyB,gBAAA,QAAA,CAAO,2BAAA,OAAY,CAAC,CAAC;CAClD,SAAS;CACT,QAAQ;AACV,CAAC;AAED,IAAM,oBAAA,GAAmB,gBAAA,QAAA,CAAO,qBAAA,OAAM,CAAC,CAAC;CACtC,SAAS;CACT,YAAY;CACZ,iBAAiB;AACnB,CAAC;AAED,IAAM,cAA8C,EAAE,kBAAkB;CACtE,MAAM,EAAE,OAAA,GAAM,cAAA,eAAA,CAAe;CAI7B,MAAM,MAAA,cAAA,iBAA6B,aAAa,QAAQ,UAAU;CAClE,MAAM,gBAAgB,MAClB,IACG,QAAQ,UAAU,EAAE,CAAC,CACrB,QAAQ,oBAAoB,UAAU,CAAC,CACvC,QAAQ,aAAa,UAAU,IAClC;CACJ,IAAI,CAAC,iBAAiB,CAAA,YAAA,MAAgB,aAAa,GACjD,OAAO;CAGT,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,mBAAA,SAAD;EACE,OAAO;EACP,WAAW,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD;GAAY,SAAQ;GAAa,UAAA,EAAE,0BAA0B;EAAc,CAAA;EAEtF,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,oBAAD,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,kBAAD;GAAkB,IAAI,EAAE,SAAS,qBAAA,OAAO,MAAM;GAC5C,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAA,KAAD,CAAM,CAAA;EACU,CAAA,GAClB,iBAAA,GAAA,kBAAA,IAAA,CAAC,wBAAD,EACE,SACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,wBAAA,SAAD;GAAe,YAAW;GAAe,MAAM;GAAe,OAAO;GACnE,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,qBAAA,SAAD;IAAc,IAAI;IAAe,SAAQ;IACtC,UAAA;GACW,CAAA;EACD,CAAA,EAElB,CAAA,CACiB,EAAA,CAAA;CAChB,CAAA;AAEV"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import CopyToClipBoard from "../CopyClipboard/CopyToClipBoard.mjs";
|
|
2
2
|
import "../CopyClipboard/index.mjs";
|
|
3
3
|
import { isURL } from "../../utils/url.mjs";
|
|
4
|
+
import { formatRepository } from "../../utils/utils.mjs";
|
|
4
5
|
import "../../utils/index.mjs";
|
|
5
6
|
import LinkExternal from "../LinkExternal/LinkExternal.mjs";
|
|
6
7
|
import "../LinkExternal/index.mjs";
|
|
@@ -8,8 +9,8 @@ import { Git } from "../Icons/DevsIcons/Git2.mjs";
|
|
|
8
9
|
import "../Icons/index.mjs";
|
|
9
10
|
import styled from "@emotion/styled";
|
|
10
11
|
import "react";
|
|
11
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
12
12
|
import { useTranslation } from "react-i18next";
|
|
13
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
13
14
|
import { common } from "@mui/material/colors";
|
|
14
15
|
import List from "@mui/material/List";
|
|
15
16
|
import Avatar from "@mui/material/Avatar";
|
|
@@ -36,13 +37,9 @@ var RepositoryAvatar = styled(Avatar)({
|
|
|
36
37
|
});
|
|
37
38
|
var Repository = ({ packageMeta }) => {
|
|
38
39
|
const { t } = useTranslation();
|
|
39
|
-
const url = packageMeta?.latest?.repository
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
if (!url.includes("git+")) return url;
|
|
43
|
-
return url.split("git+")[1];
|
|
44
|
-
};
|
|
45
|
-
const repositoryURL = getCorrectRepositoryURL();
|
|
40
|
+
const url = formatRepository(packageMeta?.latest?.repository);
|
|
41
|
+
const repositoryURL = url ? url.replace(/^git\+/, "").replace(/^ssh:\/\/(git@)?/, "https://").replace(/^git:\/\//, "https://") : null;
|
|
42
|
+
if (!repositoryURL || !isURL(repositoryURL)) return null;
|
|
46
43
|
return /* @__PURE__ */ jsx(List, {
|
|
47
44
|
dense: true,
|
|
48
45
|
subheader: /* @__PURE__ */ jsx(StyledText, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Repository.mjs","names":[],"sources":["../../../src/components/Repository/Repository.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport Avatar from '@mui/material/Avatar';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport ListItemText from '@mui/material/ListItemText';\nimport Typography from '@mui/material/Typography';\nimport { common } from '@mui/material/colors';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport type { Theme } from '../../Theme';\nimport { url as urlUtils } from '../../utils';\nimport CopyClipboard from '../CopyClipboard';\nimport { Git } from '../Icons';\nimport LinkExternal from '../LinkExternal';\n\nconst StyledText = styled(Typography)<{ theme?: Theme }>((props) => ({\n fontWeight: props.theme.fontWeight.bold,\n textTransform: 'capitalize',\n}));\n\nconst RepositoryListItem = styled(ListItem)({\n padding: 0,\n ':hover': {\n backgroundColor: 'transparent',\n },\n});\n\nconst RepositoryListItemText = styled(ListItemText)({\n padding: '0 0 0 10px',\n margin: 0,\n});\n\nconst RepositoryAvatar = styled(Avatar)({\n padding: 0,\n marginLeft: 0,\n backgroundColor: 'transparent',\n});\n\nconst Repository: React.FC<{ packageMeta: any }> = ({ packageMeta }) => {\n const { t } = useTranslation();\n
|
|
1
|
+
{"version":3,"file":"Repository.mjs","names":[],"sources":["../../../src/components/Repository/Repository.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport Avatar from '@mui/material/Avatar';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport ListItemText from '@mui/material/ListItemText';\nimport Typography from '@mui/material/Typography';\nimport { common } from '@mui/material/colors';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport type { Theme } from '../../Theme';\nimport { url as urlUtils, utils } from '../../utils';\nimport CopyClipboard from '../CopyClipboard';\nimport { Git } from '../Icons';\nimport LinkExternal from '../LinkExternal';\n\nconst StyledText = styled(Typography)<{ theme?: Theme }>((props) => ({\n fontWeight: props.theme.fontWeight.bold,\n textTransform: 'capitalize',\n}));\n\nconst RepositoryListItem = styled(ListItem)({\n padding: 0,\n ':hover': {\n backgroundColor: 'transparent',\n },\n});\n\nconst RepositoryListItemText = styled(ListItemText)({\n padding: '0 0 0 10px',\n margin: 0,\n});\n\nconst RepositoryAvatar = styled(Avatar)({\n padding: 0,\n marginLeft: 0,\n backgroundColor: 'transparent',\n});\n\nconst Repository: React.FC<{ packageMeta: any }> = ({ packageMeta }) => {\n const { t } = useTranslation();\n // repository can be the object form or a plain string, both valid in npm;\n // `git+ssh://git@host/...` and `git://host/...` are valid manifest urls but\n // dead links in a browser, so they are rewritten to https before validating\n const url = utils.formatRepository(packageMeta?.latest?.repository);\n const repositoryURL = url\n ? url\n .replace(/^git\\+/, '')\n .replace(/^ssh:\\/\\/(git@)?/, 'https://')\n .replace(/^git:\\/\\//, 'https://')\n : null;\n if (!repositoryURL || !urlUtils.isURL(repositoryURL)) {\n return null;\n }\n\n return (\n <List\n dense={true}\n subheader={<StyledText variant=\"subtitle1\">{t('sidebar.repository.title')}</StyledText>}\n >\n <RepositoryListItem>\n <RepositoryAvatar sx={{ bgcolor: common.white }}>\n <Git />\n </RepositoryAvatar>\n <RepositoryListItemText\n primary={\n <CopyClipboard dataTestId=\"repositoryID\" text={repositoryURL} title={repositoryURL}>\n <LinkExternal to={repositoryURL} variant=\"outline\">\n {repositoryURL}\n </LinkExternal>\n </CopyClipboard>\n }\n />\n </RepositoryListItem>\n </List>\n );\n};\n\nexport default Repository;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAgBA,IAAM,aAAa,OAAO,UAAU,CAAC,EAAqB,WAAW;CACnE,YAAY,MAAM,MAAM,WAAW;CACnC,eAAe;AACjB,EAAE;AAEF,IAAM,qBAAqB,OAAO,QAAQ,CAAC,CAAC;CAC1C,SAAS;CACT,UAAU,EACR,iBAAiB,cACnB;AACF,CAAC;AAED,IAAM,yBAAyB,OAAO,YAAY,CAAC,CAAC;CAClD,SAAS;CACT,QAAQ;AACV,CAAC;AAED,IAAM,mBAAmB,OAAO,MAAM,CAAC,CAAC;CACtC,SAAS;CACT,YAAY;CACZ,iBAAiB;AACnB,CAAC;AAED,IAAM,cAA8C,EAAE,kBAAkB;CACtE,MAAM,EAAE,MAAM,eAAe;CAI7B,MAAM,MAAM,iBAAuB,aAAa,QAAQ,UAAU;CAClE,MAAM,gBAAgB,MAClB,IACG,QAAQ,UAAU,EAAE,CAAC,CACrB,QAAQ,oBAAoB,UAAU,CAAC,CACvC,QAAQ,aAAa,UAAU,IAClC;CACJ,IAAI,CAAC,iBAAiB,CAAC,MAAe,aAAa,GACjD,OAAO;CAGT,OACE,oBAAC,MAAD;EACE,OAAO;EACP,WAAW,oBAAC,YAAD;GAAY,SAAQ;GAAa,UAAA,EAAE,0BAA0B;EAAc,CAAA;EAEtF,UAAA,qBAAC,oBAAD,EAAA,UAAA,CACE,oBAAC,kBAAD;GAAkB,IAAI,EAAE,SAAS,OAAO,MAAM;GAC5C,UAAA,oBAAC,KAAD,CAAM,CAAA;EACU,CAAA,GAClB,oBAAC,wBAAD,EACE,SACE,oBAAC,iBAAD;GAAe,YAAW;GAAe,MAAM;GAAe,OAAO;GACnE,UAAA,oBAAC,cAAD;IAAc,IAAI;IAAe,SAAQ;IACtC,UAAA;GACW,CAAA;EACD,CAAA,EAElB,CAAA,CACiB,EAAA,CAAA;CAChB,CAAA;AAEV"}
|
|
@@ -5,6 +5,7 @@ export type OnSelecItem = (event: React.SyntheticEvent, value: SearchResultWeb,
|
|
|
5
5
|
interface Props {
|
|
6
6
|
suggestions?: SearchResultWeb[];
|
|
7
7
|
suggestionsLoading?: boolean;
|
|
8
|
+
hasError?: boolean;
|
|
8
9
|
placeholder: string;
|
|
9
10
|
renderOption?: (props: any, option: any) => React.JSX.Element;
|
|
10
11
|
renderInput: (params: any) => React.JSX.Element;
|
|
@@ -2,12 +2,12 @@ const require_runtime = require("../../../_virtual/_rolldown/runtime.js");
|
|
|
2
2
|
const require_styles = require("./styles.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
|
let _mui_material_Autocomplete = require("@mui/material/Autocomplete");
|
|
8
8
|
_mui_material_Autocomplete = require_runtime.__toESM(_mui_material_Autocomplete);
|
|
9
9
|
//#region src/components/Search/AutoComplete/AutoComplete.tsx
|
|
10
|
-
var AutoComplete = ({ suggestions = [], onSuggestionsFetch, onCleanSuggestions, renderInput, renderOption, getOptionLabel, onSelectItem, suggestionsLoading = false }) => {
|
|
10
|
+
var AutoComplete = ({ suggestions = [], onSuggestionsFetch, onCleanSuggestions, renderInput, renderOption, getOptionLabel, onSelectItem, suggestionsLoading = false, hasError = false }) => {
|
|
11
11
|
const { t } = (0, react_i18next.useTranslation)();
|
|
12
12
|
const [inputValue, setInputValue] = (0, react.useState)("");
|
|
13
13
|
const handleOnInputChange = (event, value, reason) => {
|
|
@@ -34,11 +34,11 @@ var AutoComplete = ({ suggestions = [], onSuggestionsFetch, onCleanSuggestions,
|
|
|
34
34
|
inputValue,
|
|
35
35
|
loading: suggestionsLoading,
|
|
36
36
|
loadingText: t("autoComplete.loading"),
|
|
37
|
-
noOptionsText: t("autoComplete.no-results-found"),
|
|
37
|
+
noOptionsText: hasError ? t("autoComplete.error") : t("autoComplete.no-results-found"),
|
|
38
38
|
onChange: onSelectItem,
|
|
39
39
|
onClose: handleOnClose,
|
|
40
40
|
onInputChange: handleOnInputChange,
|
|
41
|
-
options: suggestions,
|
|
41
|
+
options: hasError ? [] : suggestions,
|
|
42
42
|
renderInput,
|
|
43
43
|
renderOption,
|
|
44
44
|
renderTags: () => null
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutoComplete.js","names":[],"sources":["../../../../src/components/Search/AutoComplete/AutoComplete.tsx"],"sourcesContent":["import Autocomplete from '@mui/material/Autocomplete';\nimport type { FC } from 'react';\nimport React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport type { SearchResultWeb } from '@verdaccio/types';\n\nimport { Wrapper } from './styles';\n\nexport type OnSelecItem = (\n event: React.SyntheticEvent,\n value: SearchResultWeb,\n reason: string,\n details?: string\n) => void;\ninterface Props {\n suggestions?: SearchResultWeb[];\n suggestionsLoading?: boolean;\n placeholder: string;\n renderOption?: (props: any, option: any) => React.JSX.Element;\n renderInput: (params: any) => React.JSX.Element;\n onSuggestionsFetch: any;\n getOptionLabel: (option: any) => any;\n onCleanSuggestions: (event: React.SyntheticEvent) => void;\n onSelectItem: OnSelecItem;\n}\n\nconst AutoComplete: FC<Props> = ({\n suggestions = [],\n onSuggestionsFetch,\n onCleanSuggestions,\n renderInput,\n renderOption,\n getOptionLabel,\n onSelectItem,\n suggestionsLoading = false,\n}: Props) => {\n const { t } = useTranslation();\n const [inputValue, setInputValue] = useState('');\n\n const handleOnInputChange = (event: React.SyntheticEvent, value: string, reason: string) => {\n if (reason === 'input') {\n event.preventDefault();\n onSuggestionsFetch({ value });\n setInputValue(value);\n } else if (reason === 'clear') {\n onCleanSuggestions(event);\n setInputValue('');\n }\n };\n\n const handleOnClose = (event) => {\n onCleanSuggestions(event);\n setInputValue('');\n };\n\n // @ts-ignore\n return (\n <Wrapper>\n <Autocomplete\n /* @ts-ignore */\n clearOnBlur={true}\n disablePortal={true}\n filterOptions={(options, state) => (state.inputValue.trim() ? options : [])}\n fullWidth={true}\n getOptionLabel={getOptionLabel}\n id=\"search-header-suggest\"\n inputValue={inputValue}\n loading={suggestionsLoading}\n loadingText={t('autoComplete.loading')}\n noOptionsText={t('autoComplete.no-results-found')}\n onChange={onSelectItem as any}\n onClose={handleOnClose}\n onInputChange={handleOnInputChange}\n options={suggestions}\n renderInput={renderInput}\n renderOption={renderOption}\n renderTags={() => null}\n />\n </Wrapper>\n );\n};\n\nexport default AutoComplete;\n"],"mappings":";;;;;;;;;
|
|
1
|
+
{"version":3,"file":"AutoComplete.js","names":[],"sources":["../../../../src/components/Search/AutoComplete/AutoComplete.tsx"],"sourcesContent":["import Autocomplete from '@mui/material/Autocomplete';\nimport type { FC } from 'react';\nimport React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport type { SearchResultWeb } from '@verdaccio/types';\n\nimport { Wrapper } from './styles';\n\nexport type OnSelecItem = (\n event: React.SyntheticEvent,\n value: SearchResultWeb,\n reason: string,\n details?: string\n) => void;\ninterface Props {\n suggestions?: SearchResultWeb[];\n suggestionsLoading?: boolean;\n hasError?: boolean;\n placeholder: string;\n renderOption?: (props: any, option: any) => React.JSX.Element;\n renderInput: (params: any) => React.JSX.Element;\n onSuggestionsFetch: any;\n getOptionLabel: (option: any) => any;\n onCleanSuggestions: (event: React.SyntheticEvent) => void;\n onSelectItem: OnSelecItem;\n}\n\nconst AutoComplete: FC<Props> = ({\n suggestions = [],\n onSuggestionsFetch,\n onCleanSuggestions,\n renderInput,\n renderOption,\n getOptionLabel,\n onSelectItem,\n suggestionsLoading = false,\n hasError = false,\n}: Props) => {\n const { t } = useTranslation();\n const [inputValue, setInputValue] = useState('');\n\n const handleOnInputChange = (event: React.SyntheticEvent, value: string, reason: string) => {\n if (reason === 'input') {\n event.preventDefault();\n onSuggestionsFetch({ value });\n setInputValue(value);\n } else if (reason === 'clear') {\n onCleanSuggestions(event);\n setInputValue('');\n }\n };\n\n const handleOnClose = (event) => {\n onCleanSuggestions(event);\n setInputValue('');\n };\n\n // @ts-ignore\n return (\n <Wrapper>\n <Autocomplete\n /* @ts-ignore */\n clearOnBlur={true}\n disablePortal={true}\n filterOptions={(options, state) => (state.inputValue.trim() ? options : [])}\n fullWidth={true}\n getOptionLabel={getOptionLabel}\n id=\"search-header-suggest\"\n inputValue={inputValue}\n loading={suggestionsLoading}\n loadingText={t('autoComplete.loading')}\n // a failed search must not read as \"no results found\"\n noOptionsText={hasError ? t('autoComplete.error') : t('autoComplete.no-results-found')}\n onChange={onSelectItem as any}\n onClose={handleOnClose}\n onInputChange={handleOnInputChange}\n options={hasError ? [] : suggestions}\n renderInput={renderInput}\n renderOption={renderOption}\n renderTags={() => null}\n />\n </Wrapper>\n );\n};\n\nexport default AutoComplete;\n"],"mappings":";;;;;;;;;AA4BA,IAAM,gBAA2B,EAC/B,cAAc,CAAC,GACf,oBACA,oBACA,aACA,cACA,gBACA,cACA,qBAAqB,OACrB,WAAW,YACA;CACX,MAAM,EAAE,OAAA,GAAM,cAAA,eAAA,CAAe;CAC7B,MAAM,CAAC,YAAY,kBAAA,GAAiB,MAAA,SAAA,CAAS,EAAE;CAE/C,MAAM,uBAAuB,OAA6B,OAAe,WAAmB;EAC1F,IAAI,WAAW,SAAS;GACtB,MAAM,eAAe;GACrB,mBAAmB,EAAE,MAAM,CAAC;GAC5B,cAAc,KAAK;EACrB,OAAO,IAAI,WAAW,SAAS;GAC7B,mBAAmB,KAAK;GACxB,cAAc,EAAE;EAClB;CACF;CAEA,MAAM,iBAAiB,UAAU;EAC/B,mBAAmB,KAAK;EACxB,cAAc,EAAE;CAClB;CAGA,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAA,SAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,2BAAA,SAAD;EAEE,aAAa;EACb,eAAe;EACf,gBAAgB,SAAS,UAAW,MAAM,WAAW,KAAK,IAAI,UAAU,CAAC;EACzE,WAAW;EACK;EAChB,IAAG;EACS;EACZ,SAAS;EACT,aAAa,EAAE,sBAAsB;EAErC,eAAe,WAAW,EAAE,oBAAoB,IAAI,EAAE,+BAA+B;EACrF,UAAU;EACV,SAAS;EACT,eAAe;EACf,SAAS,WAAW,CAAC,IAAI;EACZ;EACC;EACd,kBAAkB;CACnB,CAAA,EACM,CAAA;AAEb"}
|