create-docusaurus 2.0.0-beta.14 → 2.0.0-beta.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/index.js CHANGED
@@ -8,12 +8,15 @@
8
8
 
9
9
  // @ts-check
10
10
 
11
- const logger = require('@docusaurus/logger').default;
12
- const semver = require('semver');
13
- const path = require('path');
14
- const program = require('commander');
15
- const {default: init} = require('../lib');
16
- const requiredVersion = require('../package.json').engines.node;
11
+ import logger from '@docusaurus/logger';
12
+ import semver from 'semver';
13
+ import path from 'path';
14
+ import {program} from 'commander';
15
+ import {createRequire} from 'module';
16
+ import init from '../lib/index.js';
17
+
18
+ const packageJson = createRequire(import.meta.url)('../package.json');
19
+ const requiredVersion = packageJson.engines.node;
17
20
 
18
21
  if (!semver.satisfies(process.version, requiredVersion)) {
19
22
  logger.error('Minimum Node.js version not met :(');
@@ -29,36 +32,44 @@ function wrapCommand(fn) {
29
32
  });
30
33
  }
31
34
 
32
- program
33
- .version(require('../package.json').version)
34
- .usage('<command> [options]');
35
+ program.version(packageJson.version);
35
36
 
36
37
  program
37
- .command('init [siteName] [template] [rootDir]', {isDefault: true})
38
- .option('--use-npm')
39
- .option('--skip-install')
40
- .option('--typescript')
38
+ .arguments('[siteName] [template] [rootDir]')
39
+ .option(
40
+ '-p, --package-manager <manager>',
41
+ 'The package manager used to install dependencies. One of yarn, npm, and pnpm.',
42
+ )
43
+ .option(
44
+ '-s, --skip-install',
45
+ 'Do not run package manager immediately after scaffolding',
46
+ )
47
+ .option('-t, --typescript', 'Use the TypeScript template variant')
48
+ .option(
49
+ '-g, --git-strategy <strategy>',
50
+ `Only used if the template is a git repository.
51
+ \`deep\`: preserve full history
52
+ \`shallow\`: clone with --depth=1
53
+ \`copy\`: do a shallow clone, but do not create a git repo
54
+ \`custom\`: enter your custom git clone command. We will prompt you for it.`,
55
+ )
41
56
  .description('Initialize website.')
42
57
  .action(
43
58
  (
44
59
  siteName,
45
60
  template,
46
61
  rootDir = '.',
47
- {useNpm, skipInstall, typescript} = {},
62
+ {packageManager, skipInstall, typescript, gitStrategy} = {},
48
63
  ) => {
49
64
  wrapCommand(init)(path.resolve(rootDir), siteName, template, {
50
- useNpm,
65
+ packageManager,
51
66
  skipInstall,
52
67
  typescript,
68
+ gitStrategy,
53
69
  });
54
70
  },
55
71
  );
56
72
 
57
- program.arguments('<command>').action((cmd) => {
58
- program.outputHelp();
59
- logger.error`Unknown command code=${cmd}.`;
60
- });
61
-
62
73
  program.parse(process.argv);
63
74
 
64
75
  if (!process.argv.slice(1).length) {
package/lib/index.d.ts CHANGED
@@ -4,8 +4,17 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
+ declare const SupportedPackageManagers: {
8
+ npm: string;
9
+ yarn: string;
10
+ pnpm: string;
11
+ };
12
+ declare type SupportedPackageManager = keyof typeof SupportedPackageManagers;
13
+ declare const gitStrategies: readonly ["deep", "shallow", "copy", "custom"];
7
14
  export default function init(rootDir: string, siteName?: string, reqTemplate?: string, cliOptions?: Partial<{
8
- useNpm: boolean;
15
+ packageManager: SupportedPackageManager;
9
16
  skipInstall: boolean;
10
17
  typescript: boolean;
18
+ gitStrategy: typeof gitStrategies[number];
11
19
  }>): Promise<void>;
20
+ export {};
package/lib/index.js CHANGED
@@ -1,49 +1,83 @@
1
- "use strict";
2
1
  /**
3
2
  * Copyright (c) Facebook, Inc. and its affiliates.
4
3
  *
5
4
  * This source code is licensed under the MIT license found in the
6
5
  * LICENSE file in the root directory of this source tree.
7
6
  */
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- const tslib_1 = require("tslib");
10
- const logger_1 = (0, tslib_1.__importDefault)(require("@docusaurus/logger"));
11
- const fs_extra_1 = (0, tslib_1.__importDefault)(require("fs-extra"));
12
- const child_process_1 = require("child_process");
13
- const prompts_1 = (0, tslib_1.__importDefault)(require("prompts"));
14
- const path_1 = (0, tslib_1.__importDefault)(require("path"));
15
- const shelljs_1 = (0, tslib_1.__importDefault)(require("shelljs"));
16
- const lodash_1 = require("lodash");
17
- const supports_color_1 = (0, tslib_1.__importDefault)(require("supports-color"));
7
+ import logger from '@docusaurus/logger';
8
+ import fs from 'fs-extra';
9
+ import prompts from 'prompts';
10
+ import path from 'path';
11
+ import shell from 'shelljs';
12
+ import _ from 'lodash';
13
+ import supportsColor from 'supports-color';
14
+ import { fileURLToPath } from 'url';
18
15
  const RecommendedTemplate = 'classic';
19
16
  const TypeScriptTemplateSuffix = '-typescript';
20
- function hasYarn() {
21
- try {
22
- (0, child_process_1.execSync)('yarnpkg --version', { stdio: 'ignore' });
23
- return true;
17
+ // Only used in the rare, rare case of running globally installed create +
18
+ // using --skip-install. We need a default name to show the tip text
19
+ const DefaultPackageManager = 'npm';
20
+ const SupportedPackageManagers = {
21
+ npm: 'package-lock.json',
22
+ yarn: 'yarn.lock',
23
+ pnpm: 'pnpm-lock.yaml',
24
+ };
25
+ const PackageManagersList = Object.keys(SupportedPackageManagers);
26
+ async function findPackageManagerFromLockFile() {
27
+ for (const packageManager of PackageManagersList) {
28
+ const lockFilePath = path.resolve(process.cwd(), SupportedPackageManagers[packageManager]);
29
+ if (await fs.pathExists(lockFilePath)) {
30
+ return packageManager;
31
+ }
32
+ }
33
+ return undefined;
34
+ }
35
+ function findPackageManagerFromUserAgent() {
36
+ return PackageManagersList.find((packageManager) => process.env.npm_config_user_agent?.startsWith(packageManager));
37
+ }
38
+ async function askForPackageManagerChoice() {
39
+ const hasYarn = shell.exec('yarn --version', { silent: true }).code === 0;
40
+ const hasPNPM = shell.exec('pnpm --version', { silent: true }).code === 0;
41
+ if (!hasYarn && !hasPNPM) {
42
+ return 'npm';
24
43
  }
25
- catch (e) {
26
- return false;
44
+ const choices = ['npm', hasYarn && 'yarn', hasPNPM && 'pnpm']
45
+ .filter((p) => Boolean(p))
46
+ .map((p) => ({ title: p, value: p }));
47
+ return (await prompts({
48
+ type: 'select',
49
+ name: 'packageManager',
50
+ message: 'Select a package manager...',
51
+ choices,
52
+ })).packageManager;
53
+ }
54
+ async function getPackageManager(packageManagerChoice, skipInstall = false) {
55
+ if (packageManagerChoice &&
56
+ !PackageManagersList.includes(packageManagerChoice)) {
57
+ throw new Error(`Invalid package manager choice ${packageManagerChoice}. Must be one of ${PackageManagersList.join(', ')}`);
27
58
  }
59
+ return (packageManagerChoice ??
60
+ (await findPackageManagerFromLockFile()) ??
61
+ findPackageManagerFromUserAgent() ??
62
+ // This only happens if the user has a global installation in PATH
63
+ (skipInstall ? DefaultPackageManager : askForPackageManagerChoice()));
28
64
  }
29
65
  function isValidGitRepoUrl(gitRepoUrl) {
30
66
  return ['https://', 'git@'].some((item) => gitRepoUrl.startsWith(item));
31
67
  }
32
68
  async function updatePkg(pkgPath, obj) {
33
- const content = await fs_extra_1.default.readFile(pkgPath, 'utf-8');
69
+ const content = await fs.readFile(pkgPath, 'utf-8');
34
70
  const pkg = JSON.parse(content);
35
71
  const newPkg = Object.assign(pkg, obj);
36
- await fs_extra_1.default.outputFile(pkgPath, JSON.stringify(newPkg, null, 2));
72
+ await fs.outputFile(pkgPath, `${JSON.stringify(newPkg, null, 2)}\n`);
37
73
  }
38
- function readTemplates(templatesDir) {
39
- const templates = fs_extra_1.default
40
- .readdirSync(templatesDir)
41
- .filter((d) => !d.startsWith('.') &&
74
+ async function readTemplates(templatesDir) {
75
+ const templates = (await fs.readdir(templatesDir)).filter((d) => !d.startsWith('.') &&
42
76
  !d.startsWith('README') &&
43
77
  !d.endsWith(TypeScriptTemplateSuffix) &&
44
78
  d !== 'shared');
45
79
  // Classic should be first in list!
46
- return (0, lodash_1.sortBy)(templates, (t) => t !== RecommendedTemplate);
80
+ return _.sortBy(templates, (t) => t !== RecommendedTemplate);
47
81
  }
48
82
  function createTemplateChoices(templates) {
49
83
  function makeNameAndValueChoice(value) {
@@ -63,31 +97,51 @@ function getTypeScriptBaseTemplate(template) {
63
97
  return undefined;
64
98
  }
65
99
  async function copyTemplate(templatesDir, template, dest) {
66
- await fs_extra_1.default.copy(path_1.default.resolve(templatesDir, 'shared'), dest);
67
- // TypeScript variants will copy duplicate resources like CSS & config from base template
100
+ await fs.copy(path.resolve(templatesDir, 'shared'), dest);
101
+ // TypeScript variants will copy duplicate resources like CSS & config from
102
+ // base template
68
103
  const tsBaseTemplate = getTypeScriptBaseTemplate(template);
69
104
  if (tsBaseTemplate) {
70
- const tsBaseTemplatePath = path_1.default.resolve(templatesDir, tsBaseTemplate);
71
- await fs_extra_1.default.copy(tsBaseTemplatePath, dest, {
72
- filter: (filePath) => fs_extra_1.default.statSync(filePath).isDirectory() ||
73
- path_1.default.extname(filePath) === '.css' ||
74
- path_1.default.basename(filePath) === 'docusaurus.config.js',
105
+ const tsBaseTemplatePath = path.resolve(templatesDir, tsBaseTemplate);
106
+ await fs.copy(tsBaseTemplatePath, dest, {
107
+ filter: async (filePath) => (await fs.stat(filePath)).isDirectory() ||
108
+ path.extname(filePath) === '.css' ||
109
+ path.basename(filePath) === 'docusaurus.config.js',
75
110
  });
76
111
  }
77
- await fs_extra_1.default.copy(path_1.default.resolve(templatesDir, template), dest, {
78
- // Symlinks don't exist in published NPM packages anymore, so this is only to prevent errors during local testing
79
- filter: (filePath) => !fs_extra_1.default.lstatSync(filePath).isSymbolicLink(),
112
+ await fs.copy(path.resolve(templatesDir, template), dest, {
113
+ // Symlinks don't exist in published NPM packages anymore, so this is only
114
+ // to prevent errors during local testing
115
+ filter: async (filePath) => !(await fs.lstat(filePath)).isSymbolicLink(),
80
116
  });
81
117
  }
82
- async function init(rootDir, siteName, reqTemplate, cliOptions = {}) {
83
- const useYarn = cliOptions.useNpm ? false : hasYarn();
84
- const templatesDir = path_1.default.resolve(__dirname, '../templates');
85
- const templates = readTemplates(templatesDir);
86
- const hasTS = (templateName) => fs_extra_1.default.pathExistsSync(path_1.default.resolve(templatesDir, `${templateName}${TypeScriptTemplateSuffix}`));
118
+ const gitStrategies = ['deep', 'shallow', 'copy', 'custom'];
119
+ async function getGitCommand(gitStrategy) {
120
+ switch (gitStrategy) {
121
+ case 'shallow':
122
+ case 'copy':
123
+ return 'git clone --recursive --depth 1';
124
+ case 'custom': {
125
+ const { command } = await prompts({
126
+ type: 'text',
127
+ name: 'command',
128
+ message: 'Write your own git clone command. The repository URL and destination directory will be supplied. E.g. "git clone --depth 10"',
129
+ });
130
+ return command;
131
+ }
132
+ case 'deep':
133
+ default:
134
+ return 'git clone';
135
+ }
136
+ }
137
+ export default async function init(rootDir, siteName, reqTemplate, cliOptions = {}) {
138
+ const templatesDir = fileURLToPath(new URL('../templates', import.meta.url));
139
+ const templates = await readTemplates(templatesDir);
140
+ const hasTS = (templateName) => fs.pathExists(path.resolve(templatesDir, `${templateName}${TypeScriptTemplateSuffix}`));
87
141
  let name = siteName;
88
142
  // Prompt if siteName is not passed from CLI.
89
143
  if (!name) {
90
- const prompt = await (0, prompts_1.default)({
144
+ const prompt = await prompts({
91
145
  type: 'text',
92
146
  name: 'name',
93
147
  message: 'What should we name this site?',
@@ -96,27 +150,27 @@ async function init(rootDir, siteName, reqTemplate, cliOptions = {}) {
96
150
  name = prompt.name;
97
151
  }
98
152
  if (!name) {
99
- logger_1.default.error('A website name is required.');
153
+ logger.error('A website name is required.');
100
154
  process.exit(1);
101
155
  }
102
- const dest = path_1.default.resolve(rootDir, name);
103
- if (fs_extra_1.default.existsSync(dest)) {
104
- logger_1.default.error `Directory already exists at path=${dest}!`;
156
+ const dest = path.resolve(rootDir, name);
157
+ if (await fs.pathExists(dest)) {
158
+ logger.error `Directory already exists at path=${dest}!`;
105
159
  process.exit(1);
106
160
  }
107
161
  let template = reqTemplate;
108
162
  let useTS = cliOptions.typescript;
109
163
  // Prompt if template is not provided from CLI.
110
164
  if (!template) {
111
- const templatePrompt = await (0, prompts_1.default)({
165
+ const templatePrompt = await prompts({
112
166
  type: 'select',
113
167
  name: 'template',
114
168
  message: 'Select a template below...',
115
169
  choices: createTemplateChoices(templates),
116
170
  });
117
171
  template = templatePrompt.template;
118
- if (template && !useTS && hasTS(template)) {
119
- const tsPrompt = await (0, prompts_1.default)({
172
+ if (template && !useTS && (await hasTS(template))) {
173
+ const tsPrompt = await prompts({
120
174
  type: 'confirm',
121
175
  name: 'useTS',
122
176
  message: 'This template is available in TypeScript. Do you want to use the TS variant?',
@@ -125,58 +179,80 @@ async function init(rootDir, siteName, reqTemplate, cliOptions = {}) {
125
179
  useTS = tsPrompt.useTS;
126
180
  }
127
181
  }
182
+ let gitStrategy = cliOptions.gitStrategy ?? 'deep';
128
183
  // If user choose Git repository, we'll prompt for the url.
129
184
  if (template === 'Git repository') {
130
- const repoPrompt = await (0, prompts_1.default)({
185
+ const repoPrompt = await prompts({
131
186
  type: 'text',
132
187
  name: 'gitRepoUrl',
133
188
  validate: (url) => {
134
189
  if (url && isValidGitRepoUrl(url)) {
135
190
  return true;
136
191
  }
137
- return logger_1.default.red('Invalid repository URL');
192
+ return logger.red('Invalid repository URL');
138
193
  },
139
- message: logger_1.default.interpolate `Enter a repository URL from GitHub, Bitbucket, GitLab, or any other public repo.
194
+ message: logger.interpolate `Enter a repository URL from GitHub, Bitbucket, GitLab, or any other public repo.
140
195
  (e.g: path=${'https://github.com/ownerName/repoName.git'})`,
141
196
  });
197
+ ({ gitStrategy } = await prompts({
198
+ type: 'select',
199
+ name: 'gitStrategy',
200
+ message: 'How should we clone this repo?',
201
+ choices: [
202
+ { title: 'Deep clone: preserve full history', value: 'deep' },
203
+ { title: 'Shallow clone: clone with --depth=1', value: 'shallow' },
204
+ {
205
+ title: 'Copy: do a shallow clone, but do not create a git repo',
206
+ value: 'copy',
207
+ },
208
+ { title: 'Custom: enter your custom git clone command', value: 'custom' },
209
+ ],
210
+ }));
142
211
  template = repoPrompt.gitRepoUrl;
143
212
  }
144
213
  else if (template === 'Local template') {
145
- const dirPrompt = await (0, prompts_1.default)({
214
+ const dirPrompt = await prompts({
146
215
  type: 'text',
147
216
  name: 'templateDir',
148
- validate: (dir) => {
217
+ validate: async (dir) => {
149
218
  if (dir) {
150
- const fullDir = path_1.default.resolve(process.cwd(), dir);
151
- if (fs_extra_1.default.existsSync(fullDir)) {
219
+ const fullDir = path.resolve(process.cwd(), dir);
220
+ if (await fs.pathExists(fullDir)) {
152
221
  return true;
153
222
  }
154
- return logger_1.default.red(logger_1.default.interpolate `path=${fullDir} does not exist.`);
223
+ return logger.red(logger.interpolate `path=${fullDir} does not exist.`);
155
224
  }
156
- return logger_1.default.red('Please enter a valid path.');
225
+ return logger.red('Please enter a valid path.');
157
226
  },
158
227
  message: 'Enter a local folder path, relative to the current working directory.',
159
228
  });
160
229
  template = dirPrompt.templateDir;
161
230
  }
162
231
  if (!template) {
163
- logger_1.default.error('Template should not be empty');
232
+ logger.error('Template should not be empty');
164
233
  process.exit(1);
165
234
  }
166
- logger_1.default.info('Creating new Docusaurus project...');
235
+ logger.info('Creating new Docusaurus project...');
167
236
  if (isValidGitRepoUrl(template)) {
168
- logger_1.default.info `Cloning Git template path=${template}...`;
169
- if (shelljs_1.default.exec(`git clone --recursive ${template} ${dest}`, { silent: true })
170
- .code !== 0) {
171
- logger_1.default.error `Cloning Git template name=${template} failed!`;
237
+ logger.info `Cloning Git template path=${template}...`;
238
+ if (!gitStrategies.includes(gitStrategy)) {
239
+ logger.error `Invalid git strategy: name=${gitStrategy}. Value must be one of ${gitStrategies.join(', ')}.`;
172
240
  process.exit(1);
173
241
  }
242
+ const command = await getGitCommand(gitStrategy);
243
+ if (shell.exec(`${command} ${template} ${dest}`).code !== 0) {
244
+ logger.error `Cloning Git template name=${template} failed!`;
245
+ process.exit(1);
246
+ }
247
+ if (gitStrategy === 'copy') {
248
+ await fs.remove(path.join(dest, '.git'));
249
+ }
174
250
  }
175
251
  else if (templates.includes(template)) {
176
252
  // Docusaurus templates.
177
253
  if (useTS) {
178
- if (!hasTS(template)) {
179
- logger_1.default.error `Template name=${template} doesn't provide the Typescript variant.`;
254
+ if (!(await hasTS(template))) {
255
+ logger.error `Template name=${template} doesn't provide the Typescript variant.`;
180
256
  process.exit(1);
181
257
  }
182
258
  template = `${template}${TypeScriptTemplateSuffix}`;
@@ -185,76 +261,77 @@ async function init(rootDir, siteName, reqTemplate, cliOptions = {}) {
185
261
  await copyTemplate(templatesDir, template, dest);
186
262
  }
187
263
  catch (err) {
188
- logger_1.default.error `Copying Docusaurus template name=${template} failed!`;
264
+ logger.error `Copying Docusaurus template name=${template} failed!`;
189
265
  throw err;
190
266
  }
191
267
  }
192
- else if (fs_extra_1.default.existsSync(path_1.default.resolve(process.cwd(), template))) {
193
- const templateDir = path_1.default.resolve(process.cwd(), template);
268
+ else if (await fs.pathExists(path.resolve(process.cwd(), template))) {
269
+ const templateDir = path.resolve(process.cwd(), template);
194
270
  try {
195
- await fs_extra_1.default.copy(templateDir, dest);
271
+ await fs.copy(templateDir, dest);
196
272
  }
197
273
  catch (err) {
198
- logger_1.default.error `Copying local template path=${templateDir} failed!`;
274
+ logger.error `Copying local template path=${templateDir} failed!`;
199
275
  throw err;
200
276
  }
201
277
  }
202
278
  else {
203
- logger_1.default.error('Invalid template.');
279
+ logger.error('Invalid template.');
204
280
  process.exit(1);
205
281
  }
206
282
  // Update package.json info.
207
283
  try {
208
- await updatePkg(path_1.default.join(dest, 'package.json'), {
209
- name: (0, lodash_1.kebabCase)(name),
284
+ await updatePkg(path.join(dest, 'package.json'), {
285
+ name: _.kebabCase(name),
210
286
  version: '0.0.0',
211
287
  private: true,
212
288
  });
213
289
  }
214
290
  catch (err) {
215
- logger_1.default.error('Failed to update package.json.');
291
+ logger.error('Failed to update package.json.');
216
292
  throw err;
217
293
  }
218
294
  // We need to rename the gitignore file to .gitignore
219
- if (!fs_extra_1.default.pathExistsSync(path_1.default.join(dest, '.gitignore')) &&
220
- fs_extra_1.default.pathExistsSync(path_1.default.join(dest, 'gitignore'))) {
221
- await fs_extra_1.default.move(path_1.default.join(dest, 'gitignore'), path_1.default.join(dest, '.gitignore'));
295
+ if (!(await fs.pathExists(path.join(dest, '.gitignore'))) &&
296
+ (await fs.pathExists(path.join(dest, 'gitignore')))) {
297
+ await fs.move(path.join(dest, 'gitignore'), path.join(dest, '.gitignore'));
222
298
  }
223
- if (fs_extra_1.default.pathExistsSync(path_1.default.join(dest, 'gitignore'))) {
224
- fs_extra_1.default.removeSync(path_1.default.join(dest, 'gitignore'));
299
+ if (await fs.pathExists(path.join(dest, 'gitignore'))) {
300
+ await fs.remove(path.join(dest, 'gitignore'));
225
301
  }
226
- const pkgManager = useYarn ? 'yarn' : 'npm';
227
302
  // Display the most elegant way to cd.
228
- const cdpath = path_1.default.join(process.cwd(), name) === dest
229
- ? name
230
- : path_1.default.relative(process.cwd(), name);
303
+ const cdpath = path.relative('.', dest);
304
+ const pkgManager = await getPackageManager(cliOptions.packageManager, cliOptions.skipInstall);
231
305
  if (!cliOptions.skipInstall) {
232
- logger_1.default.info `Installing dependencies with name=${pkgManager}...`;
233
- if (shelljs_1.default.exec(`cd "${name}" && ${useYarn ? 'yarn' : 'npm install --color always'}`, {
306
+ shell.cd(dest);
307
+ logger.info `Installing dependencies with name=${pkgManager}...`;
308
+ if (shell.exec(pkgManager === 'yarn' ? 'yarn' : `${pkgManager} install --color always`, {
234
309
  env: {
235
310
  ...process.env,
236
- // Force coloring the output, since the command is invoked by shelljs, which is not the interactive shell
237
- ...(supports_color_1.default.stdout ? { FORCE_COLOR: '1' } : {}),
311
+ // Force coloring the output, since the command is invoked,
312
+ // by shelljs which is not the interactive shell
313
+ ...(supportsColor.stdout ? { FORCE_COLOR: '1' } : {}),
238
314
  },
239
315
  }).code !== 0) {
240
- logger_1.default.error('Dependency installation failed.');
241
- logger_1.default.info `The site directory has already been created, and you can retry by typing:
316
+ logger.error('Dependency installation failed.');
317
+ logger.info `The site directory has already been created, and you can retry by typing:
242
318
 
243
319
  code=${`cd ${cdpath}`}
244
320
  code=${`${pkgManager} install`}`;
245
321
  process.exit(0);
246
322
  }
247
323
  }
248
- logger_1.default.success `Created path=${cdpath}.`;
249
- logger_1.default.info `Inside that directory, you can run several commands:
324
+ const useNpm = pkgManager === 'npm';
325
+ logger.success `Created path=${cdpath}.`;
326
+ logger.info `Inside that directory, you can run several commands:
250
327
 
251
328
  code=${`${pkgManager} start`}
252
329
  Starts the development server.
253
330
 
254
- code=${`${pkgManager} ${useYarn ? '' : 'run '}build`}
331
+ code=${`${pkgManager} ${useNpm ? 'run ' : ''}build`}
255
332
  Bundles your website into static files for production.
256
333
 
257
- code=${`${pkgManager} ${useYarn ? '' : 'run '}serve`}
334
+ code=${`${pkgManager} ${useNpm ? 'run ' : ''}serve`}
258
335
  Serves the built website locally.
259
336
 
260
337
  code=${`${pkgManager} deploy`}
@@ -268,4 +345,3 @@ We recommend that you begin by typing:
268
345
  Happy building awesome websites!
269
346
  `;
270
347
  }
271
- exports.default = init;
package/package.json CHANGED
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "create-docusaurus",
3
- "version": "2.0.0-beta.14",
3
+ "version": "2.0.0-beta.17",
4
4
  "description": "Create Docusaurus apps easily.",
5
+ "type": "module",
5
6
  "repository": {
6
7
  "type": "git",
7
8
  "url": "https://github.com/facebook/docusaurus.git",
@@ -15,29 +16,27 @@
15
16
  "build": "tsc",
16
17
  "watch": "tsc --watch"
17
18
  },
18
- "bin": {
19
- "create-docusaurus": "bin/index.js"
20
- },
19
+ "bin": "bin/index.js",
21
20
  "publishConfig": {
22
21
  "access": "public"
23
22
  },
24
23
  "license": "MIT",
25
24
  "dependencies": {
26
- "@docusaurus/logger": "2.0.0-beta.14",
25
+ "@docusaurus/logger": "2.0.0-beta.17",
27
26
  "commander": "^5.1.0",
28
- "fs-extra": "^10.0.0",
29
- "lodash": "^4.17.20",
30
- "prompts": "^2.4.1",
31
- "semver": "^7.3.4",
32
- "shelljs": "^0.8.4",
33
- "supports-color": "^8.1.1",
27
+ "fs-extra": "^10.0.1",
28
+ "lodash": "^4.17.21",
29
+ "prompts": "^2.4.2",
30
+ "semver": "^7.3.5",
31
+ "shelljs": "^0.8.5",
32
+ "supports-color": "^9.2.1",
34
33
  "tslib": "^2.3.1"
35
34
  },
36
- "engines": {
37
- "node": ">=14"
38
- },
39
35
  "devDependencies": {
40
36
  "@types/supports-color": "^8.1.1"
41
37
  },
42
- "gitHead": "c4824a8937d8f1aa0806667749cbc74058e2b294"
38
+ "engines": {
39
+ "node": ">=14"
40
+ },
41
+ "gitHead": "0032c0b0480083227af2e1b4da2d3ee6ce992403"
43
42
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "docusaurus-2-classic-template",
3
- "version": "2.0.0-beta.14",
3
+ "version": "2.0.0-beta.17",
4
4
  "private": true,
5
5
  "scripts": {
6
6
  "docusaurus": "docusaurus",
@@ -14,9 +14,9 @@
14
14
  "write-heading-ids": "docusaurus write-heading-ids"
15
15
  },
16
16
  "dependencies": {
17
- "@docusaurus/core": "2.0.0-beta.14",
18
- "@docusaurus/preset-classic": "2.0.0-beta.14",
19
- "@mdx-js/react": "^1.6.21",
17
+ "@docusaurus/core": "2.0.0-beta.17",
18
+ "@docusaurus/preset-classic": "2.0.0-beta.17",
19
+ "@mdx-js/react": "^1.6.22",
20
20
  "clsx": "^1.1.1",
21
21
  "prism-react-renderer": "^1.2.1",
22
22
  "react": "^17.0.1",
@@ -1,11 +1,11 @@
1
1
  import React from 'react';
2
2
  import clsx from 'clsx';
3
- import styles from './HomepageFeatures.module.css';
3
+ import styles from './styles.module.css';
4
4
 
5
5
  const FeatureList = [
6
6
  {
7
7
  title: 'Easy to Use',
8
- Svg: require('../../static/img/undraw_docusaurus_mountain.svg').default,
8
+ Svg: require('@site/static/img/undraw_docusaurus_mountain.svg').default,
9
9
  description: (
10
10
  <>
11
11
  Docusaurus was designed from the ground up to be easily installed and
@@ -15,7 +15,7 @@ const FeatureList = [
15
15
  },
16
16
  {
17
17
  title: 'Focus on What Matters',
18
- Svg: require('../../static/img/undraw_docusaurus_tree.svg').default,
18
+ Svg: require('@site/static/img/undraw_docusaurus_tree.svg').default,
19
19
  description: (
20
20
  <>
21
21
  Docusaurus lets you focus on your docs, and we&apos;ll do the chores. Go
@@ -25,7 +25,7 @@ const FeatureList = [
25
25
  },
26
26
  {
27
27
  title: 'Powered by React',
28
- Svg: require('../../static/img/undraw_docusaurus_react.svg').default,
28
+ Svg: require('@site/static/img/undraw_docusaurus_react.svg').default,
29
29
  description: (
30
30
  <>
31
31
  Extend or customize your website layout by reusing React. Docusaurus can
@@ -39,7 +39,7 @@ function Feature({Svg, title, description}) {
39
39
  return (
40
40
  <div className={clsx('col col--4')}>
41
41
  <div className="text--center">
42
- <Svg className={styles.featureSvg} alt={title} />
42
+ <Svg className={styles.featureSvg} role="img" />
43
43
  </div>
44
44
  <div className="text--center padding-horiz--md">
45
45
  <h3>{title}</h3>
@@ -6,16 +6,27 @@
6
6
 
7
7
  /* You can override the default Infima variables here. */
8
8
  :root {
9
- --ifm-color-primary: #25c2a0;
10
- --ifm-color-primary-dark: rgb(33, 175, 144);
11
- --ifm-color-primary-darker: rgb(31, 165, 136);
12
- --ifm-color-primary-darkest: rgb(26, 136, 112);
13
- --ifm-color-primary-light: rgb(70, 203, 174);
14
- --ifm-color-primary-lighter: rgb(102, 212, 189);
15
- --ifm-color-primary-lightest: rgb(146, 224, 208);
9
+ --ifm-color-primary: #2e8555;
10
+ --ifm-color-primary-dark: #29784c;
11
+ --ifm-color-primary-darker: #277148;
12
+ --ifm-color-primary-darkest: #205d3b;
13
+ --ifm-color-primary-light: #33925d;
14
+ --ifm-color-primary-lighter: #359962;
15
+ --ifm-color-primary-lightest: #3cad6e;
16
16
  --ifm-code-font-size: 95%;
17
17
  }
18
18
 
19
+ /* For readability concerns, you should choose a lighter palette in dark mode. */
20
+ [data-theme='dark'] {
21
+ --ifm-color-primary: #25c2a0;
22
+ --ifm-color-primary-dark: #21af90;
23
+ --ifm-color-primary-darker: #1fa588;
24
+ --ifm-color-primary-darkest: #1a8870;
25
+ --ifm-color-primary-light: #29d5b0;
26
+ --ifm-color-primary-lighter: #32d8b4;
27
+ --ifm-color-primary-lightest: #4fddbf;
28
+ }
29
+
19
30
  .docusaurus-highlight-code-line {
20
31
  background-color: rgba(0, 0, 0, 0.1);
21
32
  display: block;
@@ -23,6 +34,6 @@
23
34
  padding: 0 var(--ifm-pre-padding);
24
35
  }
25
36
 
26
- html[data-theme='dark'] .docusaurus-highlight-code-line {
37
+ [data-theme='dark'] .docusaurus-highlight-code-line {
27
38
  background-color: rgba(0, 0, 0, 0.3);
28
39
  }
@@ -4,7 +4,7 @@ import Layout from '@theme/Layout';
4
4
  import Link from '@docusaurus/Link';
5
5
  import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
6
6
  import styles from './index.module.css';
7
- import HomepageFeatures from '../components/HomepageFeatures';
7
+ import HomepageFeatures from '@site/src/components/HomepageFeatures';
8
8
 
9
9
  function HomepageHeader() {
10
10
  const {siteConfig} = useDocusaurusContext();
@@ -10,7 +10,7 @@
10
10
  overflow: hidden;
11
11
  }
12
12
 
13
- @media screen and (max-width: 966px) {
13
+ @media screen and (max-width: 996px) {
14
14
  .heroBanner {
15
15
  padding: 2rem;
16
16
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "docusaurus-2-classic-typescript-template",
3
- "version": "2.0.0-beta.14",
3
+ "version": "2.0.0-beta.17",
4
4
  "private": true,
5
5
  "scripts": {
6
6
  "docusaurus": "docusaurus",
@@ -15,18 +15,18 @@
15
15
  "typecheck": "tsc"
16
16
  },
17
17
  "dependencies": {
18
- "@docusaurus/core": "2.0.0-beta.14",
19
- "@docusaurus/preset-classic": "2.0.0-beta.14",
20
- "@mdx-js/react": "^1.6.21",
18
+ "@docusaurus/core": "2.0.0-beta.17",
19
+ "@docusaurus/preset-classic": "2.0.0-beta.17",
20
+ "@mdx-js/react": "^1.6.22",
21
21
  "clsx": "^1.1.1",
22
22
  "prism-react-renderer": "^1.2.1",
23
23
  "react": "^17.0.1",
24
24
  "react-dom": "^17.0.1"
25
25
  },
26
26
  "devDependencies": {
27
- "@docusaurus/module-type-aliases": "2.0.0-beta.14",
27
+ "@docusaurus/module-type-aliases": "2.0.0-beta.17",
28
28
  "@tsconfig/docusaurus": "^1.0.4",
29
- "typescript": "^4.5.2"
29
+ "typescript": "^4.6.2"
30
30
  },
31
31
  "browserslist": {
32
32
  "production": [
@@ -1,17 +1,17 @@
1
1
  import React from 'react';
2
2
  import clsx from 'clsx';
3
- import styles from './HomepageFeatures.module.css';
3
+ import styles from './styles.module.css';
4
4
 
5
5
  type FeatureItem = {
6
6
  title: string;
7
- image: string;
7
+ Svg: React.ComponentType<React.ComponentProps<'svg'>>;
8
8
  description: JSX.Element;
9
9
  };
10
10
 
11
11
  const FeatureList: FeatureItem[] = [
12
12
  {
13
13
  title: 'Easy to Use',
14
- image: '/img/undraw_docusaurus_mountain.svg',
14
+ Svg: require('@site/static/img/undraw_docusaurus_mountain.svg').default,
15
15
  description: (
16
16
  <>
17
17
  Docusaurus was designed from the ground up to be easily installed and
@@ -21,7 +21,7 @@ const FeatureList: FeatureItem[] = [
21
21
  },
22
22
  {
23
23
  title: 'Focus on What Matters',
24
- image: '/img/undraw_docusaurus_tree.svg',
24
+ Svg: require('@site/static/img/undraw_docusaurus_tree.svg').default,
25
25
  description: (
26
26
  <>
27
27
  Docusaurus lets you focus on your docs, and we&apos;ll do the chores. Go
@@ -31,7 +31,7 @@ const FeatureList: FeatureItem[] = [
31
31
  },
32
32
  {
33
33
  title: 'Powered by React',
34
- image: '/img/undraw_docusaurus_react.svg',
34
+ Svg: require('@site/static/img/undraw_docusaurus_react.svg').default,
35
35
  description: (
36
36
  <>
37
37
  Extend or customize your website layout by reusing React. Docusaurus can
@@ -41,11 +41,11 @@ const FeatureList: FeatureItem[] = [
41
41
  },
42
42
  ];
43
43
 
44
- function Feature({title, image, description}: FeatureItem) {
44
+ function Feature({title, Svg, description}: FeatureItem) {
45
45
  return (
46
46
  <div className={clsx('col col--4')}>
47
47
  <div className="text--center">
48
- <img className={styles.featureSvg} alt={title} src={image} />
48
+ <Svg className={styles.featureSvg} role="img" />
49
49
  </div>
50
50
  <div className="text--center padding-horiz--md">
51
51
  <h3>{title}</h3>
@@ -4,7 +4,7 @@ import Layout from '@theme/Layout';
4
4
  import Link from '@docusaurus/Link';
5
5
  import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
6
6
  import styles from './index.module.css';
7
- import HomepageFeatures from '../components/HomepageFeatures';
7
+ import HomepageFeatures from '@site/src/components/HomepageFeatures';
8
8
 
9
9
  function HomepageHeader() {
10
10
  const {siteConfig} = useDocusaurusContext();
@@ -52,7 +52,6 @@ module.exports = {
52
52
  ' ',
53
53
  ],
54
54
  ],
55
- 'react/jsx-closing-bracket-location': OFF, // Conflicts with Prettier.
56
55
  'react/jsx-filename-extension': OFF,
57
56
  'react-hooks/rules-of-hooks': ERROR,
58
57
  'react/prop-types': OFF, // PropTypes aren't used much these days.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "arrowParens": "always",
3
+ "bracketSameLine": true,
3
4
  "bracketSpacing": false,
4
- "jsxBracketSameLine": true,
5
5
  "printWidth": 80,
6
6
  "proseWrap": "never",
7
7
  "singleQuote": true,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "docusaurus-2-facebook-template",
3
- "version": "2.0.0-beta.14",
3
+ "version": "2.0.0-beta.17",
4
4
  "private": true,
5
5
  "scripts": {
6
6
  "docusaurus": "docusaurus",
@@ -18,25 +18,25 @@
18
18
  "format:diff": "prettier --config .prettierrc --list-different \"**/*.{js,jsx,ts,tsx,md,mdx}\""
19
19
  },
20
20
  "dependencies": {
21
- "@docusaurus/core": "2.0.0-beta.14",
22
- "@docusaurus/preset-classic": "2.0.0-beta.14",
23
- "@mdx-js/react": "^1.6.21",
21
+ "@docusaurus/core": "2.0.0-beta.17",
22
+ "@docusaurus/preset-classic": "2.0.0-beta.17",
23
+ "@mdx-js/react": "^1.6.22",
24
24
  "clsx": "^1.1.1",
25
25
  "react": "^17.0.1",
26
26
  "react-dom": "^17.0.1"
27
27
  },
28
28
  "devDependencies": {
29
29
  "@babel/eslint-parser": "^7.16.3",
30
- "eslint": "^8.2.0",
30
+ "eslint": "^8.8.0",
31
31
  "eslint-config-airbnb": "^19.0.0",
32
- "eslint-config-prettier": "^8.3.0",
32
+ "eslint-config-prettier": "^8.4.0",
33
33
  "eslint-plugin-header": "^3.1.1",
34
34
  "eslint-plugin-import": "^2.25.3",
35
35
  "eslint-plugin-jsx-a11y": "^6.5.1",
36
- "eslint-plugin-react": "^7.27.0",
36
+ "eslint-plugin-react": "^7.29.2",
37
37
  "eslint-plugin-react-hooks": "^4.3.0",
38
- "prettier": "^2.5.0",
39
- "stylelint": "^13.2.1"
38
+ "prettier": "^2.5.1",
39
+ "stylelint": "^14.5.3"
40
40
  },
41
41
  "browserslist": {
42
42
  "production": [
@@ -15,16 +15,27 @@
15
15
 
16
16
  /* You can override the default Infima variables here. */
17
17
  :root {
18
- --ifm-color-primary: #25c2a0;
19
- --ifm-color-primary-dark: rgb(33, 175, 144);
20
- --ifm-color-primary-darker: rgb(31, 165, 136);
21
- --ifm-color-primary-darkest: rgb(26, 136, 112);
22
- --ifm-color-primary-light: rgb(70, 203, 174);
23
- --ifm-color-primary-lighter: rgb(102, 212, 189);
24
- --ifm-color-primary-lightest: rgb(146, 224, 208);
18
+ --ifm-color-primary: #2e8555;
19
+ --ifm-color-primary-dark: #29784c;
20
+ --ifm-color-primary-darker: #277148;
21
+ --ifm-color-primary-darkest: #205d3b;
22
+ --ifm-color-primary-light: #33925d;
23
+ --ifm-color-primary-lighter: #359962;
24
+ --ifm-color-primary-lightest: #3cad6e;
25
25
  --ifm-code-font-size: 95%;
26
26
  }
27
27
 
28
+ /* For readability concerns, you should choose a lighter palette in dark mode. */
29
+ [data-theme='dark'] {
30
+ --ifm-color-primary: #25c2a0;
31
+ --ifm-color-primary-dark: #21af90;
32
+ --ifm-color-primary-darker: #1fa588;
33
+ --ifm-color-primary-darkest: #1a8870;
34
+ --ifm-color-primary-light: #29d5b0;
35
+ --ifm-color-primary-lighter: #32d8b4;
36
+ --ifm-color-primary-lightest: #4fddbf;
37
+ }
38
+
28
39
  .docusaurus-highlight-code-line {
29
40
  background-color: rgb(72, 77, 91);
30
41
  display: block;
@@ -19,7 +19,7 @@
19
19
  overflow: hidden;
20
20
  }
21
21
 
22
- @media screen and (max-width: 966px) {
22
+ @media screen and (max-width: 996px) {
23
23
  .heroBanner {
24
24
  padding: 2rem;
25
25
  }
@@ -12,24 +12,36 @@ Get started by **creating a new site**.
12
12
 
13
13
  Or **try Docusaurus immediately** with **[docusaurus.new](https://docusaurus.new)**.
14
14
 
15
+ ### What you'll need
16
+
17
+ - [Node.js](https://nodejs.org/en/download/) version 14 or above:
18
+ - When installing Node.js, you are recommended to check all checkboxes related to dependencies.
19
+
15
20
  ## Generate a new site
16
21
 
17
- Generate a new Docusaurus site using the **classic template**:
22
+ Generate a new Docusaurus site using the **classic template**.
18
23
 
19
- ```shell
24
+ The classic template will automatically be added to your project after you run the command:
25
+
26
+ ```bash
20
27
  npm init docusaurus@latest my-website classic
21
28
  ```
22
29
 
30
+ You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor.
31
+
32
+ The command also installs all necessary dependencies you need to run Docusaurus.
33
+
23
34
  ## Start your site
24
35
 
25
36
  Run the development server:
26
37
 
27
- ```shell
38
+ ```bash
28
39
  cd my-website
29
-
30
- npx docusaurus start
40
+ npm run start
31
41
  ```
32
42
 
33
- Your site starts at `http://localhost:3000`.
43
+ The `cd` command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there.
44
+
45
+ The `npm run start` command builds your website locally and serves it through a development server, ready for you to view at http://localhost:3000/.
34
46
 
35
- Open `docs/intro.md` and edit some lines: the site **reloads automatically** and displays your changes.
47
+ Open `docs/intro.md` (this page) and edit some lines: the site **reloads automatically** and displays your changes.
@@ -1,4 +1,5 @@
1
1
  <svg xmlns="http://www.w3.org/2000/svg" width="1088" height="687.962" viewBox="0 0 1088 687.962">
2
+ <title>Easy to Use</title>
2
3
  <g id="Group_12" data-name="Group 12" transform="translate(-57 -56)">
3
4
  <g id="Group_11" data-name="Group 11" transform="translate(57 56)">
4
5
  <path id="Path_83" data-name="Path 83" d="M1017.81,560.461c-5.27,45.15-16.22,81.4-31.25,110.31-20,38.52-54.21,54.04-84.77,70.28a193.275,193.275,0,0,1-27.46,11.94c-55.61,19.3-117.85,14.18-166.74,3.99a657.282,657.282,0,0,0-104.09-13.16q-14.97-.675-29.97-.67c-15.42.02-293.07,5.29-360.67-131.57-16.69-33.76-28.13-75-32.24-125.27-11.63-142.12,52.29-235.46,134.74-296.47,155.97-115.41,369.76-110.57,523.43,7.88C941.15,276.621,1036.99,396.031,1017.81,560.461Z" transform="translate(-56 -106.019)" fill="#3f3d56"/>
@@ -1,4 +1,5 @@
1
1
  <svg xmlns="http://www.w3.org/2000/svg" width="1041.277" height="554.141" viewBox="0 0 1041.277 554.141">
2
+ <title>Powered by React</title>
2
3
  <g id="Group_24" data-name="Group 24" transform="translate(-440 -263)">
3
4
  <g id="Group_23" data-name="Group 23" transform="translate(439.989 262.965)">
4
5
  <path id="Path_299" data-name="Path 299" d="M1040.82,611.12q-1.74,3.75-3.47,7.4-2.7,5.67-5.33,11.12c-.78,1.61-1.56,3.19-2.32,4.77-8.6,17.57-16.63,33.11-23.45,45.89A73.21,73.21,0,0,1,942.44,719l-151.65,1.65h-1.6l-13,.14-11.12.12-34.1.37h-1.38l-17.36.19h-.53l-107,1.16-95.51,1-11.11.12-69,.75H429l-44.75.48h-.48l-141.5,1.53-42.33.46a87.991,87.991,0,0,1-10.79-.54h0c-1.22-.14-2.44-.3-3.65-.49a87.38,87.38,0,0,1-51.29-27.54C116,678.37,102.75,655,93.85,629.64q-1.93-5.49-3.6-11.12C59.44,514.37,97,380,164.6,290.08q4.25-5.64,8.64-11l.07-.08c20.79-25.52,44.1-46.84,68.93-62,44-26.91,92.75-34.49,140.7-11.9,40.57,19.12,78.45,28.11,115.17,30.55,3.71.24,7.42.42,11.11.53,84.23,2.65,163.17-27.7,255.87-47.29,3.69-.78,7.39-1.55,11.12-2.28,66.13-13.16,139.49-20.1,226.73-5.51a189.089,189.089,0,0,1,26.76,6.4q5.77,1.86,11.12,4c41.64,16.94,64.35,48.24,74,87.46q1.37,5.46,2.37,11.11C1134.3,384.41,1084.19,518.23,1040.82,611.12Z" transform="translate(-79.34 -172.91)" fill="#f2f2f2"/>
@@ -1 +1,40 @@
1
- <svg id="ac356da0-b129-4ca5-aecc-4700531dd101" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="1129" height="663" viewBox="0 0 1129 663"><title>docu_tree</title><circle cx="321" cy="321" r="321" fill="#f2f2f2"/><ellipse cx="559" cy="635.49998" rx="514" ry="27.50002" fill="#3f3d56"/><ellipse cx="558" cy="627" rx="460" ry="22" opacity="0.2"/><rect x="131" y="152.5" width="840" height="50" fill="#3f3d56"/><path d="M166.5,727.3299A21.67009,21.67009,0,0,0,188.1701,749H984.8299A21.67009,21.67009,0,0,0,1006.5,727.3299V296h-840Z" transform="translate(-35.5 -118.5)" fill="#3f3d56"/><path d="M984.8299,236H188.1701A21.67009,21.67009,0,0,0,166.5,257.6701V296h840V257.6701A21.67009,21.67009,0,0,0,984.8299,236Z" transform="translate(-35.5 -118.5)" fill="#3f3d56"/><path d="M984.8299,236H188.1701A21.67009,21.67009,0,0,0,166.5,257.6701V296h840V257.6701A21.67009,21.67009,0,0,0,984.8299,236Z" transform="translate(-35.5 -118.5)" opacity="0.2"/><circle cx="181" cy="147.5" r="13" fill="#3f3d56"/><circle cx="217" cy="147.5" r="13" fill="#3f3d56"/><circle cx="253" cy="147.5" r="13" fill="#3f3d56"/><rect x="168" y="213.5" width="337" height="386" rx="5.33505" fill="#606060"/><rect x="603" y="272.5" width="284" height="22" rx="5.47638" fill="#2e8555"/><rect x="537" y="352.5" width="416" height="15" rx="5.47638" fill="#2e8555"/><rect x="537" y="396.5" width="416" height="15" rx="5.47638" fill="#2e8555"/><rect x="537" y="440.5" width="416" height="15" rx="5.47638" fill="#2e8555"/><rect x="537" y="484.5" width="416" height="15" rx="5.47638" fill="#2e8555"/><rect x="865" y="552.5" width="88" height="26" rx="7.02756" fill="#3ecc5f"/><path d="M1088.60287,624.61594a30.11371,30.11371,0,0,0,3.98291-15.266c0-13.79652-8.54358-24.98081-19.08256-24.98081s-19.08256,11.18429-19.08256,24.98081a30.11411,30.11411,0,0,0,3.98291,15.266,31.248,31.248,0,0,0,0,30.53213,31.248,31.248,0,0,0,0,30.53208,31.248,31.248,0,0,0,0,30.53208,30.11408,30.11408,0,0,0-3.98291,15.266c0,13.79652,8.54353,24.98081,19.08256,24.98081s19.08256-11.18429,19.08256-24.98081a30.11368,30.11368,0,0,0-3.98291-15.266,31.248,31.248,0,0,0,0-30.53208,31.248,31.248,0,0,0,0-30.53208,31.248,31.248,0,0,0,0-30.53213Z" transform="translate(-35.5 -118.5)" fill="#3f3d56"/><ellipse cx="1038.00321" cy="460.31783" rx="19.08256" ry="24.9808" fill="#3f3d56"/><ellipse cx="1038.00321" cy="429.78574" rx="19.08256" ry="24.9808" fill="#3f3d56"/><path d="M1144.93871,339.34489a91.61081,91.61081,0,0,0,7.10658-10.46092l-50.141-8.23491,54.22885.4033a91.566,91.566,0,0,0,1.74556-72.42605l-72.75449,37.74139,67.09658-49.32086a91.41255,91.41255,0,1,0-150.971,102.29805,91.45842,91.45842,0,0,0-10.42451,16.66946l65.0866,33.81447-69.40046-23.292a91.46011,91.46011,0,0,0,14.73837,85.83669,91.40575,91.40575,0,1,0,143.68892,0,91.41808,91.41808,0,0,0,0-113.02862Z" transform="translate(-35.5 -118.5)" fill="#3ecc5f" fill-rule="evenodd"/><path d="M981.6885,395.8592a91.01343,91.01343,0,0,0,19.56129,56.51431,91.40575,91.40575,0,1,0,143.68892,0C1157.18982,436.82067,981.6885,385.60008,981.6885,395.8592Z" transform="translate(-35.5 -118.5)" opacity="0.1"/><path d="M365.62,461.43628H477.094v45.12043H365.62Z" transform="translate(-35.5 -118.5)" fill="#fff" fill-rule="evenodd"/><path d="M264.76252,608.74122a26.50931,26.50931,0,0,1-22.96231-13.27072,26.50976,26.50976,0,0,0,22.96231,39.81215H291.304V608.74122Z" transform="translate(-35.5 -118.5)" fill="#3ecc5f" fill-rule="evenodd"/><path d="M384.17242,468.57061l92.92155-5.80726V449.49263a26.54091,26.54091,0,0,0-26.54143-26.54143H331.1161l-3.31768-5.74622a3.83043,3.83043,0,0,0-6.63536,0l-3.31768,5.74622-3.31767-5.74622a3.83043,3.83043,0,0,0-6.63536,0l-3.31768,5.74622L301.257,417.205a3.83043,3.83043,0,0,0-6.63536,0L291.304,422.9512c-.02919,0-.05573.004-.08625.004l-5.49674-5.49541a3.8293,3.8293,0,0,0-6.4071,1.71723l-1.81676,6.77338L270.607,424.1031a3.82993,3.82993,0,0,0-4.6912,4.69253l1.84463,6.89148-6.77072,1.81411a3.8315,3.8315,0,0,0-1.71988,6.40975l5.49673,5.49673c0,.02787-.004.05574-.004.08493l-5.74622,3.31768a3.83043,3.83043,0,0,0,0,6.63536l5.74621,3.31768L259.0163,466.081a3.83043,3.83043,0,0,0,0,6.63536l5.74622,3.31768-5.74622,3.31767a3.83043,3.83043,0,0,0,0,6.63536l5.74622,3.31768-5.74622,3.31768a3.83043,3.83043,0,0,0,0,6.63536l5.74622,3.31768-5.74622,3.31767a3.83043,3.83043,0,0,0,0,6.63536l5.74622,3.31768-5.74622,3.31768a3.83043,3.83043,0,0,0,0,6.63536l5.74622,3.31768-5.74622,3.31768a3.83042,3.83042,0,0,0,0,6.63535l5.74622,3.31768-5.74622,3.31768a3.83043,3.83043,0,0,0,0,6.63536l5.74622,3.31768L259.0163,558.976a3.83042,3.83042,0,0,0,0,6.63535l5.74622,3.31768-5.74622,3.31768a3.83043,3.83043,0,0,0,0,6.63536l5.74622,3.31768-5.74622,3.31768a3.83042,3.83042,0,0,0,0,6.63535l5.74622,3.31768-5.74622,3.31768a3.83043,3.83043,0,0,0,0,6.63536l5.74622,3.31768A26.54091,26.54091,0,0,0,291.304,635.28265H450.55254A26.5409,26.5409,0,0,0,477.094,608.74122V502.5755l-92.92155-5.80727a14.12639,14.12639,0,0,1,0-28.19762" transform="translate(-35.5 -118.5)" fill="#3ecc5f" fill-rule="evenodd"/><path d="M424.01111,635.28265h39.81214V582.19979H424.01111Z" transform="translate(-35.5 -118.5)" fill="#3ecc5f" fill-rule="evenodd"/><path d="M490.36468,602.10586a6.60242,6.60242,0,0,0-.848.08493c-.05042-.19906-.09821-.39945-.15393-.59852A6.62668,6.62668,0,1,0,482.80568,590.21q-.2203-.22491-.44457-.44589a6.62391,6.62391,0,1,0-11.39689-6.56369c-.1964-.05575-.39414-.10218-.59056-.15262a6.63957,6.63957,0,1,0-13.10086,0c-.1964.05042-.39414.09687-.59056.15262a6.62767,6.62767,0,1,0-11.39688,6.56369,26.52754,26.52754,0,1,0,44.23127,25.52756,6.6211,6.6211,0,1,0,.848-13.18579" transform="translate(-35.5 -118.5)" fill="#44d860" fill-rule="evenodd"/><path d="M437.28182,555.65836H477.094V529.11693H437.28182Z" transform="translate(-35.5 -118.5)" fill="#3ecc5f" fill-rule="evenodd"/><path d="M490.36468,545.70532a3.31768,3.31768,0,0,0,0-6.63536,3.41133,3.41133,0,0,0-.42333.04247c-.02655-.09953-.04911-.19907-.077-.29859a3.319,3.319,0,0,0-1.278-6.37923,3.28174,3.28174,0,0,0-2.00122.68742q-.10947-.11346-.22294-.22295a3.282,3.282,0,0,0,.67149-1.98265,3.31768,3.31768,0,0,0-6.37-1.2992,13.27078,13.27078,0,1,0,0,25.54082,3.31768,3.31768,0,0,0,6.37-1.2992,3.282,3.282,0,0,0-.67149-1.98265q.11347-.10947.22294-.22294a3.28174,3.28174,0,0,0,2.00122.68742,3.31768,3.31768,0,0,0,1.278-6.37923c.02786-.0982.05042-.19907.077-.29859a3.41325,3.41325,0,0,0,.42333.04246" transform="translate(-35.5 -118.5)" fill="#44d860" fill-rule="evenodd"/><path d="M317.84538,466.081a3.31768,3.31768,0,0,1-3.31767-3.31768,9.953,9.953,0,1,0-19.90608,0,3.31768,3.31768,0,1,1-6.63535,0,16.58839,16.58839,0,1,1,33.17678,0,3.31768,3.31768,0,0,1-3.31768,3.31768" transform="translate(-35.5 -118.5)" fill-rule="evenodd"/><path d="M370.92825,635.28265h79.62429A26.5409,26.5409,0,0,0,477.094,608.74122v-92.895H397.46968a26.54091,26.54091,0,0,0-26.54143,26.54143Z" transform="translate(-35.5 -118.5)" fill="#ffff50" fill-rule="evenodd"/><path d="M457.21444,556.98543H390.80778a1.32707,1.32707,0,0,1,0-2.65414h66.40666a1.32707,1.32707,0,0,1,0,2.65414m0,26.54143H390.80778a1.32707,1.32707,0,1,1,0-2.65414h66.40666a1.32707,1.32707,0,0,1,0,2.65414m0,26.54143H390.80778a1.32707,1.32707,0,1,1,0-2.65414h66.40666a1.32707,1.32707,0,0,1,0,2.65414m0-66.10674H390.80778a1.32707,1.32707,0,0,1,0-2.65414h66.40666a1.32707,1.32707,0,0,1,0,2.65414m0,26.29459H390.80778a1.32707,1.32707,0,0,1,0-2.65414h66.40666a1.32707,1.32707,0,0,1,0,2.65414m0,26.54143H390.80778a1.32707,1.32707,0,0,1,0-2.65414h66.40666a1.32707,1.32707,0,0,1,0,2.65414M477.094,474.19076c-.01592,0-.0292-.008-.04512-.00663-4.10064.13934-6.04083,4.24132-7.75274,7.86024-1.78623,3.78215-3.16771,6.24122-5.43171,6.16691-2.50685-.09024-3.94007-2.92222-5.45825-5.91874-1.74377-3.44243-3.73438-7.34667-7.91333-7.20069-4.04227.138-5.98907,3.70784-7.70631,6.857-1.82738,3.35484-3.07084,5.39455-5.46887,5.30033-2.55727-.09289-3.91619-2.39536-5.48877-5.06013-1.75306-2.96733-3.77951-6.30359-7.8775-6.18946-3.97326.13669-5.92537,3.16507-7.64791,5.83912-1.82207,2.82666-3.09872,4.5492-5.52725,4.447-2.61832-.09289-3.9706-2.00388-5.53522-4.21611-1.757-2.4856-3.737-5.299-7.82308-5.16231-3.88567.13271-5.83779,2.61434-7.559,4.80135-1.635,2.07555-2.9116,3.71846-5.61218,3.615a1.32793,1.32793,0,1,0-.09555,2.65414c4.00377.134,6.03154-2.38873,7.79257-4.6275,1.562-1.9853,2.91027-3.69855,5.56441-3.78879,2.55594-.10882,3.75429,1.47968,5.56707,4.04093,1.7212,2.43385,3.67465,5.19416,7.60545,5.33616,4.11789.138,6.09921-2.93946,7.8536-5.66261,1.56861-2.43385,2.92221-4.53461,5.50734-4.62352,2.37944-.08892,3.67466,1.79154,5.50072,4.885,1.72121,2.91557,3.67069,6.21865,7.67977,6.36463,4.14709.14332,6.14965-3.47693,7.89475-6.68181,1.51155-2.77092,2.93814-5.38791,5.46621-5.4755,2.37944-.05573,3.62025,2.11668,5.45558,5.74622,1.71459,3.388,3.65875,7.22591,7.73019,7.37321l.22429.004c4.06614,0,5.99571-4.08074,7.70364-7.68905,1.51154-3.19825,2.94211-6.21069,5.3972-6.33411Z" transform="translate(-35.5 -118.5)" fill-rule="evenodd"/><path d="M344.38682,635.28265h53.08286V582.19979H344.38682Z" transform="translate(-35.5 -118.5)" fill="#3ecc5f" fill-rule="evenodd"/><path d="M424.01111,602.10586a6.60242,6.60242,0,0,0-.848.08493c-.05042-.19906-.09821-.39945-.15394-.59852A6.62667,6.62667,0,1,0,416.45211,590.21q-.2203-.22491-.44458-.44589a6.62391,6.62391,0,1,0-11.39689-6.56369c-.1964-.05575-.39413-.10218-.59054-.15262a6.63957,6.63957,0,1,0-13.10084,0c-.19641.05042-.39414.09687-.59055.15262a6.62767,6.62767,0,1,0-11.39689,6.56369,26.52755,26.52755,0,1,0,44.2313,25.52756,6.6211,6.6211,0,1,0,.848-13.18579" transform="translate(-35.5 -118.5)" fill="#44d860" fill-rule="evenodd"/><path d="M344.38682,555.65836h53.08286V529.11693H344.38682Z" transform="translate(-35.5 -118.5)" fill="#3ecc5f" fill-rule="evenodd"/><path d="M410.74039,545.70532a3.31768,3.31768,0,1,0,0-6.63536,3.41133,3.41133,0,0,0-.42333.04247c-.02655-.09953-.04911-.19907-.077-.29859a3.319,3.319,0,0,0-1.278-6.37923,3.28174,3.28174,0,0,0-2.00122.68742q-.10947-.11346-.22294-.22295a3.282,3.282,0,0,0,.67149-1.98265,3.31768,3.31768,0,0,0-6.37-1.2992,13.27078,13.27078,0,1,0,0,25.54082,3.31768,3.31768,0,0,0,6.37-1.2992,3.282,3.282,0,0,0-.67149-1.98265q.11347-.10947.22294-.22294a3.28174,3.28174,0,0,0,2.00122.68742,3.31768,3.31768,0,0,0,1.278-6.37923c.02786-.0982.05042-.19907.077-.29859a3.41325,3.41325,0,0,0,.42333.04246" transform="translate(-35.5 -118.5)" fill="#44d860" fill-rule="evenodd"/><path d="M424.01111,447.8338a3.60349,3.60349,0,0,1-.65028-.06636,3.34415,3.34415,0,0,1-.62372-.18579,3.44679,3.44679,0,0,1-.572-.30522,5.02708,5.02708,0,0,1-.50429-.4114,3.88726,3.88726,0,0,1-.41007-.50428,3.27532,3.27532,0,0,1-.55737-1.84463,3.60248,3.60248,0,0,1,.06636-.65027,3.82638,3.82638,0,0,1,.18447-.62373,3.48858,3.48858,0,0,1,.30656-.57064,3.197,3.197,0,0,1,.91436-.91568,3.44685,3.44685,0,0,1,.572-.30523,3.344,3.344,0,0,1,.62372-.18578,3.06907,3.06907,0,0,1,1.30053,0,3.22332,3.22332,0,0,1,1.19436.491,5.02835,5.02835,0,0,1,.50429.41139,4.8801,4.8801,0,0,1,.41139.50429,3.38246,3.38246,0,0,1,.30522.57064,3.47806,3.47806,0,0,1,.25215,1.274A3.36394,3.36394,0,0,1,426.36,446.865a5.02708,5.02708,0,0,1-.50429.4114,3.3057,3.3057,0,0,1-1.84463.55737m26.54143-1.65884a3.38754,3.38754,0,0,1-2.35024-.96877,5.04185,5.04185,0,0,1-.41007-.50428,3.27532,3.27532,0,0,1-.55737-1.84463,3.38659,3.38659,0,0,1,.96744-2.34892,5.02559,5.02559,0,0,1,.50429-.41139,3.44685,3.44685,0,0,1,.572-.30523,3.3432,3.3432,0,0,1,.62373-.18579,3.06952,3.06952,0,0,1,1.30052,0,3.22356,3.22356,0,0,1,1.19436.491,5.02559,5.02559,0,0,1,.50429.41139,3.38792,3.38792,0,0,1,.96876,2.34892,3.72635,3.72635,0,0,1-.06636.65026,3.37387,3.37387,0,0,1-.18579.62373,4.71469,4.71469,0,0,1-.30522.57064,4.8801,4.8801,0,0,1-.41139.50429,5.02559,5.02559,0,0,1-.50429.41139,3.30547,3.30547,0,0,1-1.84463.55737" transform="translate(-35.5 -118.5)" fill-rule="evenodd"/></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="1129" height="663" viewBox="0 0 1129 663">
2
+ <title>Focus on What Matters</title>
3
+ <circle cx="321" cy="321" r="321" fill="#f2f2f2" />
4
+ <ellipse cx="559" cy="635.49998" rx="514" ry="27.50002" fill="#3f3d56" />
5
+ <ellipse cx="558" cy="627" rx="460" ry="22" opacity="0.2" />
6
+ <rect x="131" y="152.5" width="840" height="50" fill="#3f3d56" />
7
+ <path d="M166.5,727.3299A21.67009,21.67009,0,0,0,188.1701,749H984.8299A21.67009,21.67009,0,0,0,1006.5,727.3299V296h-840Z" transform="translate(-35.5 -118.5)" fill="#3f3d56" />
8
+ <path d="M984.8299,236H188.1701A21.67009,21.67009,0,0,0,166.5,257.6701V296h840V257.6701A21.67009,21.67009,0,0,0,984.8299,236Z" transform="translate(-35.5 -118.5)" fill="#3f3d56" />
9
+ <path d="M984.8299,236H188.1701A21.67009,21.67009,0,0,0,166.5,257.6701V296h840V257.6701A21.67009,21.67009,0,0,0,984.8299,236Z" transform="translate(-35.5 -118.5)" opacity="0.2" />
10
+ <circle cx="181" cy="147.5" r="13" fill="#3f3d56" />
11
+ <circle cx="217" cy="147.5" r="13" fill="#3f3d56" />
12
+ <circle cx="253" cy="147.5" r="13" fill="#3f3d56" />
13
+ <rect x="168" y="213.5" width="337" height="386" rx="5.33505" fill="#606060" />
14
+ <rect x="603" y="272.5" width="284" height="22" rx="5.47638" fill="#2e8555" />
15
+ <rect x="537" y="352.5" width="416" height="15" rx="5.47638" fill="#2e8555" />
16
+ <rect x="537" y="396.5" width="416" height="15" rx="5.47638" fill="#2e8555" />
17
+ <rect x="537" y="440.5" width="416" height="15" rx="5.47638" fill="#2e8555" />
18
+ <rect x="537" y="484.5" width="416" height="15" rx="5.47638" fill="#2e8555" />
19
+ <rect x="865" y="552.5" width="88" height="26" rx="7.02756" fill="#3ecc5f" />
20
+ <path d="M1088.60287,624.61594a30.11371,30.11371,0,0,0,3.98291-15.266c0-13.79652-8.54358-24.98081-19.08256-24.98081s-19.08256,11.18429-19.08256,24.98081a30.11411,30.11411,0,0,0,3.98291,15.266,31.248,31.248,0,0,0,0,30.53213,31.248,31.248,0,0,0,0,30.53208,31.248,31.248,0,0,0,0,30.53208,30.11408,30.11408,0,0,0-3.98291,15.266c0,13.79652,8.54353,24.98081,19.08256,24.98081s19.08256-11.18429,19.08256-24.98081a30.11368,30.11368,0,0,0-3.98291-15.266,31.248,31.248,0,0,0,0-30.53208,31.248,31.248,0,0,0,0-30.53208,31.248,31.248,0,0,0,0-30.53213Z" transform="translate(-35.5 -118.5)" fill="#3f3d56" />
21
+ <ellipse cx="1038.00321" cy="460.31783" rx="19.08256" ry="24.9808" fill="#3f3d56" />
22
+ <ellipse cx="1038.00321" cy="429.78574" rx="19.08256" ry="24.9808" fill="#3f3d56" />
23
+ <path d="M1144.93871,339.34489a91.61081,91.61081,0,0,0,7.10658-10.46092l-50.141-8.23491,54.22885.4033a91.566,91.566,0,0,0,1.74556-72.42605l-72.75449,37.74139,67.09658-49.32086a91.41255,91.41255,0,1,0-150.971,102.29805,91.45842,91.45842,0,0,0-10.42451,16.66946l65.0866,33.81447-69.40046-23.292a91.46011,91.46011,0,0,0,14.73837,85.83669,91.40575,91.40575,0,1,0,143.68892,0,91.41808,91.41808,0,0,0,0-113.02862Z" transform="translate(-35.5 -118.5)" fill="#3ecc5f" fill-rule="evenodd" />
24
+ <path d="M981.6885,395.8592a91.01343,91.01343,0,0,0,19.56129,56.51431,91.40575,91.40575,0,1,0,143.68892,0C1157.18982,436.82067,981.6885,385.60008,981.6885,395.8592Z" transform="translate(-35.5 -118.5)" opacity="0.1" />
25
+ <path d="M365.62,461.43628H477.094v45.12043H365.62Z" transform="translate(-35.5 -118.5)" fill="#fff" fill-rule="evenodd" />
26
+ <path d="M264.76252,608.74122a26.50931,26.50931,0,0,1-22.96231-13.27072,26.50976,26.50976,0,0,0,22.96231,39.81215H291.304V608.74122Z" transform="translate(-35.5 -118.5)" fill="#3ecc5f" fill-rule="evenodd" />
27
+ <path d="M384.17242,468.57061l92.92155-5.80726V449.49263a26.54091,26.54091,0,0,0-26.54143-26.54143H331.1161l-3.31768-5.74622a3.83043,3.83043,0,0,0-6.63536,0l-3.31768,5.74622-3.31767-5.74622a3.83043,3.83043,0,0,0-6.63536,0l-3.31768,5.74622L301.257,417.205a3.83043,3.83043,0,0,0-6.63536,0L291.304,422.9512c-.02919,0-.05573.004-.08625.004l-5.49674-5.49541a3.8293,3.8293,0,0,0-6.4071,1.71723l-1.81676,6.77338L270.607,424.1031a3.82993,3.82993,0,0,0-4.6912,4.69253l1.84463,6.89148-6.77072,1.81411a3.8315,3.8315,0,0,0-1.71988,6.40975l5.49673,5.49673c0,.02787-.004.05574-.004.08493l-5.74622,3.31768a3.83043,3.83043,0,0,0,0,6.63536l5.74621,3.31768L259.0163,466.081a3.83043,3.83043,0,0,0,0,6.63536l5.74622,3.31768-5.74622,3.31767a3.83043,3.83043,0,0,0,0,6.63536l5.74622,3.31768-5.74622,3.31768a3.83043,3.83043,0,0,0,0,6.63536l5.74622,3.31768-5.74622,3.31767a3.83043,3.83043,0,0,0,0,6.63536l5.74622,3.31768-5.74622,3.31768a3.83043,3.83043,0,0,0,0,6.63536l5.74622,3.31768-5.74622,3.31768a3.83042,3.83042,0,0,0,0,6.63535l5.74622,3.31768-5.74622,3.31768a3.83043,3.83043,0,0,0,0,6.63536l5.74622,3.31768L259.0163,558.976a3.83042,3.83042,0,0,0,0,6.63535l5.74622,3.31768-5.74622,3.31768a3.83043,3.83043,0,0,0,0,6.63536l5.74622,3.31768-5.74622,3.31768a3.83042,3.83042,0,0,0,0,6.63535l5.74622,3.31768-5.74622,3.31768a3.83043,3.83043,0,0,0,0,6.63536l5.74622,3.31768A26.54091,26.54091,0,0,0,291.304,635.28265H450.55254A26.5409,26.5409,0,0,0,477.094,608.74122V502.5755l-92.92155-5.80727a14.12639,14.12639,0,0,1,0-28.19762" transform="translate(-35.5 -118.5)" fill="#3ecc5f" fill-rule="evenodd" />
28
+ <path d="M424.01111,635.28265h39.81214V582.19979H424.01111Z" transform="translate(-35.5 -118.5)" fill="#3ecc5f" fill-rule="evenodd" />
29
+ <path d="M490.36468,602.10586a6.60242,6.60242,0,0,0-.848.08493c-.05042-.19906-.09821-.39945-.15393-.59852A6.62668,6.62668,0,1,0,482.80568,590.21q-.2203-.22491-.44457-.44589a6.62391,6.62391,0,1,0-11.39689-6.56369c-.1964-.05575-.39414-.10218-.59056-.15262a6.63957,6.63957,0,1,0-13.10086,0c-.1964.05042-.39414.09687-.59056.15262a6.62767,6.62767,0,1,0-11.39688,6.56369,26.52754,26.52754,0,1,0,44.23127,25.52756,6.6211,6.6211,0,1,0,.848-13.18579" transform="translate(-35.5 -118.5)" fill="#44d860" fill-rule="evenodd" />
30
+ <path d="M437.28182,555.65836H477.094V529.11693H437.28182Z" transform="translate(-35.5 -118.5)" fill="#3ecc5f" fill-rule="evenodd" />
31
+ <path d="M490.36468,545.70532a3.31768,3.31768,0,0,0,0-6.63536,3.41133,3.41133,0,0,0-.42333.04247c-.02655-.09953-.04911-.19907-.077-.29859a3.319,3.319,0,0,0-1.278-6.37923,3.28174,3.28174,0,0,0-2.00122.68742q-.10947-.11346-.22294-.22295a3.282,3.282,0,0,0,.67149-1.98265,3.31768,3.31768,0,0,0-6.37-1.2992,13.27078,13.27078,0,1,0,0,25.54082,3.31768,3.31768,0,0,0,6.37-1.2992,3.282,3.282,0,0,0-.67149-1.98265q.11347-.10947.22294-.22294a3.28174,3.28174,0,0,0,2.00122.68742,3.31768,3.31768,0,0,0,1.278-6.37923c.02786-.0982.05042-.19907.077-.29859a3.41325,3.41325,0,0,0,.42333.04246" transform="translate(-35.5 -118.5)" fill="#44d860" fill-rule="evenodd" />
32
+ <path d="M317.84538,466.081a3.31768,3.31768,0,0,1-3.31767-3.31768,9.953,9.953,0,1,0-19.90608,0,3.31768,3.31768,0,1,1-6.63535,0,16.58839,16.58839,0,1,1,33.17678,0,3.31768,3.31768,0,0,1-3.31768,3.31768" transform="translate(-35.5 -118.5)" fill-rule="evenodd" />
33
+ <path d="M370.92825,635.28265h79.62429A26.5409,26.5409,0,0,0,477.094,608.74122v-92.895H397.46968a26.54091,26.54091,0,0,0-26.54143,26.54143Z" transform="translate(-35.5 -118.5)" fill="#ffff50" fill-rule="evenodd" />
34
+ <path d="M457.21444,556.98543H390.80778a1.32707,1.32707,0,0,1,0-2.65414h66.40666a1.32707,1.32707,0,0,1,0,2.65414m0,26.54143H390.80778a1.32707,1.32707,0,1,1,0-2.65414h66.40666a1.32707,1.32707,0,0,1,0,2.65414m0,26.54143H390.80778a1.32707,1.32707,0,1,1,0-2.65414h66.40666a1.32707,1.32707,0,0,1,0,2.65414m0-66.10674H390.80778a1.32707,1.32707,0,0,1,0-2.65414h66.40666a1.32707,1.32707,0,0,1,0,2.65414m0,26.29459H390.80778a1.32707,1.32707,0,0,1,0-2.65414h66.40666a1.32707,1.32707,0,0,1,0,2.65414m0,26.54143H390.80778a1.32707,1.32707,0,0,1,0-2.65414h66.40666a1.32707,1.32707,0,0,1,0,2.65414M477.094,474.19076c-.01592,0-.0292-.008-.04512-.00663-4.10064.13934-6.04083,4.24132-7.75274,7.86024-1.78623,3.78215-3.16771,6.24122-5.43171,6.16691-2.50685-.09024-3.94007-2.92222-5.45825-5.91874-1.74377-3.44243-3.73438-7.34667-7.91333-7.20069-4.04227.138-5.98907,3.70784-7.70631,6.857-1.82738,3.35484-3.07084,5.39455-5.46887,5.30033-2.55727-.09289-3.91619-2.39536-5.48877-5.06013-1.75306-2.96733-3.77951-6.30359-7.8775-6.18946-3.97326.13669-5.92537,3.16507-7.64791,5.83912-1.82207,2.82666-3.09872,4.5492-5.52725,4.447-2.61832-.09289-3.9706-2.00388-5.53522-4.21611-1.757-2.4856-3.737-5.299-7.82308-5.16231-3.88567.13271-5.83779,2.61434-7.559,4.80135-1.635,2.07555-2.9116,3.71846-5.61218,3.615a1.32793,1.32793,0,1,0-.09555,2.65414c4.00377.134,6.03154-2.38873,7.79257-4.6275,1.562-1.9853,2.91027-3.69855,5.56441-3.78879,2.55594-.10882,3.75429,1.47968,5.56707,4.04093,1.7212,2.43385,3.67465,5.19416,7.60545,5.33616,4.11789.138,6.09921-2.93946,7.8536-5.66261,1.56861-2.43385,2.92221-4.53461,5.50734-4.62352,2.37944-.08892,3.67466,1.79154,5.50072,4.885,1.72121,2.91557,3.67069,6.21865,7.67977,6.36463,4.14709.14332,6.14965-3.47693,7.89475-6.68181,1.51155-2.77092,2.93814-5.38791,5.46621-5.4755,2.37944-.05573,3.62025,2.11668,5.45558,5.74622,1.71459,3.388,3.65875,7.22591,7.73019,7.37321l.22429.004c4.06614,0,5.99571-4.08074,7.70364-7.68905,1.51154-3.19825,2.94211-6.21069,5.3972-6.33411Z" transform="translate(-35.5 -118.5)" fill-rule="evenodd" />
35
+ <path d="M344.38682,635.28265h53.08286V582.19979H344.38682Z" transform="translate(-35.5 -118.5)" fill="#3ecc5f" fill-rule="evenodd" />
36
+ <path d="M424.01111,602.10586a6.60242,6.60242,0,0,0-.848.08493c-.05042-.19906-.09821-.39945-.15394-.59852A6.62667,6.62667,0,1,0,416.45211,590.21q-.2203-.22491-.44458-.44589a6.62391,6.62391,0,1,0-11.39689-6.56369c-.1964-.05575-.39413-.10218-.59054-.15262a6.63957,6.63957,0,1,0-13.10084,0c-.19641.05042-.39414.09687-.59055.15262a6.62767,6.62767,0,1,0-11.39689,6.56369,26.52755,26.52755,0,1,0,44.2313,25.52756,6.6211,6.6211,0,1,0,.848-13.18579" transform="translate(-35.5 -118.5)" fill="#44d860" fill-rule="evenodd" />
37
+ <path d="M344.38682,555.65836h53.08286V529.11693H344.38682Z" transform="translate(-35.5 -118.5)" fill="#3ecc5f" fill-rule="evenodd" />
38
+ <path d="M410.74039,545.70532a3.31768,3.31768,0,1,0,0-6.63536,3.41133,3.41133,0,0,0-.42333.04247c-.02655-.09953-.04911-.19907-.077-.29859a3.319,3.319,0,0,0-1.278-6.37923,3.28174,3.28174,0,0,0-2.00122.68742q-.10947-.11346-.22294-.22295a3.282,3.282,0,0,0,.67149-1.98265,3.31768,3.31768,0,0,0-6.37-1.2992,13.27078,13.27078,0,1,0,0,25.54082,3.31768,3.31768,0,0,0,6.37-1.2992,3.282,3.282,0,0,0-.67149-1.98265q.11347-.10947.22294-.22294a3.28174,3.28174,0,0,0,2.00122.68742,3.31768,3.31768,0,0,0,1.278-6.37923c.02786-.0982.05042-.19907.077-.29859a3.41325,3.41325,0,0,0,.42333.04246" transform="translate(-35.5 -118.5)" fill="#44d860" fill-rule="evenodd" />
39
+ <path d="M424.01111,447.8338a3.60349,3.60349,0,0,1-.65028-.06636,3.34415,3.34415,0,0,1-.62372-.18579,3.44679,3.44679,0,0,1-.572-.30522,5.02708,5.02708,0,0,1-.50429-.4114,3.88726,3.88726,0,0,1-.41007-.50428,3.27532,3.27532,0,0,1-.55737-1.84463,3.60248,3.60248,0,0,1,.06636-.65027,3.82638,3.82638,0,0,1,.18447-.62373,3.48858,3.48858,0,0,1,.30656-.57064,3.197,3.197,0,0,1,.91436-.91568,3.44685,3.44685,0,0,1,.572-.30523,3.344,3.344,0,0,1,.62372-.18578,3.06907,3.06907,0,0,1,1.30053,0,3.22332,3.22332,0,0,1,1.19436.491,5.02835,5.02835,0,0,1,.50429.41139,4.8801,4.8801,0,0,1,.41139.50429,3.38246,3.38246,0,0,1,.30522.57064,3.47806,3.47806,0,0,1,.25215,1.274A3.36394,3.36394,0,0,1,426.36,446.865a5.02708,5.02708,0,0,1-.50429.4114,3.3057,3.3057,0,0,1-1.84463.55737m26.54143-1.65884a3.38754,3.38754,0,0,1-2.35024-.96877,5.04185,5.04185,0,0,1-.41007-.50428,3.27532,3.27532,0,0,1-.55737-1.84463,3.38659,3.38659,0,0,1,.96744-2.34892,5.02559,5.02559,0,0,1,.50429-.41139,3.44685,3.44685,0,0,1,.572-.30523,3.3432,3.3432,0,0,1,.62373-.18579,3.06952,3.06952,0,0,1,1.30052,0,3.22356,3.22356,0,0,1,1.19436.491,5.02559,5.02559,0,0,1,.50429.41139,3.38792,3.38792,0,0,1,.96876,2.34892,3.72635,3.72635,0,0,1-.06636.65026,3.37387,3.37387,0,0,1-.18579.62373,4.71469,4.71469,0,0,1-.30522.57064,4.8801,4.8801,0,0,1-.41139.50429,5.02559,5.02559,0,0,1-.50429.41139,3.30547,3.30547,0,0,1-1.84463.55737" transform="translate(-35.5 -118.5)" fill-rule="evenodd" />
40
+ </svg>