@verdaccio/ui-components 5.0.0-next-9.24 → 5.0.0-next-9.26
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/README.md +20 -0
- package/build/api/use-data.d.ts +2 -2
- package/build/api/use-data.js +2 -2
- package/build/api/use-data.js.map +1 -1
- package/build/api/use-data.mjs +2 -2
- package/build/api/use-data.mjs.map +1 -1
- package/build/components/CopyClipboard/CopyToClipBoard.d.ts +1 -0
- package/build/components/CopyClipboard/CopyToClipBoard.js +36 -17
- package/build/components/CopyClipboard/CopyToClipBoard.js.map +1 -1
- package/build/components/CopyClipboard/CopyToClipBoard.mjs +36 -19
- package/build/components/CopyClipboard/CopyToClipBoard.mjs.map +1 -1
- package/build/components/CopyClipboard/utils.d.ts +2 -1
- package/build/components/CopyClipboard/utils.js +6 -4
- package/build/components/CopyClipboard/utils.js.map +1 -1
- package/build/components/CopyClipboard/utils.mjs +6 -4
- package/build/components/CopyClipboard/utils.mjs.map +1 -1
- package/build/components/DocsLink/DocsLink.d.ts +8 -0
- package/build/components/DocsLink/DocsLink.js +40 -0
- package/build/components/DocsLink/DocsLink.js.map +1 -0
- package/build/components/DocsLink/DocsLink.mjs +35 -0
- package/build/components/DocsLink/DocsLink.mjs.map +1 -0
- package/build/components/DocsLink/index.d.ts +1 -0
- package/build/components/DocsLink/index.js +3 -0
- package/build/components/DocsLink/index.mjs +1 -0
- package/build/components/Help/Help.d.ts +13 -0
- package/build/components/Help/Help.js +280 -36
- package/build/components/Help/Help.js.map +1 -1
- package/build/components/Help/Help.mjs +274 -39
- package/build/components/Help/Help.mjs.map +1 -1
- package/build/components/Help/styles.d.ts +29 -0
- package/build/components/Help/styles.js +86 -1
- package/build/components/Help/styles.js.map +1 -1
- package/build/components/Help/styles.mjs +82 -2
- package/build/components/Help/styles.mjs.map +1 -1
- package/build/components/Icons/Managers/Bun.d.ts +2 -0
- package/build/components/Icons/Managers/Bun2.js +18 -0
- package/build/components/Icons/Managers/Bun2.js.map +1 -0
- package/build/components/Icons/Managers/Bun2.mjs +16 -0
- package/build/components/Icons/Managers/Bun2.mjs.map +1 -0
- package/build/components/Icons/Managers/bun.js +6 -0
- package/build/components/Icons/Managers/bun.js.map +1 -0
- package/build/components/Icons/Managers/bun.mjs +6 -0
- package/build/components/Icons/Managers/bun.mjs.map +1 -0
- package/build/components/Icons/Managers/bun.svg +1 -0
- package/build/components/Icons/Managers/index.d.ts +1 -0
- package/build/components/Icons/Managers/index.js +2 -0
- package/build/components/Icons/Managers/index.mjs +2 -1
- package/build/components/Icons/index.js +3 -0
- package/build/components/Icons/index.mjs +3 -1
- package/build/components/Install/Install.d.ts +2 -0
- package/build/components/Install/Install.js +30 -2
- package/build/components/Install/Install.js.map +1 -1
- package/build/components/Install/Install.mjs +30 -3
- package/build/components/Install/Install.mjs.map +1 -1
- package/build/components/Install/InstallListItem.d.ts +2 -1
- package/build/components/Install/InstallListItem.js +17 -0
- package/build/components/Install/InstallListItem.js.map +1 -1
- package/build/components/Install/InstallListItem.mjs +17 -0
- package/build/components/Install/InstallListItem.mjs.map +1 -1
- package/build/components/Loading/PackageListSkeleton.d.ts +3 -0
- package/build/components/Loading/PackageListSkeleton.js +70 -0
- package/build/components/Loading/PackageListSkeleton.js.map +1 -0
- package/build/components/Loading/PackageListSkeleton.mjs +65 -0
- package/build/components/Loading/PackageListSkeleton.mjs.map +1 -0
- package/build/components/Loading/VersionSkeleton.d.ts +3 -0
- package/build/components/Loading/VersionSkeleton.js +119 -0
- package/build/components/Loading/VersionSkeleton.js.map +1 -0
- package/build/components/Loading/VersionSkeleton.mjs +111 -0
- package/build/components/Loading/VersionSkeleton.mjs.map +1 -0
- package/build/components/Loading/index.d.ts +2 -0
- package/build/components/Loading/index.js +4 -0
- package/build/components/Loading/index.mjs +4 -1
- package/build/components/Package/Package.js +5 -1
- package/build/components/Package/Package.js.map +1 -1
- package/build/components/Package/Package.mjs +6 -2
- package/build/components/Package/Package.mjs.map +1 -1
- package/build/components/Package/styles.d.ts +3 -0
- package/build/components/Package/styles.js +8 -0
- package/build/components/Package/styles.js.map +1 -1
- package/build/components/Package/styles.mjs +8 -1
- package/build/components/Package/styles.mjs.map +1 -1
- package/build/components/PackageList/PackageList.js +4 -4
- package/build/components/PackageList/PackageList.js.map +1 -1
- package/build/components/PackageList/PackageList.mjs +5 -5
- package/build/components/PackageList/PackageList.mjs.map +1 -1
- package/build/components/PackageList/PackageListToolbar.d.ts +15 -0
- package/build/components/PackageList/PackageListToolbar.js +127 -0
- package/build/components/PackageList/PackageListToolbar.js.map +1 -0
- package/build/components/PackageList/PackageListToolbar.mjs +119 -0
- package/build/components/PackageList/PackageListToolbar.mjs.map +1 -0
- package/build/components/PackageList/filterPackages.d.ts +16 -0
- package/build/components/PackageList/filterPackages.js +37 -0
- package/build/components/PackageList/filterPackages.js.map +1 -0
- package/build/components/PackageList/filterPackages.mjs +34 -0
- package/build/components/PackageList/filterPackages.mjs.map +1 -0
- package/build/components/RegistryInfoDialog/RegistryInfoDialog.js +18 -7
- package/build/components/RegistryInfoDialog/RegistryInfoDialog.js.map +1 -1
- package/build/components/RegistryInfoDialog/RegistryInfoDialog.mjs +18 -7
- package/build/components/RegistryInfoDialog/RegistryInfoDialog.mjs.map +1 -1
- package/build/components/RegistryInfoDialog/types.d.ts +1 -0
- package/build/components/Search/AutoComplete/AutoComplete.d.ts +3 -0
- package/build/components/Search/AutoComplete/AutoComplete.js +3 -1
- package/build/components/Search/AutoComplete/AutoComplete.js.map +1 -1
- package/build/components/Search/AutoComplete/AutoComplete.mjs +3 -1
- package/build/components/Search/AutoComplete/AutoComplete.mjs.map +1 -1
- package/build/components/Search/Search.js +28 -1
- package/build/components/Search/Search.js.map +1 -1
- package/build/components/Search/Search.mjs +31 -5
- package/build/components/Search/Search.mjs.map +1 -1
- package/build/components/Search/SearchItem.d.ts +12 -1
- package/build/components/Search/SearchItem.js +53 -70
- package/build/components/Search/SearchItem.js.map +1 -1
- package/build/components/Search/SearchItem.mjs +51 -67
- package/build/components/Search/SearchItem.mjs.map +1 -1
- package/build/components/Search/utils.d.ts +10 -0
- package/build/components/Search/utils.js +28 -1
- package/build/components/Search/utils.js.map +1 -1
- package/build/components/Search/utils.mjs +26 -2
- package/build/components/Search/utils.mjs.map +1 -1
- package/build/components/SettingsMenu/SettingsMenu.js +2 -2
- package/build/components/SettingsMenu/SettingsMenu.mjs +1 -1
- package/build/components/Versions/Versions.js +8 -2
- package/build/components/Versions/Versions.js.map +1 -1
- package/build/components/Versions/Versions.mjs +8 -2
- package/build/components/Versions/Versions.mjs.map +1 -1
- package/build/components/VisuallyHidden/index.d.ts +5 -0
- package/build/components/VisuallyHidden/index.js +17 -0
- package/build/components/VisuallyHidden/index.js.map +1 -0
- package/build/components/VisuallyHidden/index.mjs +15 -0
- package/build/components/VisuallyHidden/index.mjs.map +1 -0
- package/build/configuration.js +2 -1
- package/build/configuration.js.map +1 -1
- package/build/configuration.mjs +2 -1
- package/build/configuration.mjs.map +1 -1
- package/build/i18n/crowdin/ui.js +68 -11
- package/build/i18n/crowdin/ui.js.map +1 -1
- package/build/i18n/crowdin/ui.json +64 -11
- package/build/i18n/crowdin/ui.mjs +67 -12
- package/build/i18n/crowdin/ui.mjs.map +1 -1
- package/build/i18n/download_translations/cs-CZ/ui.js +68 -11
- package/build/i18n/download_translations/cs-CZ/ui.js.map +1 -1
- package/build/i18n/download_translations/cs-CZ/ui.json +64 -11
- package/build/i18n/download_translations/cs-CZ/ui.mjs +67 -12
- package/build/i18n/download_translations/cs-CZ/ui.mjs.map +1 -1
- package/build/i18n/download_translations/de-DE/ui.js +68 -11
- package/build/i18n/download_translations/de-DE/ui.js.map +1 -1
- package/build/i18n/download_translations/de-DE/ui.json +64 -11
- package/build/i18n/download_translations/de-DE/ui.mjs +67 -12
- package/build/i18n/download_translations/de-DE/ui.mjs.map +1 -1
- package/build/i18n/download_translations/es-ES/ui.js +68 -11
- package/build/i18n/download_translations/es-ES/ui.js.map +1 -1
- package/build/i18n/download_translations/es-ES/ui.json +64 -11
- package/build/i18n/download_translations/es-ES/ui.mjs +67 -12
- package/build/i18n/download_translations/es-ES/ui.mjs.map +1 -1
- package/build/i18n/download_translations/fr-FR/ui.js +68 -11
- package/build/i18n/download_translations/fr-FR/ui.js.map +1 -1
- package/build/i18n/download_translations/fr-FR/ui.json +64 -11
- package/build/i18n/download_translations/fr-FR/ui.mjs +67 -12
- package/build/i18n/download_translations/fr-FR/ui.mjs.map +1 -1
- package/build/i18n/download_translations/ga-IE/ui.js +68 -11
- package/build/i18n/download_translations/ga-IE/ui.js.map +1 -1
- package/build/i18n/download_translations/ga-IE/ui.json +64 -11
- package/build/i18n/download_translations/ga-IE/ui.mjs +67 -12
- package/build/i18n/download_translations/ga-IE/ui.mjs.map +1 -1
- package/build/i18n/download_translations/gl-ES/ui.js +68 -11
- package/build/i18n/download_translations/gl-ES/ui.js.map +1 -1
- package/build/i18n/download_translations/gl-ES/ui.json +64 -11
- package/build/i18n/download_translations/gl-ES/ui.mjs +67 -12
- package/build/i18n/download_translations/gl-ES/ui.mjs.map +1 -1
- package/build/i18n/download_translations/it-IT/ui.js +68 -11
- package/build/i18n/download_translations/it-IT/ui.js.map +1 -1
- package/build/i18n/download_translations/it-IT/ui.json +64 -11
- package/build/i18n/download_translations/it-IT/ui.mjs +67 -12
- package/build/i18n/download_translations/it-IT/ui.mjs.map +1 -1
- package/build/i18n/download_translations/ko-KR/ui.js +68 -11
- package/build/i18n/download_translations/ko-KR/ui.js.map +1 -1
- package/build/i18n/download_translations/ko-KR/ui.json +64 -11
- package/build/i18n/download_translations/ko-KR/ui.mjs +67 -12
- package/build/i18n/download_translations/ko-KR/ui.mjs.map +1 -1
- package/build/i18n/download_translations/pl-PL/ui.js +68 -11
- package/build/i18n/download_translations/pl-PL/ui.js.map +1 -1
- package/build/i18n/download_translations/pl-PL/ui.json +64 -11
- package/build/i18n/download_translations/pl-PL/ui.mjs +67 -12
- package/build/i18n/download_translations/pl-PL/ui.mjs.map +1 -1
- package/build/i18n/download_translations/pt-BR/ui.js +68 -11
- package/build/i18n/download_translations/pt-BR/ui.js.map +1 -1
- package/build/i18n/download_translations/pt-BR/ui.json +64 -11
- package/build/i18n/download_translations/pt-BR/ui.mjs +67 -12
- package/build/i18n/download_translations/pt-BR/ui.mjs.map +1 -1
- package/build/i18n/download_translations/ru-RU/ui.js +68 -11
- package/build/i18n/download_translations/ru-RU/ui.js.map +1 -1
- package/build/i18n/download_translations/ru-RU/ui.json +64 -11
- package/build/i18n/download_translations/ru-RU/ui.mjs +67 -12
- package/build/i18n/download_translations/ru-RU/ui.mjs.map +1 -1
- package/build/i18n/download_translations/sr-CS/ui.js +66 -12
- package/build/i18n/download_translations/sr-CS/ui.js.map +1 -1
- package/build/i18n/download_translations/sr-CS/ui.json +64 -11
- package/build/i18n/download_translations/sr-CS/ui.mjs +66 -13
- package/build/i18n/download_translations/sr-CS/ui.mjs.map +1 -1
- package/build/i18n/download_translations/tr-TR/ui.js +68 -11
- package/build/i18n/download_translations/tr-TR/ui.js.map +1 -1
- package/build/i18n/download_translations/tr-TR/ui.json +64 -11
- package/build/i18n/download_translations/tr-TR/ui.mjs +67 -12
- package/build/i18n/download_translations/tr-TR/ui.mjs.map +1 -1
- package/build/i18n/download_translations/vi-VN/ui.js +66 -12
- package/build/i18n/download_translations/vi-VN/ui.js.map +1 -1
- package/build/i18n/download_translations/vi-VN/ui.json +64 -11
- package/build/i18n/download_translations/vi-VN/ui.mjs +66 -13
- package/build/i18n/download_translations/vi-VN/ui.mjs.map +1 -1
- package/build/i18n/download_translations/yo-NG/ui.js +66 -12
- package/build/i18n/download_translations/yo-NG/ui.js.map +1 -1
- package/build/i18n/download_translations/yo-NG/ui.json +64 -11
- package/build/i18n/download_translations/yo-NG/ui.mjs +66 -13
- package/build/i18n/download_translations/yo-NG/ui.mjs.map +1 -1
- package/build/i18n/download_translations/zh-CN/ui.js +68 -11
- package/build/i18n/download_translations/zh-CN/ui.js.map +1 -1
- package/build/i18n/download_translations/zh-CN/ui.json +64 -11
- package/build/i18n/download_translations/zh-CN/ui.mjs +67 -12
- package/build/i18n/download_translations/zh-CN/ui.mjs.map +1 -1
- package/build/i18n/download_translations/zh-TW/ui.js +68 -11
- package/build/i18n/download_translations/zh-TW/ui.js.map +1 -1
- package/build/i18n/download_translations/zh-TW/ui.json +64 -11
- package/build/i18n/download_translations/zh-TW/ui.mjs +67 -12
- package/build/i18n/download_translations/zh-TW/ui.mjs.map +1 -1
- package/build/i18n/loadTranslationFile.d.ts +2 -2
- package/build/i18n/loadTranslationFile.js +2 -2
- package/build/i18n/loadTranslationFile.js.map +1 -1
- package/build/i18n/loadTranslationFile.mjs +2 -2
- package/build/i18n/loadTranslationFile.mjs.map +1 -1
- package/build/index.d.ts +1 -0
- package/build/index.js +8 -0
- package/build/index.mjs +4 -2
- package/build/mockServiceWorker.js +1 -0
- package/build/pages/Version/Version.js +2 -2
- package/build/pages/Version/Version.js.map +1 -1
- package/build/pages/Version/Version.mjs +2 -2
- package/build/pages/Version/Version.mjs.map +1 -1
- package/build/providers/AppConfigurationProvider/AppConfigurationProvider.js +3 -1
- package/build/providers/AppConfigurationProvider/AppConfigurationProvider.js.map +1 -1
- package/build/providers/AppConfigurationProvider/AppConfigurationProvider.mjs +3 -1
- package/build/providers/AppConfigurationProvider/AppConfigurationProvider.mjs.map +1 -1
- package/build/providers/ManifestsProvider/ManifestsProvider.d.ts +3 -0
- package/build/providers/ManifestsProvider/ManifestsProvider.js +9 -2
- package/build/providers/ManifestsProvider/ManifestsProvider.js.map +1 -1
- package/build/providers/ManifestsProvider/ManifestsProvider.mjs +10 -4
- package/build/providers/ManifestsProvider/ManifestsProvider.mjs.map +1 -1
- package/build/sections/Detail/ContainerContent.js +8 -0
- package/build/sections/Detail/ContainerContent.js.map +1 -1
- package/build/sections/Detail/ContainerContent.mjs +8 -1
- package/build/sections/Detail/ContainerContent.mjs.map +1 -1
- package/build/sections/Detail/Detail.d.ts +3 -6
- package/build/sections/Detail/Detail.js +13 -14
- package/build/sections/Detail/Detail.js.map +1 -1
- package/build/sections/Detail/Detail.mjs +14 -15
- package/build/sections/Detail/Detail.mjs.map +1 -1
- package/build/sections/Detail/Tabs.d.ts +3 -2
- package/build/sections/Detail/Tabs.js +9 -4
- package/build/sections/Detail/Tabs.js.map +1 -1
- package/build/sections/Detail/Tabs.mjs +9 -4
- package/build/sections/Detail/Tabs.mjs.map +1 -1
- package/build/sections/Footer/Footer.js +24 -3
- package/build/sections/Footer/Footer.js.map +1 -1
- package/build/sections/Footer/Footer.mjs +24 -4
- package/build/sections/Footer/Footer.mjs.map +1 -1
- package/build/sections/Footer/styles.d.ts +6 -0
- package/build/sections/Footer/styles.js +21 -2
- package/build/sections/Footer/styles.js.map +1 -1
- package/build/sections/Footer/styles.mjs +21 -3
- package/build/sections/Footer/styles.mjs.map +1 -1
- package/build/sections/Header/HeaderSettingsDialog.js +39 -10
- package/build/sections/Header/HeaderSettingsDialog.js.map +1 -1
- package/build/sections/Header/HeaderSettingsDialog.mjs +39 -10
- package/build/sections/Header/HeaderSettingsDialog.mjs.map +1 -1
- package/build/sections/Header/RegistryInfoContent/RegistryInfoContent.d.ts +1 -4
- package/build/sections/Header/RegistryInfoContent/RegistryInfoContent.js +98 -15
- package/build/sections/Header/RegistryInfoContent/RegistryInfoContent.js.map +1 -1
- package/build/sections/Header/RegistryInfoContent/RegistryInfoContent.mjs +100 -15
- package/build/sections/Header/RegistryInfoContent/RegistryInfoContent.mjs.map +1 -1
- package/build/sections/Home/Home.js +58 -2
- package/build/sections/Home/Home.js.map +1 -1
- package/build/sections/Home/Home.mjs +60 -4
- package/build/sections/Home/Home.mjs.map +1 -1
- package/build/utils/cli-utils.d.ts +10 -0
- package/build/utils/cli-utils.js +26 -0
- package/build/utils/cli-utils.js.map +1 -1
- package/build/utils/cli-utils.mjs +23 -1
- package/build/utils/cli-utils.mjs.map +1 -1
- package/build/utils/index.d.ts +1 -1
- package/build/utils/index.js +4 -0
- package/build/utils/index.mjs +2 -2
- package/build/utils/markdown.d.ts +6 -0
- package/build/utils/markdown.js +16 -0
- package/build/utils/markdown.js.map +1 -0
- package/build/utils/markdown.mjs +13 -0
- package/build/utils/markdown.mjs.map +1 -0
- package/package.json +8 -8
|
@@ -16,12 +16,12 @@ let react_virtualized_dist_commonjs_CellMeasurer = require("react-virtualized/di
|
|
|
16
16
|
let react_virtualized_dist_commonjs_List = require("react-virtualized/dist/commonjs/List");
|
|
17
17
|
let react_virtualized_dist_commonjs_WindowScroller = require("react-virtualized/dist/commonjs/WindowScroller");
|
|
18
18
|
//#region src/components/PackageList/PackageList.tsx
|
|
19
|
-
var cache = new react_virtualized_dist_commonjs_CellMeasurer.CellMeasurerCache({
|
|
20
|
-
fixedWidth: true,
|
|
21
|
-
defaultHeight: 100
|
|
22
|
-
});
|
|
23
19
|
var PackageList = ({ packages }) => {
|
|
24
20
|
const { configOptions } = require_AppConfigurationProvider.useConfig();
|
|
21
|
+
const [cache] = (0, react.useState)(() => new react_virtualized_dist_commonjs_CellMeasurer.CellMeasurerCache({
|
|
22
|
+
fixedWidth: true,
|
|
23
|
+
defaultHeight: 100
|
|
24
|
+
}));
|
|
25
25
|
const renderRow = ({ index, key, parent, style }) => {
|
|
26
26
|
const { name, version, description, time, keywords, dist, homepage, bugs, author, license } = packages[index];
|
|
27
27
|
const formattedLicense = require_utils.formatLicense(license);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PackageList.js","names":["
|
|
1
|
+
{"version":3,"file":"PackageList.js","names":["useConfig","useState","CellMeasurerCache","CellMeasurer","Divider","Package","Help","DownloadProvider","WindowScroller","AutoSizer","List"],"sources":["../../../src/components/PackageList/PackageList.tsx"],"sourcesContent":["import Divider from '@mui/material/Divider';\nimport React, { useState } from 'react';\nimport { AutoSizer } from 'react-virtualized/dist/commonjs/AutoSizer';\nimport { CellMeasurer, CellMeasurerCache } from 'react-virtualized/dist/commonjs/CellMeasurer';\nimport type { ListRowProps } from 'react-virtualized/dist/commonjs/List';\nimport { List } from 'react-virtualized/dist/commonjs/List';\nimport { WindowScroller } from 'react-virtualized/dist/commonjs/WindowScroller';\n\nimport { DownloadProvider, Help, Package, useConfig } from '../..';\nimport type { ManifestWeb } from '../../providers/ManifestsProvider/ManifestsProvider';\nimport { utils } from '../../utils';\n\ninterface Props {\n packages: ManifestWeb[];\n}\n\nconst PackageList: React.FC<Props> = ({ packages }) => {\n const { configOptions } = useConfig();\n // heights are cached by row index: callers remount the list (key) when its rows change\n const [cache] = useState(() => new CellMeasurerCache({ fixedWidth: true, defaultHeight: 100 }));\n const renderRow = ({ index, key, parent, style }: ListRowProps) => {\n const { name, version, description, time, keywords, dist, homepage, bugs, author, license } =\n packages[index];\n // TODO: move format license to API side.\n const formattedLicense = utils.formatLicense(license);\n return (\n <CellMeasurer cache={cache} columnIndex={0} key={key} parent={parent} rowIndex={index}>\n <div style={style}>\n {index !== 0 && <Divider />}\n <Package\n author={author}\n bugs={bugs}\n description={description}\n dist={dist}\n homepage={homepage}\n keywords={keywords}\n license={formattedLicense}\n name={name}\n showDownload={configOptions.showDownloadTarball}\n time={time}\n version={version}\n />\n </div>\n </CellMeasurer>\n );\n };\n\n const hasPackages = packages?.length > 0;\n\n if (!hasPackages) {\n return <Help />;\n }\n\n return (\n <DownloadProvider>\n <WindowScroller>\n {({ height, isScrolling, scrollTop, onChildScroll }) => (\n <AutoSizer disableHeight={true}>\n {({ width }) => {\n return (\n <List\n autoHeight={true}\n deferredMeasurementCache={cache}\n height={height}\n isScrolling={isScrolling}\n onScroll={onChildScroll}\n overscanRowCount={3}\n rowCount={packages?.length}\n rowHeight={cache.rowHeight}\n rowRenderer={renderRow}\n scrollTop={scrollTop}\n width={width}\n />\n );\n }}\n </AutoSizer>\n )}\n </WindowScroller>\n </DownloadProvider>\n );\n};\n\nexport default PackageList;\n"],"mappings":";;;;;;;;;;;;;;;;;;AAgBA,IAAM,eAAgC,EAAE,eAAe;CACrD,MAAM,EAAE,kBAAkBA,iCAAAA,UAAU;CAEpC,MAAM,CAAC,UAAA,GAASC,MAAAA,SAAAA,OAAe,IAAIC,6CAAAA,kBAAkB;EAAE,YAAY;EAAM,eAAe;CAAI,CAAC,CAAC;CAC9F,MAAM,aAAa,EAAE,OAAO,KAAK,QAAQ,YAA0B;EACjE,MAAM,EAAE,MAAM,SAAS,aAAa,MAAM,UAAU,MAAM,UAAU,MAAM,QAAQ,YAChF,SAAS;EAEX,MAAM,mBAAA,cAAA,cAAuC,OAAO;EACpD,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,6CAAAA,cAAD;GAAqB;GAAO,aAAa;GAAqB;GAAQ,UAAU;GAC9E,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAY;IAAZ,UAAA,CACG,UAAU,KAAK,iBAAA,GAAA,kBAAA,IAAA,CAACC,sBAAAA,SAAD,CAAU,CAAA,GAC1B,iBAAA,GAAA,kBAAA,IAAA,CAACC,gBAAAA,SAAD;KACU;KACF;KACO;KACP;KACI;KACA;KACV,SAAS;KACH;KACN,cAAc,cAAc;KACtB;KACG;IACV,CAAA,CACE;;EACO,GAjBmC,GAiBnC;CAElB;CAIA,IAAI,EAFgB,UAAU,SAAS,IAGrC,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACC,aAAAA,SAAD,CAAO,CAAA;CAGhB,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,yBAAAA,kBAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,+CAAAA,gBAAD,EAAA,WACI,EAAE,QAAQ,aAAa,WAAW,oBAClC,iBAAA,GAAA,kBAAA,IAAA,CAACC,0CAAAA,WAAD;EAAW,eAAe;EACtB,WAAA,EAAE,YAAY;GACd,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,qCAAAA,MAAD;IACE,YAAY;IACZ,0BAA0B;IAClB;IACK;IACb,UAAU;IACV,kBAAkB;IAClB,UAAU,UAAU;IACpB,WAAW,MAAM;IACjB,aAAa;IACF;IACJ;GACR,CAAA;EAEL;CACS,CAAA,EAEC,CAAA,EACA,CAAA;AAEtB"}
|
|
@@ -5,7 +5,7 @@ import { DownloadProvider } from "../../providers/DownloadProvider/DownloadProvi
|
|
|
5
5
|
import Package from "../Package/Package.mjs";
|
|
6
6
|
import Help from "../Help/Help.mjs";
|
|
7
7
|
import "../../index.mjs";
|
|
8
|
-
import "react";
|
|
8
|
+
import { useState } from "react";
|
|
9
9
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
10
10
|
import Divider from "@mui/material/Divider";
|
|
11
11
|
import { AutoSizer } from "react-virtualized/dist/commonjs/AutoSizer";
|
|
@@ -13,12 +13,12 @@ import { CellMeasurer, CellMeasurerCache } from "react-virtualized/dist/commonjs
|
|
|
13
13
|
import { List } from "react-virtualized/dist/commonjs/List";
|
|
14
14
|
import { WindowScroller } from "react-virtualized/dist/commonjs/WindowScroller";
|
|
15
15
|
//#region src/components/PackageList/PackageList.tsx
|
|
16
|
-
var cache = new CellMeasurerCache({
|
|
17
|
-
fixedWidth: true,
|
|
18
|
-
defaultHeight: 100
|
|
19
|
-
});
|
|
20
16
|
var PackageList = ({ packages }) => {
|
|
21
17
|
const { configOptions } = useConfig();
|
|
18
|
+
const [cache] = useState(() => new CellMeasurerCache({
|
|
19
|
+
fixedWidth: true,
|
|
20
|
+
defaultHeight: 100
|
|
21
|
+
}));
|
|
22
22
|
const renderRow = ({ index, key, parent, style }) => {
|
|
23
23
|
const { name, version, description, time, keywords, dist, homepage, bugs, author, license } = packages[index];
|
|
24
24
|
const formattedLicense = formatLicense(license);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PackageList.mjs","names":["utils.formatLicense"],"sources":["../../../src/components/PackageList/PackageList.tsx"],"sourcesContent":["import Divider from '@mui/material/Divider';\nimport React from 'react';\nimport { AutoSizer } from 'react-virtualized/dist/commonjs/AutoSizer';\nimport { CellMeasurer, CellMeasurerCache } from 'react-virtualized/dist/commonjs/CellMeasurer';\nimport type { ListRowProps } from 'react-virtualized/dist/commonjs/List';\nimport { List } from 'react-virtualized/dist/commonjs/List';\nimport { WindowScroller } from 'react-virtualized/dist/commonjs/WindowScroller';\n\nimport { DownloadProvider, Help, Package, useConfig } from '../..';\nimport type { ManifestWeb } from '../../providers/ManifestsProvider/ManifestsProvider';\nimport { utils } from '../../utils';\n\ninterface Props {\n packages: ManifestWeb[];\n}\n\nconst
|
|
1
|
+
{"version":3,"file":"PackageList.mjs","names":["utils.formatLicense"],"sources":["../../../src/components/PackageList/PackageList.tsx"],"sourcesContent":["import Divider from '@mui/material/Divider';\nimport React, { useState } from 'react';\nimport { AutoSizer } from 'react-virtualized/dist/commonjs/AutoSizer';\nimport { CellMeasurer, CellMeasurerCache } from 'react-virtualized/dist/commonjs/CellMeasurer';\nimport type { ListRowProps } from 'react-virtualized/dist/commonjs/List';\nimport { List } from 'react-virtualized/dist/commonjs/List';\nimport { WindowScroller } from 'react-virtualized/dist/commonjs/WindowScroller';\n\nimport { DownloadProvider, Help, Package, useConfig } from '../..';\nimport type { ManifestWeb } from '../../providers/ManifestsProvider/ManifestsProvider';\nimport { utils } from '../../utils';\n\ninterface Props {\n packages: ManifestWeb[];\n}\n\nconst PackageList: React.FC<Props> = ({ packages }) => {\n const { configOptions } = useConfig();\n // heights are cached by row index: callers remount the list (key) when its rows change\n const [cache] = useState(() => new CellMeasurerCache({ fixedWidth: true, defaultHeight: 100 }));\n const renderRow = ({ index, key, parent, style }: ListRowProps) => {\n const { name, version, description, time, keywords, dist, homepage, bugs, author, license } =\n packages[index];\n // TODO: move format license to API side.\n const formattedLicense = utils.formatLicense(license);\n return (\n <CellMeasurer cache={cache} columnIndex={0} key={key} parent={parent} rowIndex={index}>\n <div style={style}>\n {index !== 0 && <Divider />}\n <Package\n author={author}\n bugs={bugs}\n description={description}\n dist={dist}\n homepage={homepage}\n keywords={keywords}\n license={formattedLicense}\n name={name}\n showDownload={configOptions.showDownloadTarball}\n time={time}\n version={version}\n />\n </div>\n </CellMeasurer>\n );\n };\n\n const hasPackages = packages?.length > 0;\n\n if (!hasPackages) {\n return <Help />;\n }\n\n return (\n <DownloadProvider>\n <WindowScroller>\n {({ height, isScrolling, scrollTop, onChildScroll }) => (\n <AutoSizer disableHeight={true}>\n {({ width }) => {\n return (\n <List\n autoHeight={true}\n deferredMeasurementCache={cache}\n height={height}\n isScrolling={isScrolling}\n onScroll={onChildScroll}\n overscanRowCount={3}\n rowCount={packages?.length}\n rowHeight={cache.rowHeight}\n rowRenderer={renderRow}\n scrollTop={scrollTop}\n width={width}\n />\n );\n }}\n </AutoSizer>\n )}\n </WindowScroller>\n </DownloadProvider>\n );\n};\n\nexport default PackageList;\n"],"mappings":";;;;;;;;;;;;;;;AAgBA,IAAM,eAAgC,EAAE,eAAe;CACrD,MAAM,EAAE,kBAAkB,UAAU;CAEpC,MAAM,CAAC,SAAS,eAAe,IAAI,kBAAkB;EAAE,YAAY;EAAM,eAAe;CAAI,CAAC,CAAC;CAC9F,MAAM,aAAa,EAAE,OAAO,KAAK,QAAQ,YAA0B;EACjE,MAAM,EAAE,MAAM,SAAS,aAAa,MAAM,UAAU,MAAM,UAAU,MAAM,QAAQ,YAChF,SAAS;EAEX,MAAM,mBAAmBA,cAAoB,OAAO;EACpD,OACE,oBAAC,cAAD;GAAqB;GAAO,aAAa;GAAqB;GAAQ,UAAU;GAC9E,UAAA,qBAAC,OAAD;IAAY;IAAZ,UAAA,CACG,UAAU,KAAK,oBAAC,SAAD,CAAU,CAAA,GAC1B,oBAAC,SAAD;KACU;KACF;KACO;KACP;KACI;KACA;KACV,SAAS;KACH;KACN,cAAc,cAAc;KACtB;KACG;IACV,CAAA,CACE;;EACO,GAjBmC,GAiBnC;CAElB;CAIA,IAAI,EAFgB,UAAU,SAAS,IAGrC,OAAO,oBAAC,MAAD,CAAO,CAAA;CAGhB,OACE,oBAAC,kBAAD,EAAA,UACE,oBAAC,gBAAD,EAAA,WACI,EAAE,QAAQ,aAAa,WAAW,oBAClC,oBAAC,WAAD;EAAW,eAAe;EACtB,WAAA,EAAE,YAAY;GACd,OACE,oBAAC,MAAD;IACE,YAAY;IACZ,0BAA0B;IAClB;IACK;IACb,UAAU;IACV,kBAAkB;IAClB,UAAU,UAAU;IACpB,WAAW,MAAM;IACjB,aAAa;IACF;IACJ;GACR,CAAA;EAEL;CACS,CAAA,EAEC,CAAA,EACA,CAAA;AAEtB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { PackageSort } from './filterPackages';
|
|
3
|
+
type Props = {
|
|
4
|
+
query: string;
|
|
5
|
+
scope: string;
|
|
6
|
+
sort: PackageSort;
|
|
7
|
+
scopes: string[];
|
|
8
|
+
shown: number;
|
|
9
|
+
total: number;
|
|
10
|
+
onQueryChange: (query: string) => void;
|
|
11
|
+
onScopeChange: (scope: string) => void;
|
|
12
|
+
onSortChange: (sort: PackageSort) => void;
|
|
13
|
+
};
|
|
14
|
+
declare const PackageListToolbar: React.FC<Props>;
|
|
15
|
+
export default PackageListToolbar;
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
const require_runtime = require("../../_virtual/_rolldown/runtime.js");
|
|
2
|
+
const require_filterPackages = require("./filterPackages.js");
|
|
3
|
+
let react = require("react");
|
|
4
|
+
react = require_runtime.__toESM(react);
|
|
5
|
+
let react_i18next = require("react-i18next");
|
|
6
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
7
|
+
let _mui_material_Box = require("@mui/material/Box");
|
|
8
|
+
_mui_material_Box = require_runtime.__toESM(_mui_material_Box);
|
|
9
|
+
let _mui_material_Typography = require("@mui/material/Typography");
|
|
10
|
+
_mui_material_Typography = require_runtime.__toESM(_mui_material_Typography);
|
|
11
|
+
let _mui_material_MenuItem = require("@mui/material/MenuItem");
|
|
12
|
+
_mui_material_MenuItem = require_runtime.__toESM(_mui_material_MenuItem);
|
|
13
|
+
let _mui_material_TextField = require("@mui/material/TextField");
|
|
14
|
+
_mui_material_TextField = require_runtime.__toESM(_mui_material_TextField);
|
|
15
|
+
let _mui_icons_material_Search = require("@mui/icons-material/Search");
|
|
16
|
+
_mui_icons_material_Search = require_runtime.__toESM(_mui_icons_material_Search);
|
|
17
|
+
let _mui_material_InputAdornment = require("@mui/material/InputAdornment");
|
|
18
|
+
_mui_material_InputAdornment = require_runtime.__toESM(_mui_material_InputAdornment);
|
|
19
|
+
//#region src/components/PackageList/PackageListToolbar.tsx
|
|
20
|
+
var selectSx = (minWidth) => ({
|
|
21
|
+
flex: {
|
|
22
|
+
xs: "1 1 0",
|
|
23
|
+
sm: "0 0 auto"
|
|
24
|
+
},
|
|
25
|
+
minWidth: {
|
|
26
|
+
xs: 0,
|
|
27
|
+
sm: minWidth
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
var PackageListToolbar = ({ query, scope, sort, scopes, shown, total, onQueryChange, onScopeChange, onSortChange }) => {
|
|
31
|
+
const { t } = (0, react_i18next.useTranslation)();
|
|
32
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mui_material_Box.default, {
|
|
33
|
+
"data-testid": "package-list-toolbar",
|
|
34
|
+
sx: {
|
|
35
|
+
display: "flex",
|
|
36
|
+
flexWrap: "wrap",
|
|
37
|
+
alignItems: "center",
|
|
38
|
+
gap: 2,
|
|
39
|
+
px: 2,
|
|
40
|
+
pb: 2
|
|
41
|
+
},
|
|
42
|
+
children: [
|
|
43
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material_TextField.default, {
|
|
44
|
+
onChange: (event) => onQueryChange(event.target.value),
|
|
45
|
+
placeholder: t("packageList.filter"),
|
|
46
|
+
size: "small",
|
|
47
|
+
slotProps: {
|
|
48
|
+
htmlInput: {
|
|
49
|
+
"aria-label": t("packageList.filter"),
|
|
50
|
+
"data-testid": "package-list-filter"
|
|
51
|
+
},
|
|
52
|
+
input: { startAdornment: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material_InputAdornment.default, {
|
|
53
|
+
position: "start",
|
|
54
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_icons_material_Search.default, { fontSize: "small" })
|
|
55
|
+
}) }
|
|
56
|
+
},
|
|
57
|
+
sx: { flex: {
|
|
58
|
+
xs: "1 1 100%",
|
|
59
|
+
sm: "1 1 240px"
|
|
60
|
+
} },
|
|
61
|
+
type: "search",
|
|
62
|
+
value: query
|
|
63
|
+
}),
|
|
64
|
+
scopes.length > 1 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mui_material_TextField.default, {
|
|
65
|
+
label: t("packageList.scope"),
|
|
66
|
+
onChange: (event) => onScopeChange(event.target.value),
|
|
67
|
+
select: true,
|
|
68
|
+
size: "small",
|
|
69
|
+
slotProps: {
|
|
70
|
+
htmlInput: { "data-testid": "package-list-scope" },
|
|
71
|
+
inputLabel: { shrink: true },
|
|
72
|
+
select: { displayEmpty: true }
|
|
73
|
+
},
|
|
74
|
+
sx: selectSx(160),
|
|
75
|
+
value: scope,
|
|
76
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material_MenuItem.default, {
|
|
77
|
+
value: "",
|
|
78
|
+
children: t("packageList.all-scopes")
|
|
79
|
+
}), scopes.map((item) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material_MenuItem.default, {
|
|
80
|
+
value: item,
|
|
81
|
+
children: item === "-" ? t("packageList.no-scope") : item
|
|
82
|
+
}, item))]
|
|
83
|
+
}),
|
|
84
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mui_material_TextField.default, {
|
|
85
|
+
label: t("packageList.sort"),
|
|
86
|
+
onChange: (event) => onSortChange(event.target.value),
|
|
87
|
+
select: true,
|
|
88
|
+
size: "small",
|
|
89
|
+
slotProps: { htmlInput: { "data-testid": "package-list-sort" } },
|
|
90
|
+
sx: selectSx(180),
|
|
91
|
+
value: sort,
|
|
92
|
+
children: [
|
|
93
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material_MenuItem.default, {
|
|
94
|
+
value: require_filterPackages.PackageSort.DEFAULT,
|
|
95
|
+
children: t("packageList.sort-default")
|
|
96
|
+
}),
|
|
97
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material_MenuItem.default, {
|
|
98
|
+
value: require_filterPackages.PackageSort.NAME,
|
|
99
|
+
children: t("packageList.sort-name")
|
|
100
|
+
}),
|
|
101
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material_MenuItem.default, {
|
|
102
|
+
value: require_filterPackages.PackageSort.RECENT,
|
|
103
|
+
children: t("packageList.sort-recent")
|
|
104
|
+
})
|
|
105
|
+
]
|
|
106
|
+
}),
|
|
107
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material_Typography.default, {
|
|
108
|
+
"aria-live": "polite",
|
|
109
|
+
color: "text.secondary",
|
|
110
|
+
"data-testid": "package-list-count",
|
|
111
|
+
sx: { width: {
|
|
112
|
+
xs: "100%",
|
|
113
|
+
sm: "auto"
|
|
114
|
+
} },
|
|
115
|
+
variant: "body2",
|
|
116
|
+
children: t("packageList.count", {
|
|
117
|
+
shown,
|
|
118
|
+
total
|
|
119
|
+
})
|
|
120
|
+
})
|
|
121
|
+
]
|
|
122
|
+
});
|
|
123
|
+
};
|
|
124
|
+
//#endregion
|
|
125
|
+
exports.default = PackageListToolbar;
|
|
126
|
+
|
|
127
|
+
//# sourceMappingURL=PackageListToolbar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PackageListToolbar.js","names":["useTranslation","Box","TextField","InputAdornment","SearchIcon","MenuItem","PackageSort","Typography"],"sources":["../../../src/components/PackageList/PackageListToolbar.tsx"],"sourcesContent":["import SearchIcon from '@mui/icons-material/Search';\nimport Box from '@mui/material/Box';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport MenuItem from '@mui/material/MenuItem';\nimport TextField from '@mui/material/TextField';\nimport Typography from '@mui/material/Typography';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { NO_SCOPE, PackageSort } from './filterPackages';\n\ntype Props = {\n query: string;\n scope: string;\n sort: PackageSort;\n scopes: string[];\n shown: number;\n total: number;\n onQueryChange: (query: string) => void;\n onScopeChange: (scope: string) => void;\n onSortChange: (sort: PackageSort) => void;\n};\n\n// side by side on phones, natural width from sm up\nconst selectSx = (minWidth: number) => ({\n flex: { xs: '1 1 0', sm: '0 0 auto' },\n minWidth: { xs: 0, sm: minWidth },\n});\n\nconst PackageListToolbar: React.FC<Props> = ({\n query,\n scope,\n sort,\n scopes,\n shown,\n total,\n onQueryChange,\n onScopeChange,\n onSortChange,\n}) => {\n const { t } = useTranslation();\n return (\n <Box\n data-testid=\"package-list-toolbar\"\n sx={{ display: 'flex', flexWrap: 'wrap', alignItems: 'center', gap: 2, px: 2, pb: 2 }}\n >\n <TextField\n onChange={(event) => onQueryChange(event.target.value)}\n placeholder={t('packageList.filter')}\n size=\"small\"\n slotProps={{\n htmlInput: {\n 'aria-label': t('packageList.filter'),\n 'data-testid': 'package-list-filter',\n },\n input: {\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon fontSize=\"small\" />\n </InputAdornment>\n ),\n },\n }}\n sx={{ flex: { xs: '1 1 100%', sm: '1 1 240px' } }}\n type=\"search\"\n value={query}\n />\n {scopes.length > 1 && (\n <TextField\n label={t('packageList.scope')}\n onChange={(event) => onScopeChange(event.target.value)}\n select={true}\n size=\"small\"\n slotProps={{\n htmlInput: { 'data-testid': 'package-list-scope' },\n inputLabel: { shrink: true },\n select: { displayEmpty: true },\n }}\n sx={selectSx(160)}\n value={scope}\n >\n <MenuItem value=\"\">{t('packageList.all-scopes')}</MenuItem>\n {scopes.map((item) => (\n <MenuItem key={item} value={item}>\n {item === NO_SCOPE ? t('packageList.no-scope') : item}\n </MenuItem>\n ))}\n </TextField>\n )}\n <TextField\n label={t('packageList.sort')}\n onChange={(event) => onSortChange(event.target.value as PackageSort)}\n select={true}\n size=\"small\"\n slotProps={{ htmlInput: { 'data-testid': 'package-list-sort' } }}\n sx={selectSx(180)}\n value={sort}\n >\n <MenuItem value={PackageSort.DEFAULT}>{t('packageList.sort-default')}</MenuItem>\n <MenuItem value={PackageSort.NAME}>{t('packageList.sort-name')}</MenuItem>\n <MenuItem value={PackageSort.RECENT}>{t('packageList.sort-recent')}</MenuItem>\n </TextField>\n <Typography\n aria-live=\"polite\"\n color=\"text.secondary\"\n data-testid=\"package-list-count\"\n sx={{ width: { xs: '100%', sm: 'auto' } }}\n variant=\"body2\"\n >\n {t('packageList.count', { shown, total })}\n </Typography>\n </Box>\n );\n};\n\nexport default PackageListToolbar;\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAwBA,IAAM,YAAY,cAAsB;CACtC,MAAM;EAAE,IAAI;EAAS,IAAI;CAAW;CACpC,UAAU;EAAE,IAAI;EAAG,IAAI;CAAS;AAClC;AAEA,IAAM,sBAAuC,EAC3C,OACA,OACA,MACA,QACA,OACA,OACA,eACA,eACA,mBACI;CACJ,MAAM,EAAE,OAAA,GAAMA,cAAAA,eAAAA,CAAe;CAC7B,OACE,iBAAA,GAAA,kBAAA,KAAA,CAACC,kBAAAA,SAAD;EACE,eAAY;EACZ,IAAI;GAAE,SAAS;GAAQ,UAAU;GAAQ,YAAY;GAAU,KAAK;GAAG,IAAI;GAAG,IAAI;EAAE;EAFtF,UAAA;GAIE,iBAAA,GAAA,kBAAA,IAAA,CAACC,wBAAAA,SAAD;IACE,WAAW,UAAU,cAAc,MAAM,OAAO,KAAK;IACrD,aAAa,EAAE,oBAAoB;IACnC,MAAK;IACL,WAAW;KACT,WAAW;MACT,cAAc,EAAE,oBAAoB;MACpC,eAAe;KACjB;KACA,OAAO,EACL,gBACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,6BAAAA,SAAD;MAAgB,UAAS;MACvB,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,2BAAAA,SAAD,EAAY,UAAS,QAAS,CAAA;KAChB,CAAA,EAEpB;IACF;IACA,IAAI,EAAE,MAAM;KAAE,IAAI;KAAY,IAAI;IAAY,EAAE;IAChD,MAAK;IACL,OAAO;GACR,CAAA;GACA,OAAO,SAAS,KACf,iBAAA,GAAA,kBAAA,KAAA,CAACF,wBAAAA,SAAD;IACE,OAAO,EAAE,mBAAmB;IAC5B,WAAW,UAAU,cAAc,MAAM,OAAO,KAAK;IACrD,QAAQ;IACR,MAAK;IACL,WAAW;KACT,WAAW,EAAE,eAAe,qBAAqB;KACjD,YAAY,EAAE,QAAQ,KAAK;KAC3B,QAAQ,EAAE,cAAc,KAAK;IAC/B;IACA,IAAI,SAAS,GAAG;IAChB,OAAO;IAXT,UAAA,CAaE,iBAAA,GAAA,kBAAA,IAAA,CAACG,uBAAAA,SAAD;KAAU,OAAM;KAAI,UAAA,EAAE,wBAAwB;IAAY,CAAA,GACzD,OAAO,KAAK,SACX,iBAAA,GAAA,kBAAA,IAAA,CAACA,uBAAAA,SAAD;KAAqB,OAAO;KACzB,UAAA,SAAA,MAAoB,EAAE,sBAAsB,IAAI;IACzC,GAFK,IAEL,CACX,CACQ;;GAEb,iBAAA,GAAA,kBAAA,KAAA,CAACH,wBAAAA,SAAD;IACE,OAAO,EAAE,kBAAkB;IAC3B,WAAW,UAAU,aAAa,MAAM,OAAO,KAAoB;IACnE,QAAQ;IACR,MAAK;IACL,WAAW,EAAE,WAAW,EAAE,eAAe,oBAAoB,EAAE;IAC/D,IAAI,SAAS,GAAG;IAChB,OAAO;IAPT,UAAA;KASE,iBAAA,GAAA,kBAAA,IAAA,CAACG,uBAAAA,SAAD;MAAU,OAAOC,uBAAAA,YAAY;MAAU,UAAA,EAAE,0BAA0B;KAAY,CAAA;KAC/E,iBAAA,GAAA,kBAAA,IAAA,CAACD,uBAAAA,SAAD;MAAU,OAAOC,uBAAAA,YAAY;MAAO,UAAA,EAAE,uBAAuB;KAAY,CAAA;KACzE,iBAAA,GAAA,kBAAA,IAAA,CAACD,uBAAAA,SAAD;MAAU,OAAOC,uBAAAA,YAAY;MAAS,UAAA,EAAE,yBAAyB;KAAY,CAAA;IACpE;;GACX,iBAAA,GAAA,kBAAA,IAAA,CAACC,yBAAAA,SAAD;IACE,aAAU;IACV,OAAM;IACN,eAAY;IACZ,IAAI,EAAE,OAAO;KAAE,IAAI;KAAQ,IAAI;IAAO,EAAE;IACxC,SAAQ;IAEP,UAAA,EAAE,qBAAqB;KAAE;KAAO;IAAM,CAAC;GAC9B,CAAA;EACT;;AAET"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { PackageSort } from "./filterPackages.mjs";
|
|
2
|
+
import "react";
|
|
3
|
+
import { useTranslation } from "react-i18next";
|
|
4
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
import Box from "@mui/material/Box";
|
|
6
|
+
import Typography from "@mui/material/Typography";
|
|
7
|
+
import MenuItem from "@mui/material/MenuItem";
|
|
8
|
+
import TextField from "@mui/material/TextField";
|
|
9
|
+
import SearchMui from "@mui/icons-material/Search";
|
|
10
|
+
import InputAdornment from "@mui/material/InputAdornment";
|
|
11
|
+
//#region src/components/PackageList/PackageListToolbar.tsx
|
|
12
|
+
var selectSx = (minWidth) => ({
|
|
13
|
+
flex: {
|
|
14
|
+
xs: "1 1 0",
|
|
15
|
+
sm: "0 0 auto"
|
|
16
|
+
},
|
|
17
|
+
minWidth: {
|
|
18
|
+
xs: 0,
|
|
19
|
+
sm: minWidth
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
var PackageListToolbar = ({ query, scope, sort, scopes, shown, total, onQueryChange, onScopeChange, onSortChange }) => {
|
|
23
|
+
const { t } = useTranslation();
|
|
24
|
+
return /* @__PURE__ */ jsxs(Box, {
|
|
25
|
+
"data-testid": "package-list-toolbar",
|
|
26
|
+
sx: {
|
|
27
|
+
display: "flex",
|
|
28
|
+
flexWrap: "wrap",
|
|
29
|
+
alignItems: "center",
|
|
30
|
+
gap: 2,
|
|
31
|
+
px: 2,
|
|
32
|
+
pb: 2
|
|
33
|
+
},
|
|
34
|
+
children: [
|
|
35
|
+
/* @__PURE__ */ jsx(TextField, {
|
|
36
|
+
onChange: (event) => onQueryChange(event.target.value),
|
|
37
|
+
placeholder: t("packageList.filter"),
|
|
38
|
+
size: "small",
|
|
39
|
+
slotProps: {
|
|
40
|
+
htmlInput: {
|
|
41
|
+
"aria-label": t("packageList.filter"),
|
|
42
|
+
"data-testid": "package-list-filter"
|
|
43
|
+
},
|
|
44
|
+
input: { startAdornment: /* @__PURE__ */ jsx(InputAdornment, {
|
|
45
|
+
position: "start",
|
|
46
|
+
children: /* @__PURE__ */ jsx(SearchMui, { fontSize: "small" })
|
|
47
|
+
}) }
|
|
48
|
+
},
|
|
49
|
+
sx: { flex: {
|
|
50
|
+
xs: "1 1 100%",
|
|
51
|
+
sm: "1 1 240px"
|
|
52
|
+
} },
|
|
53
|
+
type: "search",
|
|
54
|
+
value: query
|
|
55
|
+
}),
|
|
56
|
+
scopes.length > 1 && /* @__PURE__ */ jsxs(TextField, {
|
|
57
|
+
label: t("packageList.scope"),
|
|
58
|
+
onChange: (event) => onScopeChange(event.target.value),
|
|
59
|
+
select: true,
|
|
60
|
+
size: "small",
|
|
61
|
+
slotProps: {
|
|
62
|
+
htmlInput: { "data-testid": "package-list-scope" },
|
|
63
|
+
inputLabel: { shrink: true },
|
|
64
|
+
select: { displayEmpty: true }
|
|
65
|
+
},
|
|
66
|
+
sx: selectSx(160),
|
|
67
|
+
value: scope,
|
|
68
|
+
children: [/* @__PURE__ */ jsx(MenuItem, {
|
|
69
|
+
value: "",
|
|
70
|
+
children: t("packageList.all-scopes")
|
|
71
|
+
}), scopes.map((item) => /* @__PURE__ */ jsx(MenuItem, {
|
|
72
|
+
value: item,
|
|
73
|
+
children: item === "-" ? t("packageList.no-scope") : item
|
|
74
|
+
}, item))]
|
|
75
|
+
}),
|
|
76
|
+
/* @__PURE__ */ jsxs(TextField, {
|
|
77
|
+
label: t("packageList.sort"),
|
|
78
|
+
onChange: (event) => onSortChange(event.target.value),
|
|
79
|
+
select: true,
|
|
80
|
+
size: "small",
|
|
81
|
+
slotProps: { htmlInput: { "data-testid": "package-list-sort" } },
|
|
82
|
+
sx: selectSx(180),
|
|
83
|
+
value: sort,
|
|
84
|
+
children: [
|
|
85
|
+
/* @__PURE__ */ jsx(MenuItem, {
|
|
86
|
+
value: PackageSort.DEFAULT,
|
|
87
|
+
children: t("packageList.sort-default")
|
|
88
|
+
}),
|
|
89
|
+
/* @__PURE__ */ jsx(MenuItem, {
|
|
90
|
+
value: PackageSort.NAME,
|
|
91
|
+
children: t("packageList.sort-name")
|
|
92
|
+
}),
|
|
93
|
+
/* @__PURE__ */ jsx(MenuItem, {
|
|
94
|
+
value: PackageSort.RECENT,
|
|
95
|
+
children: t("packageList.sort-recent")
|
|
96
|
+
})
|
|
97
|
+
]
|
|
98
|
+
}),
|
|
99
|
+
/* @__PURE__ */ jsx(Typography, {
|
|
100
|
+
"aria-live": "polite",
|
|
101
|
+
color: "text.secondary",
|
|
102
|
+
"data-testid": "package-list-count",
|
|
103
|
+
sx: { width: {
|
|
104
|
+
xs: "100%",
|
|
105
|
+
sm: "auto"
|
|
106
|
+
} },
|
|
107
|
+
variant: "body2",
|
|
108
|
+
children: t("packageList.count", {
|
|
109
|
+
shown,
|
|
110
|
+
total
|
|
111
|
+
})
|
|
112
|
+
})
|
|
113
|
+
]
|
|
114
|
+
});
|
|
115
|
+
};
|
|
116
|
+
//#endregion
|
|
117
|
+
export { PackageListToolbar as default };
|
|
118
|
+
|
|
119
|
+
//# sourceMappingURL=PackageListToolbar.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PackageListToolbar.mjs","names":["SearchIcon"],"sources":["../../../src/components/PackageList/PackageListToolbar.tsx"],"sourcesContent":["import SearchIcon from '@mui/icons-material/Search';\nimport Box from '@mui/material/Box';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport MenuItem from '@mui/material/MenuItem';\nimport TextField from '@mui/material/TextField';\nimport Typography from '@mui/material/Typography';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { NO_SCOPE, PackageSort } from './filterPackages';\n\ntype Props = {\n query: string;\n scope: string;\n sort: PackageSort;\n scopes: string[];\n shown: number;\n total: number;\n onQueryChange: (query: string) => void;\n onScopeChange: (scope: string) => void;\n onSortChange: (sort: PackageSort) => void;\n};\n\n// side by side on phones, natural width from sm up\nconst selectSx = (minWidth: number) => ({\n flex: { xs: '1 1 0', sm: '0 0 auto' },\n minWidth: { xs: 0, sm: minWidth },\n});\n\nconst PackageListToolbar: React.FC<Props> = ({\n query,\n scope,\n sort,\n scopes,\n shown,\n total,\n onQueryChange,\n onScopeChange,\n onSortChange,\n}) => {\n const { t } = useTranslation();\n return (\n <Box\n data-testid=\"package-list-toolbar\"\n sx={{ display: 'flex', flexWrap: 'wrap', alignItems: 'center', gap: 2, px: 2, pb: 2 }}\n >\n <TextField\n onChange={(event) => onQueryChange(event.target.value)}\n placeholder={t('packageList.filter')}\n size=\"small\"\n slotProps={{\n htmlInput: {\n 'aria-label': t('packageList.filter'),\n 'data-testid': 'package-list-filter',\n },\n input: {\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon fontSize=\"small\" />\n </InputAdornment>\n ),\n },\n }}\n sx={{ flex: { xs: '1 1 100%', sm: '1 1 240px' } }}\n type=\"search\"\n value={query}\n />\n {scopes.length > 1 && (\n <TextField\n label={t('packageList.scope')}\n onChange={(event) => onScopeChange(event.target.value)}\n select={true}\n size=\"small\"\n slotProps={{\n htmlInput: { 'data-testid': 'package-list-scope' },\n inputLabel: { shrink: true },\n select: { displayEmpty: true },\n }}\n sx={selectSx(160)}\n value={scope}\n >\n <MenuItem value=\"\">{t('packageList.all-scopes')}</MenuItem>\n {scopes.map((item) => (\n <MenuItem key={item} value={item}>\n {item === NO_SCOPE ? t('packageList.no-scope') : item}\n </MenuItem>\n ))}\n </TextField>\n )}\n <TextField\n label={t('packageList.sort')}\n onChange={(event) => onSortChange(event.target.value as PackageSort)}\n select={true}\n size=\"small\"\n slotProps={{ htmlInput: { 'data-testid': 'package-list-sort' } }}\n sx={selectSx(180)}\n value={sort}\n >\n <MenuItem value={PackageSort.DEFAULT}>{t('packageList.sort-default')}</MenuItem>\n <MenuItem value={PackageSort.NAME}>{t('packageList.sort-name')}</MenuItem>\n <MenuItem value={PackageSort.RECENT}>{t('packageList.sort-recent')}</MenuItem>\n </TextField>\n <Typography\n aria-live=\"polite\"\n color=\"text.secondary\"\n data-testid=\"package-list-count\"\n sx={{ width: { xs: '100%', sm: 'auto' } }}\n variant=\"body2\"\n >\n {t('packageList.count', { shown, total })}\n </Typography>\n </Box>\n );\n};\n\nexport default PackageListToolbar;\n"],"mappings":";;;;;;;;;;;AAwBA,IAAM,YAAY,cAAsB;CACtC,MAAM;EAAE,IAAI;EAAS,IAAI;CAAW;CACpC,UAAU;EAAE,IAAI;EAAG,IAAI;CAAS;AAClC;AAEA,IAAM,sBAAuC,EAC3C,OACA,OACA,MACA,QACA,OACA,OACA,eACA,eACA,mBACI;CACJ,MAAM,EAAE,MAAM,eAAe;CAC7B,OACE,qBAAC,KAAD;EACE,eAAY;EACZ,IAAI;GAAE,SAAS;GAAQ,UAAU;GAAQ,YAAY;GAAU,KAAK;GAAG,IAAI;GAAG,IAAI;EAAE;EAFtF,UAAA;GAIE,oBAAC,WAAD;IACE,WAAW,UAAU,cAAc,MAAM,OAAO,KAAK;IACrD,aAAa,EAAE,oBAAoB;IACnC,MAAK;IACL,WAAW;KACT,WAAW;MACT,cAAc,EAAE,oBAAoB;MACpC,eAAe;KACjB;KACA,OAAO,EACL,gBACE,oBAAC,gBAAD;MAAgB,UAAS;MACvB,UAAA,oBAACA,WAAD,EAAY,UAAS,QAAS,CAAA;KAChB,CAAA,EAEpB;IACF;IACA,IAAI,EAAE,MAAM;KAAE,IAAI;KAAY,IAAI;IAAY,EAAE;IAChD,MAAK;IACL,OAAO;GACR,CAAA;GACA,OAAO,SAAS,KACf,qBAAC,WAAD;IACE,OAAO,EAAE,mBAAmB;IAC5B,WAAW,UAAU,cAAc,MAAM,OAAO,KAAK;IACrD,QAAQ;IACR,MAAK;IACL,WAAW;KACT,WAAW,EAAE,eAAe,qBAAqB;KACjD,YAAY,EAAE,QAAQ,KAAK;KAC3B,QAAQ,EAAE,cAAc,KAAK;IAC/B;IACA,IAAI,SAAS,GAAG;IAChB,OAAO;IAXT,UAAA,CAaE,oBAAC,UAAD;KAAU,OAAM;KAAI,UAAA,EAAE,wBAAwB;IAAY,CAAA,GACzD,OAAO,KAAK,SACX,oBAAC,UAAD;KAAqB,OAAO;KACzB,UAAA,SAAA,MAAoB,EAAE,sBAAsB,IAAI;IACzC,GAFK,IAEL,CACX,CACQ;;GAEb,qBAAC,WAAD;IACE,OAAO,EAAE,kBAAkB;IAC3B,WAAW,UAAU,aAAa,MAAM,OAAO,KAAoB;IACnE,QAAQ;IACR,MAAK;IACL,WAAW,EAAE,WAAW,EAAE,eAAe,oBAAoB,EAAE;IAC/D,IAAI,SAAS,GAAG;IAChB,OAAO;IAPT,UAAA;KASE,oBAAC,UAAD;MAAU,OAAO,YAAY;MAAU,UAAA,EAAE,0BAA0B;KAAY,CAAA;KAC/E,oBAAC,UAAD;MAAU,OAAO,YAAY;MAAO,UAAA,EAAE,uBAAuB;KAAY,CAAA;KACzE,oBAAC,UAAD;MAAU,OAAO,YAAY;MAAS,UAAA,EAAE,yBAAyB;KAAY,CAAA;IACpE;;GACX,oBAAC,YAAD;IACE,aAAU;IACV,OAAM;IACN,eAAY;IACZ,IAAI,EAAE,OAAO;KAAE,IAAI;KAAQ,IAAI;IAAO,EAAE;IACxC,SAAQ;IAEP,UAAA,EAAE,qBAAqB;KAAE;KAAO;IAAM,CAAC;GAC9B,CAAA;EACT;;AAET"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ManifestWeb } from '../../providers/ManifestsProvider/ManifestsProvider';
|
|
2
|
+
export declare enum PackageSort {
|
|
3
|
+
DEFAULT = "default",
|
|
4
|
+
NAME = "name",
|
|
5
|
+
RECENT = "recent"
|
|
6
|
+
}
|
|
7
|
+
export declare const NO_SCOPE = "-";
|
|
8
|
+
export type PackageFilter = {
|
|
9
|
+
query?: string;
|
|
10
|
+
scope?: string;
|
|
11
|
+
sort?: PackageSort;
|
|
12
|
+
};
|
|
13
|
+
export declare function getPackageScope(name: string): string;
|
|
14
|
+
export declare function getScopes(packages: ManifestWeb[]): string[];
|
|
15
|
+
/** Filters and sorts the home list; `PackageSort.DEFAULT` keeps the order configured on the server. */
|
|
16
|
+
export declare function filterPackages(packages: ManifestWeb[], { query, scope, sort }: PackageFilter): ManifestWeb[];
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
//#region src/components/PackageList/filterPackages.ts
|
|
2
|
+
var PackageSort = /* @__PURE__ */ function(PackageSort) {
|
|
3
|
+
PackageSort["DEFAULT"] = "default";
|
|
4
|
+
PackageSort["NAME"] = "name";
|
|
5
|
+
PackageSort["RECENT"] = "recent";
|
|
6
|
+
return PackageSort;
|
|
7
|
+
}({});
|
|
8
|
+
function getPackageScope(name) {
|
|
9
|
+
return name.startsWith("@") && name.includes("/") ? name.slice(0, name.indexOf("/")) : "-";
|
|
10
|
+
}
|
|
11
|
+
function getScopes(packages) {
|
|
12
|
+
return Array.from(new Set(packages.map((pkg) => getPackageScope(pkg.name)))).sort((a, b) => a === "-" ? 1 : b === "-" ? -1 : a.localeCompare(b));
|
|
13
|
+
}
|
|
14
|
+
function matchesQuery(pkg, query) {
|
|
15
|
+
const keywords = Array.isArray(pkg.keywords) ? pkg.keywords : [];
|
|
16
|
+
return [
|
|
17
|
+
pkg.name,
|
|
18
|
+
pkg.description ?? "",
|
|
19
|
+
...keywords
|
|
20
|
+
].some((field) => String(field).toLowerCase().includes(query));
|
|
21
|
+
}
|
|
22
|
+
var publishedAt = (pkg) => pkg.time ? new Date(pkg.time).getTime() || 0 : 0;
|
|
23
|
+
/** Filters and sorts the home list; `PackageSort.DEFAULT` keeps the order configured on the server. */
|
|
24
|
+
function filterPackages(packages, { query = "", scope = "", sort = "default" }) {
|
|
25
|
+
const normalizedQuery = query.trim().toLowerCase();
|
|
26
|
+
const filtered = packages.filter((pkg) => (!scope || getPackageScope(pkg.name) === scope) && (!normalizedQuery || matchesQuery(pkg, normalizedQuery)));
|
|
27
|
+
if (sort === "name") return filtered.sort((a, b) => a.name.localeCompare(b.name));
|
|
28
|
+
if (sort === "recent") return filtered.sort((a, b) => publishedAt(b) - publishedAt(a));
|
|
29
|
+
return filtered;
|
|
30
|
+
}
|
|
31
|
+
//#endregion
|
|
32
|
+
exports.PackageSort = PackageSort;
|
|
33
|
+
exports.filterPackages = filterPackages;
|
|
34
|
+
exports.getPackageScope = getPackageScope;
|
|
35
|
+
exports.getScopes = getScopes;
|
|
36
|
+
|
|
37
|
+
//# sourceMappingURL=filterPackages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filterPackages.js","names":[],"sources":["../../../src/components/PackageList/filterPackages.ts"],"sourcesContent":["import type { ManifestWeb } from '../../providers/ManifestsProvider/ManifestsProvider';\n\nexport enum PackageSort {\n DEFAULT = 'default',\n NAME = 'name',\n RECENT = 'recent',\n}\n\nexport const NO_SCOPE = '-';\n\nexport type PackageFilter = {\n query?: string;\n scope?: string;\n sort?: PackageSort;\n};\n\nexport function getPackageScope(name: string): string {\n return name.startsWith('@') && name.includes('/') ? name.slice(0, name.indexOf('/')) : NO_SCOPE;\n}\n\nexport function getScopes(packages: ManifestWeb[]): string[] {\n return Array.from(new Set(packages.map((pkg) => getPackageScope(pkg.name)))).sort((a, b) =>\n a === NO_SCOPE ? 1 : b === NO_SCOPE ? -1 : a.localeCompare(b)\n );\n}\n\nfunction matchesQuery(pkg: ManifestWeb, query: string): boolean {\n const keywords = Array.isArray(pkg.keywords) ? pkg.keywords : [];\n return [pkg.name, pkg.description ?? '', ...keywords].some((field) =>\n String(field).toLowerCase().includes(query)\n );\n}\n\nconst publishedAt = (pkg: ManifestWeb): number =>\n pkg.time ? new Date(pkg.time).getTime() || 0 : 0;\n\n/** Filters and sorts the home list; `PackageSort.DEFAULT` keeps the order configured on the server. */\nexport function filterPackages(\n packages: ManifestWeb[],\n { query = '', scope = '', sort = PackageSort.DEFAULT }: PackageFilter\n): ManifestWeb[] {\n const normalizedQuery = query.trim().toLowerCase();\n const filtered = packages.filter(\n (pkg) =>\n (!scope || getPackageScope(pkg.name) === scope) &&\n (!normalizedQuery || matchesQuery(pkg, normalizedQuery))\n );\n if (sort === PackageSort.NAME) {\n return filtered.sort((a, b) => a.name.localeCompare(b.name));\n }\n if (sort === PackageSort.RECENT) {\n return filtered.sort((a, b) => publishedAt(b) - publishedAt(a));\n }\n return filtered;\n}\n"],"mappings":";AAEA,IAAY,cAAL,yBAAA,aAAA;CACL,YAAA,aAAA;CACA,YAAA,UAAA;CACA,YAAA,YAAA;;AACF,EAAA,CAAA,CAAA;AAUA,SAAgB,gBAAgB,MAAsB;CACpD,OAAO,KAAK,WAAW,GAAG,KAAK,KAAK,SAAS,GAAG,IAAI,KAAK,MAAM,GAAG,KAAK,QAAQ,GAAG,CAAC,IAAA;AACrF;AAEA,SAAgB,UAAU,UAAmC;CAC3D,OAAO,MAAM,KAAK,IAAI,IAAI,SAAS,KAAK,QAAQ,gBAAgB,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,MACpF,MAAA,MAAiB,IAAI,MAAA,MAAiB,KAAK,EAAE,cAAc,CAAC,CAC9D;AACF;AAEA,SAAS,aAAa,KAAkB,OAAwB;CAC9D,MAAM,WAAW,MAAM,QAAQ,IAAI,QAAQ,IAAI,IAAI,WAAW,CAAC;CAC/D,OAAO;EAAC,IAAI;EAAM,IAAI,eAAe;EAAI,GAAG;CAAQ,CAAC,CAAC,MAAM,UAC1D,OAAO,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,SAAS,KAAK,CAC5C;AACF;AAEA,IAAM,eAAe,QACnB,IAAI,OAAO,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI;;AAGjD,SAAgB,eACd,UACA,EAAE,QAAQ,IAAI,QAAQ,IAAI,OAAA,aACX;CACf,MAAM,kBAAkB,MAAM,KAAK,CAAC,CAAC,YAAY;CACjD,MAAM,WAAW,SAAS,QACvB,SACE,CAAC,SAAS,gBAAgB,IAAI,IAAI,MAAM,WACxC,CAAC,mBAAmB,aAAa,KAAK,eAAe,EAC1D;CACA,IAAI,SAAA,QACF,OAAO,SAAS,MAAM,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC;CAE7D,IAAI,SAAA,UACF,OAAO,SAAS,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,YAAY,CAAC,CAAC;CAEhE,OAAO;AACT"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
//#region src/components/PackageList/filterPackages.ts
|
|
2
|
+
var PackageSort = /* @__PURE__ */ function(PackageSort) {
|
|
3
|
+
PackageSort["DEFAULT"] = "default";
|
|
4
|
+
PackageSort["NAME"] = "name";
|
|
5
|
+
PackageSort["RECENT"] = "recent";
|
|
6
|
+
return PackageSort;
|
|
7
|
+
}({});
|
|
8
|
+
function getPackageScope(name) {
|
|
9
|
+
return name.startsWith("@") && name.includes("/") ? name.slice(0, name.indexOf("/")) : "-";
|
|
10
|
+
}
|
|
11
|
+
function getScopes(packages) {
|
|
12
|
+
return Array.from(new Set(packages.map((pkg) => getPackageScope(pkg.name)))).sort((a, b) => a === "-" ? 1 : b === "-" ? -1 : a.localeCompare(b));
|
|
13
|
+
}
|
|
14
|
+
function matchesQuery(pkg, query) {
|
|
15
|
+
const keywords = Array.isArray(pkg.keywords) ? pkg.keywords : [];
|
|
16
|
+
return [
|
|
17
|
+
pkg.name,
|
|
18
|
+
pkg.description ?? "",
|
|
19
|
+
...keywords
|
|
20
|
+
].some((field) => String(field).toLowerCase().includes(query));
|
|
21
|
+
}
|
|
22
|
+
var publishedAt = (pkg) => pkg.time ? new Date(pkg.time).getTime() || 0 : 0;
|
|
23
|
+
/** Filters and sorts the home list; `PackageSort.DEFAULT` keeps the order configured on the server. */
|
|
24
|
+
function filterPackages(packages, { query = "", scope = "", sort = "default" }) {
|
|
25
|
+
const normalizedQuery = query.trim().toLowerCase();
|
|
26
|
+
const filtered = packages.filter((pkg) => (!scope || getPackageScope(pkg.name) === scope) && (!normalizedQuery || matchesQuery(pkg, normalizedQuery)));
|
|
27
|
+
if (sort === "name") return filtered.sort((a, b) => a.name.localeCompare(b.name));
|
|
28
|
+
if (sort === "recent") return filtered.sort((a, b) => publishedAt(b) - publishedAt(a));
|
|
29
|
+
return filtered;
|
|
30
|
+
}
|
|
31
|
+
//#endregion
|
|
32
|
+
export { PackageSort, filterPackages, getPackageScope, getScopes };
|
|
33
|
+
|
|
34
|
+
//# sourceMappingURL=filterPackages.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filterPackages.mjs","names":[],"sources":["../../../src/components/PackageList/filterPackages.ts"],"sourcesContent":["import type { ManifestWeb } from '../../providers/ManifestsProvider/ManifestsProvider';\n\nexport enum PackageSort {\n DEFAULT = 'default',\n NAME = 'name',\n RECENT = 'recent',\n}\n\nexport const NO_SCOPE = '-';\n\nexport type PackageFilter = {\n query?: string;\n scope?: string;\n sort?: PackageSort;\n};\n\nexport function getPackageScope(name: string): string {\n return name.startsWith('@') && name.includes('/') ? name.slice(0, name.indexOf('/')) : NO_SCOPE;\n}\n\nexport function getScopes(packages: ManifestWeb[]): string[] {\n return Array.from(new Set(packages.map((pkg) => getPackageScope(pkg.name)))).sort((a, b) =>\n a === NO_SCOPE ? 1 : b === NO_SCOPE ? -1 : a.localeCompare(b)\n );\n}\n\nfunction matchesQuery(pkg: ManifestWeb, query: string): boolean {\n const keywords = Array.isArray(pkg.keywords) ? pkg.keywords : [];\n return [pkg.name, pkg.description ?? '', ...keywords].some((field) =>\n String(field).toLowerCase().includes(query)\n );\n}\n\nconst publishedAt = (pkg: ManifestWeb): number =>\n pkg.time ? new Date(pkg.time).getTime() || 0 : 0;\n\n/** Filters and sorts the home list; `PackageSort.DEFAULT` keeps the order configured on the server. */\nexport function filterPackages(\n packages: ManifestWeb[],\n { query = '', scope = '', sort = PackageSort.DEFAULT }: PackageFilter\n): ManifestWeb[] {\n const normalizedQuery = query.trim().toLowerCase();\n const filtered = packages.filter(\n (pkg) =>\n (!scope || getPackageScope(pkg.name) === scope) &&\n (!normalizedQuery || matchesQuery(pkg, normalizedQuery))\n );\n if (sort === PackageSort.NAME) {\n return filtered.sort((a, b) => a.name.localeCompare(b.name));\n }\n if (sort === PackageSort.RECENT) {\n return filtered.sort((a, b) => publishedAt(b) - publishedAt(a));\n }\n return filtered;\n}\n"],"mappings":";AAEA,IAAY,cAAL,yBAAA,aAAA;CACL,YAAA,aAAA;CACA,YAAA,UAAA;CACA,YAAA,YAAA;;AACF,EAAA,CAAA,CAAA;AAUA,SAAgB,gBAAgB,MAAsB;CACpD,OAAO,KAAK,WAAW,GAAG,KAAK,KAAK,SAAS,GAAG,IAAI,KAAK,MAAM,GAAG,KAAK,QAAQ,GAAG,CAAC,IAAA;AACrF;AAEA,SAAgB,UAAU,UAAmC;CAC3D,OAAO,MAAM,KAAK,IAAI,IAAI,SAAS,KAAK,QAAQ,gBAAgB,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,MACpF,MAAA,MAAiB,IAAI,MAAA,MAAiB,KAAK,EAAE,cAAc,CAAC,CAC9D;AACF;AAEA,SAAS,aAAa,KAAkB,OAAwB;CAC9D,MAAM,WAAW,MAAM,QAAQ,IAAI,QAAQ,IAAI,IAAI,WAAW,CAAC;CAC/D,OAAO;EAAC,IAAI;EAAM,IAAI,eAAe;EAAI,GAAG;CAAQ,CAAC,CAAC,MAAM,UAC1D,OAAO,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,SAAS,KAAK,CAC5C;AACF;AAEA,IAAM,eAAe,QACnB,IAAI,OAAO,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI;;AAGjD,SAAgB,eACd,UACA,EAAE,QAAQ,IAAI,QAAQ,IAAI,OAAA,aACX;CACf,MAAM,kBAAkB,MAAM,KAAK,CAAC,CAAC,YAAY;CACjD,MAAM,WAAW,SAAS,QACvB,SACE,CAAC,SAAS,gBAAgB,IAAI,IAAI,MAAM,WACxC,CAAC,mBAAmB,aAAa,KAAK,eAAe,EAC1D;CACA,IAAI,SAAA,QACF,OAAO,SAAS,MAAM,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC;CAE7D,IAAI,SAAA,UACF,OAAO,SAAS,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,YAAY,CAAC,CAAC;CAEhE,OAAO;AACT"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
const require_runtime = require("../../_virtual/_rolldown/runtime.js");
|
|
2
|
+
const require_DocsLink = require("../DocsLink/DocsLink.js");
|
|
3
|
+
require("../DocsLink/index.js");
|
|
2
4
|
const require_styles = require("./styles.js");
|
|
3
5
|
let react = require("react");
|
|
4
6
|
react = require_runtime.__toESM(react);
|
|
@@ -11,7 +13,7 @@ _mui_material_Button = require_runtime.__toESM(_mui_material_Button);
|
|
|
11
13
|
let _mui_material_DialogActions = require("@mui/material/DialogActions");
|
|
12
14
|
_mui_material_DialogActions = require_runtime.__toESM(_mui_material_DialogActions);
|
|
13
15
|
//#region src/components/RegistryInfoDialog/RegistryInfoDialog.tsx
|
|
14
|
-
var RegistryInfoDialog = ({ open = false, children, onClose, title = "" }) => {
|
|
16
|
+
var RegistryInfoDialog = ({ open = false, children, onClose, title = "", docsUrl }) => {
|
|
15
17
|
const { t } = (0, react_i18next.useTranslation)();
|
|
16
18
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mui_material_Dialog.default, {
|
|
17
19
|
"data-testid": "registryInfo--dialog",
|
|
@@ -22,12 +24,21 @@ var RegistryInfoDialog = ({ open = false, children, onClose, title = "" }) => {
|
|
|
22
24
|
children: [
|
|
23
25
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_styles.Title, { children: title }),
|
|
24
26
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_styles.Content, { children }),
|
|
25
|
-
/* @__PURE__ */ (0, react_jsx_runtime.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mui_material_DialogActions.default, {
|
|
28
|
+
sx: {
|
|
29
|
+
justifyContent: docsUrl ? "space-between" : "flex-end",
|
|
30
|
+
px: 3
|
|
31
|
+
},
|
|
32
|
+
children: [docsUrl && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_DocsLink.default, {
|
|
33
|
+
dataTestId: "registryInfo--dialog-docs",
|
|
34
|
+
href: docsUrl
|
|
35
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material_Button.default, {
|
|
36
|
+
color: "inherit",
|
|
37
|
+
id: "registryInfo--dialog-close",
|
|
38
|
+
onClick: onClose,
|
|
39
|
+
children: t("button.close")
|
|
40
|
+
})]
|
|
41
|
+
})
|
|
31
42
|
]
|
|
32
43
|
});
|
|
33
44
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RegistryInfoDialog.js","names":["useTranslation","Dialog","Title","Content","DialogActions","Button"],"sources":["../../../src/components/RegistryInfoDialog/RegistryInfoDialog.tsx"],"sourcesContent":["import Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { Content, Title } from './styles';\nimport type { Props } from './types';\n\nconst RegistryInfoDialog: React.FC<Props> = ({
|
|
1
|
+
{"version":3,"file":"RegistryInfoDialog.js","names":["useTranslation","Dialog","Title","Content","DialogActions","DocsLink","Button"],"sources":["../../../src/components/RegistryInfoDialog/RegistryInfoDialog.tsx"],"sourcesContent":["import Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport DocsLink from '../DocsLink';\nimport { Content, Title } from './styles';\nimport type { Props } from './types';\n\nconst RegistryInfoDialog: React.FC<Props> = ({\n open = false,\n children,\n onClose,\n title = '',\n docsUrl,\n}) => {\n const { t } = useTranslation();\n return (\n <Dialog\n data-testid={'registryInfo--dialog'}\n id=\"registryInfo--dialog-container\"\n maxWidth=\"sm\"\n onClose={onClose}\n open={open}\n >\n <Title>{title}</Title>\n <Content>{children}</Content>\n <DialogActions sx={{ justifyContent: docsUrl ? 'space-between' : 'flex-end', px: 3 }}>\n {docsUrl && <DocsLink dataTestId=\"registryInfo--dialog-docs\" href={docsUrl} />}\n <Button color=\"inherit\" id=\"registryInfo--dialog-close\" onClick={onClose}>\n {t('button.close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport default RegistryInfoDialog;\n"],"mappings":";;;;;;;;;;;;;;;AAUA,IAAM,sBAAuC,EAC3C,OAAO,OACP,UACA,SACA,QAAQ,IACR,cACI;CACJ,MAAM,EAAE,OAAA,GAAMA,cAAAA,eAAAA,CAAe;CAC7B,OACE,iBAAA,GAAA,kBAAA,KAAA,CAACC,qBAAAA,SAAD;EACE,eAAa;EACb,IAAG;EACH,UAAS;EACA;EACH;EALR,UAAA;GAOE,iBAAA,GAAA,kBAAA,IAAA,CAACC,eAAAA,OAAD,EAAA,UAAQ,MAAa,CAAA;GACrB,iBAAA,GAAA,kBAAA,IAAA,CAACC,eAAAA,SAAD,EAAU,SAAkB,CAAA;GAC5B,iBAAA,GAAA,kBAAA,KAAA,CAACC,4BAAAA,SAAD;IAAe,IAAI;KAAE,gBAAgB,UAAU,kBAAkB;KAAY,IAAI;IAAE;IAAnF,UAAA,CACG,WAAW,iBAAA,GAAA,kBAAA,IAAA,CAACC,iBAAAA,SAAD;KAAU,YAAW;KAA4B,MAAM;IAAU,CAAA,GAC7E,iBAAA,GAAA,kBAAA,IAAA,CAACC,qBAAAA,SAAD;KAAQ,OAAM;KAAU,IAAG;KAA6B,SAAS;KAC9D,UAAA,EAAE,cAAc;IACX,CAAA,CACK;;EACT;;AAEZ"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import DocsLink from "../DocsLink/DocsLink.mjs";
|
|
2
|
+
import "../DocsLink/index.mjs";
|
|
1
3
|
import { Content, Title } from "./styles.mjs";
|
|
2
4
|
import "react";
|
|
3
5
|
import { useTranslation } from "react-i18next";
|
|
@@ -6,7 +8,7 @@ import Dialog from "@mui/material/Dialog";
|
|
|
6
8
|
import Button from "@mui/material/Button";
|
|
7
9
|
import DialogActions from "@mui/material/DialogActions";
|
|
8
10
|
//#region src/components/RegistryInfoDialog/RegistryInfoDialog.tsx
|
|
9
|
-
var RegistryInfoDialog = ({ open = false, children, onClose, title = "" }) => {
|
|
11
|
+
var RegistryInfoDialog = ({ open = false, children, onClose, title = "", docsUrl }) => {
|
|
10
12
|
const { t } = useTranslation();
|
|
11
13
|
return /* @__PURE__ */ jsxs(Dialog, {
|
|
12
14
|
"data-testid": "registryInfo--dialog",
|
|
@@ -17,12 +19,21 @@ var RegistryInfoDialog = ({ open = false, children, onClose, title = "" }) => {
|
|
|
17
19
|
children: [
|
|
18
20
|
/* @__PURE__ */ jsx(Title, { children: title }),
|
|
19
21
|
/* @__PURE__ */ jsx(Content, { children }),
|
|
20
|
-
/* @__PURE__ */
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
/* @__PURE__ */ jsxs(DialogActions, {
|
|
23
|
+
sx: {
|
|
24
|
+
justifyContent: docsUrl ? "space-between" : "flex-end",
|
|
25
|
+
px: 3
|
|
26
|
+
},
|
|
27
|
+
children: [docsUrl && /* @__PURE__ */ jsx(DocsLink, {
|
|
28
|
+
dataTestId: "registryInfo--dialog-docs",
|
|
29
|
+
href: docsUrl
|
|
30
|
+
}), /* @__PURE__ */ jsx(Button, {
|
|
31
|
+
color: "inherit",
|
|
32
|
+
id: "registryInfo--dialog-close",
|
|
33
|
+
onClick: onClose,
|
|
34
|
+
children: t("button.close")
|
|
35
|
+
})]
|
|
36
|
+
})
|
|
26
37
|
]
|
|
27
38
|
});
|
|
28
39
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RegistryInfoDialog.mjs","names":[],"sources":["../../../src/components/RegistryInfoDialog/RegistryInfoDialog.tsx"],"sourcesContent":["import Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { Content, Title } from './styles';\nimport type { Props } from './types';\n\nconst RegistryInfoDialog: React.FC<Props> = ({
|
|
1
|
+
{"version":3,"file":"RegistryInfoDialog.mjs","names":[],"sources":["../../../src/components/RegistryInfoDialog/RegistryInfoDialog.tsx"],"sourcesContent":["import Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport DocsLink from '../DocsLink';\nimport { Content, Title } from './styles';\nimport type { Props } from './types';\n\nconst RegistryInfoDialog: React.FC<Props> = ({\n open = false,\n children,\n onClose,\n title = '',\n docsUrl,\n}) => {\n const { t } = useTranslation();\n return (\n <Dialog\n data-testid={'registryInfo--dialog'}\n id=\"registryInfo--dialog-container\"\n maxWidth=\"sm\"\n onClose={onClose}\n open={open}\n >\n <Title>{title}</Title>\n <Content>{children}</Content>\n <DialogActions sx={{ justifyContent: docsUrl ? 'space-between' : 'flex-end', px: 3 }}>\n {docsUrl && <DocsLink dataTestId=\"registryInfo--dialog-docs\" href={docsUrl} />}\n <Button color=\"inherit\" id=\"registryInfo--dialog-close\" onClick={onClose}>\n {t('button.close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport default RegistryInfoDialog;\n"],"mappings":";;;;;;;;;;AAUA,IAAM,sBAAuC,EAC3C,OAAO,OACP,UACA,SACA,QAAQ,IACR,cACI;CACJ,MAAM,EAAE,MAAM,eAAe;CAC7B,OACE,qBAAC,QAAD;EACE,eAAa;EACb,IAAG;EACH,UAAS;EACA;EACH;EALR,UAAA;GAOE,oBAAC,OAAD,EAAA,UAAQ,MAAa,CAAA;GACrB,oBAAC,SAAD,EAAU,SAAkB,CAAA;GAC5B,qBAAC,eAAD;IAAe,IAAI;KAAE,gBAAgB,UAAU,kBAAkB;KAAY,IAAI;IAAE;IAAnF,UAAA,CACG,WAAW,oBAAC,UAAD;KAAU,YAAW;KAA4B,MAAM;IAAU,CAAA,GAC7E,oBAAC,QAAD;KAAQ,OAAM;KAAU,IAAG;KAA6B,SAAS;KAC9D,UAAA,EAAE,cAAc;IACX,CAAA,CACK;;EACT;;AAEZ"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { AutocompleteRenderGroupParams } from '@mui/material/Autocomplete';
|
|
1
2
|
import type { FC } from 'react';
|
|
2
3
|
import React from 'react';
|
|
3
4
|
import type { SearchResultWeb } from '@verdaccio/types';
|
|
@@ -13,6 +14,8 @@ interface Props {
|
|
|
13
14
|
getOptionLabel: (option: any) => any;
|
|
14
15
|
onCleanSuggestions: (event: React.SyntheticEvent) => void;
|
|
15
16
|
onSelectItem: OnSelecItem;
|
|
17
|
+
groupBy?: (option: any) => string;
|
|
18
|
+
renderGroup?: (params: AutocompleteRenderGroupParams) => React.ReactNode;
|
|
16
19
|
}
|
|
17
20
|
declare const AutoComplete: FC<Props>;
|
|
18
21
|
export default AutoComplete;
|