@verdaccio/ui-components 5.0.0-next-9.20 → 5.0.0-next-9.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (274) hide show
  1. package/build/api/use-data-mutation.js +1 -4
  2. package/build/api/use-data-mutation.js.map +1 -1
  3. package/build/api/use-data-mutation.mjs +1 -4
  4. package/build/api/use-data-mutation.mjs.map +1 -1
  5. package/build/api/use-data.d.ts +1 -0
  6. package/build/api/use-data.js +3 -2
  7. package/build/api/use-data.js.map +1 -1
  8. package/build/api/use-data.mjs +3 -3
  9. package/build/api/use-data.mjs.map +1 -1
  10. package/build/components/ActionBar/ActionBar.js +4 -2
  11. package/build/components/ActionBar/ActionBar.js.map +1 -1
  12. package/build/components/ActionBar/ActionBar.mjs +4 -2
  13. package/build/components/ActionBar/ActionBar.mjs.map +1 -1
  14. package/build/components/ActionBar/ActionBarAction.js +1 -1
  15. package/build/components/ActionBar/ActionBarAction.mjs +1 -1
  16. package/build/components/Author/Author.js +1 -1
  17. package/build/components/Author/Author.mjs +1 -1
  18. package/build/components/CopyClipboard/CopyToClipBoard.js +5 -0
  19. package/build/components/CopyClipboard/CopyToClipBoard.js.map +1 -1
  20. package/build/components/CopyClipboard/CopyToClipBoard.mjs +5 -0
  21. package/build/components/CopyClipboard/CopyToClipBoard.mjs.map +1 -1
  22. package/build/components/CopyClipboard/utils.js +14 -1
  23. package/build/components/CopyClipboard/utils.js.map +1 -1
  24. package/build/components/CopyClipboard/utils.mjs +14 -1
  25. package/build/components/CopyClipboard/utils.mjs.map +1 -1
  26. package/build/components/Dependencies/Dependencies.js +2 -1
  27. package/build/components/Dependencies/Dependencies.js.map +1 -1
  28. package/build/components/Dependencies/Dependencies.mjs +2 -1
  29. package/build/components/Dependencies/Dependencies.mjs.map +1 -1
  30. package/build/components/Dependencies/DependencyBlock.js +1 -1
  31. package/build/components/Dependencies/DependencyBlock.mjs +1 -1
  32. package/build/components/Developers/Title.js +1 -1
  33. package/build/components/Developers/Title.mjs +1 -1
  34. package/build/components/Developers/get-unique-developer-values.js +2 -1
  35. package/build/components/Developers/get-unique-developer-values.js.map +1 -1
  36. package/build/components/Developers/get-unique-developer-values.mjs +2 -1
  37. package/build/components/Developers/get-unique-developer-values.mjs.map +1 -1
  38. package/build/components/Distribution/Dist.js +3 -3
  39. package/build/components/Distribution/Dist.js.map +1 -1
  40. package/build/components/Distribution/Dist.mjs +3 -3
  41. package/build/components/Distribution/Dist.mjs.map +1 -1
  42. package/build/components/Engines/Engines.js +1 -1
  43. package/build/components/Engines/Engines.mjs +1 -1
  44. package/build/components/Forbidden/Forbidden.js +1 -1
  45. package/build/components/Forbidden/Forbidden.mjs +1 -1
  46. package/build/components/FundButton/FundButton.js +4 -3
  47. package/build/components/FundButton/FundButton.js.map +1 -1
  48. package/build/components/FundButton/FundButton.mjs +4 -3
  49. package/build/components/FundButton/FundButton.mjs.map +1 -1
  50. package/build/components/GenericError/GenericError.d.ts +3 -0
  51. package/build/components/GenericError/GenericError.js +60 -0
  52. package/build/components/GenericError/GenericError.js.map +1 -0
  53. package/build/components/GenericError/GenericError.mjs +54 -0
  54. package/build/components/GenericError/GenericError.mjs.map +1 -0
  55. package/build/components/GenericError/index.d.ts +1 -0
  56. package/build/components/GenericError/index.js +2 -0
  57. package/build/components/GenericError/index.mjs +2 -0
  58. package/build/components/Help/Help.js +1 -1
  59. package/build/components/Help/Help.mjs +1 -1
  60. package/build/components/Install/Install.js +1 -1
  61. package/build/components/Install/Install.mjs +1 -1
  62. package/build/components/Install/InstallListItem.js +2 -2
  63. package/build/components/Install/InstallListItem.js.map +1 -1
  64. package/build/components/Install/InstallListItem.mjs +2 -2
  65. package/build/components/Install/InstallListItem.mjs.map +1 -1
  66. package/build/components/Keywords/KeywordListItems.js +1 -1
  67. package/build/components/Keywords/KeywordListItems.js.map +1 -1
  68. package/build/components/Keywords/KeywordListItems.mjs +1 -1
  69. package/build/components/Keywords/KeywordListItems.mjs.map +1 -1
  70. package/build/components/Keywords/Keywords.js +2 -2
  71. package/build/components/Keywords/Keywords.js.map +1 -1
  72. package/build/components/Keywords/Keywords.mjs +2 -2
  73. package/build/components/Keywords/Keywords.mjs.map +1 -1
  74. package/build/components/LoginDialog/LoginDialogCloseButton.js +1 -1
  75. package/build/components/LoginDialog/LoginDialogCloseButton.mjs +1 -1
  76. package/build/components/LoginDialog/LoginDialogForm.js +2 -1
  77. package/build/components/LoginDialog/LoginDialogForm.js.map +1 -1
  78. package/build/components/LoginDialog/LoginDialogForm.mjs +2 -1
  79. package/build/components/LoginDialog/LoginDialogForm.mjs.map +1 -1
  80. package/build/components/LoginForm/Login.d.ts +1 -0
  81. package/build/components/LoginForm/Login.js +6 -4
  82. package/build/components/LoginForm/Login.js.map +1 -1
  83. package/build/components/LoginForm/Login.mjs +9 -7
  84. package/build/components/LoginForm/Login.mjs.map +1 -1
  85. package/build/components/LoginForm/PasswordField.js +4 -6
  86. package/build/components/LoginForm/PasswordField.js.map +1 -1
  87. package/build/components/LoginForm/PasswordField.mjs +4 -6
  88. package/build/components/LoginForm/PasswordField.mjs.map +1 -1
  89. package/build/components/LoginForm/UsernameField.js +4 -6
  90. package/build/components/LoginForm/UsernameField.js.map +1 -1
  91. package/build/components/LoginForm/UsernameField.mjs +4 -6
  92. package/build/components/LoginForm/UsernameField.mjs.map +1 -1
  93. package/build/components/LoginForm/styles.js +1 -1
  94. package/build/components/LoginForm/styles.mjs +1 -1
  95. package/build/components/LoginForm/useLoginForm.js +13 -3
  96. package/build/components/LoginForm/useLoginForm.js.map +1 -1
  97. package/build/components/LoginForm/useLoginForm.mjs +14 -4
  98. package/build/components/LoginForm/useLoginForm.mjs.map +1 -1
  99. package/build/components/NoItems/NoItems.js +2 -2
  100. package/build/components/NoItems/NoItems.mjs +1 -1
  101. package/build/components/NotFound/NotFound.js +1 -1
  102. package/build/components/NotFound/NotFound.mjs +1 -1
  103. package/build/components/Package/Package.d.ts +1 -1
  104. package/build/components/Package/Package.js +28 -29
  105. package/build/components/Package/Package.js.map +1 -1
  106. package/build/components/Package/Package.mjs +29 -30
  107. package/build/components/Package/Package.mjs.map +1 -1
  108. package/build/components/Person/Person.js +1 -1
  109. package/build/components/Person/Person.js.map +1 -1
  110. package/build/components/Person/Person.mjs +1 -1
  111. package/build/components/Person/Person.mjs.map +1 -1
  112. package/build/components/RawViewer/RawViewer.js +1 -1
  113. package/build/components/RawViewer/RawViewer.mjs +1 -1
  114. package/build/components/RegistryInfoDialog/RegistryInfoDialog.js +1 -1
  115. package/build/components/RegistryInfoDialog/RegistryInfoDialog.mjs +1 -1
  116. package/build/components/Repository/Repository.js +5 -8
  117. package/build/components/Repository/Repository.js.map +1 -1
  118. package/build/components/Repository/Repository.mjs +5 -8
  119. package/build/components/Repository/Repository.mjs.map +1 -1
  120. package/build/components/Search/AutoComplete/AutoComplete.d.ts +1 -0
  121. package/build/components/Search/AutoComplete/AutoComplete.js +4 -4
  122. package/build/components/Search/AutoComplete/AutoComplete.js.map +1 -1
  123. package/build/components/Search/AutoComplete/AutoComplete.mjs +4 -4
  124. package/build/components/Search/AutoComplete/AutoComplete.mjs.map +1 -1
  125. package/build/components/Search/Search.js +12 -4
  126. package/build/components/Search/Search.js.map +1 -1
  127. package/build/components/Search/Search.mjs +13 -5
  128. package/build/components/Search/Search.mjs.map +1 -1
  129. package/build/components/Search/SearchItem.js +1 -1
  130. package/build/components/Search/SearchItem.mjs +1 -1
  131. package/build/components/SettingsMenu/SettingsMenu.js +1 -1
  132. package/build/components/SettingsMenu/SettingsMenu.mjs +1 -1
  133. package/build/components/SideBarTitle/SideBarTitle.js +2 -2
  134. package/build/components/SideBarTitle/SideBarTitle.js.map +1 -1
  135. package/build/components/SideBarTitle/SideBarTitle.mjs +2 -2
  136. package/build/components/SideBarTitle/SideBarTitle.mjs.map +1 -1
  137. package/build/components/UpLinks/UpLinks.js +1 -1
  138. package/build/components/UpLinks/UpLinks.mjs +1 -1
  139. package/build/components/Versions/HistoryList.js +2 -2
  140. package/build/components/Versions/HistoryList.js.map +1 -1
  141. package/build/components/Versions/HistoryList.mjs +2 -2
  142. package/build/components/Versions/HistoryList.mjs.map +1 -1
  143. package/build/components/Versions/Versions.js +22 -21
  144. package/build/components/Versions/Versions.js.map +1 -1
  145. package/build/components/Versions/Versions.mjs +22 -21
  146. package/build/components/Versions/Versions.mjs.map +1 -1
  147. package/build/index.d.ts +1 -0
  148. package/build/index.js +4 -0
  149. package/build/index.mjs +4 -2
  150. package/build/pages/Version/Version.js +4 -1
  151. package/build/pages/Version/Version.js.map +1 -1
  152. package/build/pages/Version/Version.mjs +4 -1
  153. package/build/pages/Version/Version.mjs.map +1 -1
  154. package/build/providers/AuthProvider/AuthProvider.js +9 -7
  155. package/build/providers/AuthProvider/AuthProvider.js.map +1 -1
  156. package/build/providers/AuthProvider/AuthProvider.mjs +10 -8
  157. package/build/providers/AuthProvider/AuthProvider.mjs.map +1 -1
  158. package/build/providers/AuthProvider/utils.d.ts +12 -0
  159. package/build/providers/AuthProvider/utils.js +22 -0
  160. package/build/providers/AuthProvider/utils.js.map +1 -1
  161. package/build/providers/AuthProvider/utils.mjs +21 -2
  162. package/build/providers/AuthProvider/utils.mjs.map +1 -1
  163. package/build/providers/DownloadProvider/DownloadProvider.d.ts +1 -0
  164. package/build/providers/DownloadProvider/DownloadProvider.js +27 -4
  165. package/build/providers/DownloadProvider/DownloadProvider.js.map +1 -1
  166. package/build/providers/DownloadProvider/DownloadProvider.mjs +27 -6
  167. package/build/providers/DownloadProvider/DownloadProvider.mjs.map +1 -1
  168. package/build/providers/ManifestsProvider/ManifestsProvider.js +1 -1
  169. package/build/providers/ManifestsProvider/ManifestsProvider.js.map +1 -1
  170. package/build/providers/ManifestsProvider/ManifestsProvider.mjs +1 -1
  171. package/build/providers/ManifestsProvider/ManifestsProvider.mjs.map +1 -1
  172. package/build/providers/SearchProvider/SearchProvider.d.ts +1 -0
  173. package/build/providers/SearchProvider/SearchProvider.js +8 -6
  174. package/build/providers/SearchProvider/SearchProvider.js.map +1 -1
  175. package/build/providers/SearchProvider/SearchProvider.mjs +8 -6
  176. package/build/providers/SearchProvider/SearchProvider.mjs.map +1 -1
  177. package/build/providers/TranslatorProvider/TranslatorProvider.js +5 -3
  178. package/build/providers/TranslatorProvider/TranslatorProvider.js.map +1 -1
  179. package/build/providers/TranslatorProvider/TranslatorProvider.mjs +5 -3
  180. package/build/providers/TranslatorProvider/TranslatorProvider.mjs.map +1 -1
  181. package/build/providers/VersionProvider/VersionProvider.js +3 -3
  182. package/build/providers/VersionProvider/VersionProvider.js.map +1 -1
  183. package/build/providers/VersionProvider/VersionProvider.mjs +3 -3
  184. package/build/providers/VersionProvider/VersionProvider.mjs.map +1 -1
  185. package/build/sections/Detail/Tabs.js +1 -1
  186. package/build/sections/Detail/Tabs.mjs +1 -1
  187. package/build/sections/Footer/Footer.js +1 -1
  188. package/build/sections/Footer/Footer.mjs +1 -1
  189. package/build/sections/Header/Header.d.ts +0 -1
  190. package/build/sections/Header/Header.js +16 -14
  191. package/build/sections/Header/Header.js.map +1 -1
  192. package/build/sections/Header/Header.mjs +17 -15
  193. package/build/sections/Header/Header.mjs.map +1 -1
  194. package/build/sections/Header/HeaderGreetings.js +1 -1
  195. package/build/sections/Header/HeaderGreetings.mjs +1 -1
  196. package/build/sections/Header/HeaderMenu.js +1 -1
  197. package/build/sections/Header/HeaderMenu.mjs +1 -1
  198. package/build/sections/Header/HeaderRight.js +1 -1
  199. package/build/sections/Header/HeaderRight.mjs +1 -1
  200. package/build/sections/Header/HeaderSettingsDialog.js +1 -1
  201. package/build/sections/Header/HeaderSettingsDialog.mjs +1 -1
  202. package/build/sections/Header/LanguageSwitch.js +1 -1
  203. package/build/sections/Header/LanguageSwitch.mjs +1 -1
  204. package/build/sections/Header/RegistryInfoContent/RegistryInfoContent.js +1 -1
  205. package/build/sections/Header/RegistryInfoContent/RegistryInfoContent.mjs +1 -1
  206. package/build/sections/Home/Home.js +4 -3
  207. package/build/sections/Home/Home.js.map +1 -1
  208. package/build/sections/Home/Home.mjs +5 -4
  209. package/build/sections/Home/Home.mjs.map +1 -1
  210. package/build/sections/Security/AddUser.js +33 -18
  211. package/build/sections/Security/AddUser.js.map +1 -1
  212. package/build/sections/Security/AddUser.mjs +37 -22
  213. package/build/sections/Security/AddUser.mjs.map +1 -1
  214. package/build/sections/Security/ChangePassword.js +17 -15
  215. package/build/sections/Security/ChangePassword.js.map +1 -1
  216. package/build/sections/Security/ChangePassword.mjs +19 -17
  217. package/build/sections/Security/ChangePassword.mjs.map +1 -1
  218. package/build/sections/Security/Login.js +51 -35
  219. package/build/sections/Security/Login.js.map +1 -1
  220. package/build/sections/Security/Login.mjs +54 -38
  221. package/build/sections/Security/Login.mjs.map +1 -1
  222. package/build/sections/Security/Success.js +28 -24
  223. package/build/sections/Security/Success.js.map +1 -1
  224. package/build/sections/Security/Success.mjs +29 -25
  225. package/build/sections/Security/Success.mjs.map +1 -1
  226. package/build/sections/Stage/StageActions.js +1 -1
  227. package/build/sections/Stage/StageActions.mjs +1 -1
  228. package/build/sections/Stage/StageDetail.js +1 -1
  229. package/build/sections/Stage/StageDetail.mjs +1 -1
  230. package/build/sections/Stage/StageList.js +15 -2
  231. package/build/sections/Stage/StageList.js.map +1 -1
  232. package/build/sections/Stage/StageList.mjs +15 -2
  233. package/build/sections/Stage/StageList.mjs.map +1 -1
  234. package/build/store/api.js +7 -4
  235. package/build/store/api.js.map +1 -1
  236. package/build/store/api.mjs +7 -4
  237. package/build/store/api.mjs.map +1 -1
  238. package/build/types/packageMeta.d.ts +3 -2
  239. package/build/utils/cli-utils.js +2 -2
  240. package/build/utils/cli-utils.js.map +1 -1
  241. package/build/utils/cli-utils.mjs +2 -2
  242. package/build/utils/cli-utils.mjs.map +1 -1
  243. package/build/utils/index.js +1 -0
  244. package/build/utils/index.mjs +2 -2
  245. package/build/utils/routes.d.ts +1 -0
  246. package/build/utils/routes.js +1 -0
  247. package/build/utils/routes.js.map +1 -1
  248. package/build/utils/routes.mjs +1 -0
  249. package/build/utils/routes.mjs.map +1 -1
  250. package/build/utils/schemas.d.ts +1 -0
  251. package/build/utils/schemas.js +4 -4
  252. package/build/utils/schemas.js.map +1 -1
  253. package/build/utils/schemas.mjs +4 -4
  254. package/build/utils/schemas.mjs.map +1 -1
  255. package/build/utils/session-id.d.ts +8 -0
  256. package/build/utils/session-id.js +26 -0
  257. package/build/utils/session-id.js.map +1 -0
  258. package/build/utils/session-id.mjs +26 -0
  259. package/build/utils/session-id.mjs.map +1 -0
  260. package/build/utils/token.d.ts +1 -0
  261. package/build/utils/token.js +12 -8
  262. package/build/utils/token.js.map +1 -1
  263. package/build/utils/token.mjs +12 -9
  264. package/build/utils/token.mjs.map +1 -1
  265. package/build/utils/url.js +1 -1
  266. package/build/utils/url.js.map +1 -1
  267. package/build/utils/url.mjs +1 -1
  268. package/build/utils/url.mjs.map +1 -1
  269. package/build/utils/utils.d.ts +10 -0
  270. package/build/utils/utils.js +26 -0
  271. package/build/utils/utils.js.map +1 -1
  272. package/build/utils/utils.mjs +25 -1
  273. package/build/utils/utils.mjs.map +1 -1
  274. package/package.json +6 -6
@@ -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;CAE9B,IAAI,CAAC,aAAa,QAAQ,UACxB,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"}
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,UACtB,aACE,qBAAA,aAAa;CACjB,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAA,SAAD;EACU;EACM;EACL;EACC;EACA;CACX,CAAA;AAEL"}
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,UACtB,aACE,aAAa;CACjB,OACE,oBAAC,WAAD;EACU;EACM;EACL;EACC;EACA;CACX,CAAA;AAEL"}
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"}
@@ -10,6 +10,7 @@ interface Props {
10
10
  onSubmit: (data: LoginFormValues) => void;
11
11
  errors: FieldErrors<LoginFormValues>;
12
12
  isValid: boolean;
13
+ isSubmitting?: boolean;
13
14
  }
14
15
  declare const LoginForm: FC<Props>;
15
16
  export default LoginForm;
@@ -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
- href: require_routes.Route.CHANGE_PASSWORD,
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> = ({ register, handleSubmit, onSubmit, errors, isValid }) => {\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 disabled={!isValid}\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 href={Route.CHANGE_PASSWORD} sx={{ ml: 1 }}>\n {t('security.changePassword.title')}\n </Link>\n </Typography>\n )}\n </StyledForm>\n );\n};\n\nexport default LoginForm;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAgBA,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;AAeF,IAAM,aAAwB,EAAE,UAAU,cAAc,UAAU,QAAQ,cAAc;CACtF,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;IACZ,UAAU,CAAC;IACX,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,MAAM,eAAA,MAAM;KAAiB,IAAI,EAAE,IAAI,EAAE;KAC5C,UAAA,EAAE,+BAA+B;IAC9B,CAAA;GACI,CAAA;EAEJ;;AAEhB"}
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 Link from "@mui/material/Link";
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
- href: Route.CHANGE_PASSWORD,
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> = ({ register, handleSubmit, onSubmit, errors, isValid }) => {\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 disabled={!isValid}\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 href={Route.CHANGE_PASSWORD} sx={{ ml: 1 }}>\n {t('security.changePassword.title')}\n </Link>\n </Typography>\n )}\n </StyledForm>\n );\n};\n\nexport default LoginForm;\n"],"mappings":";;;;;;;;;;;;;;AAgBA,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;AAeF,IAAM,aAAwB,EAAE,UAAU,cAAc,UAAU,QAAQ,cAAc;CACtF,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;IACZ,UAAU,CAAC;IACX,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,MAAD;KAAM,MAAM,MAAM;KAAiB,IAAI,EAAE,IAAI,EAAE;KAC5C,UAAA,EAAE,+BAA+B;IAC9B,CAAA;GACI,CAAA;EAEJ;;AAEhB"}
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", { required: {
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', {\n required: { value: true, message: t('form-validation.required-field') },\n })}\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":";;;;;;;;;;AAUA,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;EACX,YAAY,OAAO,UAAU;EAC7B,IAAG;EACH,GAAI,SAAS,YAAY,EACvB,UAAU;GAAE,OAAO;GAAM,SAAS,EAAE,gCAAgC;EAAE,EACxE,CAAC;EACD,eAAY;EACZ,OAAO,EAAE,eAAe;EACxB,aAAa,EAAE,2BAA2B;EAC1C,UAAU;EACV,MAAK;EACL,SAAQ;CACT,CAAA;AAEL"}
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", { required: {
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', {\n required: { value: true, message: t('form-validation.required-field') },\n })}\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":";;;;;;AAUA,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;EACX,YAAY,OAAO,UAAU;EAC7B,IAAG;EACH,GAAI,SAAS,YAAY,EACvB,UAAU;GAAE,OAAO;GAAM,SAAS,EAAE,gCAAgC;EAAE,EACxE,CAAC;EACD,eAAY;EACZ,OAAO,EAAE,eAAe;EACxB,aAAa,EAAE,2BAA2B;EAC1C,UAAU;EACV,MAAK;EACL,SAAQ;CACT,CAAA;AAEL"}
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", { required: {
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', {\n required: { value: true, message: t('form-validation.required-field') },\n })}\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":";;;;;;;;;;AAUA,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;EACX,YAAY,OAAO,UAAU;EAC7B,IAAG;EACH,GAAI,SAAS,YAAY,EACvB,UAAU;GAAE,OAAO;GAAM,SAAS,EAAE,gCAAgC;EAAE,EACxE,CAAC;EACD,OAAO,EAAE,eAAe;EACxB,aAAa,EAAE,2BAA2B;EAC1C,UAAU;EACV,SAAQ;CACT,CAAA;AAEL"}
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", { required: {
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', {\n required: { value: true, message: t('form-validation.required-field') },\n })}\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":";;;;;;AAUA,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;EACX,YAAY,OAAO,UAAU;EAC7B,IAAG;EACH,GAAI,SAAS,YAAY,EACvB,UAAU;GAAE,OAAO;GAAM,SAAS,EAAE,gCAAgC;EAAE,EACxE,CAAC;EACD,OAAO,EAAE,eAAe;EACxB,aAAa,EAAE,2BAA2B;EAC1C,UAAU;EACV,SAAQ;CACT,CAAA;AAEL"}
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: "Invalid username or password"
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,
@@ -1 +1 @@
1
- {"version":3,"file":"useLoginForm.js","names":[],"sources":["../../../src/components/LoginForm/useLoginForm.ts"],"sourcesContent":["import { yupResolver } from '@hookform/resolvers/yup';\nimport { useCallback } from 'react';\nimport { type UseFormReturn, useForm } from 'react-hook-form';\n\nimport { useAuth } from '../../providers/AuthProvider';\nimport type { LoginFormValues } from '../../utils/schemas';\nimport { loginSchema } from '../../utils/schemas';\n\ntype Options = {\n onSuccess?: () => void;\n};\n\nexport function useLoginForm({ onSuccess }: Options = {}): UseFormReturn<LoginFormValues> & {\n onSubmit: (data: LoginFormValues) => Promise<void>;\n} {\n const { handleLogin } = useAuth();\n\n const form = useForm<LoginFormValues>({\n mode: 'onChange',\n resolver: yupResolver(loginSchema),\n });\n\n const { setError } = form;\n\n const onSubmit = useCallback(\n async (data: LoginFormValues) => {\n try {\n await handleLogin?.(data);\n onSuccess?.();\n } catch {\n setError('root', {\n type: 'server',\n // TODO: add translation key\n message: 'Invalid username or password',\n });\n }\n },\n [handleLogin, setError, onSuccess]\n );\n\n return {\n ...form,\n onSubmit,\n };\n}\n"],"mappings":";;;;;;;AAYA,SAAgB,aAAa,EAAE,cAAuB,CAAC,GAErD;CACA,MAAM,EAAE,gBAAgB,qBAAA,QAAQ;CAEhC,MAAM,QAAA,GAAO,gBAAA,QAAA,CAAyB;EACpC,MAAM;EACN,WAAA,GAAU,wBAAA,YAAA,CAAY,gBAAA,WAAW;CACnC,CAAC;CAED,MAAM,EAAE,aAAa;CAErB,MAAM,YAAA,GAAW,MAAA,YAAA,CACf,OAAO,SAA0B;EAC/B,IAAI;GACF,MAAM,cAAc,IAAI;GACxB,YAAY;EACd,QAAQ;GACN,SAAS,QAAQ;IACf,MAAM;IAEN,SAAS;GACX,CAAC;EACH;CACF,GACA;EAAC;EAAa;EAAU;CAAS,CACnC;CAEA,OAAO;EACL,GAAG;EACH;CACF;AACF"}
1
+ {"version":3,"file":"useLoginForm.js","names":[],"sources":["../../../src/components/LoginForm/useLoginForm.ts"],"sourcesContent":["import { yupResolver } from '@hookform/resolvers/yup';\nimport { useCallback, useRef } from 'react';\nimport { type UseFormReturn, useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\n\nimport { useAuth } from '../../providers/AuthProvider';\nimport { authErrorMessage } from '../../providers/AuthProvider/utils';\nimport type { LoginFormValues } from '../../utils/schemas';\nimport { loginSchema } from '../../utils/schemas';\n\ntype Options = {\n onSuccess?: () => void;\n};\n\nexport function useLoginForm({ onSuccess }: Options = {}): UseFormReturn<LoginFormValues> & {\n onSubmit: (data: LoginFormValues) => Promise<void>;\n} {\n const { handleLogin } = useAuth();\n const { t } = useTranslation();\n\n const form = useForm<LoginFormValues>({\n mode: 'onChange',\n resolver: yupResolver(loginSchema),\n });\n\n const { setError } = form;\n\n // `disabled={isSubmitting}` only applies after a re-render; clicks landing in\n // the same React batch would still fire duplicate requests\n const inFlight = useRef(false);\n\n const onSubmit = useCallback(\n async (data: LoginFormValues) => {\n if (inFlight.current) {\n return;\n }\n inFlight.current = true;\n try {\n await handleLogin?.(data);\n onSuccess?.();\n } catch (err: any) {\n // only a 401 means wrong credentials; a dead server, 500 or 429 must\n // not claim the credentials were invalid\n const message =\n err?.code === 401\n ? t('security.error.invalid-credentials')\n : authErrorMessage(err, t('security.error.unable-to-login'));\n setError('root', { type: 'server', message });\n } finally {\n inFlight.current = false;\n }\n },\n [handleLogin, setError, onSuccess, t]\n );\n\n return {\n ...form,\n onSubmit,\n };\n}\n"],"mappings":";;;;;;;;;AAcA,SAAgB,aAAa,EAAE,cAAuB,CAAC,GAErD;CACA,MAAM,EAAE,gBAAgB,qBAAA,QAAQ;CAChC,MAAM,EAAE,OAAA,GAAM,cAAA,eAAA,CAAe;CAE7B,MAAM,QAAA,GAAO,gBAAA,QAAA,CAAyB;EACpC,MAAM;EACN,WAAA,GAAU,wBAAA,YAAA,CAAY,gBAAA,WAAW;CACnC,CAAC;CAED,MAAM,EAAE,aAAa;CAIrB,MAAM,YAAA,GAAW,MAAA,OAAA,CAAO,KAAK;CAE7B,MAAM,YAAA,GAAW,MAAA,YAAA,CACf,OAAO,SAA0B;EAC/B,IAAI,SAAS,SACX;EAEF,SAAS,UAAU;EACnB,IAAI;GACF,MAAM,cAAc,IAAI;GACxB,YAAY;EACd,SAAS,KAAU;GAGjB,MAAM,UACJ,KAAK,SAAS,MACV,EAAE,oCAAoC,IACtC,cAAA,iBAAiB,KAAK,EAAE,gCAAgC,CAAC;GAC/D,SAAS,QAAQ;IAAE,MAAM;IAAU;GAAQ,CAAC;EAC9C,UAAU;GACR,SAAS,UAAU;EACrB;CACF,GACA;EAAC;EAAa;EAAU;EAAW;CAAC,CACtC;CAEA,OAAO;EACL,GAAG;EACH;CACF;AACF"}
@@ -1,31 +1,41 @@
1
+ import { authErrorMessage } from "../../providers/AuthProvider/utils.mjs";
1
2
  import { useAuth } from "../../providers/AuthProvider/AuthProvider.mjs";
2
3
  import "../../providers/AuthProvider/index.mjs";
3
4
  import { loginSchema } from "../../utils/schemas.mjs";
4
- import { useCallback } from "react";
5
+ import { useCallback, useRef } from "react";
6
+ import { useTranslation } from "react-i18next";
5
7
  import { yupResolver } from "@hookform/resolvers/yup";
6
8
  import { useForm } from "react-hook-form";
7
9
  //#region src/components/LoginForm/useLoginForm.ts
8
10
  function useLoginForm({ onSuccess } = {}) {
9
11
  const { handleLogin } = useAuth();
12
+ const { t } = useTranslation();
10
13
  const form = useForm({
11
14
  mode: "onChange",
12
15
  resolver: yupResolver(loginSchema)
13
16
  });
14
17
  const { setError } = form;
18
+ const inFlight = useRef(false);
15
19
  const onSubmit = 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") : authErrorMessage(err, t("security.error.unable-to-login"));
20
27
  setError("root", {
21
28
  type: "server",
22
- message: "Invalid username or password"
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,
@@ -1 +1 @@
1
- {"version":3,"file":"useLoginForm.mjs","names":[],"sources":["../../../src/components/LoginForm/useLoginForm.ts"],"sourcesContent":["import { yupResolver } from '@hookform/resolvers/yup';\nimport { useCallback } from 'react';\nimport { type UseFormReturn, useForm } from 'react-hook-form';\n\nimport { useAuth } from '../../providers/AuthProvider';\nimport type { LoginFormValues } from '../../utils/schemas';\nimport { loginSchema } from '../../utils/schemas';\n\ntype Options = {\n onSuccess?: () => void;\n};\n\nexport function useLoginForm({ onSuccess }: Options = {}): UseFormReturn<LoginFormValues> & {\n onSubmit: (data: LoginFormValues) => Promise<void>;\n} {\n const { handleLogin } = useAuth();\n\n const form = useForm<LoginFormValues>({\n mode: 'onChange',\n resolver: yupResolver(loginSchema),\n });\n\n const { setError } = form;\n\n const onSubmit = useCallback(\n async (data: LoginFormValues) => {\n try {\n await handleLogin?.(data);\n onSuccess?.();\n } catch {\n setError('root', {\n type: 'server',\n // TODO: add translation key\n message: 'Invalid username or password',\n });\n }\n },\n [handleLogin, setError, onSuccess]\n );\n\n return {\n ...form,\n onSubmit,\n };\n}\n"],"mappings":";;;;;;;AAYA,SAAgB,aAAa,EAAE,cAAuB,CAAC,GAErD;CACA,MAAM,EAAE,gBAAgB,QAAQ;CAEhC,MAAM,OAAO,QAAyB;EACpC,MAAM;EACN,UAAU,YAAY,WAAW;CACnC,CAAC;CAED,MAAM,EAAE,aAAa;CAErB,MAAM,WAAW,YACf,OAAO,SAA0B;EAC/B,IAAI;GACF,MAAM,cAAc,IAAI;GACxB,YAAY;EACd,QAAQ;GACN,SAAS,QAAQ;IACf,MAAM;IAEN,SAAS;GACX,CAAC;EACH;CACF,GACA;EAAC;EAAa;EAAU;CAAS,CACnC;CAEA,OAAO;EACL,GAAG;EACH;CACF;AACF"}
1
+ {"version":3,"file":"useLoginForm.mjs","names":[],"sources":["../../../src/components/LoginForm/useLoginForm.ts"],"sourcesContent":["import { yupResolver } from '@hookform/resolvers/yup';\nimport { useCallback, useRef } from 'react';\nimport { type UseFormReturn, useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\n\nimport { useAuth } from '../../providers/AuthProvider';\nimport { authErrorMessage } from '../../providers/AuthProvider/utils';\nimport type { LoginFormValues } from '../../utils/schemas';\nimport { loginSchema } from '../../utils/schemas';\n\ntype Options = {\n onSuccess?: () => void;\n};\n\nexport function useLoginForm({ onSuccess }: Options = {}): UseFormReturn<LoginFormValues> & {\n onSubmit: (data: LoginFormValues) => Promise<void>;\n} {\n const { handleLogin } = useAuth();\n const { t } = useTranslation();\n\n const form = useForm<LoginFormValues>({\n mode: 'onChange',\n resolver: yupResolver(loginSchema),\n });\n\n const { setError } = form;\n\n // `disabled={isSubmitting}` only applies after a re-render; clicks landing in\n // the same React batch would still fire duplicate requests\n const inFlight = useRef(false);\n\n const onSubmit = useCallback(\n async (data: LoginFormValues) => {\n if (inFlight.current) {\n return;\n }\n inFlight.current = true;\n try {\n await handleLogin?.(data);\n onSuccess?.();\n } catch (err: any) {\n // only a 401 means wrong credentials; a dead server, 500 or 429 must\n // not claim the credentials were invalid\n const message =\n err?.code === 401\n ? t('security.error.invalid-credentials')\n : authErrorMessage(err, t('security.error.unable-to-login'));\n setError('root', { type: 'server', message });\n } finally {\n inFlight.current = false;\n }\n },\n [handleLogin, setError, onSuccess, t]\n );\n\n return {\n ...form,\n onSubmit,\n };\n}\n"],"mappings":";;;;;;;;;AAcA,SAAgB,aAAa,EAAE,cAAuB,CAAC,GAErD;CACA,MAAM,EAAE,gBAAgB,QAAQ;CAChC,MAAM,EAAE,MAAM,eAAe;CAE7B,MAAM,OAAO,QAAyB;EACpC,MAAM;EACN,UAAU,YAAY,WAAW;CACnC,CAAC;CAED,MAAM,EAAE,aAAa;CAIrB,MAAM,WAAW,OAAO,KAAK;CAE7B,MAAM,WAAW,YACf,OAAO,SAA0B;EAC/B,IAAI,SAAS,SACX;EAEF,SAAS,UAAU;EACnB,IAAI;GACF,MAAM,cAAc,IAAI;GACxB,YAAY;EACd,SAAS,KAAU;GAGjB,MAAM,UACJ,KAAK,SAAS,MACV,EAAE,oCAAoC,IACtC,iBAAiB,KAAK,EAAE,gCAAgC,CAAC;GAC/D,SAAS,QAAQ;IAAE,MAAM;IAAU;GAAQ,CAAC;EAC9C,UAAU;GACR,SAAS,UAAU;EACrB;CACF,GACA;EAAC;EAAa;EAAU;EAAW;CAAC,CACtC;CAEA,OAAO;EACL,GAAG;EACH;CACF;AACF"}
@@ -2,10 +2,10 @@ const require_runtime = require("../../_virtual/_rolldown/runtime.js");
2
2
  let react = require("react");
3
3
  react = require_runtime.__toESM(react);
4
4
  let react_jsx_runtime = require("react/jsx-runtime");
5
- let _mui_material_Typography = require("@mui/material/Typography");
6
- _mui_material_Typography = require_runtime.__toESM(_mui_material_Typography);
7
5
  let _mui_material_Alert = require("@mui/material/Alert");
8
6
  _mui_material_Alert = require_runtime.__toESM(_mui_material_Alert);
7
+ let _mui_material_Typography = require("@mui/material/Typography");
8
+ _mui_material_Typography = require_runtime.__toESM(_mui_material_Typography);
9
9
  //#region src/components/NoItems/NoItems.tsx
10
10
  var NoItems = ({ text, ...props }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material_Alert.default, {
11
11
  severity: "info",
@@ -1,7 +1,7 @@
1
1
  import "react";
2
2
  import { jsx } from "react/jsx-runtime";
3
- import Typography from "@mui/material/Typography";
4
3
  import Alert from "@mui/material/Alert";
4
+ import Typography from "@mui/material/Typography";
5
5
  //#region src/components/NoItems/NoItems.tsx
6
6
  var NoItems = ({ text, ...props }) => /* @__PURE__ */ jsx(Alert, {
7
7
  severity: "info",
@@ -5,10 +5,10 @@ let _emotion_styled = require("@emotion/styled");
5
5
  _emotion_styled = require_runtime.__toESM(_emotion_styled);
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_material_Box = require("@mui/material/Box");
10
11
  _mui_material_Box = require_runtime.__toESM(_mui_material_Box);
11
- let react_i18next = require("react-i18next");
12
12
  let _mui_material_colors = require("@mui/material/colors");
13
13
  let react_router = require("react-router");
14
14
  let _mui_material_Button = require("@mui/material/Button");
@@ -2,9 +2,9 @@ import Heading from "../Heading/Heading.mjs";
2
2
  import "../Heading/index.mjs";
3
3
  import styled from "@emotion/styled";
4
4
  import { useCallback } from "react";
5
+ import { useTranslation } from "react-i18next";
5
6
  import { jsx, jsxs } from "react/jsx-runtime";
6
7
  import Box from "@mui/material/Box";
7
- import { useTranslation } from "react-i18next";
8
8
  import { common } from "@mui/material/colors";
9
9
  import { useNavigate } from "react-router";
10
10
  import Button from "@mui/material/Button";
@@ -17,7 +17,7 @@ export interface PackageInterface {
17
17
  keywords?: PackageMetaInterface['latest']['keywords'];
18
18
  license?: PackageMetaInterface['latest']['license'];
19
19
  homepage?: string;
20
- bugs?: Bugs;
20
+ bugs?: Bugs | string;
21
21
  dist?: Dist;
22
22
  showDownload?: boolean;
23
23
  }