@verdaccio/ui-components 5.0.0-next-9.25 → 5.0.0-next-9.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/build/components/Help/Help.js +103 -66
  2. package/build/components/Help/Help.js.map +1 -1
  3. package/build/components/Help/Help.mjs +103 -66
  4. package/build/components/Help/Help.mjs.map +1 -1
  5. package/build/i18n/crowdin/ui.js +3 -1
  6. package/build/i18n/crowdin/ui.js.map +1 -1
  7. package/build/i18n/crowdin/ui.json +3 -1
  8. package/build/i18n/crowdin/ui.mjs +3 -1
  9. package/build/i18n/crowdin/ui.mjs.map +1 -1
  10. package/build/i18n/download_translations/cs-CZ/ui.js +3 -1
  11. package/build/i18n/download_translations/cs-CZ/ui.js.map +1 -1
  12. package/build/i18n/download_translations/cs-CZ/ui.json +3 -1
  13. package/build/i18n/download_translations/cs-CZ/ui.mjs +3 -1
  14. package/build/i18n/download_translations/cs-CZ/ui.mjs.map +1 -1
  15. package/build/i18n/download_translations/de-DE/ui.js +3 -1
  16. package/build/i18n/download_translations/de-DE/ui.js.map +1 -1
  17. package/build/i18n/download_translations/de-DE/ui.json +3 -1
  18. package/build/i18n/download_translations/de-DE/ui.mjs +3 -1
  19. package/build/i18n/download_translations/de-DE/ui.mjs.map +1 -1
  20. package/build/i18n/download_translations/es-ES/ui.js +3 -1
  21. package/build/i18n/download_translations/es-ES/ui.js.map +1 -1
  22. package/build/i18n/download_translations/es-ES/ui.json +3 -1
  23. package/build/i18n/download_translations/es-ES/ui.mjs +3 -1
  24. package/build/i18n/download_translations/es-ES/ui.mjs.map +1 -1
  25. package/build/i18n/download_translations/fr-FR/ui.js +3 -1
  26. package/build/i18n/download_translations/fr-FR/ui.js.map +1 -1
  27. package/build/i18n/download_translations/fr-FR/ui.json +3 -1
  28. package/build/i18n/download_translations/fr-FR/ui.mjs +3 -1
  29. package/build/i18n/download_translations/fr-FR/ui.mjs.map +1 -1
  30. package/build/i18n/download_translations/ga-IE/ui.js +3 -1
  31. package/build/i18n/download_translations/ga-IE/ui.js.map +1 -1
  32. package/build/i18n/download_translations/ga-IE/ui.json +3 -1
  33. package/build/i18n/download_translations/ga-IE/ui.mjs +3 -1
  34. package/build/i18n/download_translations/ga-IE/ui.mjs.map +1 -1
  35. package/build/i18n/download_translations/gl-ES/ui.js +3 -1
  36. package/build/i18n/download_translations/gl-ES/ui.js.map +1 -1
  37. package/build/i18n/download_translations/gl-ES/ui.json +3 -1
  38. package/build/i18n/download_translations/gl-ES/ui.mjs +3 -1
  39. package/build/i18n/download_translations/gl-ES/ui.mjs.map +1 -1
  40. package/build/i18n/download_translations/it-IT/ui.js +3 -1
  41. package/build/i18n/download_translations/it-IT/ui.js.map +1 -1
  42. package/build/i18n/download_translations/it-IT/ui.json +3 -1
  43. package/build/i18n/download_translations/it-IT/ui.mjs +3 -1
  44. package/build/i18n/download_translations/it-IT/ui.mjs.map +1 -1
  45. package/build/i18n/download_translations/ko-KR/ui.js +3 -1
  46. package/build/i18n/download_translations/ko-KR/ui.js.map +1 -1
  47. package/build/i18n/download_translations/ko-KR/ui.json +3 -1
  48. package/build/i18n/download_translations/ko-KR/ui.mjs +3 -1
  49. package/build/i18n/download_translations/ko-KR/ui.mjs.map +1 -1
  50. package/build/i18n/download_translations/pl-PL/ui.js +3 -1
  51. package/build/i18n/download_translations/pl-PL/ui.js.map +1 -1
  52. package/build/i18n/download_translations/pl-PL/ui.json +3 -1
  53. package/build/i18n/download_translations/pl-PL/ui.mjs +3 -1
  54. package/build/i18n/download_translations/pl-PL/ui.mjs.map +1 -1
  55. package/build/i18n/download_translations/pt-BR/ui.js +3 -1
  56. package/build/i18n/download_translations/pt-BR/ui.js.map +1 -1
  57. package/build/i18n/download_translations/pt-BR/ui.json +3 -1
  58. package/build/i18n/download_translations/pt-BR/ui.mjs +3 -1
  59. package/build/i18n/download_translations/pt-BR/ui.mjs.map +1 -1
  60. package/build/i18n/download_translations/ru-RU/ui.js +3 -1
  61. package/build/i18n/download_translations/ru-RU/ui.js.map +1 -1
  62. package/build/i18n/download_translations/ru-RU/ui.json +3 -1
  63. package/build/i18n/download_translations/ru-RU/ui.mjs +3 -1
  64. package/build/i18n/download_translations/ru-RU/ui.mjs.map +1 -1
  65. package/build/i18n/download_translations/sr-CS/ui.js +3 -1
  66. package/build/i18n/download_translations/sr-CS/ui.js.map +1 -1
  67. package/build/i18n/download_translations/sr-CS/ui.json +3 -1
  68. package/build/i18n/download_translations/sr-CS/ui.mjs +3 -1
  69. package/build/i18n/download_translations/sr-CS/ui.mjs.map +1 -1
  70. package/build/i18n/download_translations/tr-TR/ui.js +3 -1
  71. package/build/i18n/download_translations/tr-TR/ui.js.map +1 -1
  72. package/build/i18n/download_translations/tr-TR/ui.json +3 -1
  73. package/build/i18n/download_translations/tr-TR/ui.mjs +3 -1
  74. package/build/i18n/download_translations/tr-TR/ui.mjs.map +1 -1
  75. package/build/i18n/download_translations/vi-VN/ui.js +3 -1
  76. package/build/i18n/download_translations/vi-VN/ui.js.map +1 -1
  77. package/build/i18n/download_translations/vi-VN/ui.json +3 -1
  78. package/build/i18n/download_translations/vi-VN/ui.mjs +3 -1
  79. package/build/i18n/download_translations/vi-VN/ui.mjs.map +1 -1
  80. package/build/i18n/download_translations/yo-NG/ui.js +3 -1
  81. package/build/i18n/download_translations/yo-NG/ui.js.map +1 -1
  82. package/build/i18n/download_translations/yo-NG/ui.json +3 -1
  83. package/build/i18n/download_translations/yo-NG/ui.mjs +3 -1
  84. package/build/i18n/download_translations/yo-NG/ui.mjs.map +1 -1
  85. package/build/i18n/download_translations/zh-CN/ui.js +3 -1
  86. package/build/i18n/download_translations/zh-CN/ui.js.map +1 -1
  87. package/build/i18n/download_translations/zh-CN/ui.json +3 -1
  88. package/build/i18n/download_translations/zh-CN/ui.mjs +3 -1
  89. package/build/i18n/download_translations/zh-CN/ui.mjs.map +1 -1
  90. package/build/i18n/download_translations/zh-TW/ui.js +3 -1
  91. package/build/i18n/download_translations/zh-TW/ui.js.map +1 -1
  92. package/build/i18n/download_translations/zh-TW/ui.json +3 -1
  93. package/build/i18n/download_translations/zh-TW/ui.mjs +3 -1
  94. package/build/i18n/download_translations/zh-TW/ui.mjs.map +1 -1
  95. package/build/i18n/loadTranslationFile.d.ts +2 -2
  96. package/build/i18n/loadTranslationFile.js +2 -2
  97. package/build/i18n/loadTranslationFile.js.map +1 -1
  98. package/build/i18n/loadTranslationFile.mjs +2 -2
  99. package/build/i18n/loadTranslationFile.mjs.map +1 -1
  100. package/build/sections/Header/HeaderSettingsDialog.js +9 -2
  101. package/build/sections/Header/HeaderSettingsDialog.js.map +1 -1
  102. package/build/sections/Header/HeaderSettingsDialog.mjs +9 -2
  103. package/build/sections/Header/HeaderSettingsDialog.mjs.map +1 -1
  104. package/build/sections/Header/RegistryInfoContent/RegistryInfoContent.js +17 -4
  105. package/build/sections/Header/RegistryInfoContent/RegistryInfoContent.js.map +1 -1
  106. package/build/sections/Header/RegistryInfoContent/RegistryInfoContent.mjs +17 -4
  107. package/build/sections/Header/RegistryInfoContent/RegistryInfoContent.mjs.map +1 -1
  108. package/build/utils/markdown.d.ts +1 -1
  109. package/build/utils/markdown.js +3 -1
  110. package/build/utils/markdown.js.map +1 -1
  111. package/build/utils/markdown.mjs +2 -1
  112. package/build/utils/markdown.mjs.map +1 -1
  113. package/package.json +1 -1
@@ -42,6 +42,8 @@ var SETUP_TABS = [
42
42
  NPMRC
43
43
  ];
44
44
  var DOCS_UPLINKS_URL = "https://verdaccio.org/docs/uplinks";
45
+ var YARN_PLUGIN_NPM_URL = "https://github.com/verdaccio/yarn-plugin-npm";
46
+ var YARN_PLUGIN_INSTALL = "yarn dlx @verdaccio/yarn-import npm-login";
45
47
  /** The one-time command that makes a client use this registry, honouring `web.scope`. */
46
48
  function getSetupCommand(tab, scope, registryUrl) {
47
49
  switch (tab) {
@@ -98,8 +100,8 @@ var HelpGuide = ({ withWaitStep = false, labelledBy }) => {
98
100
  const registryUrl = configOptions.base;
99
101
  const scope = configOptions.scope || void 0;
100
102
  const setupTabs = SETUP_TABS.filter((tab) => tab === NPMRC || configOptions.pkgManagers?.includes(tab));
101
- const hasBun = configOptions.pkgManagers?.includes("bun");
102
103
  const [setupTab, setSetupTab] = (0, react.useState)(setupTabs[0]);
104
+ const isBun = setupTab === "bun";
103
105
  const steps = [{
104
106
  key: "configure",
105
107
  title: t("help.steps.configure.title"),
@@ -136,34 +138,65 @@ var HelpGuide = ({ withWaitStep = false, labelledBy }) => {
136
138
  key: "login",
137
139
  title: t("help.steps.login.title"),
138
140
  description: t("help.steps.login.description"),
139
- body: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Command, {
140
- dataTestId: "help-login-command",
141
- text: t("help.first-step-command-line", { registryUrl })
142
- }), hasBun && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material_Typography.default, {
143
- color: "text.secondary",
144
- sx: { mt: 1 },
145
- variant: "body2",
146
- children: t("help.steps.login.bun-note")
147
- })] })
141
+ body: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
142
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Command, {
143
+ dataTestId: "help-login-command",
144
+ text: t("help.first-step-command-line", { registryUrl })
145
+ }),
146
+ isBun && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material_Typography.default, {
147
+ color: "text.secondary",
148
+ sx: { mt: 1 },
149
+ variant: "body2",
150
+ children: t("help.steps.login.bun-note")
151
+ }),
152
+ setupTab === "yarn" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mui_material_Box.default, {
153
+ "data-testid": "help-login-yarn-plugin",
154
+ sx: { mt: 2 },
155
+ children: [
156
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mui_material_Typography.default, {
157
+ color: "text.secondary",
158
+ variant: "body2",
159
+ children: [
160
+ t("help.steps.login.yarn-note"),
161
+ " ",
162
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material_Link.default, {
163
+ href: YARN_PLUGIN_NPM_URL,
164
+ rel: "noopener noreferrer",
165
+ target: "_blank",
166
+ children: t("help.steps.login.yarn-plugin-link")
167
+ })
168
+ ]
169
+ }),
170
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Command, {
171
+ dataTestId: "help-login-yarn-plugin-install",
172
+ text: YARN_PLUGIN_INSTALL
173
+ }),
174
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Command, {
175
+ dataTestId: "help-login-yarn-command",
176
+ text: require_cli_utils.getCLISetRegistry("yarn npm login", registryUrl)
177
+ })
178
+ ]
179
+ })
180
+ ] })
148
181
  });
149
182
  steps.push({
150
183
  key: "publish",
151
184
  title: t("help.steps.publish.title"),
152
185
  description: t("help.steps.publish.description"),
153
- body: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Command, {
154
- dataTestId: "help-publish-command",
155
- text: t("help.second-step-command-line", { registryUrl })
156
- }), hasBun && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Command, {
186
+ body: isBun ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Command, {
157
187
  dataTestId: "help-publish-command-bun",
158
188
  text: require_cli_utils.getCLISetRegistry("bun publish", registryUrl)
159
- })] })
189
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Command, {
190
+ dataTestId: "help-publish-command",
191
+ text: t("help.second-step-command-line", { registryUrl })
192
+ })
160
193
  });
161
194
  if (withWaitStep) steps.push({
162
195
  key: "wait",
163
196
  title: t("help.steps.wait.title"),
164
197
  description: t("help.steps.wait.description")
165
198
  });
166
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_styles.StepList, {
199
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_styles.StepList, {
167
200
  "aria-labelledby": labelledBy,
168
201
  "data-testid": "help-guide",
169
202
  children: steps.map((step, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(HelpStep, {
@@ -172,21 +205,7 @@ var HelpGuide = ({ withWaitStep = false, labelledBy }) => {
172
205
  title: step.title,
173
206
  children: step.body
174
207
  }, step.key))
175
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mui_material_Alert.default, {
176
- "data-testid": "help-uplinks-note",
177
- severity: "info",
178
- sx: { mt: 3 },
179
- children: [
180
- t("help.uplinks-note"),
181
- " ",
182
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material_Link.default, {
183
- href: DOCS_UPLINKS_URL,
184
- rel: "noopener noreferrer",
185
- target: "_blank",
186
- children: t("help.uplinks-link")
187
- })
188
- ]
189
- })] });
208
+ });
190
209
  };
191
210
  var Help = () => {
192
211
  const { configOptions } = require_AppConfigurationProvider.useConfig();
@@ -211,47 +230,65 @@ var Help = () => {
211
230
  xs: 2,
212
231
  sm: 4
213
232
  } },
214
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mui_material_Box.default, {
215
- sx: {
216
- display: "flex",
217
- alignItems: {
218
- xs: "flex-start",
219
- sm: "center"
220
- },
221
- gap: 2,
222
- mb: 3
223
- },
224
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_icons_material_Inventory2Outlined.default, {
225
- color: "primary",
233
+ children: [
234
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mui_material_Box.default, {
226
235
  sx: {
227
- fontSize: {
228
- xs: 32,
229
- sm: 48
236
+ display: "flex",
237
+ alignItems: {
238
+ xs: "flex-start",
239
+ sm: "center"
230
240
  },
231
- flexShrink: 0
232
- }
233
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mui_material_Box.default, {
234
- sx: { minWidth: 0 },
235
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Heading.default, {
236
- id: "help-card__title",
241
+ gap: 2,
242
+ mb: 3
243
+ },
244
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_icons_material_Inventory2Outlined.default, {
245
+ color: "primary",
237
246
  sx: {
238
247
  fontSize: {
239
- xs: "1.25rem",
240
- sm: "1.5rem"
248
+ xs: 32,
249
+ sm: 48
241
250
  },
242
- lineHeight: 1.3
243
- },
244
- variant: "h5",
245
- children: t("help.title")
246
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material_Typography.default, {
247
- color: "text.secondary",
248
- children: t("help.welcome", { title: configOptions.title })
251
+ flexShrink: 0
252
+ }
253
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mui_material_Box.default, {
254
+ sx: { minWidth: 0 },
255
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Heading.default, {
256
+ id: "help-card__title",
257
+ sx: {
258
+ fontSize: {
259
+ xs: "1.25rem",
260
+ sm: "1.5rem"
261
+ },
262
+ lineHeight: 1.3
263
+ },
264
+ variant: "h5",
265
+ children: t("help.title")
266
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material_Typography.default, {
267
+ color: "text.secondary",
268
+ children: t("help.welcome", { title: configOptions.title })
269
+ })]
249
270
  })]
250
- })]
251
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(HelpGuide, {
252
- labelledBy: "help-card__title",
253
- withWaitStep: true
254
- })]
271
+ }),
272
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(HelpGuide, {
273
+ labelledBy: "help-card__title",
274
+ withWaitStep: true
275
+ }),
276
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mui_material_Alert.default, {
277
+ "data-testid": "help-uplinks-note",
278
+ severity: "info",
279
+ sx: { mt: 3 },
280
+ children: [
281
+ t("help.uplinks-note"),
282
+ " ",
283
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material_Link.default, {
284
+ href: DOCS_UPLINKS_URL,
285
+ rel: "noopener noreferrer",
286
+ target: "_blank",
287
+ children: t("help.uplinks-link")
288
+ })
289
+ ]
290
+ })
291
+ ]
255
292
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mui_material_CardActions.default, {
256
293
  sx: {
257
294
  px: {
@@ -1 +1 @@
1
- {"version":3,"file":"Help.js","names":["getCLISetConfigRegistry","getCLISBerryYamlRegistry","getBunfigRegistry","getNpmrcRegistry","CommandBox","CopyClipboard","Step","StepNumber","Box","Typography","useConfig","CustomHelpContent","ReactMarkdown","externalLinkComponents","useTranslation","useState","_Fragment","Tabs","Tab","getCLISetRegistry","StepList","Alert","Link","Card","CardContent","Inventory2Outlined","Heading","CardActions","DocsLink"],"sources":["../../../src/components/Help/Help.tsx"],"sourcesContent":["import Inventory2Outlined from '@mui/icons-material/Inventory2Outlined';\nimport Alert from '@mui/material/Alert';\nimport Box from '@mui/material/Box';\nimport CardActions from '@mui/material/CardActions';\nimport CardContent from '@mui/material/CardContent';\nimport Link from '@mui/material/Link';\nimport Tab from '@mui/material/Tab';\nimport Tabs from '@mui/material/Tabs';\nimport Typography from '@mui/material/Typography';\nimport React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport ReactMarkdown from 'react-markdown';\n\nimport { CopyClipboard, Heading, useConfig } from '../../';\nimport DocsLink from '../DocsLink';\nimport {\n getBunfigRegistry,\n getCLISBerryYamlRegistry,\n getCLISetConfigRegistry,\n getCLISetRegistry,\n getNpmrcRegistry,\n} from '../../utils/cli-utils';\nimport { externalLinkComponents } from '../../utils/markdown';\nimport {\n CardStyled as Card,\n CommandBox,\n CustomHelpContent,\n Step,\n StepList,\n StepNumber,\n} from './styles';\n\nconst NPMRC = '.npmrc';\nconst SETUP_TABS = ['npm', 'pnpm', 'yarn', 'bun', NPMRC] as const;\ntype SetupTab = (typeof SETUP_TABS)[number];\n\nconst DOCS_UPLINKS_URL = 'https://verdaccio.org/docs/uplinks';\n\n/** The one-time command that makes a client use this registry, honouring `web.scope`. */\nexport function getSetupCommand(tab: SetupTab, scope: string | undefined, registryUrl: string) {\n switch (tab) {\n case 'npm':\n return getCLISetConfigRegistry('npm config set', scope, registryUrl);\n case 'pnpm':\n return getCLISetConfigRegistry('pnpm config set', scope, registryUrl);\n case 'yarn':\n return getCLISBerryYamlRegistry(scope, registryUrl).trim();\n case 'bun':\n return getBunfigRegistry(scope, registryUrl);\n default:\n return getNpmrcRegistry(scope, registryUrl);\n }\n}\n\nconst Command: React.FC<{ dataTestId: string; text: string }> = ({ dataTestId, text }) => (\n <CommandBox>\n <CopyClipboard dataTestId={dataTestId} text={text}>\n <code>{text}</code>\n </CopyClipboard>\n </CommandBox>\n);\n\nconst HelpStep: React.FC<{\n index: number;\n title: string;\n description?: string;\n children?: React.ReactNode;\n}> = ({ index, title, description, children }) => (\n <Step>\n <StepNumber aria-hidden={true}>{index}</StepNumber>\n <Box sx={{ minWidth: 0, flex: 1 }}>\n <Typography component=\"h3\" sx={{ fontWeight: 600 }} variant=\"subtitle1\">\n {title}\n </Typography>\n {description && (\n <Typography color=\"text.secondary\" variant=\"body2\">\n {description}\n </Typography>\n )}\n {children}\n </Box>\n </Step>\n);\n\n/** The markdown that `web.help` sets, with `{{registryUrl}}` filled in. */\nexport const CustomHelp: React.FC<{ markdown: string }> = ({ markdown }) => {\n const { configOptions } = useConfig();\n return (\n <CustomHelpContent data-testid=\"help-custom\">\n <ReactMarkdown components={externalLinkComponents}>\n {markdown.replaceAll('{{registryUrl}}', configOptions.base)}\n </ReactMarkdown>\n </CustomHelpContent>\n );\n};\n\n/** The steps to point a client at the registry, log in and publish; shared by the welcome card and the settings. */\nexport const HelpGuide: React.FC<{ withWaitStep?: boolean; labelledBy?: string }> = ({\n withWaitStep = false,\n labelledBy,\n}) => {\n const { configOptions } = useConfig();\n const { t } = useTranslation();\n const registryUrl = configOptions.base;\n const scope = configOptions.scope || undefined;\n const setupTabs = SETUP_TABS.filter(\n (tab) => tab === NPMRC || configOptions.pkgManagers?.includes(tab)\n );\n const hasBun = configOptions.pkgManagers?.includes('bun');\n const [setupTab, setSetupTab] = useState<SetupTab>(setupTabs[0]);\n const steps: { key: string; title: string; description?: string; body?: React.ReactNode }[] = [\n {\n key: 'configure',\n title: t('help.steps.configure.title'),\n description: t('help.steps.configure.description'),\n body: (\n <>\n <Tabs\n allowScrollButtonsMobile={true}\n aria-label={t('help.steps.configure.title')}\n onChange={(_event, value: SetupTab) => setSetupTab(value)}\n sx={{ minHeight: 36, mt: 1 }}\n scrollButtons=\"auto\"\n value={setupTab}\n variant=\"scrollable\"\n >\n {setupTabs.map((tab) => (\n <Tab\n data-testid={`help-setup-${tab}`}\n key={tab}\n label={tab}\n sx={{ minHeight: 36, minWidth: 0, px: 1.5, py: 0, textTransform: 'none' }}\n value={tab}\n />\n ))}\n </Tabs>\n <Command\n dataTestId=\"help-setup-command\"\n text={getSetupCommand(setupTab, scope, registryUrl)}\n />\n </>\n ),\n },\n ];\n if (configOptions.login) {\n steps.push({\n key: 'login',\n title: t('help.steps.login.title'),\n description: t('help.steps.login.description'),\n body: (\n <>\n <Command\n dataTestId=\"help-login-command\"\n text={t('help.first-step-command-line', { registryUrl })}\n />\n {hasBun && (\n <Typography color=\"text.secondary\" sx={{ mt: 1 }} variant=\"body2\">\n {t('help.steps.login.bun-note')}\n </Typography>\n )}\n </>\n ),\n });\n }\n steps.push({\n key: 'publish',\n title: t('help.steps.publish.title'),\n description: t('help.steps.publish.description'),\n body: (\n <>\n <Command\n dataTestId=\"help-publish-command\"\n text={t('help.second-step-command-line', { registryUrl })}\n />\n {hasBun && (\n <Command\n dataTestId=\"help-publish-command-bun\"\n text={getCLISetRegistry('bun publish', registryUrl)}\n />\n )}\n </>\n ),\n });\n if (withWaitStep) {\n steps.push({\n key: 'wait',\n title: t('help.steps.wait.title'),\n description: t('help.steps.wait.description'),\n });\n }\n\n return (\n <>\n <StepList aria-labelledby={labelledBy} data-testid=\"help-guide\">\n {steps.map((step, index) => (\n <HelpStep\n description={step.description}\n index={index + 1}\n key={step.key}\n title={step.title}\n >\n {step.body}\n </HelpStep>\n ))}\n </StepList>\n {/* @ts-ignore - Alert does accept children despite the type error */}\n <Alert data-testid=\"help-uplinks-note\" severity=\"info\" sx={{ mt: 3 }}>\n {t('help.uplinks-note')}{' '}\n <Link href={DOCS_UPLINKS_URL} rel=\"noopener noreferrer\" target=\"_blank\">\n {t('help.uplinks-link')}\n </Link>\n </Alert>\n </>\n );\n};\n\nconst Help: React.FC = () => {\n const { configOptions } = useConfig();\n const { t } = useTranslation();\n const customHelp = configOptions.help?.trim();\n if (customHelp) {\n return (\n <Card data-testid=\"help-card\" id=\"help-card\">\n <CardContent sx={{ p: { xs: 2, sm: 4 } }}>\n <CustomHelp markdown={customHelp} />\n </CardContent>\n </Card>\n );\n }\n return (\n <Card data-testid=\"help-card\" id=\"help-card\">\n <CardContent sx={{ p: { xs: 2, sm: 4 } }}>\n <Box\n sx={{ display: 'flex', alignItems: { xs: 'flex-start', sm: 'center' }, gap: 2, mb: 3 }}\n >\n <Inventory2Outlined\n color=\"primary\"\n sx={{ fontSize: { xs: 32, sm: 48 }, flexShrink: 0 }}\n />\n <Box sx={{ minWidth: 0 }}>\n <Heading\n id=\"help-card__title\"\n sx={{ fontSize: { xs: '1.25rem', sm: '1.5rem' }, lineHeight: 1.3 }}\n variant=\"h5\"\n >\n {t('help.title')}\n </Heading>\n <Typography color=\"text.secondary\">\n {t('help.welcome', { title: configOptions.title })}\n </Typography>\n </Box>\n </Box>\n <HelpGuide labelledBy=\"help-card__title\" withWaitStep={true} />\n </CardContent>\n <CardActions sx={{ px: { xs: 2, sm: 4 }, pb: 3 }}>\n <DocsLink dataTestId=\"help-docs-link\" />\n </CardActions>\n </Card>\n );\n};\n\nexport default Help;\n"],"mappings":"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"}
1
+ {"version":3,"file":"Help.js","names":["getCLISetConfigRegistry","getCLISBerryYamlRegistry","getBunfigRegistry","getNpmrcRegistry","CommandBox","CopyClipboard","Step","StepNumber","Box","Typography","useConfig","CustomHelpContent","ReactMarkdown","externalLinkComponents","useTranslation","useState","_Fragment","Tabs","Tab","Link","getCLISetRegistry","StepList","Card","CardContent","Inventory2Outlined","Heading","Alert","CardActions","DocsLink"],"sources":["../../../src/components/Help/Help.tsx"],"sourcesContent":["import Inventory2Outlined from '@mui/icons-material/Inventory2Outlined';\nimport Alert from '@mui/material/Alert';\nimport Box from '@mui/material/Box';\nimport CardActions from '@mui/material/CardActions';\nimport CardContent from '@mui/material/CardContent';\nimport Link from '@mui/material/Link';\nimport Tab from '@mui/material/Tab';\nimport Tabs from '@mui/material/Tabs';\nimport Typography from '@mui/material/Typography';\nimport React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport ReactMarkdown from 'react-markdown';\n\nimport { CopyClipboard, Heading, useConfig } from '../../';\nimport DocsLink from '../DocsLink';\nimport {\n getBunfigRegistry,\n getCLISBerryYamlRegistry,\n getCLISetConfigRegistry,\n getCLISetRegistry,\n getNpmrcRegistry,\n} from '../../utils/cli-utils';\nimport { externalLinkComponents } from '../../utils/markdown';\nimport {\n CardStyled as Card,\n CommandBox,\n CustomHelpContent,\n Step,\n StepList,\n StepNumber,\n} from './styles';\n\nconst NPMRC = '.npmrc';\nconst SETUP_TABS = ['npm', 'pnpm', 'yarn', 'bun', NPMRC] as const;\ntype SetupTab = (typeof SETUP_TABS)[number];\n\nconst DOCS_UPLINKS_URL = 'https://verdaccio.org/docs/uplinks';\nconst YARN_PLUGIN_NPM_URL = 'https://github.com/verdaccio/yarn-plugin-npm';\nconst YARN_PLUGIN_INSTALL = 'yarn dlx @verdaccio/yarn-import npm-login';\n\n/** The one-time command that makes a client use this registry, honouring `web.scope`. */\nexport function getSetupCommand(tab: SetupTab, scope: string | undefined, registryUrl: string) {\n switch (tab) {\n case 'npm':\n return getCLISetConfigRegistry('npm config set', scope, registryUrl);\n case 'pnpm':\n return getCLISetConfigRegistry('pnpm config set', scope, registryUrl);\n case 'yarn':\n return getCLISBerryYamlRegistry(scope, registryUrl).trim();\n case 'bun':\n return getBunfigRegistry(scope, registryUrl);\n default:\n return getNpmrcRegistry(scope, registryUrl);\n }\n}\n\nconst Command: React.FC<{ dataTestId: string; text: string }> = ({ dataTestId, text }) => (\n <CommandBox>\n <CopyClipboard dataTestId={dataTestId} text={text}>\n <code>{text}</code>\n </CopyClipboard>\n </CommandBox>\n);\n\nconst HelpStep: React.FC<{\n index: number;\n title: string;\n description?: string;\n children?: React.ReactNode;\n}> = ({ index, title, description, children }) => (\n <Step>\n <StepNumber aria-hidden={true}>{index}</StepNumber>\n <Box sx={{ minWidth: 0, flex: 1 }}>\n <Typography component=\"h3\" sx={{ fontWeight: 600 }} variant=\"subtitle1\">\n {title}\n </Typography>\n {description && (\n <Typography color=\"text.secondary\" variant=\"body2\">\n {description}\n </Typography>\n )}\n {children}\n </Box>\n </Step>\n);\n\n/** The markdown that `web.help` sets, with `{{registryUrl}}` filled in. */\nexport const CustomHelp: React.FC<{ markdown: string }> = ({ markdown }) => {\n const { configOptions } = useConfig();\n return (\n <CustomHelpContent data-testid=\"help-custom\">\n <ReactMarkdown components={externalLinkComponents}>\n {markdown.replaceAll('{{registryUrl}}', configOptions.base)}\n </ReactMarkdown>\n </CustomHelpContent>\n );\n};\n\n/** The steps to point a client at the registry, log in and publish; shared by the welcome card and the settings. */\nexport const HelpGuide: React.FC<{ withWaitStep?: boolean; labelledBy?: string }> = ({\n withWaitStep = false,\n labelledBy,\n}) => {\n const { configOptions } = useConfig();\n const { t } = useTranslation();\n const registryUrl = configOptions.base;\n const scope = configOptions.scope || undefined;\n const setupTabs = SETUP_TABS.filter(\n (tab) => tab === NPMRC || configOptions.pkgManagers?.includes(tab)\n );\n const [setupTab, setSetupTab] = useState<SetupTab>(setupTabs[0]);\n const isBun = setupTab === 'bun';\n const steps: { key: string; title: string; description?: string; body?: React.ReactNode }[] = [\n {\n key: 'configure',\n title: t('help.steps.configure.title'),\n description: t('help.steps.configure.description'),\n body: (\n <>\n <Tabs\n allowScrollButtonsMobile={true}\n aria-label={t('help.steps.configure.title')}\n onChange={(_event, value: SetupTab) => setSetupTab(value)}\n sx={{ minHeight: 36, mt: 1 }}\n scrollButtons=\"auto\"\n value={setupTab}\n variant=\"scrollable\"\n >\n {setupTabs.map((tab) => (\n <Tab\n data-testid={`help-setup-${tab}`}\n key={tab}\n label={tab}\n sx={{ minHeight: 36, minWidth: 0, px: 1.5, py: 0, textTransform: 'none' }}\n value={tab}\n />\n ))}\n </Tabs>\n <Command\n dataTestId=\"help-setup-command\"\n text={getSetupCommand(setupTab, scope, registryUrl)}\n />\n </>\n ),\n },\n ];\n if (configOptions.login) {\n steps.push({\n key: 'login',\n title: t('help.steps.login.title'),\n description: t('help.steps.login.description'),\n body: (\n <>\n <Command\n dataTestId=\"help-login-command\"\n text={t('help.first-step-command-line', { registryUrl })}\n />\n {isBun && (\n <Typography color=\"text.secondary\" sx={{ mt: 1 }} variant=\"body2\">\n {t('help.steps.login.bun-note')}\n </Typography>\n )}\n {setupTab === 'yarn' && (\n <Box data-testid=\"help-login-yarn-plugin\" sx={{ mt: 2 }}>\n <Typography color=\"text.secondary\" variant=\"body2\">\n {t('help.steps.login.yarn-note')}{' '}\n <Link href={YARN_PLUGIN_NPM_URL} rel=\"noopener noreferrer\" target=\"_blank\">\n {t('help.steps.login.yarn-plugin-link')}\n </Link>\n </Typography>\n <Command dataTestId=\"help-login-yarn-plugin-install\" text={YARN_PLUGIN_INSTALL} />\n <Command\n dataTestId=\"help-login-yarn-command\"\n text={getCLISetRegistry('yarn npm login', registryUrl)}\n />\n </Box>\n )}\n </>\n ),\n });\n }\n steps.push({\n key: 'publish',\n title: t('help.steps.publish.title'),\n description: t('help.steps.publish.description'),\n body: isBun ? (\n <Command\n dataTestId=\"help-publish-command-bun\"\n text={getCLISetRegistry('bun publish', registryUrl)}\n />\n ) : (\n <Command\n dataTestId=\"help-publish-command\"\n text={t('help.second-step-command-line', { registryUrl })}\n />\n ),\n });\n if (withWaitStep) {\n steps.push({\n key: 'wait',\n title: t('help.steps.wait.title'),\n description: t('help.steps.wait.description'),\n });\n }\n\n return (\n <StepList aria-labelledby={labelledBy} data-testid=\"help-guide\">\n {steps.map((step, index) => (\n <HelpStep\n description={step.description}\n index={index + 1}\n key={step.key}\n title={step.title}\n >\n {step.body}\n </HelpStep>\n ))}\n </StepList>\n );\n};\n\nconst Help: React.FC = () => {\n const { configOptions } = useConfig();\n const { t } = useTranslation();\n const customHelp = configOptions.help?.trim();\n if (customHelp) {\n return (\n <Card data-testid=\"help-card\" id=\"help-card\">\n <CardContent sx={{ p: { xs: 2, sm: 4 } }}>\n <CustomHelp markdown={customHelp} />\n </CardContent>\n </Card>\n );\n }\n return (\n <Card data-testid=\"help-card\" id=\"help-card\">\n <CardContent sx={{ p: { xs: 2, sm: 4 } }}>\n <Box\n sx={{ display: 'flex', alignItems: { xs: 'flex-start', sm: 'center' }, gap: 2, mb: 3 }}\n >\n <Inventory2Outlined\n color=\"primary\"\n sx={{ fontSize: { xs: 32, sm: 48 }, flexShrink: 0 }}\n />\n <Box sx={{ minWidth: 0 }}>\n <Heading\n id=\"help-card__title\"\n sx={{ fontSize: { xs: '1.25rem', sm: '1.5rem' }, lineHeight: 1.3 }}\n variant=\"h5\"\n >\n {t('help.title')}\n </Heading>\n <Typography color=\"text.secondary\">\n {t('help.welcome', { title: configOptions.title })}\n </Typography>\n </Box>\n </Box>\n <HelpGuide labelledBy=\"help-card__title\" withWaitStep={true} />\n {/* @ts-ignore - Alert does accept children despite the type error */}\n <Alert data-testid=\"help-uplinks-note\" severity=\"info\" sx={{ mt: 3 }}>\n {t('help.uplinks-note')}{' '}\n <Link href={DOCS_UPLINKS_URL} rel=\"noopener noreferrer\" target=\"_blank\">\n {t('help.uplinks-link')}\n </Link>\n </Alert>\n </CardContent>\n <CardActions sx={{ px: { xs: 2, sm: 4 }, pb: 3 }}>\n <DocsLink dataTestId=\"help-docs-link\" />\n </CardActions>\n </Card>\n );\n};\n\nexport default Help;\n"],"mappings":"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"}
@@ -30,6 +30,8 @@ var SETUP_TABS = [
30
30
  NPMRC
31
31
  ];
32
32
  var DOCS_UPLINKS_URL = "https://verdaccio.org/docs/uplinks";
33
+ var YARN_PLUGIN_NPM_URL = "https://github.com/verdaccio/yarn-plugin-npm";
34
+ var YARN_PLUGIN_INSTALL = "yarn dlx @verdaccio/yarn-import npm-login";
33
35
  /** The one-time command that makes a client use this registry, honouring `web.scope`. */
34
36
  function getSetupCommand(tab, scope, registryUrl) {
35
37
  switch (tab) {
@@ -86,8 +88,8 @@ var HelpGuide = ({ withWaitStep = false, labelledBy }) => {
86
88
  const registryUrl = configOptions.base;
87
89
  const scope = configOptions.scope || void 0;
88
90
  const setupTabs = SETUP_TABS.filter((tab) => tab === NPMRC || configOptions.pkgManagers?.includes(tab));
89
- const hasBun = configOptions.pkgManagers?.includes("bun");
90
91
  const [setupTab, setSetupTab] = useState(setupTabs[0]);
92
+ const isBun = setupTab === "bun";
91
93
  const steps = [{
92
94
  key: "configure",
93
95
  title: t("help.steps.configure.title"),
@@ -124,34 +126,65 @@ var HelpGuide = ({ withWaitStep = false, labelledBy }) => {
124
126
  key: "login",
125
127
  title: t("help.steps.login.title"),
126
128
  description: t("help.steps.login.description"),
127
- body: /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(Command, {
128
- dataTestId: "help-login-command",
129
- text: t("help.first-step-command-line", { registryUrl })
130
- }), hasBun && /* @__PURE__ */ jsx(Typography, {
131
- color: "text.secondary",
132
- sx: { mt: 1 },
133
- variant: "body2",
134
- children: t("help.steps.login.bun-note")
135
- })] })
129
+ body: /* @__PURE__ */ jsxs(Fragment$1, { children: [
130
+ /* @__PURE__ */ jsx(Command, {
131
+ dataTestId: "help-login-command",
132
+ text: t("help.first-step-command-line", { registryUrl })
133
+ }),
134
+ isBun && /* @__PURE__ */ jsx(Typography, {
135
+ color: "text.secondary",
136
+ sx: { mt: 1 },
137
+ variant: "body2",
138
+ children: t("help.steps.login.bun-note")
139
+ }),
140
+ setupTab === "yarn" && /* @__PURE__ */ jsxs(Box, {
141
+ "data-testid": "help-login-yarn-plugin",
142
+ sx: { mt: 2 },
143
+ children: [
144
+ /* @__PURE__ */ jsxs(Typography, {
145
+ color: "text.secondary",
146
+ variant: "body2",
147
+ children: [
148
+ t("help.steps.login.yarn-note"),
149
+ " ",
150
+ /* @__PURE__ */ jsx(Link, {
151
+ href: YARN_PLUGIN_NPM_URL,
152
+ rel: "noopener noreferrer",
153
+ target: "_blank",
154
+ children: t("help.steps.login.yarn-plugin-link")
155
+ })
156
+ ]
157
+ }),
158
+ /* @__PURE__ */ jsx(Command, {
159
+ dataTestId: "help-login-yarn-plugin-install",
160
+ text: YARN_PLUGIN_INSTALL
161
+ }),
162
+ /* @__PURE__ */ jsx(Command, {
163
+ dataTestId: "help-login-yarn-command",
164
+ text: getCLISetRegistry("yarn npm login", registryUrl)
165
+ })
166
+ ]
167
+ })
168
+ ] })
136
169
  });
137
170
  steps.push({
138
171
  key: "publish",
139
172
  title: t("help.steps.publish.title"),
140
173
  description: t("help.steps.publish.description"),
141
- body: /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(Command, {
142
- dataTestId: "help-publish-command",
143
- text: t("help.second-step-command-line", { registryUrl })
144
- }), hasBun && /* @__PURE__ */ jsx(Command, {
174
+ body: isBun ? /* @__PURE__ */ jsx(Command, {
145
175
  dataTestId: "help-publish-command-bun",
146
176
  text: getCLISetRegistry("bun publish", registryUrl)
147
- })] })
177
+ }) : /* @__PURE__ */ jsx(Command, {
178
+ dataTestId: "help-publish-command",
179
+ text: t("help.second-step-command-line", { registryUrl })
180
+ })
148
181
  });
149
182
  if (withWaitStep) steps.push({
150
183
  key: "wait",
151
184
  title: t("help.steps.wait.title"),
152
185
  description: t("help.steps.wait.description")
153
186
  });
154
- return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(StepList, {
187
+ return /* @__PURE__ */ jsx(StepList, {
155
188
  "aria-labelledby": labelledBy,
156
189
  "data-testid": "help-guide",
157
190
  children: steps.map((step, index) => /* @__PURE__ */ jsx(HelpStep, {
@@ -160,21 +193,7 @@ var HelpGuide = ({ withWaitStep = false, labelledBy }) => {
160
193
  title: step.title,
161
194
  children: step.body
162
195
  }, step.key))
163
- }), /* @__PURE__ */ jsxs(Alert, {
164
- "data-testid": "help-uplinks-note",
165
- severity: "info",
166
- sx: { mt: 3 },
167
- children: [
168
- t("help.uplinks-note"),
169
- " ",
170
- /* @__PURE__ */ jsx(Link, {
171
- href: DOCS_UPLINKS_URL,
172
- rel: "noopener noreferrer",
173
- target: "_blank",
174
- children: t("help.uplinks-link")
175
- })
176
- ]
177
- })] });
196
+ });
178
197
  };
179
198
  var Help = () => {
180
199
  const { configOptions } = useConfig();
@@ -199,47 +218,65 @@ var Help = () => {
199
218
  xs: 2,
200
219
  sm: 4
201
220
  } },
202
- children: [/* @__PURE__ */ jsxs(Box, {
203
- sx: {
204
- display: "flex",
205
- alignItems: {
206
- xs: "flex-start",
207
- sm: "center"
208
- },
209
- gap: 2,
210
- mb: 3
211
- },
212
- children: [/* @__PURE__ */ jsx(Inventory2Outlined, {
213
- color: "primary",
221
+ children: [
222
+ /* @__PURE__ */ jsxs(Box, {
214
223
  sx: {
215
- fontSize: {
216
- xs: 32,
217
- sm: 48
224
+ display: "flex",
225
+ alignItems: {
226
+ xs: "flex-start",
227
+ sm: "center"
218
228
  },
219
- flexShrink: 0
220
- }
221
- }), /* @__PURE__ */ jsxs(Box, {
222
- sx: { minWidth: 0 },
223
- children: [/* @__PURE__ */ jsx(Heading, {
224
- id: "help-card__title",
229
+ gap: 2,
230
+ mb: 3
231
+ },
232
+ children: [/* @__PURE__ */ jsx(Inventory2Outlined, {
233
+ color: "primary",
225
234
  sx: {
226
235
  fontSize: {
227
- xs: "1.25rem",
228
- sm: "1.5rem"
236
+ xs: 32,
237
+ sm: 48
229
238
  },
230
- lineHeight: 1.3
231
- },
232
- variant: "h5",
233
- children: t("help.title")
234
- }), /* @__PURE__ */ jsx(Typography, {
235
- color: "text.secondary",
236
- children: t("help.welcome", { title: configOptions.title })
239
+ flexShrink: 0
240
+ }
241
+ }), /* @__PURE__ */ jsxs(Box, {
242
+ sx: { minWidth: 0 },
243
+ children: [/* @__PURE__ */ jsx(Heading, {
244
+ id: "help-card__title",
245
+ sx: {
246
+ fontSize: {
247
+ xs: "1.25rem",
248
+ sm: "1.5rem"
249
+ },
250
+ lineHeight: 1.3
251
+ },
252
+ variant: "h5",
253
+ children: t("help.title")
254
+ }), /* @__PURE__ */ jsx(Typography, {
255
+ color: "text.secondary",
256
+ children: t("help.welcome", { title: configOptions.title })
257
+ })]
237
258
  })]
238
- })]
239
- }), /* @__PURE__ */ jsx(HelpGuide, {
240
- labelledBy: "help-card__title",
241
- withWaitStep: true
242
- })]
259
+ }),
260
+ /* @__PURE__ */ jsx(HelpGuide, {
261
+ labelledBy: "help-card__title",
262
+ withWaitStep: true
263
+ }),
264
+ /* @__PURE__ */ jsxs(Alert, {
265
+ "data-testid": "help-uplinks-note",
266
+ severity: "info",
267
+ sx: { mt: 3 },
268
+ children: [
269
+ t("help.uplinks-note"),
270
+ " ",
271
+ /* @__PURE__ */ jsx(Link, {
272
+ href: DOCS_UPLINKS_URL,
273
+ rel: "noopener noreferrer",
274
+ target: "_blank",
275
+ children: t("help.uplinks-link")
276
+ })
277
+ ]
278
+ })
279
+ ]
243
280
  }), /* @__PURE__ */ jsx(CardActions, {
244
281
  sx: {
245
282
  px: {
@@ -1 +1 @@
1
- {"version":3,"file":"Help.mjs","names":["CopyClipboard","_Fragment","Card"],"sources":["../../../src/components/Help/Help.tsx"],"sourcesContent":["import Inventory2Outlined from '@mui/icons-material/Inventory2Outlined';\nimport Alert from '@mui/material/Alert';\nimport Box from '@mui/material/Box';\nimport CardActions from '@mui/material/CardActions';\nimport CardContent from '@mui/material/CardContent';\nimport Link from '@mui/material/Link';\nimport Tab from '@mui/material/Tab';\nimport Tabs from '@mui/material/Tabs';\nimport Typography from '@mui/material/Typography';\nimport React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport ReactMarkdown from 'react-markdown';\n\nimport { CopyClipboard, Heading, useConfig } from '../../';\nimport DocsLink from '../DocsLink';\nimport {\n getBunfigRegistry,\n getCLISBerryYamlRegistry,\n getCLISetConfigRegistry,\n getCLISetRegistry,\n getNpmrcRegistry,\n} from '../../utils/cli-utils';\nimport { externalLinkComponents } from '../../utils/markdown';\nimport {\n CardStyled as Card,\n CommandBox,\n CustomHelpContent,\n Step,\n StepList,\n StepNumber,\n} from './styles';\n\nconst NPMRC = '.npmrc';\nconst SETUP_TABS = ['npm', 'pnpm', 'yarn', 'bun', NPMRC] as const;\ntype SetupTab = (typeof SETUP_TABS)[number];\n\nconst DOCS_UPLINKS_URL = 'https://verdaccio.org/docs/uplinks';\n\n/** The one-time command that makes a client use this registry, honouring `web.scope`. */\nexport function getSetupCommand(tab: SetupTab, scope: string | undefined, registryUrl: string) {\n switch (tab) {\n case 'npm':\n return getCLISetConfigRegistry('npm config set', scope, registryUrl);\n case 'pnpm':\n return getCLISetConfigRegistry('pnpm config set', scope, registryUrl);\n case 'yarn':\n return getCLISBerryYamlRegistry(scope, registryUrl).trim();\n case 'bun':\n return getBunfigRegistry(scope, registryUrl);\n default:\n return getNpmrcRegistry(scope, registryUrl);\n }\n}\n\nconst Command: React.FC<{ dataTestId: string; text: string }> = ({ dataTestId, text }) => (\n <CommandBox>\n <CopyClipboard dataTestId={dataTestId} text={text}>\n <code>{text}</code>\n </CopyClipboard>\n </CommandBox>\n);\n\nconst HelpStep: React.FC<{\n index: number;\n title: string;\n description?: string;\n children?: React.ReactNode;\n}> = ({ index, title, description, children }) => (\n <Step>\n <StepNumber aria-hidden={true}>{index}</StepNumber>\n <Box sx={{ minWidth: 0, flex: 1 }}>\n <Typography component=\"h3\" sx={{ fontWeight: 600 }} variant=\"subtitle1\">\n {title}\n </Typography>\n {description && (\n <Typography color=\"text.secondary\" variant=\"body2\">\n {description}\n </Typography>\n )}\n {children}\n </Box>\n </Step>\n);\n\n/** The markdown that `web.help` sets, with `{{registryUrl}}` filled in. */\nexport const CustomHelp: React.FC<{ markdown: string }> = ({ markdown }) => {\n const { configOptions } = useConfig();\n return (\n <CustomHelpContent data-testid=\"help-custom\">\n <ReactMarkdown components={externalLinkComponents}>\n {markdown.replaceAll('{{registryUrl}}', configOptions.base)}\n </ReactMarkdown>\n </CustomHelpContent>\n );\n};\n\n/** The steps to point a client at the registry, log in and publish; shared by the welcome card and the settings. */\nexport const HelpGuide: React.FC<{ withWaitStep?: boolean; labelledBy?: string }> = ({\n withWaitStep = false,\n labelledBy,\n}) => {\n const { configOptions } = useConfig();\n const { t } = useTranslation();\n const registryUrl = configOptions.base;\n const scope = configOptions.scope || undefined;\n const setupTabs = SETUP_TABS.filter(\n (tab) => tab === NPMRC || configOptions.pkgManagers?.includes(tab)\n );\n const hasBun = configOptions.pkgManagers?.includes('bun');\n const [setupTab, setSetupTab] = useState<SetupTab>(setupTabs[0]);\n const steps: { key: string; title: string; description?: string; body?: React.ReactNode }[] = [\n {\n key: 'configure',\n title: t('help.steps.configure.title'),\n description: t('help.steps.configure.description'),\n body: (\n <>\n <Tabs\n allowScrollButtonsMobile={true}\n aria-label={t('help.steps.configure.title')}\n onChange={(_event, value: SetupTab) => setSetupTab(value)}\n sx={{ minHeight: 36, mt: 1 }}\n scrollButtons=\"auto\"\n value={setupTab}\n variant=\"scrollable\"\n >\n {setupTabs.map((tab) => (\n <Tab\n data-testid={`help-setup-${tab}`}\n key={tab}\n label={tab}\n sx={{ minHeight: 36, minWidth: 0, px: 1.5, py: 0, textTransform: 'none' }}\n value={tab}\n />\n ))}\n </Tabs>\n <Command\n dataTestId=\"help-setup-command\"\n text={getSetupCommand(setupTab, scope, registryUrl)}\n />\n </>\n ),\n },\n ];\n if (configOptions.login) {\n steps.push({\n key: 'login',\n title: t('help.steps.login.title'),\n description: t('help.steps.login.description'),\n body: (\n <>\n <Command\n dataTestId=\"help-login-command\"\n text={t('help.first-step-command-line', { registryUrl })}\n />\n {hasBun && (\n <Typography color=\"text.secondary\" sx={{ mt: 1 }} variant=\"body2\">\n {t('help.steps.login.bun-note')}\n </Typography>\n )}\n </>\n ),\n });\n }\n steps.push({\n key: 'publish',\n title: t('help.steps.publish.title'),\n description: t('help.steps.publish.description'),\n body: (\n <>\n <Command\n dataTestId=\"help-publish-command\"\n text={t('help.second-step-command-line', { registryUrl })}\n />\n {hasBun && (\n <Command\n dataTestId=\"help-publish-command-bun\"\n text={getCLISetRegistry('bun publish', registryUrl)}\n />\n )}\n </>\n ),\n });\n if (withWaitStep) {\n steps.push({\n key: 'wait',\n title: t('help.steps.wait.title'),\n description: t('help.steps.wait.description'),\n });\n }\n\n return (\n <>\n <StepList aria-labelledby={labelledBy} data-testid=\"help-guide\">\n {steps.map((step, index) => (\n <HelpStep\n description={step.description}\n index={index + 1}\n key={step.key}\n title={step.title}\n >\n {step.body}\n </HelpStep>\n ))}\n </StepList>\n {/* @ts-ignore - Alert does accept children despite the type error */}\n <Alert data-testid=\"help-uplinks-note\" severity=\"info\" sx={{ mt: 3 }}>\n {t('help.uplinks-note')}{' '}\n <Link href={DOCS_UPLINKS_URL} rel=\"noopener noreferrer\" target=\"_blank\">\n {t('help.uplinks-link')}\n </Link>\n </Alert>\n </>\n );\n};\n\nconst Help: React.FC = () => {\n const { configOptions } = useConfig();\n const { t } = useTranslation();\n const customHelp = configOptions.help?.trim();\n if (customHelp) {\n return (\n <Card data-testid=\"help-card\" id=\"help-card\">\n <CardContent sx={{ p: { xs: 2, sm: 4 } }}>\n <CustomHelp markdown={customHelp} />\n </CardContent>\n </Card>\n );\n }\n return (\n <Card data-testid=\"help-card\" id=\"help-card\">\n <CardContent sx={{ p: { xs: 2, sm: 4 } }}>\n <Box\n sx={{ display: 'flex', alignItems: { xs: 'flex-start', sm: 'center' }, gap: 2, mb: 3 }}\n >\n <Inventory2Outlined\n color=\"primary\"\n sx={{ fontSize: { xs: 32, sm: 48 }, flexShrink: 0 }}\n />\n <Box sx={{ minWidth: 0 }}>\n <Heading\n id=\"help-card__title\"\n sx={{ fontSize: { xs: '1.25rem', sm: '1.5rem' }, lineHeight: 1.3 }}\n variant=\"h5\"\n >\n {t('help.title')}\n </Heading>\n <Typography color=\"text.secondary\">\n {t('help.welcome', { title: configOptions.title })}\n </Typography>\n </Box>\n </Box>\n <HelpGuide labelledBy=\"help-card__title\" withWaitStep={true} />\n </CardContent>\n <CardActions sx={{ px: { xs: 2, sm: 4 }, pb: 3 }}>\n <DocsLink dataTestId=\"help-docs-link\" />\n </CardActions>\n </Card>\n );\n};\n\nexport default Help;\n"],"mappings":"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"}
1
+ {"version":3,"file":"Help.mjs","names":["CopyClipboard","_Fragment","Card"],"sources":["../../../src/components/Help/Help.tsx"],"sourcesContent":["import Inventory2Outlined from '@mui/icons-material/Inventory2Outlined';\nimport Alert from '@mui/material/Alert';\nimport Box from '@mui/material/Box';\nimport CardActions from '@mui/material/CardActions';\nimport CardContent from '@mui/material/CardContent';\nimport Link from '@mui/material/Link';\nimport Tab from '@mui/material/Tab';\nimport Tabs from '@mui/material/Tabs';\nimport Typography from '@mui/material/Typography';\nimport React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport ReactMarkdown from 'react-markdown';\n\nimport { CopyClipboard, Heading, useConfig } from '../../';\nimport DocsLink from '../DocsLink';\nimport {\n getBunfigRegistry,\n getCLISBerryYamlRegistry,\n getCLISetConfigRegistry,\n getCLISetRegistry,\n getNpmrcRegistry,\n} from '../../utils/cli-utils';\nimport { externalLinkComponents } from '../../utils/markdown';\nimport {\n CardStyled as Card,\n CommandBox,\n CustomHelpContent,\n Step,\n StepList,\n StepNumber,\n} from './styles';\n\nconst NPMRC = '.npmrc';\nconst SETUP_TABS = ['npm', 'pnpm', 'yarn', 'bun', NPMRC] as const;\ntype SetupTab = (typeof SETUP_TABS)[number];\n\nconst DOCS_UPLINKS_URL = 'https://verdaccio.org/docs/uplinks';\nconst YARN_PLUGIN_NPM_URL = 'https://github.com/verdaccio/yarn-plugin-npm';\nconst YARN_PLUGIN_INSTALL = 'yarn dlx @verdaccio/yarn-import npm-login';\n\n/** The one-time command that makes a client use this registry, honouring `web.scope`. */\nexport function getSetupCommand(tab: SetupTab, scope: string | undefined, registryUrl: string) {\n switch (tab) {\n case 'npm':\n return getCLISetConfigRegistry('npm config set', scope, registryUrl);\n case 'pnpm':\n return getCLISetConfigRegistry('pnpm config set', scope, registryUrl);\n case 'yarn':\n return getCLISBerryYamlRegistry(scope, registryUrl).trim();\n case 'bun':\n return getBunfigRegistry(scope, registryUrl);\n default:\n return getNpmrcRegistry(scope, registryUrl);\n }\n}\n\nconst Command: React.FC<{ dataTestId: string; text: string }> = ({ dataTestId, text }) => (\n <CommandBox>\n <CopyClipboard dataTestId={dataTestId} text={text}>\n <code>{text}</code>\n </CopyClipboard>\n </CommandBox>\n);\n\nconst HelpStep: React.FC<{\n index: number;\n title: string;\n description?: string;\n children?: React.ReactNode;\n}> = ({ index, title, description, children }) => (\n <Step>\n <StepNumber aria-hidden={true}>{index}</StepNumber>\n <Box sx={{ minWidth: 0, flex: 1 }}>\n <Typography component=\"h3\" sx={{ fontWeight: 600 }} variant=\"subtitle1\">\n {title}\n </Typography>\n {description && (\n <Typography color=\"text.secondary\" variant=\"body2\">\n {description}\n </Typography>\n )}\n {children}\n </Box>\n </Step>\n);\n\n/** The markdown that `web.help` sets, with `{{registryUrl}}` filled in. */\nexport const CustomHelp: React.FC<{ markdown: string }> = ({ markdown }) => {\n const { configOptions } = useConfig();\n return (\n <CustomHelpContent data-testid=\"help-custom\">\n <ReactMarkdown components={externalLinkComponents}>\n {markdown.replaceAll('{{registryUrl}}', configOptions.base)}\n </ReactMarkdown>\n </CustomHelpContent>\n );\n};\n\n/** The steps to point a client at the registry, log in and publish; shared by the welcome card and the settings. */\nexport const HelpGuide: React.FC<{ withWaitStep?: boolean; labelledBy?: string }> = ({\n withWaitStep = false,\n labelledBy,\n}) => {\n const { configOptions } = useConfig();\n const { t } = useTranslation();\n const registryUrl = configOptions.base;\n const scope = configOptions.scope || undefined;\n const setupTabs = SETUP_TABS.filter(\n (tab) => tab === NPMRC || configOptions.pkgManagers?.includes(tab)\n );\n const [setupTab, setSetupTab] = useState<SetupTab>(setupTabs[0]);\n const isBun = setupTab === 'bun';\n const steps: { key: string; title: string; description?: string; body?: React.ReactNode }[] = [\n {\n key: 'configure',\n title: t('help.steps.configure.title'),\n description: t('help.steps.configure.description'),\n body: (\n <>\n <Tabs\n allowScrollButtonsMobile={true}\n aria-label={t('help.steps.configure.title')}\n onChange={(_event, value: SetupTab) => setSetupTab(value)}\n sx={{ minHeight: 36, mt: 1 }}\n scrollButtons=\"auto\"\n value={setupTab}\n variant=\"scrollable\"\n >\n {setupTabs.map((tab) => (\n <Tab\n data-testid={`help-setup-${tab}`}\n key={tab}\n label={tab}\n sx={{ minHeight: 36, minWidth: 0, px: 1.5, py: 0, textTransform: 'none' }}\n value={tab}\n />\n ))}\n </Tabs>\n <Command\n dataTestId=\"help-setup-command\"\n text={getSetupCommand(setupTab, scope, registryUrl)}\n />\n </>\n ),\n },\n ];\n if (configOptions.login) {\n steps.push({\n key: 'login',\n title: t('help.steps.login.title'),\n description: t('help.steps.login.description'),\n body: (\n <>\n <Command\n dataTestId=\"help-login-command\"\n text={t('help.first-step-command-line', { registryUrl })}\n />\n {isBun && (\n <Typography color=\"text.secondary\" sx={{ mt: 1 }} variant=\"body2\">\n {t('help.steps.login.bun-note')}\n </Typography>\n )}\n {setupTab === 'yarn' && (\n <Box data-testid=\"help-login-yarn-plugin\" sx={{ mt: 2 }}>\n <Typography color=\"text.secondary\" variant=\"body2\">\n {t('help.steps.login.yarn-note')}{' '}\n <Link href={YARN_PLUGIN_NPM_URL} rel=\"noopener noreferrer\" target=\"_blank\">\n {t('help.steps.login.yarn-plugin-link')}\n </Link>\n </Typography>\n <Command dataTestId=\"help-login-yarn-plugin-install\" text={YARN_PLUGIN_INSTALL} />\n <Command\n dataTestId=\"help-login-yarn-command\"\n text={getCLISetRegistry('yarn npm login', registryUrl)}\n />\n </Box>\n )}\n </>\n ),\n });\n }\n steps.push({\n key: 'publish',\n title: t('help.steps.publish.title'),\n description: t('help.steps.publish.description'),\n body: isBun ? (\n <Command\n dataTestId=\"help-publish-command-bun\"\n text={getCLISetRegistry('bun publish', registryUrl)}\n />\n ) : (\n <Command\n dataTestId=\"help-publish-command\"\n text={t('help.second-step-command-line', { registryUrl })}\n />\n ),\n });\n if (withWaitStep) {\n steps.push({\n key: 'wait',\n title: t('help.steps.wait.title'),\n description: t('help.steps.wait.description'),\n });\n }\n\n return (\n <StepList aria-labelledby={labelledBy} data-testid=\"help-guide\">\n {steps.map((step, index) => (\n <HelpStep\n description={step.description}\n index={index + 1}\n key={step.key}\n title={step.title}\n >\n {step.body}\n </HelpStep>\n ))}\n </StepList>\n );\n};\n\nconst Help: React.FC = () => {\n const { configOptions } = useConfig();\n const { t } = useTranslation();\n const customHelp = configOptions.help?.trim();\n if (customHelp) {\n return (\n <Card data-testid=\"help-card\" id=\"help-card\">\n <CardContent sx={{ p: { xs: 2, sm: 4 } }}>\n <CustomHelp markdown={customHelp} />\n </CardContent>\n </Card>\n );\n }\n return (\n <Card data-testid=\"help-card\" id=\"help-card\">\n <CardContent sx={{ p: { xs: 2, sm: 4 } }}>\n <Box\n sx={{ display: 'flex', alignItems: { xs: 'flex-start', sm: 'center' }, gap: 2, mb: 3 }}\n >\n <Inventory2Outlined\n color=\"primary\"\n sx={{ fontSize: { xs: 32, sm: 48 }, flexShrink: 0 }}\n />\n <Box sx={{ minWidth: 0 }}>\n <Heading\n id=\"help-card__title\"\n sx={{ fontSize: { xs: '1.25rem', sm: '1.5rem' }, lineHeight: 1.3 }}\n variant=\"h5\"\n >\n {t('help.title')}\n </Heading>\n <Typography color=\"text.secondary\">\n {t('help.welcome', { title: configOptions.title })}\n </Typography>\n </Box>\n </Box>\n <HelpGuide labelledBy=\"help-card__title\" withWaitStep={true} />\n {/* @ts-ignore - Alert does accept children despite the type error */}\n <Alert data-testid=\"help-uplinks-note\" severity=\"info\" sx={{ mt: 3 }}>\n {t('help.uplinks-note')}{' '}\n <Link href={DOCS_UPLINKS_URL} rel=\"noopener noreferrer\" target=\"_blank\">\n {t('help.uplinks-link')}\n </Link>\n </Alert>\n </CardContent>\n <CardActions sx={{ px: { xs: 2, sm: 4 }, pb: 3 }}>\n <DocsLink dataTestId=\"help-docs-link\" />\n </CardActions>\n </Card>\n );\n};\n\nexport default Help;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAgCA,IAAM,QAAQ;AACd,IAAM,aAAa;CAAC;CAAO;CAAQ;CAAQ;CAAO;AAAK;AAGvD,IAAM,mBAAmB;AACzB,IAAM,sBAAsB;AAC5B,IAAM,sBAAsB;;AAG5B,SAAgB,gBAAgB,KAAe,OAA2B,aAAqB;CAC7F,QAAQ,KAAR;EACE,KAAK,OACH,OAAO,wBAAwB,kBAAkB,OAAO,WAAW;EACrE,KAAK,QACH,OAAO,wBAAwB,mBAAmB,OAAO,WAAW;EACtE,KAAK,QACH,OAAO,yBAAyB,OAAO,WAAW,CAAC,CAAC,KAAK;EAC3D,KAAK,OACH,OAAO,kBAAkB,OAAO,WAAW;EAC7C,SACE,OAAO,iBAAiB,OAAO,WAAW;CAC9C;AACF;AAEA,IAAM,WAA2D,EAAE,YAAY,WAC7E,oBAAC,YAAD,EAAA,UACE,oBAACA,iBAAD;CAA2B;CAAkB;CAC3C,UAAA,oBAAC,QAAD,EAAA,UAAO,KAAW,CAAA;AACL,CAAA,EACL,CAAA;AAGd,IAAM,YAKA,EAAE,OAAO,OAAO,aAAa,eACjC,qBAAC,MAAD,EAAA,UAAA,CACE,oBAAC,YAAD;CAAY,eAAa;CAAO,UAAA;AAAkB,CAAA,GAClD,qBAAC,KAAD;CAAK,IAAI;EAAE,UAAU;EAAG,MAAM;CAAE;CAAhC,UAAA;EACE,oBAAC,YAAD;GAAY,WAAU;GAAK,IAAI,EAAE,YAAY,IAAI;GAAG,SAAQ;GACzD,UAAA;EACS,CAAA;EACX,eACC,oBAAC,YAAD;GAAY,OAAM;GAAiB,SAAQ;GACxC,UAAA;EACS,CAAA;EAEb;CACE;AACD,CAAA,CAAA,EAAA,CAAA;;AAIR,IAAa,cAA8C,EAAE,eAAe;CAC1E,MAAM,EAAE,kBAAkB,UAAU;CACpC,OACE,oBAAC,mBAAD;EAAmB,eAAY;EAC7B,UAAA,oBAAC,eAAD;GAAe,YAAY;GACxB,UAAA,SAAS,WAAW,mBAAmB,cAAc,IAAI;EAC7C,CAAA;CACE,CAAA;AAEvB;;AAGA,IAAa,aAAwE,EACnF,eAAe,OACf,iBACI;CACJ,MAAM,EAAE,kBAAkB,UAAU;CACpC,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,cAAc,cAAc;CAClC,MAAM,QAAQ,cAAc,SAAS,KAAA;CACrC,MAAM,YAAY,WAAW,QAC1B,QAAQ,QAAQ,SAAS,cAAc,aAAa,SAAS,GAAG,CACnE;CACA,MAAM,CAAC,UAAU,eAAe,SAAmB,UAAU,EAAE;CAC/D,MAAM,QAAQ,aAAa;CAC3B,MAAM,QAAwF,CAC5F;EACE,KAAK;EACL,OAAO,EAAE,4BAA4B;EACrC,aAAa,EAAE,kCAAkC;EACjD,MACE,qBAAAC,YAAA,EAAA,UAAA,CACE,oBAAC,MAAD;GACE,0BAA0B;GAC1B,cAAY,EAAE,4BAA4B;GAC1C,WAAW,QAAQ,UAAoB,YAAY,KAAK;GACxD,IAAI;IAAE,WAAW;IAAI,IAAI;GAAE;GAC3B,eAAc;GACd,OAAO;GACP,SAAQ;GAEP,UAAA,UAAU,KAAK,QACd,oBAAC,KAAD;IACE,eAAa,cAAc;IAE3B,OAAO;IACP,IAAI;KAAE,WAAW;KAAI,UAAU;KAAG,IAAI;KAAK,IAAI;KAAG,eAAe;IAAO;IACxE,OAAO;GACR,GAJM,GAIN,CACF;EACG,CAAA,GACN,oBAAC,SAAD;GACE,YAAW;GACX,MAAM,gBAAgB,UAAU,OAAO,WAAW;EACnD,CAAA,CACD,EAAA,CAAA;CAEN,CACF;CACA,IAAI,cAAc,OAChB,MAAM,KAAK;EACT,KAAK;EACL,OAAO,EAAE,wBAAwB;EACjC,aAAa,EAAE,8BAA8B;EAC7C,MACE,qBAAAA,YAAA,EAAA,UAAA;GACE,oBAAC,SAAD;IACE,YAAW;IACX,MAAM,EAAE,gCAAgC,EAAE,YAAY,CAAC;GACxD,CAAA;GACA,SACC,oBAAC,YAAD;IAAY,OAAM;IAAiB,IAAI,EAAE,IAAI,EAAE;IAAG,SAAQ;IACvD,UAAA,EAAE,2BAA2B;GACpB,CAAA;GAEb,aAAa,UACZ,qBAAC,KAAD;IAAK,eAAY;IAAyB,IAAI,EAAE,IAAI,EAAE;IAAtD,UAAA;KACE,qBAAC,YAAD;MAAY,OAAM;MAAiB,SAAQ;MAA3C,UAAA;OACG,EAAE,4BAA4B;OAAG;OAClC,oBAAC,MAAD;QAAM,MAAM;QAAqB,KAAI;QAAsB,QAAO;QAC/D,UAAA,EAAE,mCAAmC;OAClC,CAAA;MACI;;KACZ,oBAAC,SAAD;MAAS,YAAW;MAAiC,MAAM;KAAsB,CAAA;KACjF,oBAAC,SAAD;MACE,YAAW;MACX,MAAM,kBAAkB,kBAAkB,WAAW;KACtD,CAAA;IACE;;EAEP,EAAA,CAAA;CAEN,CAAC;CAEH,MAAM,KAAK;EACT,KAAK;EACL,OAAO,EAAE,0BAA0B;EACnC,aAAa,EAAE,gCAAgC;EAC/C,MAAM,QACJ,oBAAC,SAAD;GACE,YAAW;GACX,MAAM,kBAAkB,eAAe,WAAW;EACnD,CAAA,IAED,oBAAC,SAAD;GACE,YAAW;GACX,MAAM,EAAE,iCAAiC,EAAE,YAAY,CAAC;EACzD,CAAA;CAEL,CAAC;CACD,IAAI,cACF,MAAM,KAAK;EACT,KAAK;EACL,OAAO,EAAE,uBAAuB;EAChC,aAAa,EAAE,6BAA6B;CAC9C,CAAC;CAGH,OACE,oBAAC,UAAD;EAAU,mBAAiB;EAAY,eAAY;EAChD,UAAA,MAAM,KAAK,MAAM,UAChB,oBAAC,UAAD;GACE,aAAa,KAAK;GAClB,OAAO,QAAQ;GAEf,OAAO,KAAK;GAEX,UAAA,KAAK;EACE,GAJH,KAAK,GAIF,CACX;CACO,CAAA;AAEd;AAEA,IAAM,aAAuB;CAC3B,MAAM,EAAE,kBAAkB,UAAU;CACpC,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,aAAa,cAAc,MAAM,KAAK;CAC5C,IAAI,YACF,OACE,oBAACC,YAAD;EAAM,eAAY;EAAY,IAAG;EAC/B,UAAA,oBAAC,aAAD;GAAa,IAAI,EAAE,GAAG;IAAE,IAAI;IAAG,IAAI;GAAE,EAAE;GACrC,UAAA,oBAAC,YAAD,EAAY,UAAU,WAAa,CAAA;EACxB,CAAA;CACT,CAAA;CAGV,OACE,qBAACA,YAAD;EAAM,eAAY;EAAY,IAAG;EAAjC,UAAA,CACE,qBAAC,aAAD;GAAa,IAAI,EAAE,GAAG;IAAE,IAAI;IAAG,IAAI;GAAE,EAAE;GAAvC,UAAA;IACE,qBAAC,KAAD;KACE,IAAI;MAAE,SAAS;MAAQ,YAAY;OAAE,IAAI;OAAc,IAAI;MAAS;MAAG,KAAK;MAAG,IAAI;KAAE;KADvF,UAAA,CAGE,oBAAC,oBAAD;MACE,OAAM;MACN,IAAI;OAAE,UAAU;QAAE,IAAI;QAAI,IAAI;OAAG;OAAG,YAAY;MAAE;KACnD,CAAA,GACD,qBAAC,KAAD;MAAK,IAAI,EAAE,UAAU,EAAE;MAAvB,UAAA,CACE,oBAAC,SAAD;OACE,IAAG;OACH,IAAI;QAAE,UAAU;SAAE,IAAI;SAAW,IAAI;QAAS;QAAG,YAAY;OAAI;OACjE,SAAQ;OAEP,UAAA,EAAE,YAAY;MACR,CAAA,GACT,oBAAC,YAAD;OAAY,OAAM;OACf,UAAA,EAAE,gBAAgB,EAAE,OAAO,cAAc,MAAM,CAAC;MACvC,CAAA,CACT;KACF,CAAA,CAAA;;IACL,oBAAC,WAAD;KAAW,YAAW;KAAmB,cAAc;IAAO,CAAA;IAE9D,qBAAC,OAAD;KAAO,eAAY;KAAoB,UAAS;KAAO,IAAI,EAAE,IAAI,EAAE;KAAnE,UAAA;MACG,EAAE,mBAAmB;MAAG;MACzB,oBAAC,MAAD;OAAM,MAAM;OAAkB,KAAI;OAAsB,QAAO;OAC5D,UAAA,EAAE,mBAAmB;MAClB,CAAA;KACD;;GACI;EACb,CAAA,GAAA,oBAAC,aAAD;GAAa,IAAI;IAAE,IAAI;KAAE,IAAI;KAAG,IAAI;IAAE;IAAG,IAAI;GAAE;GAC7C,UAAA,oBAAC,UAAD,EAAU,YAAW,iBAAkB,CAAA;EAC5B,CAAA,CACT;;AAEV"}
@@ -89,7 +89,9 @@ var help = {
89
89
  "login": {
90
90
  "title": "Create a user or log in",
91
91
  "description": "Publishing needs an account on this registry.",
92
- "bun-note": "bun has no login command: it uses the token that npm adduser saves in .npmrc."
92
+ "bun-note": "bun has no login command: it uses the token that npm adduser saves in .npmrc.",
93
+ "yarn-note": "Prefer to stay in Yarn? Verdaccio's yarn-plugin-npm adds a yarn npm login that can also create the user on this registry.",
94
+ "yarn-plugin-link": "About yarn-plugin-npm"
93
95
  },
94
96
  "publish": {
95
97
  "title": "Publish your package",