@tanstack/cli 0.60.0 → 0.61.1

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/dist/options.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { intro } from '@clack/prompts';
2
- import { finalizeAddOns, getFrameworkById, getPackageManager, populateAddOnOptionsDefaults, readConfigFile, } from '@tanstack/create';
3
- import { getProjectName, promptForAddOnOptions, promptForEnvVars, selectAddOns, selectDeployment, selectExamples, selectGit, selectPackageManager, selectToolchain, } from './ui-prompts.js';
2
+ import { finalizeAddOns, getFrameworkById, getPackageManager, loadStarter, populateAddOnOptionsDefaults, readConfigFile, } from '@tanstack/create';
3
+ import { getProjectName, promptForAddOnOptions, promptForEnvVars, selectAddOns, selectDeployment, selectExamples, selectGit, selectPackageManager, selectTemplate, selectToolchain, } from './ui-prompts.js';
4
+ import { listTemplateChoices, resolveStarterSpecifier, } from './command-line.js';
4
5
  import { getCurrentDirectoryName, sanitizePackageName, validateProjectName, } from './utils.js';
5
6
  export async function promptForCreateOptions(cliOptions, { forcedAddOns = [], showDeploymentOptions = false, }) {
6
7
  const options = {};
@@ -30,6 +31,32 @@ export async function promptForCreateOptions(cliOptions, { forcedAddOns = [], sh
30
31
  ['file-router', 'typescript', 'tsx', 'javascript', 'js', 'jsx'].includes(template);
31
32
  const routerOnly = !!cliOptions.routerOnly ||
32
33
  (isLegacyTemplate ? template !== 'file-router' : false);
34
+ if (!cliOptions.starter) {
35
+ if (cliOptions.template && !isLegacyTemplate) {
36
+ cliOptions.starter = cliOptions.template;
37
+ }
38
+ else if (cliOptions.templateId) {
39
+ cliOptions.starter = cliOptions.templateId;
40
+ }
41
+ }
42
+ if (!routerOnly && !cliOptions.starter) {
43
+ const starterChoices = await listTemplateChoices(options.framework.id);
44
+ const selectedTemplateId = await selectTemplate(starterChoices.map((choice) => ({
45
+ id: choice.id,
46
+ name: choice.name,
47
+ description: choice.description,
48
+ })));
49
+ if (selectedTemplateId) {
50
+ cliOptions.starter = selectedTemplateId;
51
+ }
52
+ }
53
+ const starter = !routerOnly && cliOptions.starter
54
+ ? await loadStarter(await resolveStarterSpecifier(cliOptions.starter, options.framework.id))
55
+ : undefined;
56
+ if (starter) {
57
+ options.framework = getFrameworkById(starter.framework) || options.framework;
58
+ options.mode = starter.mode;
59
+ }
33
60
  // TypeScript is always enabled with file-router
34
61
  options.typescript = true;
35
62
  // Package manager selection
@@ -62,6 +89,9 @@ export async function promptForCreateOptions(cliOptions, { forcedAddOns = [], sh
62
89
  addOns.add(deployment);
63
90
  }
64
91
  if (!routerOnly) {
92
+ for (const addOn of starter?.dependsOn || []) {
93
+ addOns.add(addOn);
94
+ }
65
95
  for (const addOn of forcedAddOns) {
66
96
  addOns.add(addOn);
67
97
  }
@@ -112,6 +142,9 @@ export async function promptForCreateOptions(cliOptions, { forcedAddOns = [], sh
112
142
  if (cliOptions.install === false) {
113
143
  options.install = false;
114
144
  }
145
+ if (starter) {
146
+ options.starter = starter;
147
+ }
115
148
  return options;
116
149
  }
117
150
  export async function promptForAddOns() {
@@ -1,5 +1,12 @@
1
1
  import type { Options } from '@tanstack/create';
2
2
  import type { CliOptions } from './types.js';
3
+ export declare function resolveStarterSpecifier(starterSpecifier: string, preferredFramework?: string): Promise<string>;
4
+ export declare function listTemplateChoices(preferredFramework?: string): Promise<Array<{
5
+ id: string;
6
+ name: string;
7
+ description?: string;
8
+ framework: string;
9
+ }>>;
3
10
  export declare function validateLegacyCreateFlags(cliOptions: CliOptions): {
4
11
  warnings: Array<string>;
5
12
  error?: string;
@@ -1,48 +1,5 @@
1
1
  import { z } from 'zod';
2
- export declare const LibrarySchema: z.ZodObject<{
3
- id: z.ZodString;
4
- name: z.ZodString;
5
- tagline: z.ZodString;
6
- description: z.ZodOptional<z.ZodString>;
7
- frameworks: z.ZodArray<z.ZodString, "many">;
8
- latestVersion: z.ZodString;
9
- latestBranch: z.ZodOptional<z.ZodString>;
10
- availableVersions: z.ZodArray<z.ZodString, "many">;
11
- repo: z.ZodString;
12
- docsRoot: z.ZodOptional<z.ZodString>;
13
- defaultDocs: z.ZodOptional<z.ZodString>;
14
- docsUrl: z.ZodOptional<z.ZodString>;
15
- githubUrl: z.ZodOptional<z.ZodString>;
16
- }, "strip", z.ZodTypeAny, {
17
- id: string;
18
- name: string;
19
- tagline: string;
20
- frameworks: string[];
21
- latestVersion: string;
22
- availableVersions: string[];
23
- repo: string;
24
- description?: string | undefined;
25
- latestBranch?: string | undefined;
26
- docsRoot?: string | undefined;
27
- defaultDocs?: string | undefined;
28
- docsUrl?: string | undefined;
29
- githubUrl?: string | undefined;
30
- }, {
31
- id: string;
32
- name: string;
33
- tagline: string;
34
- frameworks: string[];
35
- latestVersion: string;
36
- availableVersions: string[];
37
- repo: string;
38
- description?: string | undefined;
39
- latestBranch?: string | undefined;
40
- docsRoot?: string | undefined;
41
- defaultDocs?: string | undefined;
42
- docsUrl?: string | undefined;
43
- githubUrl?: string | undefined;
44
- }>;
45
- export declare const LibrariesResponseSchema: z.ZodObject<{
2
+ declare const LibrariesResponseSchema: z.ZodObject<{
46
3
  libraries: z.ZodArray<z.ZodObject<{
47
4
  id: z.ZodString;
48
5
  name: z.ZodString;
@@ -125,35 +82,7 @@ export declare const LibrariesResponseSchema: z.ZodObject<{
125
82
  groups: Record<string, string[]>;
126
83
  groupNames: Record<string, string>;
127
84
  }>;
128
- export declare const PartnerSchema: z.ZodObject<{
129
- id: z.ZodString;
130
- name: z.ZodString;
131
- tagline: z.ZodOptional<z.ZodString>;
132
- description: z.ZodString;
133
- category: z.ZodString;
134
- categoryLabel: z.ZodString;
135
- libraries: z.ZodArray<z.ZodString, "many">;
136
- url: z.ZodString;
137
- }, "strip", z.ZodTypeAny, {
138
- id: string;
139
- name: string;
140
- description: string;
141
- libraries: string[];
142
- category: string;
143
- categoryLabel: string;
144
- url: string;
145
- tagline?: string | undefined;
146
- }, {
147
- id: string;
148
- name: string;
149
- description: string;
150
- libraries: string[];
151
- category: string;
152
- categoryLabel: string;
153
- url: string;
154
- tagline?: string | undefined;
155
- }>;
156
- export declare const PartnersResponseSchema: z.ZodObject<{
85
+ declare const PartnersResponseSchema: z.ZodObject<{
157
86
  partners: z.ZodArray<z.ZodObject<{
158
87
  id: z.ZodString;
159
88
  name: z.ZodString;
@@ -211,7 +140,26 @@ export declare const PartnersResponseSchema: z.ZodObject<{
211
140
  categories: string[];
212
141
  categoryLabels: Record<string, string>;
213
142
  }>;
214
- export type Library = z.infer<typeof LibrarySchema>;
143
+ export declare const LIBRARY_GROUPS: readonly ["state", "headlessUI", "performance", "tooling"];
215
144
  export type LibrariesResponse = z.infer<typeof LibrariesResponseSchema>;
216
- export type Partner = z.infer<typeof PartnerSchema>;
217
145
  export type PartnersResponse = z.infer<typeof PartnersResponseSchema>;
146
+ export declare function fetchLibraries(): Promise<LibrariesResponse>;
147
+ export declare function fetchPartners(): Promise<PartnersResponse>;
148
+ export declare function fetchDocContent(repo: string, branch: string, filePath: string): Promise<string | null>;
149
+ export declare function searchTanStackDocs({ query, library, framework, limit, }: {
150
+ query: string;
151
+ library?: string;
152
+ framework?: string;
153
+ limit?: number;
154
+ }): Promise<{
155
+ query: string;
156
+ totalHits: number;
157
+ results: Array<{
158
+ title: string;
159
+ url: string;
160
+ snippet: string;
161
+ library: string;
162
+ breadcrumb: Array<string>;
163
+ }>;
164
+ }>;
165
+ export {};
@@ -9,8 +9,7 @@ export interface CliOptions {
9
9
  addOns?: Array<string> | boolean;
10
10
  listAddOns?: boolean;
11
11
  addonDetails?: string;
12
- mcp?: boolean;
13
- mcpSse?: boolean;
12
+ json?: boolean;
14
13
  starter?: string;
15
14
  templateId?: string;
16
15
  targetDir?: string;
@@ -2,6 +2,11 @@ import type { AddOn, PackageManager } from '@tanstack/create';
2
2
  import type { Framework } from '@tanstack/create/dist/types/types.js';
3
3
  export declare function getProjectName(): Promise<string>;
4
4
  export declare function selectPackageManager(): Promise<PackageManager>;
5
+ export declare function selectTemplate(templates: Array<{
6
+ id: string;
7
+ name: string;
8
+ description?: string;
9
+ }>): Promise<string | undefined>;
5
10
  export declare function selectAddOns(framework: Framework, mode: string, type: string, message: string, forcedAddOns?: Array<string>, allowMultiple?: boolean): Promise<Array<string>>;
6
11
  export declare function selectGit(): Promise<boolean>;
7
12
  export declare function selectExamples(): Promise<boolean>;
@@ -36,6 +36,32 @@ export async function selectPackageManager() {
36
36
  }
37
37
  return packageManager;
38
38
  }
39
+ export async function selectTemplate(templates) {
40
+ if (templates.length === 0) {
41
+ return undefined;
42
+ }
43
+ const selected = await select({
44
+ message: 'Would you like to start from a template?',
45
+ options: [
46
+ {
47
+ value: undefined,
48
+ label: 'None (base starter)',
49
+ hint: 'Two-page baseline (Home + About)',
50
+ },
51
+ ...templates.map((template) => ({
52
+ value: template.id,
53
+ label: template.name,
54
+ hint: template.description,
55
+ })),
56
+ ],
57
+ initialValue: undefined,
58
+ });
59
+ if (isCancel(selected)) {
60
+ cancel('Operation cancelled.');
61
+ process.exit(0);
62
+ }
63
+ return selected;
64
+ }
39
65
  // Track if we've shown the multiselect help text
40
66
  let hasShownMultiselectHelp = false;
41
67
  export async function selectAddOns(framework, mode, type, message, forcedAddOns = [], allowMultiple = true) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/cli",
3
- "version": "0.60.0",
3
+ "version": "0.61.1",
4
4
  "description": "TanStack CLI",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -28,23 +28,20 @@
28
28
  "license": "MIT",
29
29
  "dependencies": {
30
30
  "@clack/prompts": "^0.10.0",
31
- "@modelcontextprotocol/sdk": "^1.6.0",
32
31
  "chalk": "^5.4.1",
33
32
  "chokidar": "^3.6.0",
34
33
  "commander": "^13.1.0",
35
34
  "diff": "^7.0.0",
36
- "express": "^4.21.2",
37
35
  "semver": "^7.7.2",
38
36
  "tempy": "^3.1.0",
39
37
  "validate-npm-package-name": "^7.0.0",
40
38
  "zod": "^3.24.2",
41
- "@tanstack/create": "0.62.0"
39
+ "@tanstack/create": "0.62.3"
42
40
  },
43
41
  "devDependencies": {
44
42
  "@playwright/test": "^1.58.2",
45
43
  "@tanstack/config": "^0.16.2",
46
44
  "@types/diff": "^5.2.0",
47
- "@types/express": "^5.0.1",
48
45
  "@types/node": "^22.13.4",
49
46
  "@types/semver": "^7.7.0",
50
47
  "@types/validate-npm-package-name": "^4.0.2",
@@ -82,4 +82,4 @@ Error generating stack: `+a.message+`
82
82
  <div id='root'></div>
83
83
  </body>
84
84
  </html>
85
- <script id="playwrightReportBase64" type="application/zip">data:application/zip;base64,UEsDBBQAAAgIAAMEW1wCyl2IaQQAAPMeAAAZAAAAMTVkNTUyMDc1YTk2MTg4Y2FkYjEuanNvbuVZbW+rNhj9K5Y1qa1EqG3e+bTd6U6bNF1pu9U+7KbTdcBJWQAz29ym6vLfJ1MiiJu2kKZpp+YTxPhwnsNz/PjlFs6znP2SwhhiL/U8ggKPRj4Ow4SmMwytpv0TLRiMIU1TXsqJLPiS2bJiia0ktKBiUkkYf7ltrh7EmoQEk8B33QAnKUUkII4b6e6ZyjX697OcJ8usXIBEMKqYBLSqwHWmrkBR5yqrcgZomk54KQEtUyBYmTIhQcoKDgSvFdNkKsH/ZolqGUML5jyhKuMljG+bWB6OI89KBmPPggnP66KEMV5bMK1F293ByHMsSMuSq+YvHfOlBRVd6KuOP7y0IK9VwhsKbFWxRLFUc6Pq6q6PYLLOW9HuvUEqKtRF1vQmiPgTRCYkuEAodlCMsI2J+yfUGErcwBjpDqxqP0Cr5Qc254KBnzlf6sieRgw0YsckdMNdsD9lK1ULBqZwJvi1ZGIKh6A7BrobRLvQf6V1mVyBFnoIsItMYL8DvrQgVYomVwUrVftHwutSwRhbUC6zqmIpjOc0l2w96mFrlyIJLxVbqUGK+NjU29klyI+ND0CLPAg3MnDRq+lR0QUbJEaAjK9IAu8RNTTuIFRiojrH0GJf4T7Rb9lCx6c4mMJzPaidz7kozmVWVPkAJUloh4GzHXNEgsdjHjs4Yqc3Ovrrh0OzoCz1vYIxBNMaITz7EqECYAL+bW+dqABg0+b4hRI3vZbbabnVzzH69XvSa5qpXmuTeu2tU9hdy4Irfrq5JcXX727nd/lq1yJf3xP9a9fzbJsOAFt0Npe4aK/wHcXu91fbQEjR9WuvUGHE6o6I9a68nD4cMlMfbi7YSvXiPrnQSXdyj4jjFFb/EwC2oonqGuMdIevvVrNew/rsbCcRxT+wPzKZzXJ2egb7qf+xCQFMYe+RKQQd85avtWEUA/1OsD570hORHSLPGBKjA1vC7Szho30s8bZS+x1k3zO9POY3yvfeoZX/neesr/ysVoqXA6QvacEeV54UJ5/rWZGpk7HqD/Z+w37D2WpZxWDz3oH+j4wpEXliSjTa/70Fg+/u4//3Zrh3kudHHGVGjzR+nwx8ah6qaCkVTZaTf2ombgZMRSM7IthYmoVPTL9H+y547lR0SwRDoOBYNXlb29eacYYv7cgrRtOsXBzEkl5xfkHLz1o18JtW7fyFS9CGfFeDTAIDapGDbBeFRi1yD+yJsPNE4OzjiTeX9+8tNY9cNfYbLqJR5UMqLgZsYGiDOO62QXwnPKxD9OzveVUjerhqEHQs9zSSvlKxIPj/5Eg9f9NigY8rqhe+L71cuV8rjPcPKRXYRoFr7sgf2Ai4VyrIHkZ4M8n+zvLxlQrEqBHC3ORd977IPCtpnm9t9W5Z7Ie5YmLYyZWDbT8wtvkxQu7jR1fDDiYabGM7fd/DlOedFzVMjNEgioKdRyQ5l4PPixxsh+YqLfSOcmA09mEmBBftc1JRVUsYw4pK2Ryr3juRNbA1Al/CWO9crC/X/wFQSwMEFAAACAgAAwRbXAWG5x0dBQAAPCgAABkAAAAxY2M5NGVhMzQxM2MyYTJmZDdmZi5qc29u5Vptb6NGEP4rq1Ul2yohsLzzpb2cWt1J1amK0n7oOZXW68WhBhaxy52j1P+9AuPjxTgBQuz04k+YZYfZZ57ZGWbnAXp+QD8uoQtVQhydYk1XNYIw8paW50EpH/+EQwpdSBKKBb3gIVtTmceUyIJDCQrKBYfu54f86qisC4XYirEg1HGMBdGXxPSInU33RZBJ/3kRMLL2oxXYvYcDDK4pJgLgOAY4WoIIf/FX+QhhCQVLGjKQsFTQTIs4Yf9QIgpVoQQDRrDwWQTdh3wRxxcQ+BGFriFBwoI0jKCrbiW4TJNiumpqFpIgjiIm8lvZYm8lKPAquyoVh7cSZKkgLFeBbmJKBF1mumFxt5uTUJ4GBVoHb+ACJ+LGz2cjBZkXCrpA1o2iuJriakg2bf0vmMkQyT10lWwCjQvkCxCvqJdB84GxdbayjhJLTQyzTeqv/kakCQVzSFgk6EbMYSfhdkN4m+z3uU1AIfiZYm8liIXA5C6kkShuEJZGArqqBPnaj2O6hK6HA063vR6W2tCI8Yp2g8LR6jrr1iNYZGI7CW0YTz8JEkNh+1R4LxAMzOHl07jphuxoTn2Jmq09vsa+Xq+iitub2+NLkSCPsv8CuhDMU0VRF58dJQSqCv4t/mpOCMB+TDNDkdxXRh7mUW0easyrzsRfsS8qoznRir9aKJcjKybY1NsRsvWBNAlm9RcDUHvx/lINiyt1p0z5+7sYQCgs5xVXSthYldZjVbsdcgqrLPklvwfmULAr+qfP/UVA5xCsqLi6v2YBnU7uKF760WoigQcQ4ZC6YPKRB1l8uGNpwiWwSAXwWALihC1TIoCgOOTyBGxnTzLOlDVk1RlnOSMTzioJZw3hm3mAMADbWWl8qWKkum2sg5mzVs5UoJ8OJE8vzthVmTU2vA98sq4aP/CjddXyVwFbdbSsrjTihm5aI5vWKU1roCG2rSHRQMkZZb/4BuX+Hgp3oB6YqU6lAvJyzG2hAQp3BqkMbdspRjLDDiVXr18fJiKl/+6VQX3MjT7gL/SP69++YW2El/P55SJgq/n88qcfLstnZ8c2wUJEh2hpyrZlNjIjfVyCI6UkONKHEPz7J/EZOTSSN/XymGb203G13e26D/cvZtoOMfD5GUqPOOVoat2LVTSyF6ulF5vaAC9+NRR/G+w7QZAc6v3oicwtpyZLppMQ+xHAifBJQAGezGTPT7iYdvIHvZGR2+rYYU2r5G3KEIdAx/M21OeL6Cg590BWuNSAtOokbRIKwM+ajfXiln7CTUb+cdxczJItEzUqF2OTVn9mLva/JeYZmXGODMsYO8bd0I2o2ut3xkWHAEc3mIhysC3CZSWvlFYGxs2ucsV36kp7hVyQvbJLZmXJltOoJhr2yD5ZOUMwnCE++Vqo/f2z7nRZVS9vN4fXwt4tWCo6fWRYsm00XEFXRi6so0qd0xj0lWE+klQdljIHxK4XryPsLFJj5lnzr75ktE+xG+EMpBeoh9kyMhunbmjsHMx+bg72Bnh8ThadI1/rU+J8FTWJ1A92B2b8zo/jrAHDw1zI56iSHVOlS1CzZeQodX83R3b3yvmOPSikvRpXeLssPW017bm7idYstW4rdvL8CAdBrceg5oPvPEGTbr1Aui1bTuP0CFmtLUZ9219y0Y0SnjKwUaW1C6dzT1KuSeMQGJl6aydOwHjnpiTdlh1bbRYpX10vzq0EaZKwpHiOCyxSDl0YY87zNrWDDreG7EwCW0M3+9za3m7/A1BLAwQUAAAICAADBFtc0HwXCYUIAADUeAAAGQAAAGU0ZDQ5NDg0MzA5Y2VhNjBlNmIzLmpzb27tXW2Po7YW/ivIWmkSKcNgzEuI1Nu7s2q7laqq2ru3H7qZah3iJDSAIzDbHU3z3ysYZmIMJMCEmWTW+ZQEONjnPOf4PNj43IGF55Of52ACiDE3HGNsIM1xCbY0Ys0QGGXHf8UBARMQ0YSR6JKG/u1lHNA1UeMNcVUWgxFgJGYxmHy6y77VCrwkOjQNCLFtpn+YDtYdkl7uMT+9xX9nPnXXXrhU3IhgRmIFKx8IdpnC3VzBm42Cw7kS4i/eMjuLfCHRreKFjEQh9hXfC9dgBDYR/Yu4LG8+GAGfuph5NASTu6xjBzrleyEBE3MEXOonQQgmcDsC8yTKZUBbt60RwGFIWfZXqoCbEWB4mX7bdQbcjABNmEuzdpCvG+IyMk8biNnq/pqIxImfa7B0h5jhiH30sqt1TbcuNf1Stz9q2gRpE8NRNRv9AVIZLLoFEy29gGxya+SKvSYLGhHlPaXrtGcNJe5aYppVUn/0vrIkIsoUuDRk5CubgkbCbUF4lex3GQCUXHAXscZO7M0IYMawuwpIyPI/XJqEDEzgCMRrb7MhczBZYD8m21Ynj6q0scFL0kwVY11os7VHF6nYRkIF4xnmc2iiq9p+zb1YYVSZgqtDeoMTDaqabha76Jj2/j52cn3I+761re/PCMRh+puBCVCmiabB2SdHCxRoKP/kP5ETKMrDMWQFLLrljtxNw8J1pnAdfyX+G3uMO5qhLf+JAnV3ZEkZHSzuUVl5QhL5w+KNFaVw44evMMi/wfvG7D5/5gd0Pdhdl3/TAqFXVote3YfJAeCh8kP2nzIFjF6T373Ym/lkCpQlYde3H6hPBhcrgudeuLwYKXdKiAMyUS5+jv10sFjRJIpHyixhyoJGyiai88RlCiM4iNULZTtsADtnbBRhB3XYB+zGO9jZXVBnl/Ss7EHJo/Ye/tODRz2WbIpQMOJxm2l5d2xSAR49aGYD7tLtsPJ2ApzGpW4OK3vIoWXQEe+tYO7wMosA/oL9JI11GS5oNLjAn1YRWfz5XRb5bi4Oo1BXIdSKKNQPBfhOKNT1HQrHHVCowwoUVtrnQRkcYAS17M4V7KfrTW9CctW/9f3BAIfuikbxkDv1u//U4axxTGwDEh1VNJxv+tsowrclMcU+7aLnIqLcPQe7AyH5u6LtKPgf4YLtgz4qbxLgzYPC6vSl3B+uCy9vGYu8WcKKESYiC96unOh/qtStBxf86cNh3cjwjoYMe2GDPEJXkTkWAnofjsSFcx118aRCPBdwVA6C+ci5ogH5xQvXcV1QzBXFG+Vq5tNlvbe1zg66OEZ99Hzne+5aDJ1piEhbnUVPdeFFMRs0iaLIElJvyxr3YHyk7Yxvwi7Gd+qNj7RjpIm14ZdXLY+JKiG54iuPuanduo68bT5tcIbKw9PBZDRVYZ03vcdfyP8//PKoRTO4mk7v1Te9+v7NFafAusiVi2gQuZCqIRG+fYQuBLnQZXRA7zkj9AURciRXaeUP5UyqUW/rBv3eOcV1cahStsMG2f/T6WR22yZ0EamaI9LFfpyUS9StLvnFyQD928Bg/+Ng5xiAujHX1LQN6StSdVN4TgsR6sMrrKfRV1R+BNeJvj7qph715cdi58FhUdVzJslhj8Bhr8lP2SP/6OMKN2GySEUOLHqV1oNPGdxIg7qkgwasJzNGOfjnIT51od9ozDI2W+2CJFyyVX3s5bTJjUra8TOubnHXqI+7eznv1cJbsNXlhsasHf1N8SJMEkENOX1AhptCMZ0ukBGnUPicYLFzWCdQuJDh0jAuUAsas98wW3HX0gV3vACxoTgdY+wbC57EYz4/GvTN3UMbt1Nw85mHZpWok+DbnbC+b7Q7SrpZP2B8IMsfvm4qxhg9+Mzp/+r7N7z+j8DXDdUQ+XofOY/B5Tx6l/nK1wD0MwTY0Ty1lSNWZW+N9NTQ5Bcr2PShzJGY++MwuYItBsPUOa1ncE5755xGF0Zy9sA+M8T1PH628tXyLE/HFSHXOI2YBWf6iSoz7K6b+ImhtVpi1c1PuOky2MlPzhlmx7b0k0HcCqZO3xGq11mVFODCujLUC8Kdp6ZpvYLkRa34IqmQWZ6l2rZi4VHMOrBwQzXG4lIevY9JaEnCT4SbSBL+oiTcLq2ckyRcknBJwk+ChNsQSRIuSbgk4Qf9RJg/7+PNF0nCj2lpScJbZWniy116LxOTkoS/LhJOk6jTXLih2qbw+B/CXh77SBa+L6BLFn58Hz9JFj62oZwKlyxcsvBTZOFjW0i+LMnCJQuXLLzkJ+LOHb3M20gWfkRLSxbeKksTF5QbkoU/rxXPkYXHxKXhvBMLdwwobq7SS+4hWfi+gC5Z+PF9/ARZuKlq1vgZ1vJJFn6WAJMs/HCy2h8LN1XNNiQLlyxcsvBDfjKGci5csvDXysJTgItZWh87iEgW/rpYOFt5URcSbqoQlUi4nAqXJLzTR5Lwg+6miytP5IJ0ScKruYok4VW5ap8kXDedZyAXkoSfF+IkCS/5iSUXpEsS/opJuC6uiZJvhT+zFU+ThAuVa/CMJgcrIGWAQlB8bNnH2gqT262vU/Uac89ufWabrVr3V6gpJA15uRo1ifztvUY/Hw8HraxfLtDQfbR4lr1oE8+/r6sSr7zNJi2itsAxU19ij+S6pjTZN9ks72Vp9jH9ZSJug9gu2yafggt8uyh93l2UnzyWFJ5X7htFGg0ghiFMCzh9vENhPrX8WbHXgkZeZYkz87xLnJmqaYj7VPYSe59Y4cz8NiqcmSda4cwUucCWn33xQuz7heKGBYS/XTASNalECieapWpQ3JrR4J6Rdy2+mYu2W22Z3a4GaMOKqNUtQciu6uQ7n8YNS6JmcnVkii+2HnhN4QVKgd6MAIkiGuXnxQyzJAYTsMFxnFXJLRXYFWSnEugaTFiUkO3N9l9QSwMEFAAACAgAAwRbXJUCKQldAwAAPREAABkAAAAxYTNlODE0MjI2MTE0NDdmMDA2MC5qc29u5VdNj9s2EP0rxFyyBrReUd/WKbtBiwYF9tAYPTR2AFoa2aolUSBHjRcb//dCsraWtN74Y4OmRXSiNJzHN8N5FOcRkjTD9zGEwIWNAXcsy+PccfzEND0TjMZ+L3KEELTM0vha53KNY11iNCYNBhBq0hB+fGxGL0Jdu3yysO3IFYltevFk4TlmVLunlNXgbxeZjNZpsWSRQkGomWAf6gWZKEsmipgpLGJUmtEK2UrmyJSsCMGAUsk/MaKWJRiQyUhQKgsIHxv+L3LP0gIhdA2IZFblBYR8a0BcqdabW4FrGyCKQlLzqY5zbgCJZT3ac4a5AbKiSDYMcFNiRBjX1AStdj4KdZW1iXq2giahaJo23pZpedemdW35U9MMbR6a3tj2nD+gxiD1AKFZO2DZJr3N3x0mUiH7Rcp1HdmJiHsmvncI9ed0Q5VCNoNIFoQbmsFJ4EEfnDuHwN81G81a5Nfizg0QRCJa5VhQ+yGSVUEQcgP0Oi1LjCFMRKZxe9Zk41A+SrHE05IRWH3SbvCVZNSwJ4EOts/1/o1MXJq2e/FXuqzDI8lmcHM8b9wfB/5ksNnc/HqMZ8qe2x3de9uXIzFAF/U7QQhsVpkmX3ycmDnjFvvSvtqTnLEnm+3lpB46lsdZ0fOzB35dT/FZpNSxNnXWvtr5eG9ZSpJXya4eD06oVDbqL8xYb+GnIc/bEd+R2T+fWoNl5Xu/dmTmg6icM6LaHZFXLweHdPfwm8zw6umblb9ZoYjTYvnmGRXbzo1uulkh8g5ueCBmN7+Z3t5/mN6++/Um7di3o9FBQiTv8PdUp4sMr0bQre2fmlDYDDpTZsD2EfzD22iZhayzNtuOThDDZGL2xWAf0fu5WnD2WvCCS7TwvWr6Byq7V4r5kuesA8D91jsxxQ11d2K6QpYokeNnqdYskYoVuCG2xAJ3umC37+vrYpbuil939uyb6rohdgGd41IPxqbl96V+5I5zrtI7t93Av0TpP6rg/v/1/R0OkNeeKd4g59tOzpO0EFnWu2j1FHybEKrTOiIejJ3hfdN3jrREp7UANXQw+Hsfucie14mc3JkdYuI71sFuJJP65M6MB2PPnQz7Efs/15DMDUClpGrnaRJUaQihFFo33fqzRn+AXSPINYSkKtzOt38DUEsDBBQAAAgIAAMEW1wcmKG/NQUAAMcpAAAZAAAAN2Q1ODUyNjRhNTUyYWRiYTFiMDQuanNvbu1aXW+jRhT9K6NpJScSITDD91ObqNVutVpVSdqHrlNpDGObmmEsGO8mSv3fKzBZYIxjwCROlPoJG+bMuXfumY+DH+A0jOjHAHrQDkzHRJZBTBORYEL0iWZAJb//mTAKPSgoW0ZE0PQsZXxB1XRJfVWkUIGCpiKF3peH/Gon3JnvTlwH+zrSsDuZujjQ3WnWPBRR1sFPk4j7izCeAT+hWUeAxAFIaBzQJAViTkFC0xWj4JEJVOAy4f9QXxQUoQIj7hMR8hh6Dzn5J4lHYUyhZyrQ59GKxdDT1woMVkmBoBuWoymQxDEX+U9ZkLcKFGSWXZWE4a0C+Ur4PGdB75bUFzTI6BEx37TJqEdFlrZ6SAVJxE2Yt0Yass40dIbsG03zsO7proow+gtmGCK5h17egC6LjBfJu6BTnlDwgfNFFllLxJKJhZpQfw3vxCqhYAx9Hgt6J8awFbhVB9cbKV/mowwK5Fa4dh3XKWFvFUiEIP6c0VgUP/h8FQvo6QpMF+FySQPoTUmU0nWnh5WmdCzJjLbLhSHlwnCeyEUG2wpUSoRhv0Qm+qbtM/kazrLwBAdjeL4/b1hXHQvXQ8TYfDrGHsrXcUX61np3NApM4+y7gB4E45Wm6ZMvrsaAjsC/xVfsMgAe72GLieS+cudhHNfaYaldtSX5RkJRuZvXWvEVM7W8M+OCn0w3Ndn4wCqJTusdA1Dr+PFSZ8WVviFTfv4ubiDEynbFlcakqIwOUW1myZPdwVFxcX/FI3ry+BtiozklQRjPRltUMGZKNd0gJqyC6zXEbLLzD6ECPo4Y+I3EFFyzUMzHY/W88uz69LSRnOAX9M8wDScRPTmF1Vr/JQ8LjGHlkTEEZTTfY1AKlh7YwQOsT/cKBam660ozuT68ToxSJ7bbRyfHqvd3WpIHiv7AT6c5wxx6gG7onagO0O8JD1a+OGNhHNAATJNsvxEHgMazMKY0qYzcoGrPeezvvY3GkaVLGyo0vMYr22Bb66Px/6X2Bsv5KDNFpwnCqlKqqe8yCv1FdWmNwnhRWVdHV/l5cdRuIUW2Ie848fAqs0uVmUYfldXSIaXKHmSVbZJentkhdIfY46jUhNbIxM/G94VKtFNJOv1EvkuOH8hX+sfVp+/5Ntn5eHz+Y2Uq2rnqFE1bHKmQamnO8+8UnbK+Ua/6fg81fIQCGkhEnWTiSlGuK1FOw5hEUe2IXKvxn6eCJu3sLIxVA0sbJMNttJy6Gjg5tOSUaT2tlkYfqbWt1sTEcMxGLyniaWtbDWPVNDVp4bNen510q0CaJDwpnksFEasUenBJ0jS3WrdcWgk7Q+AL6IlktRmLJ61qNDWcqREENp642CJ6EExxJ6ua+pwxmviDu9VY22VXY2RlLu4z2tVFD/sKykX6kHZ1iVgyMe2B7OocXLJom1XVya3eA/sq3eqM89Y82pjnDm51DirPW9arm176u9XI05Bq23LetOHdauwc6FZjeW9VLsdPutW4y3blzbjVWN6evGq/ArHRzZyCGxJfC+IvwLXgCc0P/2p9F/oShvVuKnuP2sjTsKrb8klkz5u8PmpxS7U4uI9ajlX177cwj2tbd51ADK2/M3WR8G8pBZdEkIjPWspm67WvbhnG4MIx9FI4FuohnHpepJzpb+J4Lw1Pz2P+Mxdwp1qVX1Q/i+Pww3JjTqdDelfI0wzVcVGnv370qXt0oHX1rmr7mAV1BC/LkF9gP4uXhTzNVG1Deg/hGO7hXlYz9DG8rIKJKQdpHOhl5bhbB1jLfJE/iR3Ry7pd/wdQSwMEFAAACAgAAwRbXL4oCrPVAwAAnw4AAAsAAAByZXBvcnQuanNvbt2WX4+jNhTFvwpyX1qVJP4DBqOqGmkfun2pqu6qfdjNw8W+JDRgR8ZsOxrlu68MmU5mlZlkVlVVzUtkG3PuOfdnCHekxwAGApDqjuh2+nV934a3HhtSkW0I+6FarTZt2I71Urt+9R7suwB6t9Jdu5o3r3KQIi95YaSoleI5gASlJUUtmloozpHmmjacpPfyMGxJRV5wXz22nbnSFejQOjus/GiHFeeZLLgqmczJISWbNryZLMSsw9b5L72QlGxf7G4Y6z9RB1IR3VbJ7+iH1tnkV9A72OCQfPuNUMV3MYUzt89v+mg/2jduAWPYOo9mUd9WyZxzcYz1oXZhnfyQsVKVvOTfn7l6Mw7oh6V1Hvfd7fKhTz+SlMzSMb6FHklFzgiQlGAPbUcq8lV1SEpCG8VZUXCWcyYUpfRwjz/gaf2f2vB2rE9KHvVurtCrPVgdYfXQ2sgXdBih+8P5HfqBVOyQkiGAD+9Pb+eUUsFSYkYPMQ2pGJdSFMsyrjZthwOpPtxNo58NqQjLTZ5zWuSgJCtLDaZmZN75yxwCjHF2WAy92+Fy2KNehiG6xiHMWnH0pNai5IwXMssKpg1QXnCRqSl06KL6Td05vWvtJtEeIeCQwH6f/NWGbdKPXWj3HSZgzMLZIQFrEo/WoB8Sg71LvBsDRjN77+IpPTomKemcPuafsz6do2stkiqPALuxt3NjH9onGM1FSsBaF6almHmdkgCbOHrwT9YpcWPQbrKAf+9RBzTRG4TtfI/bkSr4EVPicRi7Y/sgBNDbHu00Xx/Wh/VENk7vSHABOlKx9EEyTkb7MKUpaTrY3U6jYdfu98fV+3qHQ3pKXGuVIYiMCc2BN6ZomsfEZxJXET+jtaC6pHmtUam81pnRstHl88ST3xB0mMhHxhY+tZvpinYevwL1EwEuoGZSFPxVocbMZCorM0GVRpAUZS0eo57a6hfOdrfX8D4nuEDO8owxKPK4kCvgCq/ifVL8DHv8hP42aW1Ab6FLutbursT/XKhLZ6DghXxVZ4CBwJJlnEvGsqxoKJX08RkYXNeaq572M1KLnKlaCJ1DI6g0qpYZ1Rfov4sF/yF+/0YPW0y2rsf5WFyJ+rz3S5B5+cre6YXJy5zLDPKcg6mB1TR7DDlgv+9i/68BfU5uoVWtSqEZp0LVjRKGqeZ50F/AjQ3qMbl3ciXhp41fopzJkv7HlNNLTeRNVjaZMYWolZDAjGnEi5qI8TsTvf7X+yjok59AXMr/wf8iP31c+Isfl/WjNk3GyZkq8rSKfGmVlKD3zh8b5PbHbt0dUtKD3rYW54CfAVBLAQI/AxQAAAgIAAMEW1wCyl2IaQQAAPMeAAAZAAAAAAAAAAAAAAC0gQAAAAAxNWQ1NTIwNzVhOTYxODhjYWRiMS5qc29uUEsBAj8DFAAACAgAAwRbXAWG5x0dBQAAPCgAABkAAAAAAAAAAAAAALSBoAQAADFjYzk0ZWEzNDEzYzJhMmZkN2ZmLmpzb25QSwECPwMUAAAICAADBFtc0HwXCYUIAADUeAAAGQAAAAAAAAAAAAAAtIH0CQAAZTRkNDk0ODQzMDljZWE2MGU2YjMuanNvblBLAQI/AxQAAAgIAAMEW1yVAikJXQMAAD0RAAAZAAAAAAAAAAAAAAC0gbASAAAxYTNlODE0MjI2MTE0NDdmMDA2MC5qc29uUEsBAj8DFAAACAgAAwRbXByYob81BQAAxykAABkAAAAAAAAAAAAAALSBRBYAADdkNTg1MjY0YTU1MmFkYmExYjA0Lmpzb25QSwECPwMUAAAICAADBFtcvigKs9UDAACfDgAACwAAAAAAAAAAAAAAtIGwGwAAcmVwb3J0Lmpzb25QSwUGAAAAAAYABgCcAQAArh8AAAAA</script>
85
+ <script id="playwrightReportBase64" type="application/zip">data:application/zip;base64,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</script>