@verdaccio/ui-components 5.0.0-next-9.19 → 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/AppRoute/AppRoute.js +13 -0
- package/build/components/AppRoute/AppRoute.js.map +1 -1
- package/build/components/AppRoute/AppRoute.mjs +13 -0
- package/build/components/AppRoute/AppRoute.mjs.map +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/Stage/StageDetail.d.ts +2 -0
- package/build/pages/Stage/StageDetail.js +8 -0
- package/build/pages/Stage/StageDetail.js.map +1 -0
- package/build/pages/Stage/StageDetail.mjs +8 -0
- package/build/pages/Stage/StageDetail.mjs.map +1 -0
- package/build/pages/Stage/StageList.d.ts +2 -0
- package/build/pages/Stage/StageList.js +8 -0
- package/build/pages/Stage/StageList.js.map +1 -0
- package/build/pages/Stage/StageList.mjs +8 -0
- package/build/pages/Stage/StageList.mjs.map +1 -0
- package/build/pages/Stage/index.d.ts +2 -0
- 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 +26 -7
- package/build/sections/Header/HeaderMenu.js.map +1 -1
- package/build/sections/Header/HeaderMenu.mjs +26 -7
- package/build/sections/Header/HeaderMenu.mjs.map +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.d.ts +15 -0
- package/build/sections/Stage/StageActions.js +101 -0
- package/build/sections/Stage/StageActions.js.map +1 -0
- package/build/sections/Stage/StageActions.mjs +99 -0
- package/build/sections/Stage/StageActions.mjs.map +1 -0
- package/build/sections/Stage/StageDetail.d.ts +3 -0
- package/build/sections/Stage/StageDetail.js +110 -0
- package/build/sections/Stage/StageDetail.js.map +1 -0
- package/build/sections/Stage/StageDetail.mjs +108 -0
- package/build/sections/Stage/StageDetail.mjs.map +1 -0
- package/build/sections/Stage/StageList.d.ts +3 -0
- package/build/sections/Stage/StageList.js +153 -0
- package/build/sections/Stage/StageList.js.map +1 -0
- package/build/sections/Stage/StageList.mjs +151 -0
- package/build/sections/Stage/StageList.mjs.map +1 -0
- package/build/sections/Stage/index.d.ts +6 -0
- package/build/sections/Stage/index.js +13 -0
- package/build/sections/Stage/index.mjs +6 -0
- package/build/sections/Stage/types.d.ts +22 -0
- package/build/sections/Stage/useRequireSession.d.ts +14 -0
- package/build/sections/Stage/useRequireSession.js +33 -0
- package/build/sections/Stage/useRequireSession.js.map +1 -0
- package/build/sections/Stage/useRequireSession.mjs +33 -0
- package/build/sections/Stage/useRequireSession.mjs.map +1 -0
- package/build/sections/Stage/useStage.d.ts +34 -0
- package/build/sections/Stage/useStage.js +71 -0
- package/build/sections/Stage/useStage.js.map +1 -0
- package/build/sections/Stage/useStage.mjs +65 -0
- package/build/sections/Stage/useStage.mjs.map +1 -0
- 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 +5 -1
- package/build/utils/routes.js +4 -0
- package/build/utils/routes.js.map +1 -1
- package/build/utils/routes.mjs +4 -0
- package/build/utils/routes.mjs.map +1 -1
- package/build/utils/schemas.d.ts +1 -0
- package/build/utils/schemas.js +4 -4
- package/build/utils/schemas.js.map +1 -1
- package/build/utils/schemas.mjs +4 -4
- package/build/utils/schemas.mjs.map +1 -1
- package/build/utils/session-id.d.ts +8 -0
- package/build/utils/session-id.js +26 -0
- package/build/utils/session-id.js.map +1 -0
- package/build/utils/session-id.mjs +26 -0
- package/build/utils/session-id.mjs.map +1 -0
- package/build/utils/token.d.ts +1 -0
- package/build/utils/token.js +12 -8
- package/build/utils/token.js.map +1 -1
- package/build/utils/token.mjs +12 -9
- package/build/utils/token.mjs.map +1 -1
- package/build/utils/url.js +1 -1
- package/build/utils/url.js.map +1 -1
- package/build/utils/url.mjs +1 -1
- package/build/utils/url.mjs.map +1 -1
- package/build/utils/utils.d.ts +10 -0
- package/build/utils/utils.js +26 -0
- package/build/utils/utils.js.map +1 -1
- package/build/utils/utils.mjs +25 -1
- package/build/utils/utils.mjs.map +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InstallListItem.mjs","names":[],"sources":["../../../src/components/Install/InstallListItem.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport Avatar from '@mui/material/Avatar';\nimport ListItem from '@mui/material/ListItem';\nimport ListItemText from '@mui/material/ListItemText';\nimport { common } from '@mui/material/colors';\nimport React from 'react';\n\nimport { useSettings } from '../../providers/PersistenceSettingProvider';\nimport CopyToClipBoard from '../CopyClipboard';\nimport { Npm, Pnpm, Yarn } from '../Icons';\n\nconst InstallItem = styled(ListItem)({\n padding: 0,\n ':hover': {\n backgroundColor: 'transparent',\n },\n});\n\nconst InstallListItemText = styled(ListItemText)({\n padding: '0 0 0 10px',\n margin: 0,\n});\n\nconst PackageMangerAvatar = styled(Avatar)({\n backgroundColor: 'transparent',\n padding: 0,\n marginLeft: 0,\n});\n\nexport enum DependencyManager {\n NPM = 'npm',\n YARN = 'yarn',\n PNPM = 'pnpm',\n}\n\ninterface Interface {\n packageName: string;\n dependencyManager: DependencyManager;\n packageVersion?: string;\n}\n\nexport function getGlobalInstall(isLatest, isGlobal, packageVersion, packageName, isYarn = false) {\n const name = isGlobal\n ? `${isYarn ? '' : '-g'} ${packageVersion && !isLatest ? `${packageName}@${packageVersion}` : packageName}`\n : packageVersion && !isLatest\n ? `${packageName}@${packageVersion}`\n : packageName;\n\n return name.trim();\n}\n\nconst InstallListItem: React.FC<Interface> = ({\n packageName,\n dependencyManager,\n packageVersion,\n}) => {\n const { localSettings } = useSettings();\n // const theme: Theme = useTheme();\n const isLatest = localSettings[packageName]?.latest ?? false;\n const isGlobal = localSettings[packageName]?.global ?? false;\n switch (dependencyManager) {\n case DependencyManager.NPM:\n return (\n <InstallItem data-testid={'installListItem-npm'}>\n <PackageMangerAvatar alt=\"npm\" sx={{ bgcolor: common.white }}>\n <Npm />\n </PackageMangerAvatar>\n <InstallListItemText\n primary={\n <CopyToClipBoard\n dataTestId=\"installNpm\"\n text={`npm install ${getGlobalInstall(isLatest, isGlobal, packageVersion, packageName)}`}\n title={`npm install ${getGlobalInstall(isLatest, isGlobal, packageVersion, packageName)}`}\n />\n }\n />\n </InstallItem>\n );\n case DependencyManager.YARN:\n return (\n <InstallItem data-testid={'installListItem-yarn'}>\n <PackageMangerAvatar alt=\"yarn\" sx={{ bgcolor: common.white }}>\n <Yarn />\n </PackageMangerAvatar>\n <InstallListItemText\n primary={\n <CopyToClipBoard\n dataTestId=\"installYarn\"\n text={\n isGlobal\n ? `yarn ${localSettings.yarnModern ? '' : 'global'} add ${getGlobalInstall(\n isGlobal,\n packageVersion,\n packageName,\n true\n )}`\n : `yarn add ${getGlobalInstall(isLatest, isGlobal, packageVersion, packageName, true)}`\n }\n title={\n isGlobal\n ? `yarn global add ${getGlobalInstall(\n isGlobal,\n packageVersion,\n packageName,\n true\n )}`\n : `yarn add ${getGlobalInstall(isLatest, isGlobal, packageVersion, packageName, true)}`\n }\n />\n }\n />\n </InstallItem>\n );\n case DependencyManager.PNPM:\n return (\n <InstallItem data-testid={'installListItem-pnpm'}>\n <PackageMangerAvatar alt={'pnpm'} sx={{ bgcolor: common.white }}>\n <Pnpm />\n </PackageMangerAvatar>\n <InstallListItemText\n primary={\n <CopyToClipBoard\n dataTestId=\"installPnpm\"\n text={`pnpm install ${getGlobalInstall(isLatest, isGlobal, packageVersion, packageName)}`}\n title={`pnpm install ${getGlobalInstall(isLatest, isGlobal, packageVersion, packageName)}`}\n />\n }\n />\n </InstallItem>\n );\n default:\n return null;\n }\n};\n\nexport default InstallListItem;\n"],"mappings":";;;;;;;;;;;;;;;;AAWA,IAAM,cAAc,OAAO,QAAQ,CAAC,CAAC;CACnC,SAAS;CACT,UAAU,EACR,iBAAiB,cACnB;AACF,CAAC;AAED,IAAM,sBAAsB,OAAO,YAAY,CAAC,CAAC;CAC/C,SAAS;CACT,QAAQ;AACV,CAAC;AAED,IAAM,sBAAsB,OAAO,MAAM,CAAC,CAAC;CACzC,iBAAiB;CACjB,SAAS;CACT,YAAY;AACd,CAAC;AAED,IAAY,oBAAL,yBAAA,mBAAA;CACL,kBAAA,SAAA;CACA,kBAAA,UAAA;CACA,kBAAA,UAAA;;AACF,EAAA,CAAA,CAAA;AAQA,SAAgB,iBAAiB,UAAU,UAAU,gBAAgB,aAAa,SAAS,OAAO;CAOhG,QANa,WACT,GAAG,SAAS,KAAK,KAAK,GAAG,kBAAkB,CAAC,WAAW,GAAG,YAAY,GAAG,mBAAmB,gBAC5F,kBAAkB,CAAC,WACjB,GAAG,YAAY,GAAG,mBAClB,YAAA,CAEM,KAAK;AACnB;AAEA,IAAM,mBAAwC,EAC5C,aACA,mBACA,qBACI;CACJ,MAAM,EAAE,kBAAkB,YAAY;CAEtC,MAAM,WAAW,cAAc,YAAY,EAAE,UAAU;CACvD,MAAM,WAAW,cAAc,YAAY,EAAE,UAAU;CACvD,QAAQ,mBAAR;EACE,KAAA,OACE,OACE,qBAAC,aAAD;GAAa,eAAa;GAA1B,UAAA,CACE,oBAAC,qBAAD;IAAqB,KAAI;IAAM,IAAI,EAAE,SAAS,OAAO,MAAM;IACzD,UAAA,oBAAC,KAAD,CAAM,CAAA;GACa,CAAA,GACrB,oBAAC,qBAAD,EACE,SACE,oBAAC,iBAAD;IACE,YAAW;IACX,MAAM,eAAe,iBAAiB,UAAU,UAAU,gBAAgB,WAAW;IACrF,OAAO,eAAe,iBAAiB,UAAU,UAAU,gBAAgB,WAAW;GACvF,CAAA,EAEJ,CAAA,CACU;;EAEjB,KAAA,QACE,OACE,qBAAC,aAAD;GAAa,eAAa;GAA1B,UAAA,CACE,oBAAC,qBAAD;IAAqB,KAAI;IAAO,IAAI,EAAE,SAAS,OAAO,MAAM;IAC1D,UAAA,oBAAC,MAAD,CAAO,CAAA;GACY,CAAA,GACrB,oBAAC,qBAAD,EACE,SACE,oBAAC,iBAAD;IACE,YAAW;IACX,MACE,WACI,QAAQ,cAAc,aAAa,KAAK,SAAS,OAAO,iBACtD,UACA,gBACA,aACA,IACF,MACA,YAAY,iBAAiB,UAAU,UAAU,gBAAgB,aAAa,IAAI;IAExF,OACE,WACI,mBAAmB,iBACjB,UACA,gBACA,aACA,IACF,MACA,YAAY,iBAAiB,UAAU,UAAU,gBAAgB,aAAa,IAAI;GAEzF,CAAA,EAEJ,CAAA,CACU;;EAEjB,KAAA,QACE,OACE,qBAAC,aAAD;GAAa,eAAa;GAA1B,UAAA,CACE,oBAAC,qBAAD;IAAqB,KAAK;IAAQ,IAAI,EAAE,SAAS,OAAO,MAAM;IAC5D,UAAA,oBAAC,MAAD,CAAO,CAAA;GACY,CAAA,GACrB,oBAAC,qBAAD,EACE,SACE,oBAAC,iBAAD;IACE,YAAW;IACX,MAAM,gBAAgB,iBAAiB,UAAU,UAAU,gBAAgB,WAAW;IACtF,OAAO,gBAAgB,iBAAiB,UAAU,UAAU,gBAAgB,WAAW;GACxF,CAAA,EAEJ,CAAA,CACU;;EAEjB,SACE,OAAO;CACX;AACF"}
|
|
1
|
+
{"version":3,"file":"InstallListItem.mjs","names":[],"sources":["../../../src/components/Install/InstallListItem.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport Avatar from '@mui/material/Avatar';\nimport ListItem from '@mui/material/ListItem';\nimport ListItemText from '@mui/material/ListItemText';\nimport { common } from '@mui/material/colors';\nimport React from 'react';\n\nimport { useSettings } from '../../providers/PersistenceSettingProvider';\nimport CopyToClipBoard from '../CopyClipboard';\nimport { Npm, Pnpm, Yarn } from '../Icons';\n\nconst InstallItem = styled(ListItem)({\n padding: 0,\n ':hover': {\n backgroundColor: 'transparent',\n },\n});\n\nconst InstallListItemText = styled(ListItemText)({\n padding: '0 0 0 10px',\n margin: 0,\n});\n\nconst PackageMangerAvatar = styled(Avatar)({\n backgroundColor: 'transparent',\n padding: 0,\n marginLeft: 0,\n});\n\nexport enum DependencyManager {\n NPM = 'npm',\n YARN = 'yarn',\n PNPM = 'pnpm',\n}\n\ninterface Interface {\n packageName: string;\n dependencyManager: DependencyManager;\n packageVersion?: string;\n}\n\nexport function getGlobalInstall(isLatest, isGlobal, packageVersion, packageName, isYarn = false) {\n const name = isGlobal\n ? `${isYarn ? '' : '-g'} ${packageVersion && !isLatest ? `${packageName}@${packageVersion}` : packageName}`\n : packageVersion && !isLatest\n ? `${packageName}@${packageVersion}`\n : packageName;\n\n return name.trim();\n}\n\nconst InstallListItem: React.FC<Interface> = ({\n packageName,\n dependencyManager,\n packageVersion,\n}) => {\n const { localSettings } = useSettings();\n // const theme: Theme = useTheme();\n const isLatest = localSettings[packageName]?.latest ?? false;\n const isGlobal = localSettings[packageName]?.global ?? false;\n switch (dependencyManager) {\n case DependencyManager.NPM:\n return (\n <InstallItem data-testid={'installListItem-npm'}>\n <PackageMangerAvatar alt=\"npm\" sx={{ bgcolor: common.white }}>\n <Npm />\n </PackageMangerAvatar>\n <InstallListItemText\n primary={\n <CopyToClipBoard\n dataTestId=\"installNpm\"\n text={`npm install ${getGlobalInstall(isLatest, isGlobal, packageVersion, packageName)}`}\n title={`npm install ${getGlobalInstall(isLatest, isGlobal, packageVersion, packageName)}`}\n />\n }\n />\n </InstallItem>\n );\n case DependencyManager.YARN:\n return (\n <InstallItem data-testid={'installListItem-yarn'}>\n <PackageMangerAvatar alt=\"yarn\" sx={{ bgcolor: common.white }}>\n <Yarn />\n </PackageMangerAvatar>\n <InstallListItemText\n primary={\n <CopyToClipBoard\n dataTestId=\"installYarn\"\n text={\n isGlobal\n ? `yarn ${localSettings.yarnModern ? '' : 'global'} add ${getGlobalInstall(\n isLatest,\n isGlobal,\n packageVersion,\n packageName,\n true\n )}`\n : `yarn add ${getGlobalInstall(isLatest, isGlobal, packageVersion, packageName, true)}`\n }\n title={\n isGlobal\n ? `yarn global add ${getGlobalInstall(\n isLatest,\n isGlobal,\n packageVersion,\n packageName,\n true\n )}`\n : `yarn add ${getGlobalInstall(isLatest, isGlobal, packageVersion, packageName, true)}`\n }\n />\n }\n />\n </InstallItem>\n );\n case DependencyManager.PNPM:\n return (\n <InstallItem data-testid={'installListItem-pnpm'}>\n <PackageMangerAvatar alt={'pnpm'} sx={{ bgcolor: common.white }}>\n <Pnpm />\n </PackageMangerAvatar>\n <InstallListItemText\n primary={\n <CopyToClipBoard\n dataTestId=\"installPnpm\"\n text={`pnpm install ${getGlobalInstall(isLatest, isGlobal, packageVersion, packageName)}`}\n title={`pnpm install ${getGlobalInstall(isLatest, isGlobal, packageVersion, packageName)}`}\n />\n }\n />\n </InstallItem>\n );\n default:\n return null;\n }\n};\n\nexport default InstallListItem;\n"],"mappings":";;;;;;;;;;;;;;;;AAWA,IAAM,cAAc,OAAO,QAAQ,CAAC,CAAC;CACnC,SAAS;CACT,UAAU,EACR,iBAAiB,cACnB;AACF,CAAC;AAED,IAAM,sBAAsB,OAAO,YAAY,CAAC,CAAC;CAC/C,SAAS;CACT,QAAQ;AACV,CAAC;AAED,IAAM,sBAAsB,OAAO,MAAM,CAAC,CAAC;CACzC,iBAAiB;CACjB,SAAS;CACT,YAAY;AACd,CAAC;AAED,IAAY,oBAAL,yBAAA,mBAAA;CACL,kBAAA,SAAA;CACA,kBAAA,UAAA;CACA,kBAAA,UAAA;;AACF,EAAA,CAAA,CAAA;AAQA,SAAgB,iBAAiB,UAAU,UAAU,gBAAgB,aAAa,SAAS,OAAO;CAOhG,QANa,WACT,GAAG,SAAS,KAAK,KAAK,GAAG,kBAAkB,CAAC,WAAW,GAAG,YAAY,GAAG,mBAAmB,gBAC5F,kBAAkB,CAAC,WACjB,GAAG,YAAY,GAAG,mBAClB,YAAA,CAEM,KAAK;AACnB;AAEA,IAAM,mBAAwC,EAC5C,aACA,mBACA,qBACI;CACJ,MAAM,EAAE,kBAAkB,YAAY;CAEtC,MAAM,WAAW,cAAc,YAAY,EAAE,UAAU;CACvD,MAAM,WAAW,cAAc,YAAY,EAAE,UAAU;CACvD,QAAQ,mBAAR;EACE,KAAA,OACE,OACE,qBAAC,aAAD;GAAa,eAAa;GAA1B,UAAA,CACE,oBAAC,qBAAD;IAAqB,KAAI;IAAM,IAAI,EAAE,SAAS,OAAO,MAAM;IACzD,UAAA,oBAAC,KAAD,CAAM,CAAA;GACa,CAAA,GACrB,oBAAC,qBAAD,EACE,SACE,oBAAC,iBAAD;IACE,YAAW;IACX,MAAM,eAAe,iBAAiB,UAAU,UAAU,gBAAgB,WAAW;IACrF,OAAO,eAAe,iBAAiB,UAAU,UAAU,gBAAgB,WAAW;GACvF,CAAA,EAEJ,CAAA,CACU;;EAEjB,KAAA,QACE,OACE,qBAAC,aAAD;GAAa,eAAa;GAA1B,UAAA,CACE,oBAAC,qBAAD;IAAqB,KAAI;IAAO,IAAI,EAAE,SAAS,OAAO,MAAM;IAC1D,UAAA,oBAAC,MAAD,CAAO,CAAA;GACY,CAAA,GACrB,oBAAC,qBAAD,EACE,SACE,oBAAC,iBAAD;IACE,YAAW;IACX,MACE,WACI,QAAQ,cAAc,aAAa,KAAK,SAAS,OAAO,iBACtD,UACA,UACA,gBACA,aACA,IACF,MACA,YAAY,iBAAiB,UAAU,UAAU,gBAAgB,aAAa,IAAI;IAExF,OACE,WACI,mBAAmB,iBACjB,UACA,UACA,gBACA,aACA,IACF,MACA,YAAY,iBAAiB,UAAU,UAAU,gBAAgB,aAAa,IAAI;GAEzF,CAAA,EAEJ,CAAA,CACU;;EAEjB,KAAA,QACE,OACE,qBAAC,aAAD;GAAa,eAAa;GAA1B,UAAA,CACE,oBAAC,qBAAD;IAAqB,KAAK;IAAQ,IAAI,EAAE,SAAS,OAAO,MAAM;IAC5D,UAAA,oBAAC,MAAD,CAAO,CAAA;GACY,CAAA,GACrB,oBAAC,qBAAD,EACE,SACE,oBAAC,iBAAD;IACE,YAAW;IACX,MAAM,gBAAgB,iBAAiB,UAAU,UAAU,gBAAgB,WAAW;IACtF,OAAO,gBAAgB,iBAAiB,UAAU,UAAU,gBAAgB,WAAW;GACxF,CAAA,EAEJ,CAAA,CACU;;EAEjB,SACE,OAAO;CACX;AACF"}
|
|
@@ -16,7 +16,7 @@ var KeywordListItems = ({ keywords }) => {
|
|
|
16
16
|
mt: 0,
|
|
17
17
|
flexWrap: "wrap"
|
|
18
18
|
},
|
|
19
|
-
children: keywordList.sort().map((keyword, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material_Chip.default, {
|
|
19
|
+
children: [...keywordList].sort().map((keyword, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material_Chip.default, {
|
|
20
20
|
label: keyword,
|
|
21
21
|
size: "small",
|
|
22
22
|
sx: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeywordListItems.js","names":[],"sources":["../../../src/components/Keywords/KeywordListItems.tsx"],"sourcesContent":["import Chip from '@mui/material/Chip';\nimport ListItem from '@mui/material/ListItem';\nimport React from 'react';\n\nconst KeywordListItems: React.FC<{ keywords: undefined | string | string[] }> = ({ keywords }) => {\n const keywordList =\n typeof keywords === 'string' ? keywords.replace(/,/g, ' ').split(' ') : keywords;\n\n if (!keywordList) {\n return null;\n }\n\n return (\n <ListItem sx={{ px: 0, mt: 0, flexWrap: 'wrap' }}>\n {keywordList.sort().map((keyword, index) => (\n <Chip key={index} label={keyword} size=\"small\" sx={{ mt: 0.5, mr: 0.5 }} />\n ))}\n </ListItem>\n );\n};\n\nexport default KeywordListItems;\n"],"mappings":";;;;;;;;;AAIA,IAAM,oBAA2E,EAAE,eAAe;CAChG,MAAM,cACJ,OAAO,aAAa,WAAW,SAAS,QAAQ,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,IAAI;CAE1E,IAAI,CAAC,aACH,OAAO;CAGT,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,uBAAA,SAAD;EAAU,IAAI;GAAE,IAAI;GAAG,IAAI;GAAG,UAAU;EAAO;EAC5C,UAAA,
|
|
1
|
+
{"version":3,"file":"KeywordListItems.js","names":[],"sources":["../../../src/components/Keywords/KeywordListItems.tsx"],"sourcesContent":["import Chip from '@mui/material/Chip';\nimport ListItem from '@mui/material/ListItem';\nimport React from 'react';\n\nconst KeywordListItems: React.FC<{ keywords: undefined | string | string[] }> = ({ keywords }) => {\n const keywordList =\n typeof keywords === 'string' ? keywords.replace(/,/g, ' ').split(' ') : keywords;\n\n if (!keywordList) {\n return null;\n }\n\n return (\n <ListItem sx={{ px: 0, mt: 0, flexWrap: 'wrap' }}>\n {[...keywordList].sort().map((keyword, index) => (\n <Chip key={index} label={keyword} size=\"small\" sx={{ mt: 0.5, mr: 0.5 }} />\n ))}\n </ListItem>\n );\n};\n\nexport default KeywordListItems;\n"],"mappings":";;;;;;;;;AAIA,IAAM,oBAA2E,EAAE,eAAe;CAChG,MAAM,cACJ,OAAO,aAAa,WAAW,SAAS,QAAQ,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,IAAI;CAE1E,IAAI,CAAC,aACH,OAAO;CAGT,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,uBAAA,SAAD;EAAU,IAAI;GAAE,IAAI;GAAG,IAAI;GAAG,UAAU;EAAO;EAC5C,UAAA,CAAC,GAAG,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,SAAS,UACrC,iBAAA,GAAA,kBAAA,IAAA,CAAC,mBAAA,SAAD;GAAkB,OAAO;GAAS,MAAK;GAAQ,IAAI;IAAE,IAAI;IAAK,IAAI;GAAI;EAAI,GAA/D,KAA+D,CAC3E;CACO,CAAA;AAEd"}
|
|
@@ -12,7 +12,7 @@ var KeywordListItems = ({ keywords }) => {
|
|
|
12
12
|
mt: 0,
|
|
13
13
|
flexWrap: "wrap"
|
|
14
14
|
},
|
|
15
|
-
children: keywordList.sort().map((keyword, index) => /* @__PURE__ */ jsx(Chip, {
|
|
15
|
+
children: [...keywordList].sort().map((keyword, index) => /* @__PURE__ */ jsx(Chip, {
|
|
16
16
|
label: keyword,
|
|
17
17
|
size: "small",
|
|
18
18
|
sx: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeywordListItems.mjs","names":[],"sources":["../../../src/components/Keywords/KeywordListItems.tsx"],"sourcesContent":["import Chip from '@mui/material/Chip';\nimport ListItem from '@mui/material/ListItem';\nimport React from 'react';\n\nconst KeywordListItems: React.FC<{ keywords: undefined | string | string[] }> = ({ keywords }) => {\n const keywordList =\n typeof keywords === 'string' ? keywords.replace(/,/g, ' ').split(' ') : keywords;\n\n if (!keywordList) {\n return null;\n }\n\n return (\n <ListItem sx={{ px: 0, mt: 0, flexWrap: 'wrap' }}>\n {keywordList.sort().map((keyword, index) => (\n <Chip key={index} label={keyword} size=\"small\" sx={{ mt: 0.5, mr: 0.5 }} />\n ))}\n </ListItem>\n );\n};\n\nexport default KeywordListItems;\n"],"mappings":";;;;;AAIA,IAAM,oBAA2E,EAAE,eAAe;CAChG,MAAM,cACJ,OAAO,aAAa,WAAW,SAAS,QAAQ,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,IAAI;CAE1E,IAAI,CAAC,aACH,OAAO;CAGT,OACE,oBAAC,UAAD;EAAU,IAAI;GAAE,IAAI;GAAG,IAAI;GAAG,UAAU;EAAO;EAC5C,UAAA,
|
|
1
|
+
{"version":3,"file":"KeywordListItems.mjs","names":[],"sources":["../../../src/components/Keywords/KeywordListItems.tsx"],"sourcesContent":["import Chip from '@mui/material/Chip';\nimport ListItem from '@mui/material/ListItem';\nimport React from 'react';\n\nconst KeywordListItems: React.FC<{ keywords: undefined | string | string[] }> = ({ keywords }) => {\n const keywordList =\n typeof keywords === 'string' ? keywords.replace(/,/g, ' ').split(' ') : keywords;\n\n if (!keywordList) {\n return null;\n }\n\n return (\n <ListItem sx={{ px: 0, mt: 0, flexWrap: 'wrap' }}>\n {[...keywordList].sort().map((keyword, index) => (\n <Chip key={index} label={keyword} size=\"small\" sx={{ mt: 0.5, mr: 0.5 }} />\n ))}\n </ListItem>\n );\n};\n\nexport default KeywordListItems;\n"],"mappings":";;;;;AAIA,IAAM,oBAA2E,EAAE,eAAe;CAChG,MAAM,cACJ,OAAO,aAAa,WAAW,SAAS,QAAQ,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,IAAI;CAE1E,IAAI,CAAC,aACH,OAAO;CAGT,OACE,oBAAC,UAAD;EAAU,IAAI;GAAE,IAAI;GAAG,IAAI;GAAG,UAAU;EAAO;EAC5C,UAAA,CAAC,GAAG,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,SAAS,UACrC,oBAAC,MAAD;GAAkB,OAAO;GAAS,MAAK;GAAQ,IAAI;IAAE,IAAI;IAAK,IAAI;GAAI;EAAI,GAA/D,KAA+D,CAC3E;CACO,CAAA;AAEd"}
|
|
@@ -2,9 +2,9 @@ const require_runtime = require("../../_virtual/_rolldown/runtime.js");
|
|
|
2
2
|
const require_KeywordListItems = require("./KeywordListItems.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_styles = require("@mui/material/styles");
|
|
7
|
-
let react_i18next = require("react-i18next");
|
|
8
8
|
let _mui_material_List = require("@mui/material/List");
|
|
9
9
|
_mui_material_List = require_runtime.__toESM(_mui_material_List);
|
|
10
10
|
let _mui_material_Typography = require("@mui/material/Typography");
|
|
@@ -13,7 +13,7 @@ _mui_material_Typography = require_runtime.__toESM(_mui_material_Typography);
|
|
|
13
13
|
var Keywords = ({ packageMeta }) => {
|
|
14
14
|
const { t } = (0, react_i18next.useTranslation)();
|
|
15
15
|
const theme = (0, _mui_material_styles.useTheme)();
|
|
16
|
-
if (!packageMeta?.latest?.keywords) return null;
|
|
16
|
+
if (!packageMeta?.latest?.keywords || packageMeta.latest.keywords.length === 0) return null;
|
|
17
17
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material_List.default, {
|
|
18
18
|
"data-testid": "keyword-list",
|
|
19
19
|
subheader: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material_Typography.default, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Keywords.js","names":[],"sources":["../../../src/components/Keywords/Keywords.tsx"],"sourcesContent":["import List from '@mui/material/List';\nimport Typography from '@mui/material/Typography';\nimport { useTheme } from '@mui/material/styles';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport type { Theme } from '../../Theme';\nimport type { PackageMetaInterface } from '../../types/packageMeta';\nimport KeywordListItems from './KeywordListItems';\n\nconst Keywords: React.FC<{ packageMeta: PackageMetaInterface }> = ({ packageMeta }) => {\n const { t } = useTranslation();\n const theme: Theme = useTheme();\n\n if (!packageMeta?.latest?.keywords) {\n return null;\n }\n\n return (\n <List\n data-testid=\"keyword-list\"\n subheader={\n <Typography\n sx={{ fontWeight: theme.fontWeight.bold, textTransform: 'capitalize' }}\n variant=\"subtitle1\"\n >\n {t('sidebar.keywords.title')}\n </Typography>\n }\n >\n <KeywordListItems keywords={packageMeta?.latest?.keywords} />\n </List>\n );\n};\n\nexport default Keywords;\n"],"mappings":";;;;;;;;;;;;AAUA,IAAM,YAA6D,EAAE,kBAAkB;CACrF,MAAM,EAAE,OAAA,GAAM,cAAA,eAAA,CAAe;CAC7B,MAAM,SAAA,GAAe,qBAAA,SAAA,CAAS;
|
|
1
|
+
{"version":3,"file":"Keywords.js","names":[],"sources":["../../../src/components/Keywords/Keywords.tsx"],"sourcesContent":["import List from '@mui/material/List';\nimport Typography from '@mui/material/Typography';\nimport { useTheme } from '@mui/material/styles';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport type { Theme } from '../../Theme';\nimport type { PackageMetaInterface } from '../../types/packageMeta';\nimport KeywordListItems from './KeywordListItems';\n\nconst Keywords: React.FC<{ packageMeta: PackageMetaInterface }> = ({ packageMeta }) => {\n const { t } = useTranslation();\n const theme: Theme = useTheme();\n\n // `keywords: []` is very common in real manifests and must not paint an\n // empty \"Keywords\" section\n if (!packageMeta?.latest?.keywords || packageMeta.latest.keywords.length === 0) {\n return null;\n }\n\n return (\n <List\n data-testid=\"keyword-list\"\n subheader={\n <Typography\n sx={{ fontWeight: theme.fontWeight.bold, textTransform: 'capitalize' }}\n variant=\"subtitle1\"\n >\n {t('sidebar.keywords.title')}\n </Typography>\n }\n >\n <KeywordListItems keywords={packageMeta?.latest?.keywords} />\n </List>\n );\n};\n\nexport default Keywords;\n"],"mappings":";;;;;;;;;;;;AAUA,IAAM,YAA6D,EAAE,kBAAkB;CACrF,MAAM,EAAE,OAAA,GAAM,cAAA,eAAA,CAAe;CAC7B,MAAM,SAAA,GAAe,qBAAA,SAAA,CAAS;CAI9B,IAAI,CAAC,aAAa,QAAQ,YAAY,YAAY,OAAO,SAAS,WAAW,GAC3E,OAAO;CAGT,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,mBAAA,SAAD;EACE,eAAY;EACZ,WACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,yBAAA,SAAD;GACE,IAAI;IAAE,YAAY,MAAM,WAAW;IAAM,eAAe;GAAa;GACrE,SAAQ;GAEP,UAAA,EAAE,wBAAwB;EACjB,CAAA;EAGd,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,yBAAA,SAAD,EAAkB,UAAU,aAAa,QAAQ,SAAW,CAAA;CACxD,CAAA;AAEV"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import KeywordListItems from "./KeywordListItems.mjs";
|
|
2
2
|
import "react";
|
|
3
|
+
import { useTranslation } from "react-i18next";
|
|
3
4
|
import { jsx } from "react/jsx-runtime";
|
|
4
5
|
import { useTheme } from "@mui/material/styles";
|
|
5
|
-
import { useTranslation } from "react-i18next";
|
|
6
6
|
import List from "@mui/material/List";
|
|
7
7
|
import Typography from "@mui/material/Typography";
|
|
8
8
|
//#region src/components/Keywords/Keywords.tsx
|
|
9
9
|
var Keywords = ({ packageMeta }) => {
|
|
10
10
|
const { t } = useTranslation();
|
|
11
11
|
const theme = useTheme();
|
|
12
|
-
if (!packageMeta?.latest?.keywords) return null;
|
|
12
|
+
if (!packageMeta?.latest?.keywords || packageMeta.latest.keywords.length === 0) return null;
|
|
13
13
|
return /* @__PURE__ */ jsx(List, {
|
|
14
14
|
"data-testid": "keyword-list",
|
|
15
15
|
subheader: /* @__PURE__ */ jsx(Typography, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Keywords.mjs","names":[],"sources":["../../../src/components/Keywords/Keywords.tsx"],"sourcesContent":["import List from '@mui/material/List';\nimport Typography from '@mui/material/Typography';\nimport { useTheme } from '@mui/material/styles';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport type { Theme } from '../../Theme';\nimport type { PackageMetaInterface } from '../../types/packageMeta';\nimport KeywordListItems from './KeywordListItems';\n\nconst Keywords: React.FC<{ packageMeta: PackageMetaInterface }> = ({ packageMeta }) => {\n const { t } = useTranslation();\n const theme: Theme = useTheme();\n\n if (!packageMeta?.latest?.keywords) {\n return null;\n }\n\n return (\n <List\n data-testid=\"keyword-list\"\n subheader={\n <Typography\n sx={{ fontWeight: theme.fontWeight.bold, textTransform: 'capitalize' }}\n variant=\"subtitle1\"\n >\n {t('sidebar.keywords.title')}\n </Typography>\n }\n >\n <KeywordListItems keywords={packageMeta?.latest?.keywords} />\n </List>\n );\n};\n\nexport default Keywords;\n"],"mappings":";;;;;;;;AAUA,IAAM,YAA6D,EAAE,kBAAkB;CACrF,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,QAAe,SAAS;
|
|
1
|
+
{"version":3,"file":"Keywords.mjs","names":[],"sources":["../../../src/components/Keywords/Keywords.tsx"],"sourcesContent":["import List from '@mui/material/List';\nimport Typography from '@mui/material/Typography';\nimport { useTheme } from '@mui/material/styles';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport type { Theme } from '../../Theme';\nimport type { PackageMetaInterface } from '../../types/packageMeta';\nimport KeywordListItems from './KeywordListItems';\n\nconst Keywords: React.FC<{ packageMeta: PackageMetaInterface }> = ({ packageMeta }) => {\n const { t } = useTranslation();\n const theme: Theme = useTheme();\n\n // `keywords: []` is very common in real manifests and must not paint an\n // empty \"Keywords\" section\n if (!packageMeta?.latest?.keywords || packageMeta.latest.keywords.length === 0) {\n return null;\n }\n\n return (\n <List\n data-testid=\"keyword-list\"\n subheader={\n <Typography\n sx={{ fontWeight: theme.fontWeight.bold, textTransform: 'capitalize' }}\n variant=\"subtitle1\"\n >\n {t('sidebar.keywords.title')}\n </Typography>\n }\n >\n <KeywordListItems keywords={packageMeta?.latest?.keywords} />\n </List>\n );\n};\n\nexport default Keywords;\n"],"mappings":";;;;;;;;AAUA,IAAM,YAA6D,EAAE,kBAAkB;CACrF,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,QAAe,SAAS;CAI9B,IAAI,CAAC,aAAa,QAAQ,YAAY,YAAY,OAAO,SAAS,WAAW,GAC3E,OAAO;CAGT,OACE,oBAAC,MAAD;EACE,eAAY;EACZ,WACE,oBAAC,YAAD;GACE,IAAI;IAAE,YAAY,MAAM,WAAW;IAAM,eAAe;GAAa;GACrE,SAAQ;GAEP,UAAA,EAAE,wBAAwB;EACjB,CAAA;EAGd,UAAA,oBAAC,kBAAD,EAAkB,UAAU,aAAa,QAAQ,SAAW,CAAA;CACxD,CAAA;AAEV"}
|
|
@@ -5,12 +5,12 @@ let _mui_material_IconButton = require("@mui/material/IconButton");
|
|
|
5
5
|
_mui_material_IconButton = require_runtime.__toESM(_mui_material_IconButton);
|
|
6
6
|
let react = require("react");
|
|
7
7
|
react = require_runtime.__toESM(react);
|
|
8
|
+
let react_i18next = require("react-i18next");
|
|
8
9
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
9
10
|
let _mui_icons_material_Close = require("@mui/icons-material/Close");
|
|
10
11
|
_mui_icons_material_Close = require_runtime.__toESM(_mui_icons_material_Close);
|
|
11
12
|
let _mui_material_DialogTitle = require("@mui/material/DialogTitle");
|
|
12
13
|
_mui_material_DialogTitle = require_runtime.__toESM(_mui_material_DialogTitle);
|
|
13
|
-
let react_i18next = require("react-i18next");
|
|
14
14
|
//#region src/components/LoginDialog/LoginDialogCloseButton.tsx
|
|
15
15
|
var StyledIconButton = (0, _emotion_styled.default)(_mui_material_IconButton.default)(({ theme }) => ({
|
|
16
16
|
position: "absolute",
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import styled from "@emotion/styled";
|
|
2
2
|
import IconButton from "@mui/material/IconButton";
|
|
3
3
|
import "react";
|
|
4
|
+
import { useTranslation } from "react-i18next";
|
|
4
5
|
import { jsx } from "react/jsx-runtime";
|
|
5
6
|
import CloseIcon from "@mui/icons-material/Close";
|
|
6
7
|
import DialogTitle from "@mui/material/DialogTitle";
|
|
7
|
-
import { useTranslation } from "react-i18next";
|
|
8
8
|
//#region src/components/LoginDialog/LoginDialogCloseButton.tsx
|
|
9
9
|
var StyledIconButton = styled(IconButton)(({ theme }) => ({
|
|
10
10
|
position: "absolute",
|
|
@@ -6,10 +6,11 @@ react = require_runtime.__toESM(react);
|
|
|
6
6
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
7
7
|
//#region src/components/LoginDialog/LoginDialogForm.tsx
|
|
8
8
|
var LoginDialogForm = () => {
|
|
9
|
-
const { register, handleSubmit, formState: { isValid, errors }, onSubmit } = require_useLoginForm.useLoginForm();
|
|
9
|
+
const { register, handleSubmit, formState: { isValid, isSubmitting, errors }, onSubmit } = require_useLoginForm.useLoginForm();
|
|
10
10
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Login.default, {
|
|
11
11
|
errors,
|
|
12
12
|
handleSubmit,
|
|
13
|
+
isSubmitting,
|
|
13
14
|
isValid,
|
|
14
15
|
onSubmit,
|
|
15
16
|
register
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoginDialogForm.js","names":[],"sources":["../../../src/components/LoginDialog/LoginDialogForm.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport React from 'react';\n\nimport LoginForm from '../LoginForm/Login';\nimport { useLoginForm } from '../LoginForm/useLoginForm';\n\nconst LoginDialogForm: FC = () => {\n const {\n register,\n handleSubmit,\n formState: { isValid, errors },\n onSubmit,\n } = useLoginForm();\n return (\n <LoginForm\n errors={errors}\n handleSubmit={handleSubmit}\n isValid={isValid}\n onSubmit={onSubmit}\n register={register}\n />\n );\n};\n\nexport default LoginDialogForm;\n"],"mappings":";;;;;;;AAMA,IAAM,wBAA4B;CAChC,MAAM,EACJ,UACA,cACA,WAAW,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"LoginDialogForm.js","names":[],"sources":["../../../src/components/LoginDialog/LoginDialogForm.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport React from 'react';\n\nimport LoginForm from '../LoginForm/Login';\nimport { useLoginForm } from '../LoginForm/useLoginForm';\n\nconst LoginDialogForm: FC = () => {\n const {\n register,\n handleSubmit,\n formState: { isValid, isSubmitting, errors },\n onSubmit,\n } = useLoginForm();\n return (\n <LoginForm\n errors={errors}\n handleSubmit={handleSubmit}\n isSubmitting={isSubmitting}\n isValid={isValid}\n onSubmit={onSubmit}\n register={register}\n />\n );\n};\n\nexport default LoginDialogForm;\n"],"mappings":";;;;;;;AAMA,IAAM,wBAA4B;CAChC,MAAM,EACJ,UACA,cACA,WAAW,EAAE,SAAS,cAAc,UACpC,aACE,qBAAA,aAAa;CACjB,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAA,SAAD;EACU;EACM;EACA;EACL;EACC;EACA;CACX,CAAA;AAEL"}
|
|
@@ -4,10 +4,11 @@ import "react";
|
|
|
4
4
|
import { jsx } from "react/jsx-runtime";
|
|
5
5
|
//#region src/components/LoginDialog/LoginDialogForm.tsx
|
|
6
6
|
var LoginDialogForm = () => {
|
|
7
|
-
const { register, handleSubmit, formState: { isValid, errors }, onSubmit } = useLoginForm();
|
|
7
|
+
const { register, handleSubmit, formState: { isValid, isSubmitting, errors }, onSubmit } = useLoginForm();
|
|
8
8
|
return /* @__PURE__ */ jsx(LoginForm, {
|
|
9
9
|
errors,
|
|
10
10
|
handleSubmit,
|
|
11
|
+
isSubmitting,
|
|
11
12
|
isValid,
|
|
12
13
|
onSubmit,
|
|
13
14
|
register
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoginDialogForm.mjs","names":[],"sources":["../../../src/components/LoginDialog/LoginDialogForm.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport React from 'react';\n\nimport LoginForm from '../LoginForm/Login';\nimport { useLoginForm } from '../LoginForm/useLoginForm';\n\nconst LoginDialogForm: FC = () => {\n const {\n register,\n handleSubmit,\n formState: { isValid, errors },\n onSubmit,\n } = useLoginForm();\n return (\n <LoginForm\n errors={errors}\n handleSubmit={handleSubmit}\n isValid={isValid}\n onSubmit={onSubmit}\n register={register}\n />\n );\n};\n\nexport default LoginDialogForm;\n"],"mappings":";;;;;AAMA,IAAM,wBAA4B;CAChC,MAAM,EACJ,UACA,cACA,WAAW,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"LoginDialogForm.mjs","names":[],"sources":["../../../src/components/LoginDialog/LoginDialogForm.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport React from 'react';\n\nimport LoginForm from '../LoginForm/Login';\nimport { useLoginForm } from '../LoginForm/useLoginForm';\n\nconst LoginDialogForm: FC = () => {\n const {\n register,\n handleSubmit,\n formState: { isValid, isSubmitting, errors },\n onSubmit,\n } = useLoginForm();\n return (\n <LoginForm\n errors={errors}\n handleSubmit={handleSubmit}\n isSubmitting={isSubmitting}\n isValid={isValid}\n onSubmit={onSubmit}\n register={register}\n />\n );\n};\n\nexport default LoginDialogForm;\n"],"mappings":";;;;;AAMA,IAAM,wBAA4B;CAChC,MAAM,EACJ,UACA,cACA,WAAW,EAAE,SAAS,cAAc,UACpC,aACE,aAAa;CACjB,OACE,oBAAC,WAAD;EACU;EACM;EACA;EACL;EACC;EACA;CACX,CAAA;AAEL"}
|
|
@@ -9,8 +9,9 @@ let _emotion_styled = require("@emotion/styled");
|
|
|
9
9
|
_emotion_styled = require_runtime.__toESM(_emotion_styled);
|
|
10
10
|
let react = require("react");
|
|
11
11
|
react = require_runtime.__toESM(react);
|
|
12
|
-
let react_jsx_runtime = require("react/jsx-runtime");
|
|
13
12
|
let react_i18next = require("react-i18next");
|
|
13
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
14
|
+
let react_router = require("react-router");
|
|
14
15
|
let _mui_material_Link = require("@mui/material/Link");
|
|
15
16
|
_mui_material_Link = require_runtime.__toESM(_mui_material_Link);
|
|
16
17
|
let _mui_material_Typography = require("@mui/material/Typography");
|
|
@@ -20,7 +21,7 @@ _mui_material_Button = require_runtime.__toESM(_mui_material_Button);
|
|
|
20
21
|
//#region src/components/LoginForm/Login.tsx
|
|
21
22
|
var StyledForm = (0, _emotion_styled.default)("form")(({ theme }) => ({ marginTop: theme.spacing(1) }));
|
|
22
23
|
var StyledButton = (0, _emotion_styled.default)(_mui_material_Button.default)(({ theme }) => ({ margin: theme.spacing(3, 0, 2) }));
|
|
23
|
-
var LoginForm = ({ register, handleSubmit, onSubmit, errors, isValid }) => {
|
|
24
|
+
var LoginForm = ({ register, handleSubmit, onSubmit, errors, isValid, isSubmitting = false }) => {
|
|
24
25
|
const { t } = (0, react_i18next.useTranslation)();
|
|
25
26
|
const changePasswordEnabled = require_configuration.getConfiguration()?.flags?.changePassword;
|
|
26
27
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(StyledForm, {
|
|
@@ -39,7 +40,7 @@ var LoginForm = ({ register, handleSubmit, onSubmit, errors, isValid }) => {
|
|
|
39
40
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(StyledButton, {
|
|
40
41
|
color: "primary",
|
|
41
42
|
"data-testid": "login-dialog-form-login-button",
|
|
42
|
-
disabled: !isValid,
|
|
43
|
+
disabled: !isValid || isSubmitting,
|
|
43
44
|
fullWidth: true,
|
|
44
45
|
id: "login--dialog-button-submit",
|
|
45
46
|
size: "large",
|
|
@@ -55,8 +56,9 @@ var LoginForm = ({ register, handleSubmit, onSubmit, errors, isValid }) => {
|
|
|
55
56
|
},
|
|
56
57
|
variant: "body2",
|
|
57
58
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material_Link.default, {
|
|
58
|
-
|
|
59
|
+
component: react_router.Link,
|
|
59
60
|
sx: { ml: 1 },
|
|
61
|
+
to: require_routes.Route.CHANGE_PASSWORD,
|
|
60
62
|
children: t("security.changePassword.title")
|
|
61
63
|
})
|
|
62
64
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Login.js","names":[],"sources":["../../../src/components/LoginForm/Login.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport Button from '@mui/material/Button';\nimport Link from '@mui/material/Link';\nimport Typography from '@mui/material/Typography';\nimport type { FC } from 'react';\nimport React from 'react';\nimport type { FieldErrors, UseFormHandleSubmit, UseFormRegister } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\n\nimport type { Theme } from '../../';\nimport { getConfiguration } from '../../configuration';\nimport { Route } from '../../utils';\nimport LoginDialogFormError from '../LoginDialog/LoginDialogFormError';\nimport PasswordField from './PasswordField';\nimport UsernameField from './UsernameField';\n\nconst StyledForm = styled('form')<{ theme?: Theme }>(({ theme }) => ({\n marginTop: theme.spacing(1),\n}));\n\nconst StyledButton = styled(Button)<{ theme?: Theme }>(({ theme }) => ({\n margin: theme.spacing(3, 0, 2),\n}));\n\nexport interface LoginFormValues {\n username: string;\n password: string;\n}\n\ninterface Props {\n register: UseFormRegister<LoginFormValues>;\n handleSubmit: UseFormHandleSubmit<LoginFormValues>;\n onSubmit: (data: LoginFormValues) => void;\n errors: FieldErrors<LoginFormValues>;\n isValid: boolean;\n}\n\nconst LoginForm: FC<Props> = ({
|
|
1
|
+
{"version":3,"file":"Login.js","names":[],"sources":["../../../src/components/LoginForm/Login.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport Button from '@mui/material/Button';\nimport Link from '@mui/material/Link';\nimport Typography from '@mui/material/Typography';\nimport type { FC } from 'react';\nimport React from 'react';\nimport type { FieldErrors, UseFormHandleSubmit, UseFormRegister } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport { Link as RouterLink } from 'react-router';\n\nimport type { Theme } from '../../';\nimport { getConfiguration } from '../../configuration';\nimport { Route } from '../../utils';\nimport LoginDialogFormError from '../LoginDialog/LoginDialogFormError';\nimport PasswordField from './PasswordField';\nimport UsernameField from './UsernameField';\n\nconst StyledForm = styled('form')<{ theme?: Theme }>(({ theme }) => ({\n marginTop: theme.spacing(1),\n}));\n\nconst StyledButton = styled(Button)<{ theme?: Theme }>(({ theme }) => ({\n margin: theme.spacing(3, 0, 2),\n}));\n\nexport interface LoginFormValues {\n username: string;\n password: string;\n}\n\ninterface Props {\n register: UseFormRegister<LoginFormValues>;\n handleSubmit: UseFormHandleSubmit<LoginFormValues>;\n onSubmit: (data: LoginFormValues) => void;\n errors: FieldErrors<LoginFormValues>;\n isValid: boolean;\n isSubmitting?: boolean;\n}\n\nconst LoginForm: FC<Props> = ({\n register,\n handleSubmit,\n onSubmit,\n errors,\n isValid,\n isSubmitting = false,\n}) => {\n const { t } = useTranslation();\n const configuration = getConfiguration();\n const changePasswordEnabled = configuration?.flags?.changePassword;\n\n return (\n <StyledForm noValidate={true} onSubmit={handleSubmit(onSubmit)}>\n <UsernameField errors={errors} register={register} />\n <PasswordField errors={errors} register={register} />\n\n {errors.root && <LoginDialogFormError error={errors.root} />}\n\n <StyledButton\n color=\"primary\"\n data-testid=\"login-dialog-form-login-button\"\n // disable while the request is in flight: a double click means a double\n // POST, which can even trip the login rate limit\n disabled={!isValid || isSubmitting}\n fullWidth={true}\n id=\"login--dialog-button-submit\"\n size=\"large\"\n type=\"submit\"\n variant=\"contained\"\n >\n {t('button.login')}\n </StyledButton>\n {changePasswordEnabled && (\n <Typography align=\"center\" sx={{ mt: 2, fontSize: 12 }} variant=\"body2\">\n <Link component={RouterLink} sx={{ ml: 1 }} to={Route.CHANGE_PASSWORD}>\n {t('security.changePassword.title')}\n </Link>\n </Typography>\n )}\n </StyledForm>\n );\n};\n\nexport default LoginForm;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAiBA,IAAM,cAAA,GAAa,gBAAA,QAAA,CAAO,MAAM,CAAC,EAAqB,EAAE,aAAa,EACnE,WAAW,MAAM,QAAQ,CAAC,EAC5B,EAAE;AAEF,IAAM,gBAAA,GAAe,gBAAA,QAAA,CAAO,qBAAA,OAAM,CAAC,EAAqB,EAAE,aAAa,EACrE,QAAQ,MAAM,QAAQ,GAAG,GAAG,CAAC,EAC/B,EAAE;AAgBF,IAAM,aAAwB,EAC5B,UACA,cACA,UACA,QACA,SACA,eAAe,YACX;CACJ,MAAM,EAAE,OAAA,GAAM,cAAA,eAAA,CAAe;CAE7B,MAAM,wBADgB,sBAAA,iBACQ,CAAA,EAAe,OAAO;CAEpD,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,YAAD;EAAY,YAAY;EAAM,UAAU,aAAa,QAAQ;EAA7D,UAAA;GACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,sBAAA,SAAD;IAAuB;IAAkB;GAAW,CAAA;GACpD,iBAAA,GAAA,kBAAA,IAAA,CAAC,sBAAA,SAAD;IAAuB;IAAkB;GAAW,CAAA;GAEnD,OAAO,QAAQ,iBAAA,GAAA,kBAAA,IAAA,CAAC,6BAAA,SAAD,EAAsB,OAAO,OAAO,KAAO,CAAA;GAE3D,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD;IACE,OAAM;IACN,eAAY;IAGZ,UAAU,CAAC,WAAW;IACtB,WAAW;IACX,IAAG;IACH,MAAK;IACL,MAAK;IACL,SAAQ;IAEP,UAAA,EAAE,cAAc;GACL,CAAA;GACb,yBACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,yBAAA,SAAD;IAAY,OAAM;IAAS,IAAI;KAAE,IAAI;KAAG,UAAU;IAAG;IAAG,SAAQ;IAC9D,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,mBAAA,SAAD;KAAM,WAAW,aAAA;KAAY,IAAI,EAAE,IAAI,EAAE;KAAG,IAAI,eAAA,MAAM;KACnD,UAAA,EAAE,+BAA+B;IAC9B,CAAA;GACI,CAAA;EAEJ;;AAEhB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Route } from "../../utils/routes.mjs";
|
|
1
|
+
import { Route as Route$1 } from "../../utils/routes.mjs";
|
|
2
2
|
import "../../utils/index.mjs";
|
|
3
3
|
import { getConfiguration } from "../../configuration.mjs";
|
|
4
4
|
import LoginDialogFormError from "../LoginDialog/LoginDialogFormError.mjs";
|
|
@@ -6,15 +6,16 @@ import PasswordField from "./PasswordField.mjs";
|
|
|
6
6
|
import UsernameField from "./UsernameField.mjs";
|
|
7
7
|
import styled from "@emotion/styled";
|
|
8
8
|
import "react";
|
|
9
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
10
9
|
import { useTranslation } from "react-i18next";
|
|
11
|
-
import
|
|
10
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
11
|
+
import { Link } from "react-router";
|
|
12
|
+
import Link$1 from "@mui/material/Link";
|
|
12
13
|
import Typography from "@mui/material/Typography";
|
|
13
14
|
import Button from "@mui/material/Button";
|
|
14
15
|
//#region src/components/LoginForm/Login.tsx
|
|
15
16
|
var StyledForm = styled("form")(({ theme }) => ({ marginTop: theme.spacing(1) }));
|
|
16
17
|
var StyledButton = styled(Button)(({ theme }) => ({ margin: theme.spacing(3, 0, 2) }));
|
|
17
|
-
var LoginForm = ({ register, handleSubmit, onSubmit, errors, isValid }) => {
|
|
18
|
+
var LoginForm = ({ register, handleSubmit, onSubmit, errors, isValid, isSubmitting = false }) => {
|
|
18
19
|
const { t } = useTranslation();
|
|
19
20
|
const changePasswordEnabled = getConfiguration()?.flags?.changePassword;
|
|
20
21
|
return /* @__PURE__ */ jsxs(StyledForm, {
|
|
@@ -33,7 +34,7 @@ var LoginForm = ({ register, handleSubmit, onSubmit, errors, isValid }) => {
|
|
|
33
34
|
/* @__PURE__ */ jsx(StyledButton, {
|
|
34
35
|
color: "primary",
|
|
35
36
|
"data-testid": "login-dialog-form-login-button",
|
|
36
|
-
disabled: !isValid,
|
|
37
|
+
disabled: !isValid || isSubmitting,
|
|
37
38
|
fullWidth: true,
|
|
38
39
|
id: "login--dialog-button-submit",
|
|
39
40
|
size: "large",
|
|
@@ -48,9 +49,10 @@ var LoginForm = ({ register, handleSubmit, onSubmit, errors, isValid }) => {
|
|
|
48
49
|
fontSize: 12
|
|
49
50
|
},
|
|
50
51
|
variant: "body2",
|
|
51
|
-
children: /* @__PURE__ */ jsx(Link, {
|
|
52
|
-
|
|
52
|
+
children: /* @__PURE__ */ jsx(Link$1, {
|
|
53
|
+
component: Link,
|
|
53
54
|
sx: { ml: 1 },
|
|
55
|
+
to: Route$1.CHANGE_PASSWORD,
|
|
54
56
|
children: t("security.changePassword.title")
|
|
55
57
|
})
|
|
56
58
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Login.mjs","names":[],"sources":["../../../src/components/LoginForm/Login.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport Button from '@mui/material/Button';\nimport Link from '@mui/material/Link';\nimport Typography from '@mui/material/Typography';\nimport type { FC } from 'react';\nimport React from 'react';\nimport type { FieldErrors, UseFormHandleSubmit, UseFormRegister } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\n\nimport type { Theme } from '../../';\nimport { getConfiguration } from '../../configuration';\nimport { Route } from '../../utils';\nimport LoginDialogFormError from '../LoginDialog/LoginDialogFormError';\nimport PasswordField from './PasswordField';\nimport UsernameField from './UsernameField';\n\nconst StyledForm = styled('form')<{ theme?: Theme }>(({ theme }) => ({\n marginTop: theme.spacing(1),\n}));\n\nconst StyledButton = styled(Button)<{ theme?: Theme }>(({ theme }) => ({\n margin: theme.spacing(3, 0, 2),\n}));\n\nexport interface LoginFormValues {\n username: string;\n password: string;\n}\n\ninterface Props {\n register: UseFormRegister<LoginFormValues>;\n handleSubmit: UseFormHandleSubmit<LoginFormValues>;\n onSubmit: (data: LoginFormValues) => void;\n errors: FieldErrors<LoginFormValues>;\n isValid: boolean;\n}\n\nconst LoginForm: FC<Props> = ({
|
|
1
|
+
{"version":3,"file":"Login.mjs","names":[],"sources":["../../../src/components/LoginForm/Login.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport Button from '@mui/material/Button';\nimport Link from '@mui/material/Link';\nimport Typography from '@mui/material/Typography';\nimport type { FC } from 'react';\nimport React from 'react';\nimport type { FieldErrors, UseFormHandleSubmit, UseFormRegister } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport { Link as RouterLink } from 'react-router';\n\nimport type { Theme } from '../../';\nimport { getConfiguration } from '../../configuration';\nimport { Route } from '../../utils';\nimport LoginDialogFormError from '../LoginDialog/LoginDialogFormError';\nimport PasswordField from './PasswordField';\nimport UsernameField from './UsernameField';\n\nconst StyledForm = styled('form')<{ theme?: Theme }>(({ theme }) => ({\n marginTop: theme.spacing(1),\n}));\n\nconst StyledButton = styled(Button)<{ theme?: Theme }>(({ theme }) => ({\n margin: theme.spacing(3, 0, 2),\n}));\n\nexport interface LoginFormValues {\n username: string;\n password: string;\n}\n\ninterface Props {\n register: UseFormRegister<LoginFormValues>;\n handleSubmit: UseFormHandleSubmit<LoginFormValues>;\n onSubmit: (data: LoginFormValues) => void;\n errors: FieldErrors<LoginFormValues>;\n isValid: boolean;\n isSubmitting?: boolean;\n}\n\nconst LoginForm: FC<Props> = ({\n register,\n handleSubmit,\n onSubmit,\n errors,\n isValid,\n isSubmitting = false,\n}) => {\n const { t } = useTranslation();\n const configuration = getConfiguration();\n const changePasswordEnabled = configuration?.flags?.changePassword;\n\n return (\n <StyledForm noValidate={true} onSubmit={handleSubmit(onSubmit)}>\n <UsernameField errors={errors} register={register} />\n <PasswordField errors={errors} register={register} />\n\n {errors.root && <LoginDialogFormError error={errors.root} />}\n\n <StyledButton\n color=\"primary\"\n data-testid=\"login-dialog-form-login-button\"\n // disable while the request is in flight: a double click means a double\n // POST, which can even trip the login rate limit\n disabled={!isValid || isSubmitting}\n fullWidth={true}\n id=\"login--dialog-button-submit\"\n size=\"large\"\n type=\"submit\"\n variant=\"contained\"\n >\n {t('button.login')}\n </StyledButton>\n {changePasswordEnabled && (\n <Typography align=\"center\" sx={{ mt: 2, fontSize: 12 }} variant=\"body2\">\n <Link component={RouterLink} sx={{ ml: 1 }} to={Route.CHANGE_PASSWORD}>\n {t('security.changePassword.title')}\n </Link>\n </Typography>\n )}\n </StyledForm>\n );\n};\n\nexport default LoginForm;\n"],"mappings":";;;;;;;;;;;;;;;AAiBA,IAAM,aAAa,OAAO,MAAM,CAAC,EAAqB,EAAE,aAAa,EACnE,WAAW,MAAM,QAAQ,CAAC,EAC5B,EAAE;AAEF,IAAM,eAAe,OAAO,MAAM,CAAC,EAAqB,EAAE,aAAa,EACrE,QAAQ,MAAM,QAAQ,GAAG,GAAG,CAAC,EAC/B,EAAE;AAgBF,IAAM,aAAwB,EAC5B,UACA,cACA,UACA,QACA,SACA,eAAe,YACX;CACJ,MAAM,EAAE,MAAM,eAAe;CAE7B,MAAM,wBADgB,iBACQ,CAAA,EAAe,OAAO;CAEpD,OACE,qBAAC,YAAD;EAAY,YAAY;EAAM,UAAU,aAAa,QAAQ;EAA7D,UAAA;GACE,oBAAC,eAAD;IAAuB;IAAkB;GAAW,CAAA;GACpD,oBAAC,eAAD;IAAuB;IAAkB;GAAW,CAAA;GAEnD,OAAO,QAAQ,oBAAC,sBAAD,EAAsB,OAAO,OAAO,KAAO,CAAA;GAE3D,oBAAC,cAAD;IACE,OAAM;IACN,eAAY;IAGZ,UAAU,CAAC,WAAW;IACtB,WAAW;IACX,IAAG;IACH,MAAK;IACL,MAAK;IACL,SAAQ;IAEP,UAAA,EAAE,cAAc;GACL,CAAA;GACb,yBACC,oBAAC,YAAD;IAAY,OAAM;IAAS,IAAI;KAAE,IAAI;KAAG,UAAU;IAAG;IAAG,SAAQ;IAC9D,UAAA,oBAAC,QAAD;KAAM,WAAW;KAAY,IAAI,EAAE,IAAI,EAAE;KAAG,IAAI,QAAM;KACnD,UAAA,EAAE,+BAA+B;IAC9B,CAAA;GACI,CAAA;EAEJ;;AAEhB"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
const require_runtime = require("../../_virtual/_rolldown/runtime.js");
|
|
2
|
+
require("../../utils/schemas.js");
|
|
2
3
|
let _emotion_styled = require("@emotion/styled");
|
|
3
4
|
_emotion_styled = require_runtime.__toESM(_emotion_styled);
|
|
4
5
|
let react = require("react");
|
|
5
6
|
react = require_runtime.__toESM(react);
|
|
6
|
-
let react_jsx_runtime = require("react/jsx-runtime");
|
|
7
7
|
let react_i18next = require("react-i18next");
|
|
8
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
8
9
|
let _mui_material_TextField = require("@mui/material/TextField");
|
|
9
10
|
_mui_material_TextField = require_runtime.__toESM(_mui_material_TextField);
|
|
10
11
|
//#region src/components/LoginForm/PasswordField.tsx
|
|
@@ -15,12 +16,9 @@ var PasswordField = ({ register, errors }) => {
|
|
|
15
16
|
autoComplete: "current-password",
|
|
16
17
|
error: !!errors.password,
|
|
17
18
|
fullWidth: true,
|
|
18
|
-
helperText: errors.password?.message,
|
|
19
|
+
helperText: errors.password?.message ? t(errors.password.message, { length: 2 }) : void 0,
|
|
19
20
|
id: "login--dialog-password",
|
|
20
|
-
...register("password",
|
|
21
|
-
value: true,
|
|
22
|
-
message: t("form-validation.required-field")
|
|
23
|
-
} }),
|
|
21
|
+
...register("password"),
|
|
24
22
|
"data-testid": "password",
|
|
25
23
|
label: t("form.password"),
|
|
26
24
|
placeholder: t("form-placeholder.password"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PasswordField.js","names":[],"sources":["../../../src/components/LoginForm/PasswordField.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport TextField from '@mui/material/TextField';\nimport type { FC } from 'react';\nimport React from 'react';\nimport type { FieldErrors } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\n\nimport type { Theme } from '../../';\nimport type { AddUserFormValues, LoginFormValues } from '../../utils/schemas';\n\nconst StyledTextField = styled(TextField)<{ theme?: Theme }>(({ theme }) => ({\n marginTop: theme.spacing(2),\n}));\n\ninterface Props {\n register: any;\n errors: FieldErrors<LoginFormValues | AddUserFormValues>;\n}\n\nconst PasswordField: FC<Props> = ({ register, errors }) => {\n const { t } = useTranslation();\n\n return (\n <StyledTextField\n autoComplete=\"current-password\"\n error={!!errors.password}\n fullWidth={true}\n helperText={errors.password?.message}\n id=\"login--dialog-password\"\n {...register('password'
|
|
1
|
+
{"version":3,"file":"PasswordField.js","names":[],"sources":["../../../src/components/LoginForm/PasswordField.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport TextField from '@mui/material/TextField';\nimport type { FC } from 'react';\nimport React from 'react';\nimport type { FieldErrors } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\n\nimport type { Theme } from '../../';\nimport type { AddUserFormValues, LoginFormValues } from '../../utils/schemas';\nimport { PASSWORD_MIN_LENGTH } from '../../utils/schemas';\n\nconst StyledTextField = styled(TextField)<{ theme?: Theme }>(({ theme }) => ({\n marginTop: theme.spacing(2),\n}));\n\ninterface Props {\n register: any;\n errors: FieldErrors<LoginFormValues | AddUserFormValues>;\n}\n\nconst PasswordField: FC<Props> = ({ register, errors }) => {\n const { t } = useTranslation();\n\n return (\n <StyledTextField\n autoComplete=\"current-password\"\n error={!!errors.password}\n fullWidth={true}\n // schema messages are i18n keys (inline rules are ignored when a resolver is set)\n helperText={\n errors.password?.message\n ? t(errors.password.message, { length: PASSWORD_MIN_LENGTH })\n : undefined\n }\n id=\"login--dialog-password\"\n {...register('password')}\n data-testid=\"password\"\n label={t('form.password')}\n placeholder={t('form-placeholder.password')}\n required={true}\n type=\"password\"\n variant=\"outlined\"\n />\n );\n};\n\nexport default PasswordField;\n"],"mappings":";;;;;;;;;;;AAWA,IAAM,mBAAA,GAAkB,gBAAA,QAAA,CAAO,wBAAA,OAAS,CAAC,EAAqB,EAAE,aAAa,EAC3E,WAAW,MAAM,QAAQ,CAAC,EAC5B,EAAE;AAOF,IAAM,iBAA4B,EAAE,UAAU,aAAa;CACzD,MAAM,EAAE,OAAA,GAAM,cAAA,eAAA,CAAe;CAE7B,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,iBAAD;EACE,cAAa;EACb,OAAO,CAAC,CAAC,OAAO;EAChB,WAAW;EAEX,YACE,OAAO,UAAU,UACb,EAAE,OAAO,SAAS,SAAS,EAAE,QAAA,EAA4B,CAAC,IAC1D,KAAA;EAEN,IAAG;EACH,GAAI,SAAS,UAAU;EACvB,eAAY;EACZ,OAAO,EAAE,eAAe;EACxB,aAAa,EAAE,2BAA2B;EAC1C,UAAU;EACV,MAAK;EACL,SAAQ;CACT,CAAA;AAEL"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import "../../utils/schemas.mjs";
|
|
1
2
|
import styled from "@emotion/styled";
|
|
2
3
|
import "react";
|
|
3
|
-
import { jsx } from "react/jsx-runtime";
|
|
4
4
|
import { useTranslation } from "react-i18next";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
5
6
|
import TextField from "@mui/material/TextField";
|
|
6
7
|
//#region src/components/LoginForm/PasswordField.tsx
|
|
7
8
|
var StyledTextField = styled(TextField)(({ theme }) => ({ marginTop: theme.spacing(2) }));
|
|
@@ -11,12 +12,9 @@ var PasswordField = ({ register, errors }) => {
|
|
|
11
12
|
autoComplete: "current-password",
|
|
12
13
|
error: !!errors.password,
|
|
13
14
|
fullWidth: true,
|
|
14
|
-
helperText: errors.password?.message,
|
|
15
|
+
helperText: errors.password?.message ? t(errors.password.message, { length: 2 }) : void 0,
|
|
15
16
|
id: "login--dialog-password",
|
|
16
|
-
...register("password",
|
|
17
|
-
value: true,
|
|
18
|
-
message: t("form-validation.required-field")
|
|
19
|
-
} }),
|
|
17
|
+
...register("password"),
|
|
20
18
|
"data-testid": "password",
|
|
21
19
|
label: t("form.password"),
|
|
22
20
|
placeholder: t("form-placeholder.password"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PasswordField.mjs","names":[],"sources":["../../../src/components/LoginForm/PasswordField.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport TextField from '@mui/material/TextField';\nimport type { FC } from 'react';\nimport React from 'react';\nimport type { FieldErrors } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\n\nimport type { Theme } from '../../';\nimport type { AddUserFormValues, LoginFormValues } from '../../utils/schemas';\n\nconst StyledTextField = styled(TextField)<{ theme?: Theme }>(({ theme }) => ({\n marginTop: theme.spacing(2),\n}));\n\ninterface Props {\n register: any;\n errors: FieldErrors<LoginFormValues | AddUserFormValues>;\n}\n\nconst PasswordField: FC<Props> = ({ register, errors }) => {\n const { t } = useTranslation();\n\n return (\n <StyledTextField\n autoComplete=\"current-password\"\n error={!!errors.password}\n fullWidth={true}\n helperText={errors.password?.message}\n id=\"login--dialog-password\"\n {...register('password'
|
|
1
|
+
{"version":3,"file":"PasswordField.mjs","names":[],"sources":["../../../src/components/LoginForm/PasswordField.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport TextField from '@mui/material/TextField';\nimport type { FC } from 'react';\nimport React from 'react';\nimport type { FieldErrors } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\n\nimport type { Theme } from '../../';\nimport type { AddUserFormValues, LoginFormValues } from '../../utils/schemas';\nimport { PASSWORD_MIN_LENGTH } from '../../utils/schemas';\n\nconst StyledTextField = styled(TextField)<{ theme?: Theme }>(({ theme }) => ({\n marginTop: theme.spacing(2),\n}));\n\ninterface Props {\n register: any;\n errors: FieldErrors<LoginFormValues | AddUserFormValues>;\n}\n\nconst PasswordField: FC<Props> = ({ register, errors }) => {\n const { t } = useTranslation();\n\n return (\n <StyledTextField\n autoComplete=\"current-password\"\n error={!!errors.password}\n fullWidth={true}\n // schema messages are i18n keys (inline rules are ignored when a resolver is set)\n helperText={\n errors.password?.message\n ? t(errors.password.message, { length: PASSWORD_MIN_LENGTH })\n : undefined\n }\n id=\"login--dialog-password\"\n {...register('password')}\n data-testid=\"password\"\n label={t('form.password')}\n placeholder={t('form-placeholder.password')}\n required={true}\n type=\"password\"\n variant=\"outlined\"\n />\n );\n};\n\nexport default PasswordField;\n"],"mappings":";;;;;;;AAWA,IAAM,kBAAkB,OAAO,SAAS,CAAC,EAAqB,EAAE,aAAa,EAC3E,WAAW,MAAM,QAAQ,CAAC,EAC5B,EAAE;AAOF,IAAM,iBAA4B,EAAE,UAAU,aAAa;CACzD,MAAM,EAAE,MAAM,eAAe;CAE7B,OACE,oBAAC,iBAAD;EACE,cAAa;EACb,OAAO,CAAC,CAAC,OAAO;EAChB,WAAW;EAEX,YACE,OAAO,UAAU,UACb,EAAE,OAAO,SAAS,SAAS,EAAE,QAAA,EAA4B,CAAC,IAC1D,KAAA;EAEN,IAAG;EACH,GAAI,SAAS,UAAU;EACvB,eAAY;EACZ,OAAO,EAAE,eAAe;EACxB,aAAa,EAAE,2BAA2B;EAC1C,UAAU;EACV,MAAK;EACL,SAAQ;CACT,CAAA;AAEL"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
const require_runtime = require("../../_virtual/_rolldown/runtime.js");
|
|
2
|
+
require("../../utils/schemas.js");
|
|
2
3
|
let _emotion_styled = require("@emotion/styled");
|
|
3
4
|
_emotion_styled = require_runtime.__toESM(_emotion_styled);
|
|
4
5
|
let react = require("react");
|
|
5
6
|
react = require_runtime.__toESM(react);
|
|
6
|
-
let react_jsx_runtime = require("react/jsx-runtime");
|
|
7
7
|
let react_i18next = require("react-i18next");
|
|
8
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
8
9
|
let _mui_material_TextField = require("@mui/material/TextField");
|
|
9
10
|
_mui_material_TextField = require_runtime.__toESM(_mui_material_TextField);
|
|
10
11
|
//#region src/components/LoginForm/UsernameField.tsx
|
|
@@ -15,12 +16,9 @@ var UsernameField = ({ register, errors }) => {
|
|
|
15
16
|
autoComplete: "username",
|
|
16
17
|
error: !!errors.username,
|
|
17
18
|
fullWidth: true,
|
|
18
|
-
helperText: errors.username?.message,
|
|
19
|
+
helperText: errors.username?.message ? t(errors.username.message, { length: 2 }) : void 0,
|
|
19
20
|
id: "login--dialog-username",
|
|
20
|
-
...register("username",
|
|
21
|
-
value: true,
|
|
22
|
-
message: t("form-validation.required-field")
|
|
23
|
-
} }),
|
|
21
|
+
...register("username"),
|
|
24
22
|
label: t("form.username"),
|
|
25
23
|
placeholder: t("form-placeholder.username"),
|
|
26
24
|
required: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UsernameField.js","names":[],"sources":["../../../src/components/LoginForm/UsernameField.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport TextField from '@mui/material/TextField';\nimport type { FC } from 'react';\nimport React from 'react';\nimport type { FieldErrors } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\n\nimport type { Theme } from '../../';\nimport type { AddUserFormValues, LoginFormValues } from '../../utils/schemas';\n\nconst StyledTextField = styled(TextField)<{ theme?: Theme }>(({ theme }) => ({\n marginTop: theme.spacing(2),\n}));\n\ninterface Props {\n register: any;\n errors: FieldErrors<LoginFormValues | AddUserFormValues>;\n}\n\nconst UsernameField: FC<Props> = ({ register, errors }) => {\n const { t } = useTranslation();\n\n return (\n <StyledTextField\n autoComplete=\"username\"\n error={!!errors.username}\n fullWidth={true}\n helperText={errors.username?.message}\n id=\"login--dialog-username\"\n {...register('username'
|
|
1
|
+
{"version":3,"file":"UsernameField.js","names":[],"sources":["../../../src/components/LoginForm/UsernameField.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport TextField from '@mui/material/TextField';\nimport type { FC } from 'react';\nimport React from 'react';\nimport type { FieldErrors } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\n\nimport type { Theme } from '../../';\nimport type { AddUserFormValues, LoginFormValues } from '../../utils/schemas';\nimport { USERNAME_MIN_LENGTH } from '../../utils/schemas';\n\nconst StyledTextField = styled(TextField)<{ theme?: Theme }>(({ theme }) => ({\n marginTop: theme.spacing(2),\n}));\n\ninterface Props {\n register: any;\n errors: FieldErrors<LoginFormValues | AddUserFormValues>;\n}\n\nconst UsernameField: FC<Props> = ({ register, errors }) => {\n const { t } = useTranslation();\n\n return (\n <StyledTextField\n autoComplete=\"username\"\n error={!!errors.username}\n fullWidth={true}\n // schema messages are i18n keys (inline rules are ignored when a resolver is set)\n helperText={\n errors.username?.message\n ? t(errors.username.message, { length: USERNAME_MIN_LENGTH })\n : undefined\n }\n id=\"login--dialog-username\"\n {...register('username')}\n label={t('form.username')}\n placeholder={t('form-placeholder.username')}\n required={true}\n variant=\"outlined\"\n />\n );\n};\n\nexport default UsernameField;\n"],"mappings":";;;;;;;;;;;AAWA,IAAM,mBAAA,GAAkB,gBAAA,QAAA,CAAO,wBAAA,OAAS,CAAC,EAAqB,EAAE,aAAa,EAC3E,WAAW,MAAM,QAAQ,CAAC,EAC5B,EAAE;AAOF,IAAM,iBAA4B,EAAE,UAAU,aAAa;CACzD,MAAM,EAAE,OAAA,GAAM,cAAA,eAAA,CAAe;CAE7B,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,iBAAD;EACE,cAAa;EACb,OAAO,CAAC,CAAC,OAAO;EAChB,WAAW;EAEX,YACE,OAAO,UAAU,UACb,EAAE,OAAO,SAAS,SAAS,EAAE,QAAA,EAA4B,CAAC,IAC1D,KAAA;EAEN,IAAG;EACH,GAAI,SAAS,UAAU;EACvB,OAAO,EAAE,eAAe;EACxB,aAAa,EAAE,2BAA2B;EAC1C,UAAU;EACV,SAAQ;CACT,CAAA;AAEL"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import "../../utils/schemas.mjs";
|
|
1
2
|
import styled from "@emotion/styled";
|
|
2
3
|
import "react";
|
|
3
|
-
import { jsx } from "react/jsx-runtime";
|
|
4
4
|
import { useTranslation } from "react-i18next";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
5
6
|
import TextField from "@mui/material/TextField";
|
|
6
7
|
//#region src/components/LoginForm/UsernameField.tsx
|
|
7
8
|
var StyledTextField = styled(TextField)(({ theme }) => ({ marginTop: theme.spacing(2) }));
|
|
@@ -11,12 +12,9 @@ var UsernameField = ({ register, errors }) => {
|
|
|
11
12
|
autoComplete: "username",
|
|
12
13
|
error: !!errors.username,
|
|
13
14
|
fullWidth: true,
|
|
14
|
-
helperText: errors.username?.message,
|
|
15
|
+
helperText: errors.username?.message ? t(errors.username.message, { length: 2 }) : void 0,
|
|
15
16
|
id: "login--dialog-username",
|
|
16
|
-
...register("username",
|
|
17
|
-
value: true,
|
|
18
|
-
message: t("form-validation.required-field")
|
|
19
|
-
} }),
|
|
17
|
+
...register("username"),
|
|
20
18
|
label: t("form.username"),
|
|
21
19
|
placeholder: t("form-placeholder.username"),
|
|
22
20
|
required: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UsernameField.mjs","names":[],"sources":["../../../src/components/LoginForm/UsernameField.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport TextField from '@mui/material/TextField';\nimport type { FC } from 'react';\nimport React from 'react';\nimport type { FieldErrors } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\n\nimport type { Theme } from '../../';\nimport type { AddUserFormValues, LoginFormValues } from '../../utils/schemas';\n\nconst StyledTextField = styled(TextField)<{ theme?: Theme }>(({ theme }) => ({\n marginTop: theme.spacing(2),\n}));\n\ninterface Props {\n register: any;\n errors: FieldErrors<LoginFormValues | AddUserFormValues>;\n}\n\nconst UsernameField: FC<Props> = ({ register, errors }) => {\n const { t } = useTranslation();\n\n return (\n <StyledTextField\n autoComplete=\"username\"\n error={!!errors.username}\n fullWidth={true}\n helperText={errors.username?.message}\n id=\"login--dialog-username\"\n {...register('username'
|
|
1
|
+
{"version":3,"file":"UsernameField.mjs","names":[],"sources":["../../../src/components/LoginForm/UsernameField.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport TextField from '@mui/material/TextField';\nimport type { FC } from 'react';\nimport React from 'react';\nimport type { FieldErrors } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\n\nimport type { Theme } from '../../';\nimport type { AddUserFormValues, LoginFormValues } from '../../utils/schemas';\nimport { USERNAME_MIN_LENGTH } from '../../utils/schemas';\n\nconst StyledTextField = styled(TextField)<{ theme?: Theme }>(({ theme }) => ({\n marginTop: theme.spacing(2),\n}));\n\ninterface Props {\n register: any;\n errors: FieldErrors<LoginFormValues | AddUserFormValues>;\n}\n\nconst UsernameField: FC<Props> = ({ register, errors }) => {\n const { t } = useTranslation();\n\n return (\n <StyledTextField\n autoComplete=\"username\"\n error={!!errors.username}\n fullWidth={true}\n // schema messages are i18n keys (inline rules are ignored when a resolver is set)\n helperText={\n errors.username?.message\n ? t(errors.username.message, { length: USERNAME_MIN_LENGTH })\n : undefined\n }\n id=\"login--dialog-username\"\n {...register('username')}\n label={t('form.username')}\n placeholder={t('form-placeholder.username')}\n required={true}\n variant=\"outlined\"\n />\n );\n};\n\nexport default UsernameField;\n"],"mappings":";;;;;;;AAWA,IAAM,kBAAkB,OAAO,SAAS,CAAC,EAAqB,EAAE,aAAa,EAC3E,WAAW,MAAM,QAAQ,CAAC,EAC5B,EAAE;AAOF,IAAM,iBAA4B,EAAE,UAAU,aAAa;CACzD,MAAM,EAAE,MAAM,eAAe;CAE7B,OACE,oBAAC,iBAAD;EACE,cAAa;EACb,OAAO,CAAC,CAAC,OAAO;EAChB,WAAW;EAEX,YACE,OAAO,UAAU,UACb,EAAE,OAAO,SAAS,SAAS,EAAE,QAAA,EAA4B,CAAC,IAC1D,KAAA;EAEN,IAAG;EACH,GAAI,SAAS,UAAU;EACvB,OAAO,EAAE,eAAe;EACxB,aAAa,EAAE,2BAA2B;EAC1C,UAAU;EACV,SAAQ;CACT,CAAA;AAEL"}
|
|
@@ -7,12 +7,12 @@ let _mui_material_IconButton = require("@mui/material/IconButton");
|
|
|
7
7
|
_mui_material_IconButton = require_runtime.__toESM(_mui_material_IconButton);
|
|
8
8
|
let react = require("react");
|
|
9
9
|
react = require_runtime.__toESM(react);
|
|
10
|
+
let react_i18next = require("react-i18next");
|
|
10
11
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
11
12
|
let _mui_material_Box = require("@mui/material/Box");
|
|
12
13
|
_mui_material_Box = require_runtime.__toESM(_mui_material_Box);
|
|
13
14
|
let _mui_icons_material_Close = require("@mui/icons-material/Close");
|
|
14
15
|
_mui_icons_material_Close = require_runtime.__toESM(_mui_icons_material_Close);
|
|
15
|
-
let react_i18next = require("react-i18next");
|
|
16
16
|
let _mui_material_colors = require("@mui/material/colors");
|
|
17
17
|
let _mui_material_Avatar = require("@mui/material/Avatar");
|
|
18
18
|
_mui_material_Avatar = require_runtime.__toESM(_mui_material_Avatar);
|
|
@@ -3,10 +3,10 @@ import "../../index.mjs";
|
|
|
3
3
|
import styled from "@emotion/styled";
|
|
4
4
|
import IconButton from "@mui/material/IconButton";
|
|
5
5
|
import "react";
|
|
6
|
+
import { useTranslation } from "react-i18next";
|
|
6
7
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
8
|
import Box from "@mui/material/Box";
|
|
8
9
|
import CloseIcon from "@mui/icons-material/Close";
|
|
9
|
-
import { useTranslation } from "react-i18next";
|
|
10
10
|
import { common } from "@mui/material/colors";
|
|
11
11
|
import Avatar from "@mui/material/Avatar";
|
|
12
12
|
import LockOutlined from "@mui/icons-material/LockOutlined";
|
|
@@ -1,31 +1,41 @@
|
|
|
1
|
+
const require_utils = require("../../providers/AuthProvider/utils.js");
|
|
1
2
|
const require_AuthProvider = require("../../providers/AuthProvider/AuthProvider.js");
|
|
2
3
|
require("../../providers/AuthProvider/index.js");
|
|
3
4
|
const require_schemas = require("../../utils/schemas.js");
|
|
4
5
|
let react = require("react");
|
|
6
|
+
let react_i18next = require("react-i18next");
|
|
5
7
|
let _hookform_resolvers_yup = require("@hookform/resolvers/yup");
|
|
6
8
|
let react_hook_form = require("react-hook-form");
|
|
7
9
|
//#region src/components/LoginForm/useLoginForm.ts
|
|
8
10
|
function useLoginForm({ onSuccess } = {}) {
|
|
9
11
|
const { handleLogin } = require_AuthProvider.useAuth();
|
|
12
|
+
const { t } = (0, react_i18next.useTranslation)();
|
|
10
13
|
const form = (0, react_hook_form.useForm)({
|
|
11
14
|
mode: "onChange",
|
|
12
15
|
resolver: (0, _hookform_resolvers_yup.yupResolver)(require_schemas.loginSchema)
|
|
13
16
|
});
|
|
14
17
|
const { setError } = form;
|
|
18
|
+
const inFlight = (0, react.useRef)(false);
|
|
15
19
|
const onSubmit = (0, react.useCallback)(async (data) => {
|
|
20
|
+
if (inFlight.current) return;
|
|
21
|
+
inFlight.current = true;
|
|
16
22
|
try {
|
|
17
23
|
await handleLogin?.(data);
|
|
18
24
|
onSuccess?.();
|
|
19
|
-
} catch {
|
|
25
|
+
} catch (err) {
|
|
26
|
+
const message = err?.code === 401 ? t("security.error.invalid-credentials") : require_utils.authErrorMessage(err, t("security.error.unable-to-login"));
|
|
20
27
|
setError("root", {
|
|
21
28
|
type: "server",
|
|
22
|
-
message
|
|
29
|
+
message
|
|
23
30
|
});
|
|
31
|
+
} finally {
|
|
32
|
+
inFlight.current = false;
|
|
24
33
|
}
|
|
25
34
|
}, [
|
|
26
35
|
handleLogin,
|
|
27
36
|
setError,
|
|
28
|
-
onSuccess
|
|
37
|
+
onSuccess,
|
|
38
|
+
t
|
|
29
39
|
]);
|
|
30
40
|
return {
|
|
31
41
|
...form,
|