hghcn 3.6.23 → 3.6.24

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/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/preflights/preflight-init.ts","../src/utils/create-project.ts","../src/utils/env-loader.ts","../src/utils/file-helper.ts","../src/registry/namespaces.ts","../src/utils/registries.ts","../src/commands/init.ts","../src/utils/is-safe-target.ts","../src/utils/updaters/update-css.ts","../src/utils/updaters/update-css-vars.ts","../src/utils/updaters/update-dependencies.ts","../src/utils/updaters/update-env-vars.ts","../src/utils/updaters/update-fonts.ts","../src/utils/add-components.ts","../src/commands/add.ts","../src/preflights/preflight-build.ts","../src/commands/build.ts","../src/commands/create.ts","../src/commands/diff.ts","../src/commands/info.ts","../src/commands/mcp.ts","../src/utils/legacy-icon-libraries.ts","../src/migrations/migrate-icons.ts","../src/migrations/migrate-radix.ts","../src/preflights/preflight-migrate.ts","../src/commands/migrate.ts","../src/preflights/preflight-registry.ts","../src/commands/registry/build.ts","../src/commands/registry/mcp.ts","../src/commands/search.ts","../src/commands/view.ts","../package.json","../src/index.ts"],"names":["preFlightInit","options","errors","fs","path","projectSpinner","spinner","logger","highlighter","frameworkSpinner","projectInfo","getProjectInfo","tailwindSpinnerMessage","tailwindSpinner","tsConfigSpinner","GITHUB_TEMPLATE_URL","TEMPLATES","createProject","template","projectName","nextVersion","isRemoteComponent","result","fetchRegistry","meta","z","error","handleError","type","name","prompts","value","packageManager","getPackageManager","projectPath","createNextProject","createMonorepoProject","createViteProject","createStartProject","createSpinner","args","execa","templatePath","os","response","tarPath","extractedPath","packageJsonPath","packageJsonContent","packageJson","cwd","lockFilePath","loadEnvFiles","config","envFiles","envFile","envPath","join","existsSync","FILE_BACKUP_SUFFIX","createFileBackup","filePath","fsExtra","backupPath","restoreFileBackup","deleteFileBackup","resolveRegistryNamespaces","components","discoveredNamespaces","visitedItems","itemsToProcess","currentItem","registry","parseRegistryAndItemFromString","BUILTIN_REGISTRIES","item","fetchRegistryItems","dep","depRegistry","RegistryNotConfiguredError","ensureRegistriesInConfig","missingRegistries","registryIndex","getRegistriesIndex","foundRegistries","existingRegistries","key","newConfigWithRegistries","resolvedPaths","configWithoutResolvedPaths","configSpinner","updatedConfig","rawConfigSchema","code","initOptionsSchema","val","BASE_COLORS","color","init","Command","opts","shadowConfig","configWithDefaults","createConfig","componentsJsonPath","existingConfig","baseConfig","buildUrlAndHeadersForRegistryItem","getRegistryItems","deepmerge","runInit","clearRegistryContext","newProjectTemplate","preflight","getConfig","projectConfig","getProjectConfig","promptForMinimalConfig","promptForConfig","defaultConfig","styles","baseColors","getRegistryStyles","getRegistryBaseColors","style","DEFAULT_TAILWIND_CSS","DEFAULT_TAILWIND_CONFIG","DEFAULT_COMPONENTS","DEFAULT_UTILS","baseColor","cssVariables","iconLibrary","tailwindVersion","getProjectTailwindVersionFromConfig","isSafeTarget","targetPath","decodedPath","prevPath","normalizedTarget","normalizedRoot","hasPathTraversal","cleanPath","cleanTarget","cleanDecoded","pattern","resolvedPath","updateCss","css","cssFilepath","cssFilepathRelative","cssSpinner","raw","output","transformCss","input","plugins","updateCssPlugin","postcss","root","lastNode","selector","properties","atRuleMatch","params","node","importRule","importNodes","lastImport","quotedParams","normalizeParams","p","pluginRule","pluginNodes","lastPlugin","newAtRule","themeInline","existingKeyframesRule","keyframesRule","step","stepProps","processRule","utilityAtRule","prop","existingDecl","decl","atRule","processAtRule","childSelector","childProps","nestedMatch","nestedName","nestedParams","tempRule","rule","clone","parent","atRuleName","atRuleParams","nestedSelector","updateCssVars","cssVars","cssVarsSpinner","transformCssVars","updateCssVarsPlugin","cleanupDefaultNextStylesPlugin","packageInfo","getPackageInfo","addCustomImport","addCustomVariant","updateCssVarsPluginV4","updateThemePlugin","updateTailwindConfigPlugin","updateTailwindConfigAnimationPlugin","updateTailwindConfigKeyframesPlugin","updateBaseLayerPlugin","requiredRules","baseLayer","apply","applyRule","AtRule","vars","addOrUpdateVars","removeConflictVars","rootRule","propsToRemove","bodyRule","darkRootRule","ruleNode","newDecl","themeNode","upsertThemeNode","isLocalHSLValue","variables","themeVarNodes","variable","radiusVariables","cssVarNode","isColorValue","propValue","variantNode","customVariantNode","importNode","tailwindConfig","quote","getQuoteType","lastPluginNode","plugin","pluginName","pluginNode","existingKeyFrameNodes","keyframeValueSchema","keyframeName","keyframeValue","parsedKeyframeValue","keyframeNode","values","existingAnimationNodes","parsedAnimationValue","animationNode","chunks","chunk","updateDependencies","dependencies","devDependencies","dependenciesSpinner","getUpdateDependenciesPackageManager","flag","shouldPromptForNpmFlag","confirmation","installWithPackageManager","hasReact19","hasReactDayPicker8","installWithNpm","installWithDeno","installWithExpo","updateEnvVars","envVars","envSpinner","projectRoot","envFilePath","existingEnvFile","findExistingEnvFile","envFileExists","envFileName","newEnvContent","envVarsAdded","envFileUpdated","envFileCreated","existingContent","mergedContent","mergeEnvContent","getNewEnvKeys","updateFonts","fonts","fontsSpinner","updateNextFonts","layoutPath","findLayoutFile","layoutContent","updatedContent","transformLayoutFonts","isSrcDir","ext","possiblePaths","relativePath","fullPath","_config","sourceFile","Project","ScriptKind","googleFonts","f","fontVariableNames","font","importName","varName","toCamelCase","existingImport","fontOptions","buildFontOptions","imp","existingVarDecl","findFontVariableDeclaration","insertPosition","findInsertPosition","VariableDeclarationKind","updateHtmlClassName","str","part","index","variableStatements","statement","declaration","initializer","SyntaxKind","argText","imports","jsxElements","element","classNameAttr","variableExpressions","ensureCnImport","jsxAttr","newVarExpressions","currentValue","jsxExpr","expr","exprText","v","cleanedExpr","removeFontVariablesFromCn","newExpr","insertFontVariablesIntoCn","cnArgs","parseTemplateLiteralToCnArgs","utilsImport","templateLiteral","staticArgs","variableArgs","parts","staticParts","staticPart","cnExpr","fontVars","varsStr","addComponents","workspaceConfig","getWorkspaceConfig","addWorkspaceComponents","addProjectComponents","registrySpinner","tree","resolveRegistryTree","validateFilesTarget","updateFiles","filesCreated","filesUpdated","filesSkipped","rootSpinner","mainTargetConfig","workspaceRoot","findCommonRoot","updateTailwindConfig","overwriteCssVars","shouldOverwriteCssVars","filesByType","file","typeFiles","targetConfig","typeWorkspaceRoot","packageRoot","findPackageRoot","files","registryItemSchema","component","addOptionsSchema","add","initialConfig","restrictedComponentPrefixes","restrictedStylePrefixes","prefix","restrictedComponents","hasNewRegistries","newRegistries","itemType","shouldInstallBaseStyle","registryItem","isUniversalRegistryItem","confirm","promptForRegistryComponents","deprecatedComponents","DEPRECATED_COMPONENTS","getShadcnRegistryIndex","entry","c","preFlightBuild","resolvePaths","buildOptionsSchema","build","ue","content","re","registrySchema","buildSpinner","SHADCN_URL","CREATE_TEMPLATES","create","createUrl","getShadcnCreateUrl","proceed","open","enteredName","selectedTemplate","presetResult","handlePresetOption","initUrl","buildInitUrl","registryBaseConfig","templateFiles","getTemplateFiles","preset","getShadcnInitUrl","presetArg","presets","getPresets","selectedPreset","url","isUrl","getPreset","presetNames","dedent","updateOptionsSchema","diff","targetDir","projectComponents","componentsWithUpdates","changes","diffComponent","change","printDiff","payload","fetchTree","getRegistryBaseColor","getItemTargetPath","fileContent","registryContent","transform","patch","diffLines","info","SHADCN_MCP_VERSION","CLIENTS","DEPENDENCIES","mcp","transport","StdioServerTransport","server","mcpInitOptionsSchema","command","client","installCommand","devFlag","installSpinner","configPath","runMcpInit","overwriteMerge","_","sourceArray","clientInfo","dir","mergedConfig","LEGACY_ICON_LIBRARIES","migrateIcons","uiPath","registryIcons","fg","getRegistryIcons","libraryChoices","migrateOptions","sourceLibrary","targetLibrary","migrationSpinner","migrateIconsFile","iconsMapping","sourceLibraryImport","targetLibraryImport","tmpdir","project","tempFile","randomBytes","targetedIcons","importDeclaration","specifier","iconName","targetedIcon","icon","toPascalCase","processNamedImports","namedImports","isTypeOnly","packageName","namedImportList","importItem","inlineTypeMatch","aliasMatch","importAlias","migrateRadix","foundPackages","replacedPackages","migrateRadixFile","pkg","packageSpinner","foundPackagesArray","dependencyTypes","depType","radixImportPattern","linesToRemove","quoteStyle","hasSemicolon","match","fullMatch","typeKeyword","namespaceAlias","semicolon","componentName","uniqueImports","self","i","unifiedImport","typePrefix","acc","line","transformedLine","offset","string","beforeMatch","openQuotes","openSingleQuotes","uniqueReplacedPackages","preFlightMigrate","migrations","migrateOptionsSchema","migration","migrate","preFlightRegistryBuild","buildRegistry","le","resolvedRegistry","resolveRegistryItems","t","d","absPath","err","results","recursivelyResolveFileImports","searchOptionsSchema","search","registries","partialConfig","fullConfig","validateRegistryConfigForItems","searchRegistries","viewOptionsSchema","view","items","package_default","main","program"],"mappings":";u1CAUA,eAAsBA,GACpBC,CAAAA,CACA,CACA,IAAMC,CAAAA,CAAkC,GAIxC,GACE,CAACC,CAAAA,CAAG,UAAA,CAAWF,EAAQ,GAAG,CAAA,EAC1B,CAACE,CAAAA,CAAG,UAAA,CAAWC,WAAK,OAAA,CAAQH,CAAAA,CAAQ,IAAK,cAAc,CAAC,EAExD,OAAAC,CAAAA,CAAc,GAA4B,CAAA,CAAI,IAAA,CACvC,CACL,MAAA,CAAAA,CAAAA,CACA,WAAA,CAAa,IACf,EAGF,IAAMG,CAAAA,CAAiBC,EAAQ,mBAAA,CAAqB,CAClD,OAAQL,CAAAA,CAAQ,MAClB,CAAC,CAAA,CAAE,KAAA,GAGDE,CAAAA,CAAG,UAAA,CAAWC,WAAK,OAAA,CAAQH,CAAAA,CAAQ,IAAK,iBAAiB,CAAC,GAC1D,CAACA,CAAAA,CAAQ,QAETI,CAAAA,EAAgB,IAAA,GAChBE,CAAAA,CAAO,KAAA,GACPA,CAAAA,CAAO,KAAA,CACL,KAAKC,CAAAA,CAAY,IAAA,CACf,iBACF,CAAC,CAAA,wBAAA,EAA2BA,EAAY,IAAA,CACtCP,CAAAA,CAAQ,GACV,CAAC,CAAA;AAAA,0BAAA,EAAgCO,CAAAA,CAAY,IAAA,CAC3C,iBACF,CAAC,CAAA,cAAA,EAAiBA,CAAAA,CAAY,IAAA,CAAK,MAAM,CAAC,CAAA,OAAA,CAC5C,CAAA,CACAD,CAAAA,CAAO,OAAM,CACb,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGhBF,CAAAA,EAAgB,OAAA,EAAQ,CAExB,IAAMI,GAAAA,CAAmBH,CAAAA,CAAQ,sBAAA,CAAwB,CACvD,MAAA,CAAQL,CAAAA,CAAQ,MAClB,CAAC,EAAE,KAAA,EAAM,CACHS,GAAAA,CAAc,MAAMC,CAAAA,CAAeV,CAAAA,CAAQ,GAAG,CAAA,CAAA,CAChD,CAACS,GAAAA,EAAeA,GAAAA,EAAa,SAAA,CAAU,IAAA,GAAS,QAAA,IAClDR,CAAAA,CAAc,GAAqB,EAAI,IAAA,CACvCO,GAAAA,EAAkB,IAAA,EAAK,CACvBF,CAAAA,CAAO,KAAA,EAAM,CACTG,GAAAA,EAAa,UAAU,KAAA,CAAM,YAAA,EAC/BH,CAAAA,CAAO,KAAA,CACL,CAAA,6CAAA,EAAgDC,CAAAA,CAAY,IAAA,CAC1DP,CAAAA,CAAQ,GACV,CAAC,CAAA;AAAA,MAAA,EACUO,EAAY,IAAA,CACnBE,GAAAA,EAAa,SAAA,CAAU,KAAA,CAAM,YAC/B,CAAC,CAAA;AAAA,uDAAA,CACL,EAEFH,CAAAA,CAAO,KAAA,GACP,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAEhBE,GAAAA,EAAkB,QAChB,CAAA,2BAAA,EAA8BD,CAAAA,CAAY,KACxCE,GAAAA,CAAY,SAAA,CAAU,KACxB,CAAC,CAAA,CAAA,CACH,EAEA,IAAIE,CAAAA,CAAyB,0BAAA,CAEzBF,GAAAA,CAAY,kBAAoB,IAAA,GAClCE,CAAAA,CAAyB,yCAAyCJ,CAAAA,CAAY,IAAA,CAC5E,IACF,CAAC,CAAA,CAAA,CAAA,CAAA,CAGH,IAAMK,CAAAA,CAAkBP,CAAAA,CAAQM,EAAwB,CACtD,MAAA,CAAQX,EAAQ,MAClB,CAAC,EAAE,KAAA,EAAM,CAEPS,GAAAA,CAAY,eAAA,GAAoB,OAC/B,CAACA,GAAAA,EAAa,oBAAsB,CAACA,GAAAA,EAAa,kBAEnDR,CAAAA,CAAc,GAAuB,EAAI,IAAA,CACzCW,CAAAA,EAAiB,MAAK,EAEtBH,GAAAA,CAAY,kBAAoB,IAAA,EAChC,CAACA,KAAa,eAAA,EAEdR,CAAAA,CAAc,GAAuB,CAAA,CAAI,KACzCW,CAAAA,EAAiB,IAAA,IACPH,GAAAA,CAAY,eAAA,CAItBG,GAAiB,OAAA,EAAQ,EAHzBX,EAAc,GAAuB,CAAA,CAAI,KACzCW,CAAAA,EAAiB,IAAA,IAKnB,IAAMC,GAAAA,CAAkBR,EAAQ,0BAAA,CAA4B,CAC1D,MAAA,CAAQL,CAAAA,CAAQ,MAClB,CAAC,CAAA,CAAE,OAAM,CACT,OAAKS,KAAa,WAAA,CAIhBI,GAAAA,EAAiB,SAAQ,EAHzBZ,CAAAA,CAAc,GAAoB,CAAA,CAAI,IAAA,CACtCY,KAAiB,IAAA,EAAK,CAAA,CAKpB,OAAO,IAAA,CAAKZ,CAAM,CAAA,CAAE,MAAA,CAAS,IAC3BA,CAAAA,CAAc,GAAuB,IACvCK,CAAAA,CAAO,KAAA,GACPA,CAAAA,CAAO,KAAA,CACL,0CAA0CC,CAAAA,CAAY,IAAA,CACpDP,EAAQ,GACV,CAAC,GACH,CAAA,CACAM,CAAAA,CAAO,MACL,uFACF,CAAA,CACAA,CAAAA,CAAO,KAAA,CAAM,sCAAsC,CAAA,CAC/CG,GAAAA,EAAa,UAAU,KAAA,CAAM,QAAA,EAC/BH,EAAO,KAAA,CACL,CAAA,MAAA,EAASC,EAAY,IAAA,CACnBE,GAAAA,EAAa,UAAU,KAAA,CAAM,QAC/B,CAAC,CAAA,gBAAA,CACH,CAAA,CAAA,CAIAR,EAAc,GAAoB,CAAA,GACpCK,CAAAA,CAAO,KAAA,GACPA,CAAAA,CAAO,KAAA,CAAM,mDAAmD,CAAA,CAC5DG,GAAAA,EAAa,UAAU,KAAA,CAAM,YAAA,EAC/BH,EAAO,KAAA,CACL,CAAA,MAAA,EAASC,EAAY,IAAA,CACnBE,GAAAA,EAAa,UAAU,KAAA,CAAM,YAC/B,CAAC,CAAA,qCAAA,CACH,CAAA,CAAA,CAIJH,CAAAA,CAAO,KAAA,GACP,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGT,CACL,OAAAL,CAAAA,CACA,WAAA,CAAAQ,GACF,CACF,CCnJA,IAAMK,EAAAA,CACJ,sDAAA,CAEWC,EAAY,CACvB,IAAA,CAAM,OACN,eAAA,CAAiB,eAAA,CACjB,KAAM,MAAA,CACN,KAAA,CAAO,OACT,CAAA,CAEA,eAAsBC,EAAAA,CACpBhB,CAAAA,CAIA,CACAA,CAAAA,CAAU,CACR,OAAQ,KAAA,CACR,GAAGA,CACL,CAAA,CAEA,IAAIiB,EACFjB,CAAAA,CAAQ,QAAA,EAAYe,EAAUf,CAAAA,CAAQ,QAAkC,EACnEA,CAAAA,CAAQ,QAAA,CACT,MAAA,CACFkB,CAAAA,CACFlB,EAAQ,IAAA,GACPiB,CAAAA,GAAaF,EAAU,IAAA,EACxBE,CAAAA,GAAaF,EAAU,IAAA,EACvBE,CAAAA,GAAaF,EAAU,KAAA,CACnB,QAAA,CACA,eACFI,GAAAA,CAAc,QAAA,CAEZC,EACJpB,CAAAA,CAAQ,UAAA,EAAY,SAAW,CAAA,EAC/B,CAAC,CAACA,CAAAA,CAAQ,WAAW,CAAC,CAAA,CAAE,MAAM,aAAa,CAAA,CAE7C,GAAIA,CAAAA,CAAQ,UAAA,EAAcoB,EACxB,GAAI,CACF,GAAM,CAACC,CAAM,EAAI,MAAMC,CAAAA,CAActB,EAAQ,UAAU,CAAA,CACjD,CAAE,IAAA,CAAAuB,CAAK,CAAA,CAAIC,GAAAA,CACd,OAAO,CACN,IAAA,CAAMA,IAAE,MAAA,CAAO,CACb,YAAaA,GAAAA,CAAE,MAAA,EACjB,CAAC,CACH,CAAC,CAAA,CACA,KAAA,CAAMH,CAAM,CAAA,CACfF,GAAAA,CAAcI,CAAAA,CAAK,WAAA,CAGnBN,EAAWF,CAAAA,CAAU,KACvB,OAASU,CAAAA,CAAO,CACdnB,EAAO,KAAA,EAAM,CACboB,IAAYD,CAAK,EACnB,CAGF,GAAI,CAACzB,EAAQ,KAAA,CAAO,CAClB,GAAM,CAAE,IAAA,CAAA2B,EAAM,IAAA,CAAAC,CAAK,EAAI,MAAMC,EAAAA,CAAQ,CACnC,CACE,IAAA,CAAM7B,EAAQ,QAAA,EAAYoB,CAAAA,CAAoB,KAAO,QAAA,CACrD,IAAA,CAAM,OACN,OAAA,CAAS,CAAA,SAAA,EAAYb,EAAY,IAAA,CAC/BP,CAAAA,CAAQ,GACV,CAAC,CAAA;AAAA,wCAAA,CAAA,CACD,OAAA,CAAS,CACP,CAAE,KAAA,CAAO,UAAW,KAAA,CAAO,MAAO,EAClC,CAAE,KAAA,CAAO,qBAAsB,KAAA,CAAO,eAAgB,EACtD,CAAE,KAAA,CAAO,OAAQ,KAAA,CAAO,MAAO,EAC/B,CAAE,KAAA,CAAO,iBAAkB,KAAA,CAAO,OAAQ,CAC5C,CAAA,CACA,OAAA,CAAS,CACX,CAAA,CACA,CACE,KAAMA,CAAAA,CAAQ,IAAA,CAAO,KAAO,MAAA,CAC5B,IAAA,CAAM,OACN,OAAA,CAAS,6BAAA,CACT,QAASkB,CAAAA,CACT,MAAA,CAASY,GAAkBA,CAAAA,CAAM,IAAA,GACjC,QAAA,CAAWA,CAAAA,EACTA,EAAM,MAAA,CAAS,GAAA,CACX,2CACA,IACR,CACF,CAAC,CAAA,CAEDb,CAAAA,CAAWU,GAAQV,CAAAA,CACnBC,CAAAA,CAAcU,GAAQV,EACxB,CAEA,IAAMa,CAAAA,CAAiB,MAAMC,IAAkBhC,CAAAA,CAAQ,GAAA,CAAK,CAC1D,YAAA,CAAc,IAChB,CAAC,CAAA,CAEKiC,CAAAA,CAAc,GAAGjC,CAAAA,CAAQ,GAAG,IAAIkB,CAAW,CAAA,CAAA,CAGjD,GAAI,CACF,MAAMhB,EAAG,MAAA,CAAOF,CAAAA,CAAQ,IAAKE,CAAAA,CAAG,SAAA,CAAU,IAAI,EAChD,CAAA,KAAgB,CACdI,EAAO,KAAA,EAAM,CACbA,EAAO,KAAA,CAAM,CAAA,SAAA,EAAYC,EAAY,IAAA,CAAKP,CAAAA,CAAQ,GAAG,CAAC,CAAA,iBAAA,CAAmB,EACzEM,CAAAA,CAAO,KAAA,CACL,8EAA8EC,CAAAA,CAAY,IAAA,CACxFP,EAAQ,GACV,CAAC,kBACH,CAAA,CACAM,CAAAA,CAAO,OAAM,CACb,OAAA,CAAQ,KAAK,CAAC,EAChB,CAEA,OAAIJ,CAAAA,CAAG,WAAWC,UAAAA,CAAK,OAAA,CAAQH,EAAQ,GAAA,CAAKkB,CAAAA,CAAa,cAAc,CAAC,CAAA,GACtEZ,EAAO,KAAA,EAAM,CACbA,CAAAA,CAAO,KAAA,CACL,CAAA,wBAAA,EAA2BC,CAAAA,CAAY,KAAKW,CAAW,CAAC,kBAC1D,CAAA,CACAZ,CAAAA,CAAO,MAAM,+CAA+C,CAAA,CAC5DA,EAAO,KAAA,EAAM,CACb,QAAQ,IAAA,CAAK,CAAC,GAGZW,CAAAA,GAAaF,CAAAA,CAAU,MACzB,MAAMmB,EAAAA,CAAkBD,EAAa,CACnC,OAAA,CAASd,IACT,GAAA,CAAKnB,CAAAA,CAAQ,IACb,cAAA,CAAA+B,CAAAA,CACA,OAAQ,CAAC,CAAC/B,EAAQ,MACpB,CAAC,EAGCiB,CAAAA,GAAaF,CAAAA,CAAU,eAAe,CAAA,EACxC,MAAMoB,GAAsBF,CAAAA,CAAa,CACvC,cAAA,CAAAF,CACF,CAAC,CAAA,CAGCd,IAAaF,CAAAA,CAAU,IAAA,EACzB,MAAMqB,EAAAA,CAAkBH,CAAAA,CAAa,CACnC,cAAA,CAAAF,CACF,CAAC,CAAA,CAGCd,CAAAA,GAAaF,EAAU,KAAA,EACzB,MAAMsB,GAAmBJ,CAAAA,CAAa,CACpC,eAAAF,CACF,CAAC,EAGI,CACL,WAAA,CAAAE,EACA,WAAA,CAAAf,CAAAA,CACA,SAAAD,CACF,CACF,CAEA,eAAeiB,EAAAA,CACbD,EACAjC,CAAAA,CAMA,CACA,IAAMsC,CAAAA,CAAgBjC,CAAAA,CACpB,8DACF,CAAA,CAAE,KAAA,GAGIkC,GAAAA,CAAO,CACX,aACA,UAAA,CACA,cAAA,CACA,QACAvC,CAAAA,CAAQ,MAAA,CAAS,YAAc,cAAA,CAC/B,mBAAA,CACA,SAASA,CAAAA,CAAQ,cAAc,EACjC,CAAA,CAAA,CAGEA,CAAAA,CAAQ,QAAQ,UAAA,CAAW,IAAI,GAC/BA,CAAAA,CAAQ,OAAA,CAAQ,WAAW,QAAQ,CAAA,EACnCA,EAAQ,OAAA,CAAQ,UAAA,CAAW,QAAQ,CAAA,GAEnCuC,GAAAA,CAAK,KAAK,aAAa,CAAA,CAAA,CAIvBvC,EAAQ,OAAA,CAAQ,UAAA,CAAW,QAAQ,CAAA,EACnCA,CAAAA,CAAQ,QAAQ,UAAA,CAAW,QAAQ,IAEnCuC,GAAAA,CAAK,IAAA,CAAK,qBAAqB,CAAA,CAGjC,GAAI,CACF,MAAMC,KAAAA,CACJ,KAAA,CACA,CAAC,CAAA,gBAAA,EAAmBxC,CAAAA,CAAQ,OAAO,CAAA,CAAA,CAAIiC,CAAAA,CAAa,WAAY,GAAGM,GAAI,EACvE,CACE,GAAA,CAAKvC,EAAQ,GACf,CACF,EACF,CAAA,KAAgB,CACdM,EAAO,KAAA,EAAM,CACbA,EAAO,KAAA,CACL,wEACF,EACA,OAAA,CAAQ,IAAA,CAAK,CAAC,EAChB,CAEAgC,GAAe,OAAA,CAAQ,iCAAiC,EAC1D,CAEA,eAAeH,GACbF,CAAAA,CACAjC,CAAAA,CAGA,CACA,IAAMsC,CAAAA,CAAgBjC,EACpB,+DACF,CAAA,CAAE,KAAA,EAAM,CAER,GAAI,CAEF,IAAMoC,CAAAA,CAAetC,UAAAA,CAAK,KAAKuC,EAAAA,CAAG,MAAA,GAAU,CAAA,gBAAA,EAAmB,IAAA,CAAK,KAAK,CAAA,CAAE,EAC3E,MAAMxC,CAAAA,CAAG,UAAUuC,CAAY,CAAA,CAC/B,IAAME,CAAAA,CAAW,MAAM,MAAM7B,EAAmB,CAAA,CAChD,GAAI,CAAC6B,CAAAA,CAAS,GACZ,MAAM,IAAI,MAAM,CAAA,6BAAA,EAAgCA,CAAAA,CAAS,UAAU,CAAA,CAAE,CAAA,CAIvE,IAAMC,CAAAA,CAAUzC,UAAAA,CAAK,QAAQsC,CAAAA,CAAc,iBAAiB,EAC5D,MAAMvC,CAAAA,CAAG,SAAA,CAAU0C,CAAAA,CAAS,MAAA,CAAO,IAAA,CAAK,MAAMD,CAAAA,CAAS,WAAA,EAAa,CAAC,CAAA,CACrE,MAAMH,KAAAA,CAAM,KAAA,CAAO,CACjB,MAAA,CACAI,CAAAA,CACA,KACAH,CAAAA,CACA,sBAAA,CACA,iCACF,CAAC,CAAA,CACD,IAAMI,CAAAA,CAAgB1C,UAAAA,CAAK,QAAQsC,CAAAA,CAAc,eAAe,EAChE,MAAMvC,CAAAA,CAAG,KAAK2C,CAAAA,CAAeZ,CAAW,EACxC,MAAM/B,CAAAA,CAAG,OAAOuC,CAAY,CAAA,CAG5B,MAAMD,KAAAA,CAAMxC,CAAAA,CAAQ,eAAgB,CAAC,SAAS,EAAG,CAC/C,GAAA,CAAKiC,CACP,CAAC,CAAA,CAID,IAAMa,CAAAA,CAAkB3C,UAAAA,CAAK,KAAK8B,CAAAA,CAAa,cAAc,EAC7D,GAAI/B,CAAAA,CAAG,WAAW4C,CAAe,CAAA,CAAG,CAClC,IAAMC,CAAAA,CAAqB,MAAM7C,CAAAA,CAAG,QAAA,CAAS4C,EAAiB,MAAM,CAAA,CAC9DE,EAAc,IAAA,CAAK,KAAA,CAAMD,CAAkB,CAAA,CACjDC,CAAAA,CAAY,KAAOf,CAAAA,CAAY,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,GAC1C,MAAM/B,CAAAA,CAAG,UAAU4C,CAAAA,CAAiB,IAAA,CAAK,UAAUE,CAAAA,CAAa,IAAA,CAAM,CAAC,CAAC,EAC1E,CAGA,IAAMC,CAAAA,CAAM,OAAA,CAAQ,KAAI,CACxB,MAAMT,MAAM,KAAA,CAAO,CAAC,WAAW,CAAA,CAAG,CAAE,IAAKP,CAAY,CAAC,EACtD,MAAMO,KAAAA,CAAM,MAAO,CAAC,MAAM,EAAG,CAAE,GAAA,CAAKP,CAAY,CAAC,CAAA,CACjD,MAAMO,KAAAA,CAAM,KAAA,CAAO,CAAC,KAAA,CAAO,IAAI,EAAG,CAAE,GAAA,CAAKP,CAAY,CAAC,CAAA,CACtD,MAAMO,KAAAA,CAAM,KAAA,CAAO,CAAC,QAAA,CAAU,IAAA,CAAM,gBAAgB,CAAA,CAAG,CACrD,GAAA,CAAKP,CACP,CAAC,CAAA,CAEDK,GAAe,OAAA,CAAQ,kCAAkC,EAC3D,CAAA,MAASb,CAAAA,CAAO,CACda,CAAAA,EAAe,IAAA,CAAK,uDAAuD,CAAA,CAC3EZ,GAAAA,CAAYD,CAAK,EACnB,CACF,CAEA,eAAeW,EAAAA,CACbH,EACAjC,CAAAA,CAGA,CACA,IAAMsC,CAAAA,CAAgBjC,CAAAA,CACpB,2DACF,CAAA,CAAE,KAAA,GAEF,GAAI,CAEF,IAAMoC,CAAAA,CAAetC,UAAAA,CAAK,KAAKuC,EAAAA,CAAG,MAAA,GAAU,CAAA,gBAAA,EAAmB,IAAA,CAAK,KAAK,CAAA,CAAE,EAC3E,MAAMxC,CAAAA,CAAG,SAAA,CAAUuC,CAAY,CAAA,CAC/B,IAAME,EAAW,MAAM,KAAA,CAAM7B,EAAmB,CAAA,CAChD,GAAI,CAAC6B,CAAAA,CAAS,EAAA,CACZ,MAAM,IAAI,KAAA,CAAM,gCAAgCA,CAAAA,CAAS,UAAU,EAAE,CAAA,CAIvE,IAAMC,EAAUzC,UAAAA,CAAK,OAAA,CAAQsC,EAAc,iBAAiB,CAAA,CAC5D,MAAMvC,CAAAA,CAAG,SAAA,CAAU0C,EAAS,MAAA,CAAO,IAAA,CAAK,MAAMD,CAAAA,CAAS,WAAA,EAAa,CAAC,CAAA,CACrE,MAAMH,KAAAA,CAAM,KAAA,CAAO,CACjB,MAAA,CACAI,CAAAA,CACA,KACAH,CAAAA,CACA,sBAAA,CACA,4BACF,CAAC,CAAA,CACD,IAAMI,CAAAA,CAAgB1C,UAAAA,CAAK,QAAQsC,CAAAA,CAAc,UAAU,EAK3D,GAJA,MAAMvC,EAAG,IAAA,CAAK2C,CAAAA,CAAeZ,CAAW,CAAA,CACxC,MAAM/B,EAAG,MAAA,CAAOuC,CAAY,EAGxBzC,CAAAA,CAAQ,cAAA,GAAmB,OAAQ,CACrC,IAAMkD,EAAe/C,UAAAA,CAAK,IAAA,CAAK8B,EAAa,gBAAgB,CAAA,CACxD/B,EAAG,UAAA,CAAWgD,CAAY,GAC5B,MAAMhD,CAAAA,CAAG,OAAOgD,CAAY,EAEhC,CAGA,MAAMV,KAAAA,CAAMxC,EAAQ,cAAA,CAAgB,CAAC,SAAS,CAAA,CAAG,CAC/C,GAAA,CAAKiC,CACP,CAAC,CAAA,CAGD,IAAMa,CAAAA,CAAkB3C,UAAAA,CAAK,KAAK8B,CAAAA,CAAa,cAAc,EAC7D,GAAI/B,CAAAA,CAAG,WAAW4C,CAAe,CAAA,CAAG,CAClC,IAAMC,CAAAA,CAAqB,MAAM7C,CAAAA,CAAG,QAAA,CAAS4C,EAAiB,MAAM,CAAA,CAC9DE,EAAc,IAAA,CAAK,KAAA,CAAMD,CAAkB,CAAA,CACjDC,CAAAA,CAAY,KAAOf,CAAAA,CAAY,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,GAC1C,MAAM/B,CAAAA,CAAG,UAAU4C,CAAAA,CAAiB,IAAA,CAAK,UAAUE,CAAAA,CAAa,IAAA,CAAM,CAAC,CAAC,EAC1E,CAGA,MAAMR,KAAAA,CAAM,KAAA,CAAO,CAAC,WAAW,CAAA,CAAG,CAAE,GAAA,CAAKP,CAAY,CAAC,CAAA,CACtD,MAAMO,MAAM,KAAA,CAAO,CAAC,MAAM,CAAA,CAAG,CAAE,IAAKP,CAAY,CAAC,EACjD,MAAMO,KAAAA,CAAM,MAAO,CAAC,KAAA,CAAO,IAAI,CAAA,CAAG,CAAE,IAAKP,CAAY,CAAC,EACtD,MAAMO,KAAAA,CAAM,MAAO,CAAC,QAAA,CAAU,KAAM,gBAAgB,CAAA,CAAG,CACrD,GAAA,CAAKP,CACP,CAAC,CAAA,CAEDK,CAAAA,EAAe,OAAA,CAAQ,8BAA8B,EACvD,CAAA,MAASb,EAAO,CACda,CAAAA,EAAe,KAAK,mDAAmD,CAAA,CACvEZ,IAAYD,CAAK,EACnB,CACF,CAEA,eAAeY,GACbJ,CAAAA,CACAjC,CAAAA,CAGA,CACA,IAAMsC,CAAAA,CAAgBjC,EACpB,qEACF,CAAA,CAAE,OAAM,CAER,GAAI,CAEF,IAAMoC,CAAAA,CAAetC,WAAK,IAAA,CAAKuC,EAAAA,CAAG,QAAO,CAAG,CAAA,gBAAA,EAAmB,KAAK,GAAA,EAAK,EAAE,CAAA,CAC3E,MAAMxC,EAAG,SAAA,CAAUuC,CAAY,EAC/B,IAAME,CAAAA,CAAW,MAAM,KAAA,CAAM7B,EAAmB,EAChD,GAAI,CAAC6B,EAAS,EAAA,CACZ,MAAM,IAAI,KAAA,CAAM,CAAA,6BAAA,EAAgCA,EAAS,UAAU,CAAA,CAAE,EAIvE,IAAMC,CAAAA,CAAUzC,WAAK,OAAA,CAAQsC,CAAAA,CAAc,iBAAiB,CAAA,CAC5D,MAAMvC,EAAG,SAAA,CAAU0C,CAAAA,CAAS,OAAO,IAAA,CAAK,MAAMD,EAAS,WAAA,EAAa,CAAC,CAAA,CACrE,MAAMH,MAAM,KAAA,CAAO,CACjB,OACAI,CAAAA,CACA,IAAA,CACAH,EACA,sBAAA,CACA,6BACF,CAAC,CAAA,CACD,IAAMI,CAAAA,CAAgB1C,WAAK,OAAA,CAAQsC,CAAAA,CAAc,WAAW,CAAA,CAK5D,GAJA,MAAMvC,CAAAA,CAAG,IAAA,CAAK2C,EAAeZ,CAAW,CAAA,CACxC,MAAM/B,CAAAA,CAAG,MAAA,CAAOuC,CAAY,CAAA,CAGxBzC,CAAAA,CAAQ,iBAAmB,MAAA,CAAQ,CACrC,IAAMkD,CAAAA,CAAe/C,UAAAA,CAAK,KAAK8B,CAAAA,CAAa,gBAAgB,EACxD/B,CAAAA,CAAG,UAAA,CAAWgD,CAAY,CAAA,EAC5B,MAAMhD,EAAG,MAAA,CAAOgD,CAAY,EAEhC,CAGA,MAAMV,MAAMxC,CAAAA,CAAQ,cAAA,CAAgB,CAAC,SAAS,CAAA,CAAG,CAC/C,GAAA,CAAKiC,CACP,CAAC,EAGD,IAAMa,CAAAA,CAAkB3C,WAAK,IAAA,CAAK8B,CAAAA,CAAa,cAAc,CAAA,CAC7D,GAAI/B,EAAG,UAAA,CAAW4C,CAAe,EAAG,CAClC,IAAMC,EAAqB,MAAM7C,CAAAA,CAAG,SAAS4C,CAAAA,CAAiB,MAAM,EAC9DE,CAAAA,CAAc,IAAA,CAAK,MAAMD,CAAkB,CAAA,CACjDC,EAAY,IAAA,CAAOf,CAAAA,CAAY,MAAM,GAAG,CAAA,CAAE,KAAI,CAC9C,MAAM/B,EAAG,SAAA,CAAU4C,CAAAA,CAAiB,KAAK,SAAA,CAAUE,CAAAA,CAAa,KAAM,CAAC,CAAC,EAC1E,CAGA,MAAMR,KAAAA,CAAM,MAAO,CAAC,WAAW,EAAG,CAAE,GAAA,CAAKP,CAAY,CAAC,CAAA,CACtD,MAAMO,KAAAA,CAAM,KAAA,CAAO,CAAC,MAAM,CAAA,CAAG,CAAE,GAAA,CAAKP,CAAY,CAAC,CAAA,CACjD,MAAMO,MAAM,KAAA,CAAO,CAAC,MAAO,IAAI,CAAA,CAAG,CAAE,GAAA,CAAKP,CAAY,CAAC,CAAA,CACtD,MAAMO,MAAM,KAAA,CAAO,CAAC,SAAU,IAAA,CAAM,gBAAgB,EAAG,CACrD,GAAA,CAAKP,CACP,CAAC,CAAA,CAEDK,GAAe,OAAA,CAAQ,wCAAwC,EACjE,CAAA,MAASb,CAAAA,CAAO,CACda,CAAAA,EAAe,IAAA,CACb,6DACF,CAAA,CACAZ,GAAAA,CAAYD,CAAK,EACnB,CACF,CC/aA,eAAsB0B,CAAAA,CAAaF,CAAAA,CAAc,QAAQ,GAAA,EAAI,CAAkB,CAC7E,GAAI,CACF,GAAM,CAAE,MAAA,CAAAG,CAAO,CAAA,CAAI,aAAa,kBAAkB,CAAA,CAC5CC,EAAW,CACf,YAAA,CACA,yBACA,kBAAA,CACA,MACF,CAAA,CAEA,IAAA,IAAWC,CAAAA,IAAWD,CAAAA,CAAU,CAC9B,IAAME,CAAAA,CAAUC,KAAKP,CAAAA,CAAKK,CAAO,EAC7BG,UAAAA,CAAWF,CAAO,GACpBH,CAAAA,CAAO,CACL,KAAMG,CAAAA,CACN,QAAA,CAAU,GACV,KAAA,CAAO,CAAA,CACT,CAAC,EAEL,CACF,OAAS9B,CAAAA,CAAO,CACdnB,EAAO,IAAA,CAAK,2BAAA,CAA6BmB,CAAK,EAChD,CACF,CCzBO,IAAMiC,EAAAA,CAAqB,OAE3B,SAASC,EAAAA,CAAiBC,EAAiC,CAChE,GAAI,CAACC,CAAAA,CAAQ,UAAA,CAAWD,CAAQ,CAAA,CAC9B,OAAO,IAAA,CAGT,IAAME,CAAAA,CAAa,CAAA,EAAGF,CAAQ,CAAA,EAAGF,EAAkB,GACnD,GAAI,CACF,OAAAG,CAAAA,CAAQ,UAAA,CAAWD,EAAUE,CAAU,CAAA,CAChCA,CACT,CAAA,MAASrC,CAAAA,CAAO,CACd,OAAA,OAAA,CAAQ,KAAA,CAAM,8BAA8BmC,CAAQ,CAAA,EAAA,EAAKnC,CAAK,CAAA,CAAE,CAAA,CACzD,IACT,CACF,CAEO,SAASsC,EAAAA,CAAkBH,CAAAA,CAA2B,CAC3D,IAAME,CAAAA,CAAa,GAAGF,CAAQ,CAAA,EAAGF,EAAkB,CAAA,CAAA,CAEnD,GAAI,CAACG,CAAAA,CAAQ,UAAA,CAAWC,CAAU,CAAA,CAChC,OAAO,MAAA,CAGT,GAAI,CACF,OAAAD,EAAQ,UAAA,CAAWC,CAAAA,CAAYF,CAAQ,CAAA,CAChC,CAAA,CACT,OAASnC,CAAAA,CAAO,CACd,eAAQ,KAAA,CACN,CAAA,uCAAA,EAA0CqC,CAAU,CAAA,EAAA,EAAKrC,CAAK,EAChE,CAAA,CACO,KACT,CACF,CAEO,SAASuC,GAAiBJ,CAAAA,CAA2B,CAC1D,IAAME,CAAAA,CAAa,CAAA,EAAGF,CAAQ,CAAA,EAAGF,EAAkB,GAEnD,GAAI,CAACG,EAAQ,UAAA,CAAWC,CAAU,EAChC,OAAO,MAAA,CAGT,GAAI,CACF,OAAAD,EAAQ,UAAA,CAAWC,CAAU,EACtB,CAAA,CACT,CAAA,KAAgB,CAEd,OAAO,MACT,CACF,CC5CA,eAAsBG,GACpBC,CAAAA,CACAd,CAAAA,CACA,CACA,IAAMe,CAAAA,CAAuB,IAAI,GAAA,CAC3BC,CAAAA,CAAe,IAAI,GAAA,CACnBC,CAAAA,CAAiB,CAAC,GAAGH,CAAU,EAErC,KAAOG,CAAAA,CAAe,OAAS,CAAA,EAAG,CAChC,IAAMC,CAAAA,CAAcD,CAAAA,CAAe,OAAM,CAEzC,GAAID,EAAa,GAAA,CAAIE,CAAW,EAC9B,SAEFF,CAAAA,CAAa,GAAA,CAAIE,CAAW,CAAA,CAE5B,GAAM,CAAE,QAAA,CAAAC,CAAS,EAAIC,GAAAA,CAA+BF,CAAW,EAC3DC,CAAAA,EAAY,CAACE,IAAmBF,CAAQ,CAAA,EAC1CJ,EAAqB,GAAA,CAAII,CAAQ,EAGnC,GAAI,CACF,GAAM,CAACG,CAAI,EAAI,MAAMC,CAAAA,CAAmB,CAACL,CAAW,CAAA,CAAGlB,EAAQ,CAC7D,QAAA,CAAU,EACZ,CAAC,CAAA,CAED,GAAIsB,CAAAA,EAAM,oBAAA,CACR,QAAWE,CAAAA,IAAOF,CAAAA,CAAK,qBAAsB,CAC3C,GAAM,CAAE,QAAA,CAAUG,CAAY,CAAA,CAAIL,GAAAA,CAA+BI,CAAG,CAAA,CAChEC,GAAe,CAACJ,GAAAA,CAAmBI,CAAW,CAAA,EAChDV,CAAAA,CAAqB,IAAIU,CAAW,CAAA,CAGjCT,EAAa,GAAA,CAAIQ,CAAG,GACvBP,CAAAA,CAAe,IAAA,CAAKO,CAAG,EAE3B,CAEJ,OAASnD,CAAAA,CAAO,CAEd,GAAIA,CAAAA,YAAiBqD,CAAAA,CAA4B,CAC/C,GAAM,CAAE,SAAAP,CAAS,CAAA,CAAIC,IAA+BF,CAAW,CAAA,CAC3DC,GAAY,CAACE,GAAAA,CAAmBF,CAAQ,CAAA,EAC1CJ,CAAAA,CAAqB,IAAII,CAAQ,CAAA,CAEnC,QACF,CAIA,QACF,CACF,CAEA,OAAO,KAAA,CAAM,KAAKJ,CAAoB,CACxC,CCrDA,eAAsBY,CAAAA,CACpBb,EACAd,CAAAA,CACApD,CAAAA,CAGI,EAAC,CACL,CACAA,EAAU,CACR,MAAA,CAAQ,MACR,SAAA,CAAW,IAAA,CACX,GAAGA,CACL,CAAA,CAKA,IAAMgF,CAAAA,CAAAA,CAFgB,MAAMf,GAA0BC,CAAAA,CAAYd,CAAM,GAEhC,MAAA,CACrCmB,CAAAA,EACC,CAACnB,CAAAA,CAAO,UAAA,GAAamB,CAAQ,CAAA,EAC7B,CAAC,OAAO,IAAA,CAAKE,GAAkB,EAAE,QAAA,CAASF,CAAQ,CACtD,CAAA,CAEA,GAAIS,CAAAA,CAAkB,SAAW,CAAA,CAC/B,OAAO,CACL,MAAA,CAAA5B,CAAAA,CACA,cAAe,EACjB,EAKF,IAAM6B,CAAAA,CAAgB,MAAMC,EAAAA,CAAmB,CAC7C,SAAU,OAAA,CAAQ,GAAA,CAAI,WAAa,aACrC,CAAC,EAED,GAAI,CAACD,EACH,OAAO,CACL,OAAA7B,CAAAA,CACA,aAAA,CAAe,EACjB,CAAA,CAGF,IAAM+B,CAAAA,CAA0C,GAChD,IAAA,IAAWZ,CAAAA,IAAYS,EACjBC,CAAAA,CAAcV,CAAQ,IACxBY,CAAAA,CAAgBZ,CAAQ,CAAA,CAAIU,CAAAA,CAAcV,CAAQ,CAAA,CAAA,CAItD,GAAI,MAAA,CAAO,IAAA,CAAKY,CAAe,CAAA,CAAE,MAAA,GAAW,EAC1C,OAAO,CACL,OAAA/B,CAAAA,CACA,aAAA,CAAe,EACjB,CAAA,CAIF,IAAMgC,GAAAA,CAAqB,MAAA,CAAO,YAChC,MAAA,CAAO,OAAA,CAAQhC,EAAO,UAAA,EAAc,EAAE,CAAA,CAAE,MAAA,CACtC,CAAC,CAACiC,CAAG,IAAM,CAAC,MAAA,CAAO,KAAKZ,GAAkB,CAAA,CAAE,SAASY,CAAG,CAC1D,CACF,CAAA,CAEMC,GAAAA,CAA0B,CAC9B,GAAGlC,CAAAA,CACH,UAAA,CAAY,CACV,GAAGgC,GAAAA,CACH,GAAGD,CACL,CACF,EAEA,GAAInF,CAAAA,CAAQ,UAAW,CACrB,GAAM,CAAE,aAAA,CAAAuF,CAAAA,CAAe,GAAGC,CAA2B,CAAA,CACnDF,IACIG,CAAAA,CAAgBpF,CAAAA,CAAQ,4BAA6B,CACzD,MAAA,CAAQL,EAAQ,MAClB,CAAC,EAAE,KAAA,EAAM,CACH0F,EAAgBC,CAAAA,CAAgB,KAAA,CAAMH,CAA0B,CAAA,CACtE,MAAMtF,EAAG,SAAA,CACPC,UAAAA,CAAK,QAAQiD,CAAAA,CAAO,aAAA,CAAc,IAAK,iBAAiB,CAAA,CACxD,KAAK,SAAA,CAAUsC,CAAAA,CAAe,IAAA,CAAM,CAAC,CAAA,CAAI;AAAA,CAAA,CACzC,OACF,CAAA,CACAD,CAAAA,CAAc,OAAA,GAChB,CAEA,OAAO,CACL,MAAA,CAAQH,GAAAA,CACR,aAAA,CAAe,MAAA,CAAO,KAAKH,CAAe,CAC5C,CACF,CCjDA,QAAQ,EAAA,CAAG,MAAA,CAASS,CAAAA,EAAS,CAC3B,IAAMhC,CAAAA,CAAWzD,WAAK,OAAA,CAAQ,OAAA,CAAQ,GAAA,EAAI,CAAG,iBAAiB,CAAA,CAG9D,OAAIyF,CAAAA,GAAS,CAAA,CACJ5B,EAAAA,CAAiBJ,CAAQ,CAAA,CAI3BG,EAAAA,CAAkBH,CAAQ,CACnC,CAAC,CAAA,CAEM,IAAMiC,EAAAA,CAAoBrE,GAAAA,CAAE,MAAA,CAAO,CACxC,GAAA,CAAKA,GAAAA,CAAE,MAAA,EAAO,CACd,IAAA,CAAMA,GAAAA,CAAE,QAAO,CAAE,QAAA,EAAS,CAC1B,UAAA,CAAYA,GAAAA,CAAE,KAAA,CAAMA,GAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CACzC,GAAA,CAAKA,GAAAA,CAAE,SAAQ,CACf,QAAA,CAAUA,GAAAA,CAAE,OAAA,EAAQ,CACpB,KAAA,CAAOA,IAAE,OAAA,EAAQ,CACjB,MAAA,CAAQA,GAAAA,CAAE,OAAA,EAAQ,CAClB,aAAcA,GAAAA,CAAE,OAAA,EAAQ,CACxB,MAAA,CAAQA,GAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS,CAC7B,YAAA,CAAcA,GAAAA,CAAE,OAAA,EAAQ,CACxB,QAAA,CAAUA,IACP,MAAA,EAAO,CACP,QAAA,EAAS,CACT,MAAA,CACEsE,CAAAA,EACKA,EACK/E,CAAAA,CAAU+E,CAA6B,CAAA,CAEzC,IAAA,CAET,CACE,OAAA,CACE,0EACJ,CACF,CAAA,CACF,SAAA,CAAWtE,GAAAA,CACR,MAAA,EAAO,CACP,QAAA,EAAS,CACT,MAAA,CACEsE,CAAAA,EACKA,CAAAA,CACKC,CAAAA,CAAY,IAAA,CAAMC,CAAAA,EAAUA,EAAM,IAAA,GAASF,CAAG,CAAA,CAGhD,IAAA,CAET,CACE,OAAA,CAAS,mCAAmCC,CAAAA,CAAY,GAAA,CACrDC,CAAAA,EAAUA,CAAAA,CAAM,IACnB,CAAA,CAAE,KAAK,MAAM,CAAC,CAAA,CAAA,CAChB,CACF,CAAA,CACF,SAAA,CAAWxE,GAAAA,CAAE,OAAA,EAAQ,CAErB,kBAAA,CAAoBmE,CAAAA,CAAgB,WAAA,EAAY,CAAE,QAAA,EACpD,CAAC,CAAA,CAEYM,EAAAA,CAAO,IAAIC,OAAAA,EAAQ,CAC7B,KAAK,MAAM,CAAA,CACX,WAAA,CAAY,kDAAkD,CAAA,CAC9D,QAAA,CAAS,kBAAmB,uCAAuC,CAAA,CACnE,MAAA,CACC,2BAAA,CACA,yDACF,CAAA,CACC,MAAA,CACC,+BAAA,CACA,4DAAA,CACA,MACF,CAAA,CACC,MAAA,CAAO,WAAA,CAAa,2BAAA,CAA6B,IAAI,CAAA,CACrD,MAAA,CAAO,iBAAA,CAAmB,4BAAA,CAA8B,KAAK,CAAA,CAC7D,MAAA,CAAO,aAAA,CAAe,4CAAA,CAA8C,KAAK,CAAA,CACzE,MAAA,CACC,iBAAA,CACA,2DAAA,CACA,QAAQ,GAAA,EACV,CAAA,CACC,MAAA,CAAO,cAAA,CAAgB,cAAA,CAAgB,KAAK,CAAA,CAC5C,MAAA,CACC,WAAA,CACA,oDAAA,CACA,KACF,CAAA,CACC,MAAA,CACC,eACA,2DACF,CAAA,CACC,MAAA,CAAO,iBAAA,CAAmB,gCAAA,CAAkC,IAAI,EAChE,MAAA,CAAO,oBAAA,CAAsB,uCAAuC,CAAA,CACpE,MAAA,CAAO,iBAAA,CAAmB,uCAAuC,CAAA,CACjE,MAAA,CAAO,MAAOhC,CAAAA,CAAYiC,CAAAA,GAAS,CAClC,GAAI,CAEEA,CAAAA,CAAK,QAAA,GACPA,CAAAA,CAAK,QAAA,CAAWA,CAAAA,CAAK,QAAA,EAAY,OACjCA,CAAAA,CAAK,SAAA,CAAYA,CAAAA,CAAK,SAAA,EAAa,SAAA,CAAA,CAGrC,IAAMnG,EAAU6F,EAAAA,CAAkB,KAAA,CAAM,CACtC,GAAA,CAAK1F,UAAAA,CAAK,OAAA,CAAQgG,EAAK,GAAG,CAAA,CAC1B,YAAA,CAAc,CAAA,CAAA,CACd,UAAA,CAAAjC,CAAAA,CACA,GAAGiC,CACL,CAAC,CAAA,CAOD,GALA,MAAMhD,CAAAA,CAAanD,CAAAA,CAAQ,GAAG,CAAA,CAK1BkE,CAAAA,CAAW,MAAA,CAAS,CAAA,CAAG,CAGzB,IAAIkC,EAAeC,CAAAA,CACjBC,CAAAA,CAAa,CACX,aAAA,CAAe,CACb,GAAA,CAAKtG,EAAQ,GACf,CACF,CAAC,CACH,CAAA,CAIMuG,CAAAA,CAAqBpG,UAAAA,CAAK,OAAA,CAAQH,CAAAA,CAAQ,GAAA,CAAK,iBAAiB,CAAA,CACtE,GAAI6D,CAAAA,CAAQ,WAAW0C,CAAkB,CAAA,CAAG,CAC1C,IAAMC,CAAAA,CAAiB,MAAM3C,EAAQ,QAAA,CAAS0C,CAAkB,CAAA,CAC1DnD,GAAAA,CAASuC,CAAAA,CAAgB,OAAA,GAAU,KAAA,CAAMa,CAAc,CAAA,CACvDC,GAAAA,CAAaH,CAAAA,CAAa,CAC9B,aAAA,CAAe,CACb,GAAA,CAAKtG,CAAAA,CAAQ,GACf,CACF,CAAC,CAAA,CACDoG,EAAeC,CAAAA,CAAmB,CAChC,GAAGjD,GAAAA,CACH,aAAA,CAAe,CACb,GAAGqD,GAAAA,CAAW,aAAA,CACd,GAAA,CAAKzG,CAAAA,CAAQ,GACf,CACF,CAAC,CAAA,CAKD2D,EAAAA,CAAiB4C,CAAkB,EACrC,CAGA,GAAM,CAAE,MAAA,CAAQb,CAAc,CAAA,CAAI,MAAMX,CAAAA,CACtCb,CAAAA,CACAkC,CAAAA,CACA,CACE,MAAA,CAAQ,CAAA,CAAA,CACR,SAAA,CAAW,CAAA,CACb,CACF,CAAA,CACAA,EAAeV,CAAAA,CAGfgB,CAAAA,CAAkCxC,CAAAA,CAAW,CAAC,CAAA,CAAGkC,CAAY,EAE7D,GAAM,CAAC1B,CAAI,CAAA,CAAI,MAAMiC,CAAAA,CAAiB,CAACzC,CAAAA,CAAW,CAAC,CAAC,CAAA,CAAG,CACrD,MAAA,CAAQkC,CACV,CAAC,CAAA,CAGG1B,CAAAA,EAAM,IAAA,GAAS,eAAA,GACbA,CAAAA,CAAK,MAAA,GAEP0B,EAAeC,CAAAA,CACbO,EAAAA,CAAUR,CAAAA,CAAc1B,CAAAA,CAAK,MAAM,CACrC,EAEA1E,CAAAA,CAAQ,kBAAA,CAAqB0E,CAAAA,CAAK,MAAA,CAAA,CAEpC1E,CAAAA,CAAQ,SAAA,CACN0E,CAAAA,CAAK,OAAA,GAAY,MAAA,CAAS,CAAA,CAAA,CAAQ1E,CAAAA,CAAQ,SAAA,CAAA,CAG1C0E,CAAAA,EAAM,IAAA,GAAS,mBAGjB1E,CAAAA,CAAQ,SAAA,CAAY,SAAA,CAGpBA,CAAAA,CAAQ,SAAA,CACN0E,CAAAA,CAAK,OAAA,GAAY,MAAA,CAAS,CAAA,CAAA,CAAQ1E,CAAAA,CAAQ,SAAA,EAEhD,CAIKA,CAAAA,CAAQ,SAAA,GACXA,EAAQ,SAAA,CAAY,SAAA,CAAA,CAGtB,MAAM6G,EAAAA,CAAQ7G,CAAO,CAAA,CAErBM,CAAAA,CAAO,GAAA,CACL,CAAA,EAAGC,CAAAA,CAAY,OAAA,CACb,UACF,CAAC,CAAA;AAAA,2BAAA,CACH,CAAA,CAGAyD,EAAAA,CAAiB7D,UAAAA,CAAK,OAAA,CAAQH,CAAAA,CAAQ,GAAA,CAAK,iBAAiB,CAAC,CAAA,CAC7DM,CAAAA,CAAO,KAAA,GACT,CAAA,MAASmB,EAAO,CACdnB,CAAAA,CAAO,KAAA,EAAM,CACboB,GAAAA,CAAYD,CAAK,EACnB,CAAA,OAAE,CACAqF,CAAAA,GACF,CACF,CAAC,CAAA,CAEH,eAAsBD,EAAAA,CACpB7G,CAAAA,CAGA,CACA,IAAIS,CAAAA,CACAsG,GAAAA,CACJ,GAAK/G,CAAAA,CAAQ,aAAA,CAgBXS,CAAAA,CAAc,MAAMC,CAAAA,CAAeV,CAAAA,CAAQ,GAAG,OAhBpB,CAC1B,IAAMgH,CAAAA,CAAY,MAAMjH,EAAAA,CAAcC,CAAO,CAAA,CAC7C,GAAIgH,CAAAA,CAAU,MAAA,CAAc,GAA4B,CAAA,CAAG,CACzD,GAAM,CAAE,WAAA,CAAA/E,CAAAA,CAAa,QAAA,CAAAhB,CAAS,CAAA,CAAI,MAAMD,EAAAA,CAAchB,CAAO,CAAA,CACxDiC,CAAAA,EACH,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAEhBjC,EAAQ,GAAA,CAAMiC,CAAAA,CACdjC,CAAAA,CAAQ,YAAA,CAAe,IAAA,CACvB+G,GAAAA,CAAqB9F,CAAAA,CAErBR,CAAAA,CAAc,MAAMC,CAAAA,CAAeV,CAAAA,CAAQ,GAAG,EAChD,CAAA,KACES,EAAcuG,CAAAA,CAAU,YAE5B,CAIA,GAAID,GAAAA,GAAuB,eAAA,CACzB,OAAA/G,CAAAA,CAAQ,GAAA,CAAMG,UAAAA,CAAK,OAAA,CAAQH,CAAAA,CAAQ,GAAA,CAAK,UAAU,EAC3C,MAAMiH,CAAAA,CAAUjH,CAAAA,CAAQ,GAAG,CAAA,CAGpC,IAAMkH,CAAAA,CAAgB,MAAMC,CAAAA,CAAiBnH,CAAAA,CAAQ,GAAA,CAAKS,CAAW,CAAA,CAEjE2C,GAAAA,CAAS8D,EACT,MAAME,EAAAA,CAAuBF,CAAAA,CAAelH,CAAO,CAAA,CACnD,MAAMqH,EAAAA,CAAgB,MAAMJ,CAAAA,CAAUjH,CAAAA,CAAQ,GAAG,CAAC,CAAA,CAiBtD,OAAA,CAAQ,IAAI,CACV,MAAA,CAAAoD,GAAAA,CACA,OAAA,CAAApD,CACF,CAAC,CAAA,CAGkB,CAKjB,GAAIA,CAAAA,CAAQ,SAAA,CAAY,CAAC,OAAO,CAAA,CAAI,EAAC,CACrC,GAAIA,CAAAA,CAAQ,UAAA,EAAc,EAC5B,EA4EF,CAEA,eAAeqH,EAAAA,CAAgBC,GAAAA,CAA+B,IAAA,CAAM,CAClE,GAAM,CAACC,CAAAA,CAAQC,CAAU,CAAA,CAAI,MAAM,OAAA,CAAQ,GAAA,CAAI,CAC7CC,CAAAA,EAAkB,CAClBC,EAAAA,EACF,CAAC,EAEDpH,CAAAA,CAAO,IAAA,CAAK,EAAE,CAAA,CACd,IAAMN,GAAAA,CAAU,MAAM6B,EAAAA,CAAQ,CAC5B,CACE,IAAA,CAAM,QAAA,CACN,IAAA,CAAM,YAAA,CACN,QAAS,CAAA,sBAAA,EAAyBtB,CAAAA,CAAY,IAAA,CAC5C,YACF,CAAC,CAAA,eAAA,CAAA,CACD,OAAA,CAAS+G,GAAAA,EAAe,GAAA,EAAO,IAAA,CAC/B,MAAA,CAAQ,KAAA,CACR,QAAA,CAAU,IACZ,EACA,CACE,IAAA,CAAM,QAAA,CACN,IAAA,CAAM,OAAA,CACN,OAAA,CAAS,CAAA,MAAA,EAAS/G,CAAAA,CAAY,IAAA,CAAK,OAAO,CAAC,CAAA,uBAAA,CAAA,CAC3C,OAAA,CAASgH,CAAAA,CAAO,GAAA,CAAKI,CAAAA,GAAW,CAC9B,KAAA,CAAOA,CAAAA,CAAM,KAAA,CACb,KAAA,CAAOA,CAAAA,CAAM,IACf,CAAA,CAAE,CACJ,CAAA,CACA,CACE,IAAA,CAAM,QAAA,CACN,IAAA,CAAM,oBACN,OAAA,CAAS,CAAA,yCAAA,EAA4CpH,CAAAA,CAAY,IAAA,CAC/D,YACF,CAAC,CAAA,CAAA,CAAA,CACD,OAAA,CAASiH,CAAAA,CAAW,GAAA,CAAKxB,CAAAA,GAAW,CAClC,KAAA,CAAOA,CAAAA,CAAM,MACb,KAAA,CAAOA,CAAAA,CAAM,IACf,CAAA,CAAE,CACJ,CAAA,CACA,CACE,IAAA,CAAM,MAAA,CACN,IAAA,CAAM,aAAA,CACN,OAAA,CAAS,CAAA,cAAA,EAAiBzF,CAAAA,CAAY,KAAK,YAAY,CAAC,CAAA,MAAA,CAAA,CACxD,OAAA,CAAS+G,GAAAA,EAAe,QAAA,CAAS,GAAA,EAAOM,CAC1C,CAAA,CACA,CACE,IAAA,CAAM,QAAA,CACN,IAAA,CAAM,sBAAA,CACN,QAAS,CAAA,sBAAA,EAAyBrH,CAAAA,CAAY,IAAA,CAC5C,eACF,CAAC,CAAA,aAAA,CAAA,CACD,OAAA,CAAS+G,GAAAA,EAAe,QAAA,CAAS,YAAA,EAAgB,IAAA,CACjD,MAAA,CAAQ,KAAA,CACR,QAAA,CAAU,IACZ,CAAA,CACA,CACE,IAAA,CAAM,MAAA,CACN,IAAA,CAAM,gBAAA,CACN,OAAA,CAAS,CAAA,uBAAA,EAA0B/G,CAAAA,CAAY,IAAA,CAC7C,yBACF,CAAC,CAAA,sBAAA,CAAA,CACD,OAAA,CAAS,EACX,CAAA,CACA,CACE,IAAA,CAAM,MAAA,CACN,IAAA,CAAM,gBAAA,CACN,OAAA,CAAS,CAAA,cAAA,EAAiBA,CAAAA,CAAY,IAAA,CACpC,oBACF,CAAC,CAAA,SAAA,CAAA,CACD,OAAA,CAAS+G,KAAe,QAAA,CAAS,MAAA,EAAUO,CAC7C,CAAA,CACA,CACE,IAAA,CAAM,MAAA,CACN,IAAA,CAAM,YAAA,CACN,OAAA,CAAS,CAAA,+BAAA,EAAkCtH,CAAAA,CAAY,IAAA,CACrD,YACF,CAAC,CAAA,CAAA,CAAA,CACD,OAAA,CAAS+G,GAAAA,EAAe,OAAA,CAAQ,UAAA,EAAiBQ,CACnD,CAAA,CACA,CACE,IAAA,CAAM,MAAA,CACN,IAAA,CAAM,OAAA,CACN,OAAA,CAAS,CAAA,+BAAA,EAAkCvH,CAAAA,CAAY,KAAK,OAAO,CAAC,CAAA,CAAA,CAAA,CACpE,OAAA,CAAS+G,GAAAA,EAAe,OAAA,CAAQ,KAAA,EAAYS,CAC9C,CAAA,CACA,CACE,IAAA,CAAM,QAAA,CACN,IAAA,CAAM,KAAA,CACN,QAAS,CAAA,cAAA,EAAiBxH,CAAAA,CAAY,IAAA,CAAK,yBAAyB,CAAC,CAAA,CAAA,CAAA,CACrE,OAAA,CAAS+G,GAAAA,EAAe,GAAA,EAAO,IAAA,CAC/B,MAAA,CAAQ,KAAA,CACR,QAAA,CAAU,IACZ,CACF,CAAC,CAAA,CAED,OAAO3B,CAAAA,CAAgB,KAAA,CAAM,CAC3B,OAAA,CAAS,mCAAA,CACT,KAAA,CAAO3F,GAAAA,CAAQ,KAAA,CACf,QAAA,CAAU,CACR,MAAA,CAAQA,IAAQ,cAAA,CAChB,GAAA,CAAKA,GAAAA,CAAQ,WAAA,CACb,SAAA,CAAWA,GAAAA,CAAQ,iBAAA,CACnB,YAAA,CAAcA,GAAAA,CAAQ,oBAAA,CACtB,MAAA,CAAQA,GAAAA,CAAQ,cAClB,CAAA,CACA,IAAKA,GAAAA,CAAQ,GAAA,CACb,GAAA,CAAKA,GAAAA,CAAQ,UAAA,CACb,OAAA,CAAS,CACP,KAAA,CAAOA,GAAAA,CAAQ,KAAA,CACf,UAAA,CAAYA,GAAAA,CAAQ,UAAA,CAEpB,GAAA,CAAKA,IAAQ,UAAA,CAAW,OAAA,CAAQ,eAAA,CAAiB,KAAK,CAAA,CACtD,KAAA,CAAOA,GAAAA,CAAQ,UAAA,CAAW,OAAA,CAAQ,eAAA,CAAiB,OAAO,CAC5D,CACF,CAAC,CACH,CAEA,eAAeoH,EAAAA,CACbE,CAAAA,CACAnB,CAAAA,CACA,CACA,IAAIwB,CAAAA,CAAQL,CAAAA,CAAc,KAAA,CACtBU,CAAAA,CAAY7B,CAAAA,CAAK,SAAA,CACjB8B,CAAAA,CAAeX,CAAAA,CAAc,QAAA,CAAS,YAAA,CACtCY,CAAAA,CAAcZ,CAAAA,CAAc,WAAA,EAAe,QAAA,CAE/C,GAAI,CAACnB,CAAAA,CAAK,QAAA,CAAU,CAClB,GAAM,CAACoB,CAAAA,CAAQC,CAAAA,CAAYW,CAAe,CAAA,CAAI,MAAM,OAAA,CAAQ,GAAA,CAAI,CAC9DV,CAAAA,EAAkB,CAClBC,EAAAA,EAAsB,CACtBU,CAAAA,CAAoCd,CAAa,CACnD,CAAC,CAAA,CAEKtH,EAAU,MAAM6B,EAAAA,CAAQ,CAC5B,CAEE,IAAA,CAAMsG,CAAAA,GAAoB,IAAA,EAAQR,CAAAA,CAAQ,IAAA,CAAO,QAAA,CACjD,IAAA,CAAM,OAAA,CACN,OAAA,CAAS,CAAA,MAAA,EAASpH,EAAY,IAAA,CAAK,OAAO,CAAC,CAAA,uBAAA,CAAA,CAC3C,OAAA,CAASgH,CAAAA,CAAO,GAAA,CAAKI,CAAAA,GAAW,CAC9B,KAAA,CACEA,CAAAA,CAAM,IAAA,GAAS,UAAA,CAAa,wBAAA,CAA2BA,EAAM,KAAA,CAC/D,KAAA,CAAOA,CAAAA,CAAM,IACf,CAAA,CAAE,CAAA,CACF,OAAA,CAAS,CACX,CAAA,CACA,CACE,IAAA,CAAMxB,CAAAA,CAAK,SAAA,CAAY,IAAA,CAAO,SAC9B,IAAA,CAAM,mBAAA,CACN,OAAA,CAAS,CAAA,yCAAA,EAA4C5F,CAAAA,CAAY,IAAA,CAC/D,YACF,CAAC,CAAA,CAAA,CAAA,CACD,OAAA,CAASiH,CAAAA,CAAW,GAAA,CAAKxB,CAAAA,GAAW,CAClC,MAAOA,CAAAA,CAAM,KAAA,CACb,KAAA,CAAOA,CAAAA,CAAM,IACf,CAAA,CAAE,CACJ,CACF,CAAC,CAAA,CAED2B,CAAAA,CAAQ3H,CAAAA,CAAQ,KAAA,EAAS2H,CAAAA,EAAS,WAClCK,CAAAA,CAAYhI,CAAAA,CAAQ,iBAAA,EAAqBgI,CAAAA,CACzCC,CAAAA,CAAe9B,CAAAA,CAAK,aACtB,CAEA,OAAOR,CAAAA,CAAgB,KAAA,CAAM,CAC3B,OAAA,CAAS2B,CAAAA,EAAe,QACxB,KAAA,CAAAK,CAAAA,CACA,QAAA,CAAU,CACR,GAAGL,CAAAA,EAAe,QAAA,CAClB,SAAA,CAAAU,CAAAA,CACA,YAAA,CAAAC,CACF,CAAA,CACA,GAAA,CAAKX,CAAAA,EAAe,IACpB,GAAA,CAAKA,CAAAA,EAAe,GAAA,CACpB,WAAA,CAAAY,CAAAA,CACA,OAAA,CAASZ,CAAAA,EAAe,OAC1B,CAAC,CACH,CC1kBO,SAASe,EAAAA,CAAaC,CAAAA,CAAoBrF,CAAAA,CAAsB,CAErE,GAAIqF,CAAAA,CAAW,QAAA,CAAS,IAAI,CAAA,CAC1B,OAAO,MAAA,CAIT,IAAIC,CAAAA,CACJ,GAAI,CAEFA,CAAAA,CAAcD,CAAAA,CACd,IAAIE,CAAAA,CAAW,EAAA,CACf,KAAOD,CAAAA,GAAgBC,CAAAA,EAAYD,CAAAA,CAAY,QAAA,CAAS,GAAG,GACzDC,CAAAA,CAAWD,CAAAA,CACXA,CAAAA,CAAc,kBAAA,CAAmBA,CAAW,EAEhD,CAAA,KAAQ,CAEN,OAAO,MACT,CAIA,IAAME,CAAAA,CAAmBtI,UAAAA,CAAK,UAAUoI,CAAAA,CAAY,OAAA,CAAQ,KAAA,CAAO,GAAG,CAAC,CAAA,CACjEG,CAAAA,CAAiBvI,UAAAA,CAAK,SAAA,CAAU8C,CAAG,CAAA,CAInC0F,CAAAA,CAAoBxI,CAAAA,EAEAA,CAAAA,CAAK,QAAQ,gBAAA,CAAkB,EAAE,CAAA,CAClC,QAAA,CAAS,IAAI,CAAA,CAGtC,GACEwI,CAAAA,CAAiBF,CAAgB,CAAA,EACjCE,CAAAA,CAAiBJ,CAAW,CAAA,EAC5BI,CAAAA,CAAiBL,CAAU,CAAA,CAE3B,OAAO,MAAA,CAKT,IAAMM,CAAAA,CAAazI,CAAAA,EAAiBA,CAAAA,CAAK,OAAA,CAAQ,gBAAA,CAAkB,EAAE,CAAA,CAC/D0I,CAAAA,CAAcD,CAAAA,CAAUN,CAAU,CAAA,CAClCQ,CAAAA,CAAeF,CAAAA,CAAUL,CAAW,CAAA,CAoB1C,GAlB2B,CACzB,YAAA,CACA,YAAA,CACA,MAAA,CACA,OAAA,CACA,MAAA,CACA,aACF,CAAA,CAGqB,IAAA,CAChBQ,CAAAA,EAAYA,EAAQ,IAAA,CAAKF,CAAW,CAAA,EAAKE,CAAAA,CAAQ,IAAA,CAAKD,CAAY,CACrE,CAAA,EAAA,CAOCR,CAAAA,CAAW,QAAA,CAAS,GAAG,CAAA,EAAKC,CAAAA,CAAY,QAAA,CAAS,GAAG,CAAA,IACpDD,CAAAA,CAAW,QAAA,CAAS,KAAK,CAAA,EAAKC,CAAAA,CAAY,QAAA,CAAS,KAAK,CAAA,CAAA,CAEzD,OAAO,MAAA,CAKT,GADyB,kBAAA,CACJ,IAAA,CAAKA,CAAW,CAAA,CAEnC,OAAI,OAAA,CAAQ,QAAA,GAAa,OAAA,CAChBA,CAAAA,CAAY,WAAA,EAAY,CAAE,UAAA,CAAWtF,CAAAA,CAAI,WAAA,EAAa,CAAA,CAGxD,KAAA,CAIT,GAAI9C,UAAAA,CAAK,UAAA,CAAWsI,CAAgB,CAAA,CAClC,OAAOA,CAAAA,CAAiB,UAAA,CAAWC,CAAAA,CAAiBvI,UAAAA,CAAK,GAAG,CAAA,CAI9D,IAAM6I,CAAAA,CAAe7I,UAAAA,CAAK,QAAQuI,CAAAA,CAAgBD,CAAgB,CAAA,CAClE,OACEO,CAAAA,CAAa,UAAA,CAAWN,CAAAA,CAAiBvI,UAAAA,CAAK,GAAG,CAAA,EACjD6I,CAAAA,GAAiBN,CAErB,CCpFA,eAAsBO,EAAAA,CACpBC,CAAAA,CACA9F,CAAAA,CACApD,CAAAA,CAGA,CACA,GACE,CAACoD,CAAAA,CAAO,aAAA,CAAc,WAAA,EACtB,CAAC8F,CAAAA,EACD,MAAA,CAAO,IAAA,CAAKA,CAAG,CAAA,CAAE,MAAA,GAAW,CAAA,CAE5B,OAGFlJ,CAAAA,CAAU,CACR,MAAA,CAAQ,KAAA,CACR,GAAGA,CACL,CAAA,CAEA,IAAMmJ,CAAAA,CAAc/F,CAAAA,CAAO,aAAA,CAAc,WAAA,CACnCgG,CAAAA,CAAsBjJ,UAAAA,CAAK,QAAA,CAC/BiD,CAAAA,CAAO,aAAA,CAAc,IACrB+F,CACF,CAAA,CACME,CAAAA,CAAahJ,CAAAA,CACjB,CAAA,SAAA,EAAYE,CAAAA,CAAY,IAAA,CAAK6I,CAAmB,CAAC,CAAA,CAAA,CACjD,CACE,MAAA,CAAQpJ,CAAAA,CAAQ,MAClB,CACF,CAAA,CAAE,KAAA,EAAM,CAEFsJ,CAAAA,CAAM,MAAMpJ,QAAAA,CAAG,QAAA,CAASiJ,CAAAA,CAAa,MAAM,CAAA,CAC7CI,GAAAA,CAAS,MAAMC,EAAAA,CAAaF,CAAAA,CAAKJ,CAAG,CAAA,CACxC,MAAMhJ,QAAAA,CAAG,SAAA,CAAUiJ,CAAAA,CAAaI,GAAAA,CAAQ,MAAM,CAAA,CAC9CF,CAAAA,CAAW,OAAA,GACb,CAEA,eAAsBG,EAAAA,CACpBC,EACAP,CAAAA,CACA,CACA,IAAMQ,CAAAA,CAAU,CAACC,EAAAA,CAAgBT,CAAG,CAAC,CAAA,CAE/B7H,CAAAA,CAAS,MAAMuI,CAAAA,CAAQF,CAAO,CAAA,CAAE,QAAQD,CAAAA,CAAO,CACnD,IAAA,CAAM,MACR,CAAC,CAAA,CAEGF,CAAAA,CAASlI,CAAAA,CAAO,GAAA,CAIdwI,CAAAA,CAAOxI,CAAAA,CAAO,IAAA,CACpB,GAAIwI,CAAAA,CAAK,OAASA,CAAAA,CAAK,KAAA,CAAM,MAAA,CAAS,CAAA,CAAG,CACvC,IAAMC,CAAAA,CAAWD,CAAAA,CAAK,KAAA,CAAMA,CAAAA,CAAK,KAAA,CAAM,MAAA,CAAS,CAAC,CAAA,CAE/CC,EAAS,IAAA,GAAS,QAAA,EAClB,CAACA,CAAAA,CAAS,KAAA,EACV,CAACP,CAAAA,CAAO,OAAA,EAAQ,CAAE,QAAA,CAAS,GAAG,CAAA,GAE9BA,CAAAA,CAASA,CAAAA,CAAO,OAAA,EAAQ,CAAI,GAAA,EAEhC,CAEA,OAAAA,CAAAA,CAASA,CAAAA,CAAO,OAAA,CAAQ,wBAAA,CAA0B,EAAE,CAAA,CACpDA,CAAAA,CAASA,CAAAA,CAAO,OAAA,CAAQ,aAAA,CAAe;;AAAA,CAAM,CAAA,CAC7CA,CAAAA,CAASA,CAAAA,CAAO,OAAA,EAAQ,CAEjBA,CACT,CAEA,SAASI,EAAAA,CAAgBT,CAAAA,CAA4C,CACnE,OAAO,CACL,aAAA,CAAe,YAAA,CACf,IAAA,CAAKW,CAAAA,CAAY,CACf,IAAA,GAAW,CAACE,CAAAA,CAAUC,CAAU,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQd,CAAG,CAAA,CACrD,GAAIa,CAAAA,CAAS,UAAA,CAAW,GAAG,CAAA,CAAG,CAE5B,IAAME,EAAcF,CAAAA,CAAS,KAAA,CAAM,sBAAsB,CAAA,CACzD,GAAI,CAACE,EAAa,SAElB,GAAM,EAAGrI,CAAAA,CAAMsI,CAAM,CAAA,CAAID,CAAAA,CAGzB,GAAIrI,CAAAA,GAAS,QAAA,CAAA,CASX,GAAI,CAPmBiI,CAAAA,CAAK,OAAO,IAAA,CAChCM,CAAAA,EACCA,CAAAA,CAAK,IAAA,GAAS,QAAA,EACdA,CAAAA,CAAK,OAAS,QAAA,EACdA,CAAAA,CAAK,MAAA,GAAWD,CACpB,CAAA,CAEqB,CACnB,IAAME,CAAAA,CAAaR,CAAAA,CAAQ,MAAA,CAAO,CAChC,IAAA,CAAM,QAAA,CACN,MAAA,CAAAM,CAAAA,CACA,IAAA,CAAM,CAAE,SAAA,CAAW,IAAK,CAC1B,CAAC,EAGKG,CAAAA,CAAcR,CAAAA,CAAK,KAAA,EAAO,MAAA,CAC7BM,CAAAA,EACCA,CAAAA,CAAK,IAAA,GAAS,QAAA,EAAYA,CAAAA,CAAK,IAAA,GAAS,QAC5C,CAAA,CAEA,GAAIE,CAAAA,EAAeA,EAAY,MAAA,CAAS,CAAA,CAAG,CAEzC,IAAMC,CAAAA,CAAaD,CAAAA,CAAYA,CAAAA,CAAY,MAAA,CAAS,CAAC,CAAA,CACrDD,CAAAA,CAAW,IAAA,CAAK,MAAA,CAAS;AAAA,CAAA,CACzBP,CAAAA,CAAK,YAAYS,CAAAA,CAAYF,CAAU,EACzC,CAAA,KAGM,CAACP,CAAAA,CAAK,KAAA,EAASA,CAAAA,CAAK,KAAA,CAAM,OAC5BO,CAAAA,CAAW,IAAA,CAAK,OAAS,EAAA,CAI3BP,CAAAA,CAAK,QAAQO,CAAU,EAE3B,CAAA,CAAA,KAAA,GAGOxI,CAAAA,GAAS,QAAA,CAAU,CAE1B,IAAI2I,CAAAA,CAAeL,CAAAA,CACfA,GAAU,CAACA,CAAAA,CAAO,WAAW,GAAG,CAAA,EAAK,CAACA,CAAAA,CAAO,UAAA,CAAW,GAAG,IAC7DK,CAAAA,CAAe,CAAA,CAAA,EAAIL,CAAM,CAAA,CAAA,CAAA,CAAA,CAI3B,IAAMM,CAAAA,CAAmBC,GACnBA,CAAAA,CAAE,UAAA,CAAW,GAAG,CAAA,EAAKA,CAAAA,CAAE,QAAA,CAAS,GAAG,CAAA,EAGnCA,CAAAA,CAAE,WAAW,GAAG,CAAA,EAAKA,EAAE,QAAA,CAAS,GAAG,CAAA,CAC9BA,CAAAA,CAAE,KAAA,CAAM,CAAA,CAAG,EAAE,CAAA,CAEfA,CAAAA,CAWT,GAAI,CAPmBZ,CAAAA,CAAK,OAAO,IAAA,CAAMM,CAAAA,EACnCA,CAAAA,CAAK,IAAA,GAAS,QAAA,EAAYA,CAAAA,CAAK,OAAS,QAAA,CACnC,KAAA,CAEFK,EAAgBL,CAAAA,CAAK,MAAM,IAAMK,CAAAA,CAAgBN,CAAM,CAC/D,CAAA,CAEoB,CACnB,IAAMQ,EAAad,CAAAA,CAAQ,MAAA,CAAO,CAChC,IAAA,CAAM,QAAA,CACN,MAAA,CAAQW,EACR,IAAA,CAAM,CAAE,SAAA,CAAW,IAAA,CAAM,MAAA,CAAQ;AAAA,CAAK,CACxC,CAAC,CAAA,CAGKF,CAAAA,CAAcR,EAAK,KAAA,EAAO,MAAA,CAC7BM,CAAAA,EACCA,CAAAA,CAAK,IAAA,GAAS,QAAA,EAAYA,EAAK,IAAA,GAAS,QAC5C,EAEMQ,CAAAA,CAAcd,CAAAA,CAAK,OAAO,MAAA,CAC7BM,CAAAA,EACCA,CAAAA,CAAK,IAAA,GAAS,QAAA,EAAYA,CAAAA,CAAK,OAAS,QAC5C,CAAA,CAEA,GAAIQ,CAAAA,EAAeA,CAAAA,CAAY,OAAS,CAAA,CAAG,CAEzC,IAAMC,CAAAA,CAAaD,CAAAA,CAAYA,CAAAA,CAAY,OAAS,CAAC,CAAA,CACrDd,EAAK,WAAA,CAAYe,CAAAA,CAAYF,CAAU,EACzC,CAAA,KAAA,GAAWL,CAAAA,EAAeA,CAAAA,CAAY,MAAA,CAAS,CAAA,CAAG,CAEhD,IAAMC,CAAAA,CAAaD,EAAYA,CAAAA,CAAY,MAAA,CAAS,CAAC,CAAA,CACrDR,CAAAA,CAAK,WAAA,CAAYS,CAAAA,CAAYI,CAAU,CAAA,CAEvCb,EAAK,YAAA,CACHa,CAAAA,CACAd,EAAQ,OAAA,CAAQ,CAAE,KAAM,aAAc,CAAC,CACzC,CAAA,CAEAC,CAAAA,CAAK,WAAA,CACHa,EACAd,CAAAA,CAAQ,OAAA,CAAQ,CAAE,IAAA,CAAM,aAAc,CAAC,CACzC,EACF,CAAA,KAEEC,CAAAA,CAAK,OAAA,CAAQa,CAAU,EAEvBb,CAAAA,CAAK,YAAA,CACHa,CAAAA,CACAd,CAAAA,CAAQ,OAAA,CAAQ,CAAE,KAAM,aAAc,CAAC,CACzC,CAAA,CAEAC,CAAAA,CAAK,WAAA,CACHa,EACAd,CAAAA,CAAQ,OAAA,CAAQ,CAAE,IAAA,CAAM,aAAc,CAAC,CACzC,EAEJ,CACF,CAAA,KAAA,GAGE,OAAOI,CAAAA,EAAe,UACtB,MAAA,CAAO,IAAA,CAAKA,CAAU,CAAA,CAAE,MAAA,GAAW,GAUnC,GAAI,CAPWH,CAAAA,CAAK,KAAA,EAAO,IAAA,CACxBM,CAAAA,EACCA,EAAK,IAAA,GAAS,QAAA,EACdA,EAAK,IAAA,GAASvI,CAAAA,EACduI,EAAK,MAAA,GAAWD,CACpB,CAAA,CAEa,CACX,IAAMW,CAAAA,CAAYjB,EAAQ,MAAA,CAAO,CAC/B,KAAAhI,CAAAA,CACA,MAAA,CAAAsI,EACA,IAAA,CAAM,CAAE,SAAA,CAAW,IAAK,CAC1B,CAAC,EAEDL,CAAAA,CAAK,MAAA,CAAOgB,CAAS,CAAA,CACrBhB,CAAAA,CAAK,aACHgB,CAAAA,CACAjB,CAAAA,CAAQ,OAAA,CAAQ,CAAE,IAAA,CAAM,aAAc,CAAC,CACzC,EACF,UAGOhI,CAAAA,GAAS,WAAA,CAAa,CAC7B,IAAIkJ,CAAAA,CAAcjB,CAAAA,CAAK,KAAA,EAAO,IAAA,CAC3BM,CAAAA,EACCA,EAAK,IAAA,GAAS,QAAA,EACdA,EAAK,IAAA,GAAS,OAAA,EACdA,EAAK,MAAA,GAAW,QACpB,CAAA,CAEKW,CAAAA,GACHA,CAAAA,CAAclB,CAAAA,CAAQ,OAAO,CAC3B,IAAA,CAAM,OAAA,CACN,MAAA,CAAQ,QAAA,CACR,IAAA,CAAM,CAAE,SAAA,CAAW,IAAA,CAAM,OAAA,CAAS,GAAA,CAAK,MAAA,CAAQ;AAAA,CAAK,CACtD,CAAC,CAAA,CACDC,CAAAA,CAAK,OAAOiB,CAAW,CAAA,CACvBjB,CAAAA,CAAK,YAAA,CACHiB,CAAAA,CACAlB,CAAAA,CAAQ,QAAQ,CAAE,IAAA,CAAM,aAAc,CAAC,CACzC,CAAA,CAAA,CAIF,IAAMmB,CAAAA,CAAwBD,CAAAA,CAAY,KAAA,EAAO,IAAA,CAC9CX,CAAAA,EACCA,CAAAA,CAAK,OAAS,QAAA,EACdA,CAAAA,CAAK,IAAA,GAAS,WAAA,EACdA,CAAAA,CAAK,MAAA,GAAWD,CACpB,CAAA,CAEIc,CAAAA,CAmBJ,GAlBID,CAAAA,EAEFC,CAAAA,CAAgBpB,CAAAA,CAAQ,OAAO,CAC7B,IAAA,CAAM,WAAA,CACN,MAAA,CAAAM,CAAAA,CACA,IAAA,CAAM,CAAE,SAAA,CAAW,IAAA,CAAM,OAAA,CAAS,GAAA,CAAK,MAAA,CAAQ;AAAA,EAAA,CAAO,CACxD,CAAC,CAAA,CACDa,CAAAA,CAAsB,YAAYC,CAAa,CAAA,GAG/CA,EAAgBpB,CAAAA,CAAQ,MAAA,CAAO,CAC7B,IAAA,CAAM,WAAA,CACN,OAAAM,CAAAA,CACA,IAAA,CAAM,CAAE,SAAA,CAAW,IAAA,CAAM,OAAA,CAAS,GAAA,CAAK,MAAA,CAAQ;AAAA,EAAA,CAAO,CACxD,CAAC,CAAA,CACDY,EAAY,MAAA,CAAOE,CAAa,GAG9B,OAAOhB,CAAAA,EAAe,SACxB,IAAA,GAAW,CAACiB,EAAMC,CAAS,CAAA,GAAK,OAAO,OAAA,CAAQlB,CAAU,EACvDmB,EAAAA,CAAYH,CAAAA,CAAeC,CAAAA,CAAMC,CAAS,EAGhD,CAAA,KAAA,GAEStJ,CAAAA,GAAS,UAAW,CAC3B,IAAMwJ,EAAgBvB,CAAAA,CAAK,KAAA,EAAO,KAC/BM,CAAAA,EACCA,CAAAA,CAAK,OAAS,QAAA,EACdA,CAAAA,CAAK,OAASvI,CAAAA,EACduI,CAAAA,CAAK,SAAWD,CACpB,CAAA,CAEA,GAAKkB,CAAAA,CAAAA,CA8BH,GAAI,OAAOpB,CAAAA,EAAe,SACxB,IAAA,GAAW,CAACqB,EAAMvJ,CAAK,CAAA,GAAK,OAAO,OAAA,CAAQkI,CAAU,EACnD,GAAI,OAAOlI,GAAU,QAAA,CAAU,CAC7B,IAAMwJ,CAAAA,CAAeF,CAAAA,CAAc,OAAO,IAAA,CACvCjB,CAAAA,EACCA,EAAK,IAAA,GAAS,MAAA,EAAUA,EAAK,IAAA,GAASkB,CAC1C,EAEME,CAAAA,CAAO3B,CAAAA,CAAQ,KAAK,CACxB,IAAA,CAAAyB,EACA,KAAA,CAAOvJ,CAAAA,CACP,KAAM,CAAE,SAAA,CAAW,KAAM,MAAA,CAAQ;AAAA,IAAA,CAAS,CAC5C,CAAC,CAAA,CAEDwJ,CAAAA,CACIA,CAAAA,CAAa,YAAYC,CAAI,CAAA,CAC7BH,CAAAA,CAAc,MAAA,CAAOG,CAAI,EAC/B,CAAA,KAAW,OAAOzJ,CAAAA,EAAU,UAC1BqJ,EAAAA,CAAYC,CAAAA,CAAeC,CAAAA,CAAMvJ,CAAK,QAhD1B,CAClB,IAAM0J,CAAAA,CAAS5B,CAAAA,CAAQ,OAAO,CAC5B,IAAA,CAAAhI,CAAAA,CACA,MAAA,CAAAsI,EACA,IAAA,CAAM,CAAE,UAAW,IAAA,CAAM,OAAA,CAAS,IAAK,MAAA,CAAQ;AAAA,CAAK,CACtD,CAAC,CAAA,CASD,GAPAL,EAAK,MAAA,CAAO2B,CAAM,CAAA,CAClB3B,CAAAA,CAAK,YAAA,CACH2B,CAAAA,CACA5B,EAAQ,OAAA,CAAQ,CAAE,KAAM,aAAc,CAAC,CACzC,CAAA,CAGI,OAAOI,CAAAA,EAAe,QAAA,CACxB,IAAA,GAAW,CAACqB,EAAMvJ,CAAK,CAAA,GAAK,OAAO,OAAA,CAAQkI,CAAU,EACnD,GAAI,OAAOlI,CAAAA,EAAU,QAAA,CAAU,CAC7B,IAAMyJ,EAAO3B,CAAAA,CAAQ,IAAA,CAAK,CACxB,IAAA,CAAAyB,CAAAA,CACA,KAAA,CAAOvJ,EACP,IAAA,CAAM,CAAE,SAAA,CAAW,IAAA,CAAM,MAAA,CAAQ;AAAA,IAAA,CAAS,CAC5C,CAAC,CAAA,CACD0J,CAAAA,CAAO,MAAA,CAAOD,CAAI,EACpB,CAAA,KAAW,OAAOzJ,CAAAA,EAAU,UAC1BqJ,EAAAA,CAAYK,CAAAA,CAAQH,CAAAA,CAAMvJ,CAAK,EAIvC,CAyBF,CAAA,KAESF,CAAAA,GAAS,UAAA,CAChBuJ,GAAYtB,CAAAA,CAAME,CAAAA,CAAUC,CAAU,CAAA,CAGtCyB,GAAc5B,CAAAA,CAAMjI,CAAAA,CAAMsI,CAAAA,CAAQF,CAAU,EAEhD,CAAA,KAEEmB,EAAAA,CAAYtB,EAAME,CAAAA,CAAUC,CAAU,EAG5C,CACF,CACF,CAEA,SAASyB,GACP5B,CAAAA,CACAjI,CAAAA,CACAsI,CAAAA,CACAF,CAAAA,CACA,CAEA,IAAIwB,CAAAA,CAAS3B,CAAAA,CAAK,KAAA,EAAO,KACtBM,CAAAA,EACCA,CAAAA,CAAK,OAAS,QAAA,EAAYA,CAAAA,CAAK,OAASvI,CAAAA,EAAQuI,CAAAA,CAAK,MAAA,GAAWD,CACpE,EAaA,GAXKsB,CAAAA,GACHA,CAAAA,CAAS5B,CAAAA,CAAQ,OAAO,CACtB,IAAA,CAAAhI,CAAAA,CACA,MAAA,CAAAsI,EACA,IAAA,CAAM,CAAE,UAAW,IAAA,CAAM,OAAA,CAAS,IAAK,MAAA,CAAQ;AAAA,CAAK,CACtD,CAAC,CAAA,CACDL,CAAAA,CAAK,OAAO2B,CAAM,CAAA,CAClB3B,EAAK,YAAA,CAAa2B,CAAAA,CAAQ5B,EAAQ,OAAA,CAAQ,CAAE,KAAM,aAAc,CAAC,CAAC,CAAA,CAAA,CAIhE,OAAOI,CAAAA,EAAe,QAAA,CACxB,IAAA,GAAW,CAAC0B,EAAeC,CAAU,CAAA,GAAK,OAAO,OAAA,CAAQ3B,CAAU,EACjE,GAAI0B,CAAAA,CAAc,WAAW,GAAG,CAAA,CAAG,CAEjC,IAAME,CAAAA,CAAcF,EAAc,KAAA,CAAM,sBAAsB,EAC9D,GAAIE,CAAAA,CAAa,CACf,GAAM,EAAGC,EAAYC,CAAY,CAAA,CAAIF,EACrCH,EAAAA,CAAcD,CAAAA,CAAQK,EAAYC,CAAAA,CAAcH,CAAU,EAC5D,CACF,CAAA,KAEER,GAAYK,CAAAA,CAAQE,CAAAA,CAAeC,CAAU,CAAA,CAAA,KAAA,GAGxC,OAAO3B,GAAe,QAAA,CAE/B,GAAI,CAGF,IAAM+B,CAAAA,CADSnC,CAAAA,CAAQ,MAAM,CAAA,MAAA,EAASI,CAAU,GAAG,CAAA,CAC3B,KAAA,CAExB,GAAI+B,CAAAA,EAAYA,CAAAA,CAAS,KAAA,CAAO,CAE9B,IAAMC,CAAAA,CAAOpC,EAAQ,IAAA,CAAK,CACxB,SAAU,MAAA,CACV,IAAA,CAAM,CAAE,SAAA,CAAW,CAAA,CAAA,CAAM,OAAA,CAAS,GAAA,CAAK,MAAA,CAAQ;AAAA,EAAA,CAAO,CACxD,CAAC,CAAA,CAGDmC,CAAAA,CAAS,MAAM,OAAA,CAAS5B,CAAAA,EAAS,CAC/B,GAAIA,CAAAA,CAAK,OAAS,MAAA,CAAQ,CACxB,IAAM8B,CAAAA,CAAQ9B,CAAAA,CAAK,OAAM,CACzB8B,CAAAA,CAAM,KAAK,MAAA,CAAS;AAAA,IAAA,CAAA,CACpBD,CAAAA,CAAK,MAAA,CAAOC,CAAK,EACnB,CACF,CAAC,CAAA,CAGGD,CAAAA,CAAK,KAAA,EAAO,MAAA,EACdR,CAAAA,CAAO,MAAA,CAAOQ,CAAI,EAEtB,CACF,CAAA,MAASvK,CAAAA,CAAO,CACd,MAAA,OAAA,CAAQ,KAAA,CAAM,gCAAA,CAAkCuI,CAAAA,CAAYvI,CAAK,CAAA,CAC3DA,CACR,CAEJ,CAEA,SAAS0J,EAAAA,CAAYe,CAAAA,CAAuBnC,CAAAA,CAAkBC,CAAAA,CAAiB,CAC7E,IAAIgC,CAAAA,CAAOE,CAAAA,CAAO,KAAA,EAAO,IAAA,CACtB/B,CAAAA,EAAuBA,CAAAA,CAAK,IAAA,GAAS,MAAA,EAAUA,CAAAA,CAAK,QAAA,GAAaJ,CACpE,CAAA,CAUA,GARKiC,CAAAA,GACHA,CAAAA,CAAOpC,CAAAA,CAAQ,IAAA,CAAK,CAClB,QAAA,CAAAG,CAAAA,CACA,IAAA,CAAM,CAAE,SAAA,CAAW,IAAA,CAAM,OAAA,CAAS,GAAA,CAAK,MAAA,CAAQ;AAAA,EAAA,CAAO,CACxD,CAAC,CAAA,CACDmC,CAAAA,CAAO,MAAA,CAAOF,CAAI,CAAA,CAAA,CAGhB,OAAOhC,CAAAA,EAAe,QAAA,CAAA,CACxB,IAAA,GAAW,CAACqB,EAAMvJ,CAAK,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQkI,CAAU,CAAA,CAEnD,GACEqB,CAAAA,CAAK,UAAA,CAAW,GAAG,CAAA,EACnB,OAAOvJ,CAAAA,EAAU,QAAA,EACjBA,CAAAA,GAAU,IAAA,EACV,OAAO,IAAA,CAAKA,CAAK,CAAA,CAAE,MAAA,GAAW,CAAA,CAC9B,CAEA,IAAMmI,CAAAA,CAAcoB,CAAAA,CAAK,KAAA,CAAM,sBAAsB,CAAA,CACrD,GAAIpB,CAAAA,CAAa,CACf,GAAM,EAAGkC,CAAAA,CAAYC,CAAY,CAAA,CAAInC,CAAAA,CAC/BuB,CAAAA,CAAS5B,CAAAA,CAAQ,MAAA,CAAO,CAC5B,IAAA,CAAMuC,CAAAA,CACN,MAAA,CAAQC,CAAAA,CACR,IAAA,CAAM,CAAE,SAAA,CAAW,KAAM,MAAA,CAAQ;AAAA,IAAA,CAAS,CAC5C,CAAC,CAAA,CACDJ,CAAAA,CAAK,MAAA,CAAOR,CAAM,EACpB,CACF,CAAA,KAAA,GAAW,OAAO1J,CAAAA,EAAU,QAAA,CAAU,CACpC,IAAMyJ,CAAAA,CAAO3B,CAAAA,CAAQ,IAAA,CAAK,CACxB,IAAA,CAAAyB,CAAAA,CACA,KAAA,CAAOvJ,CAAAA,CACP,IAAA,CAAM,CAAE,SAAA,CAAW,IAAA,CAAM,MAAA,CAAQ;AAAA,IAAA,CAAS,CAC5C,CAAC,CAAA,CAGKwJ,EAAeU,CAAAA,CAAK,KAAA,EAAO,KAC9B7B,CAAAA,EACCA,CAAAA,CAAK,IAAA,GAAS,MAAA,EAAUA,EAAK,IAAA,GAASkB,CAC1C,EAEAC,CAAAA,CAAeA,CAAAA,CAAa,YAAYC,CAAI,CAAA,CAAIS,CAAAA,CAAK,MAAA,CAAOT,CAAI,EAClE,CAAA,KAAA,GAAW,OAAOzJ,CAAAA,EAAU,QAAA,CAAU,CAEpC,IAAMuK,CAAAA,CAAiBhB,EAAK,UAAA,CAAW,GAAG,EACtCtB,CAAAA,CAAS,OAAA,CAAQ,WAAY,CAAA,EAAA,EAAKsB,CAAAA,CAAK,UAAU,CAAC,CAAC,CAAA,CAAE,CAAA,CACrDA,EACJF,EAAAA,CAAYe,CAAAA,CAAQG,EAAgBvK,CAAK,EAC3C,UAEO,OAAOkI,CAAAA,EAAe,QAAA,CAE/B,GAAI,CAGF,IAAM+B,CAAAA,CADSnC,EAAQ,KAAA,CAAM,CAAA,MAAA,EAASI,CAAU,CAAA,CAAA,CAAG,CAAA,CAC3B,KAAA,CAEpB+B,CAAAA,EAAYA,EAAS,KAAA,EAEvBA,CAAAA,CAAS,MAAM,OAAA,CAAS5B,CAAAA,EAAS,CAC/B,GAAIA,CAAAA,CAAK,OAAS,MAAA,CAAQ,CACxB,IAAM8B,CAAAA,CAAQ9B,CAAAA,CAAK,OAAM,CACzB8B,CAAAA,CAAM,KAAK,MAAA,CAAS;AAAA,IAAA,CAAA,CACpBD,GAAM,MAAA,CAAOC,CAAK,EACpB,CACF,CAAC,EAEL,CAAA,MAASxK,CAAAA,CAAO,CACd,cAAQ,KAAA,CAAM,6BAAA,CAA+BsI,EAAUC,CAAAA,CAAYvI,CAAK,EAClEA,CACR,CAEJ,CC5fA,eAAsB6K,EAAAA,CACpBC,CAAAA,CACAnJ,CAAAA,CACApD,CAAAA,CAQA,CACA,GAAI,CAACoD,CAAAA,CAAO,aAAA,CAAc,aAAe,CAAC,MAAA,CAAO,IAAA,CAAKmJ,CAAAA,EAAW,EAAE,CAAA,CAAE,OACnE,OAGFvM,CAAAA,CAAU,CACR,wBAAA,CAA0B,KAAA,CAC1B,MAAA,CAAQ,KAAA,CACR,gBAAiB,IAAA,CACjB,gBAAA,CAAkB,KAAA,CAClB,SAAA,CAAW,KACX,GAAGA,CACL,CAAA,CACA,IAAMmJ,EAAc/F,CAAAA,CAAO,aAAA,CAAc,YACnCgG,CAAAA,CAAsBjJ,UAAAA,CAAK,SAC/BiD,CAAAA,CAAO,aAAA,CAAc,GAAA,CACrB+F,CACF,EACMqD,CAAAA,CAAiBnM,CAAAA,CACrB,CAAA,0BAAA,EAA6BE,CAAAA,CAAY,KAAK6I,CAAmB,CAAC,CAAA,CAAA,CAClE,CACE,OAAQpJ,CAAAA,CAAQ,MAClB,CACF,CAAA,CAAE,KAAA,GACIsJ,CAAAA,CAAM,MAAMpJ,QAAAA,CAAG,QAAA,CAASiJ,EAAa,MAAM,CAAA,CAC7CI,GAAAA,CAAS,MAAMkD,GAAiBnD,CAAAA,CAAKiD,CAAAA,EAAW,EAAC,CAAGnJ,EAAQ,CAC9D,wBAAA,CAA0BpD,EAAQ,wBAAA,CAClC,eAAA,CAAiBA,EAAQ,eAAA,CACzB,cAAA,CAAgBA,CAAAA,CAAQ,cAAA,CACxB,iBAAkBA,CAAAA,CAAQ,gBAAA,CAC1B,SAAA,CAAWA,CAAAA,CAAQ,SACrB,CAAC,CAAA,CACD,MAAME,QAAAA,CAAG,UAAUiJ,CAAAA,CAAaI,GAAAA,CAAQ,MAAM,CAAA,CAC9CiD,CAAAA,CAAe,UACjB,CAEA,eAAsBC,EAAAA,CACpBhD,EACA8C,CAAAA,CACAnJ,CAAAA,CACApD,EAMI,CACF,wBAAA,CAA0B,MAC1B,eAAA,CAAiB,IAAA,CACjB,cAAA,CAAgB,MAAA,CAChB,iBAAkB,KAAA,CAClB,SAAA,CAAW,KACb,CAAA,CACA,CACAA,EAAU,CACR,wBAAA,CAA0B,KAAA,CAC1B,eAAA,CAAiB,KACjB,cAAA,CAAgB,MAAA,CAChB,gBAAA,CAAkB,KAAA,CAClB,UAAW,KAAA,CACX,GAAGA,CACL,CAAA,CAEA,IAAI0J,CAAAA,CAAU,CAACgD,GAAoBH,CAAO,CAAC,EAM3C,GAJIvM,CAAAA,CAAQ,wBAAA,EACV0J,CAAAA,CAAQ,KAAKiD,EAAAA,EAAgC,CAAA,CAG3C3M,CAAAA,CAAQ,kBAAoB,IAAA,CAAM,CAIpC,GAHA0J,CAAAA,CAAU,EAAC,CAGPtG,CAAAA,CAAO,eAAe,GAAA,CAAK,CAC7B,IAAMwJ,CAAAA,CAAcC,GAAAA,CAAezJ,CAAAA,CAAO,aAAA,CAAc,GAAG,CAAA,CAEzD,CAACwJ,CAAAA,EAAa,YAAA,GAAe,qBAAqB,CAAA,EAClD,CAACA,CAAAA,EAAa,eAAA,GAAkB,qBAAqB,CAAA,EACrD5M,CAAAA,CAAQ,WAER0J,CAAAA,CAAQ,IAAA,CAAKoD,GAAgB,CAAE,MAAA,CAAQ,gBAAiB,CAAC,CAAC,EAE9D,CAEApD,CAAAA,CAAQ,IAAA,CAAKqD,GAAiB,CAAE,MAAA,CAAQ,sBAAuB,CAAC,CAAC,CAAA,CAE7D/M,CAAAA,CAAQ,0BACV0J,CAAAA,CAAQ,IAAA,CAAKiD,IAAgC,CAAA,CAG/CjD,CAAAA,CAAQ,IAAA,CACNsD,GAAsBT,CAAAA,CAAS,CAC7B,gBAAA,CAAkBvM,CAAAA,CAAQ,gBAC5B,CAAC,CACH,CAAA,CACA0J,CAAAA,CAAQ,KAAKuD,EAAAA,CAAkBV,CAAO,CAAC,CAAA,CAEnCvM,CAAAA,CAAQ,iBACV0J,CAAAA,CAAQ,IAAA,CAAKwD,EAAAA,CAA2BlN,CAAAA,CAAQ,cAAc,CAAC,CAAA,CAC/D0J,CAAAA,CAAQ,IAAA,CAAKyD,GAAoCnN,CAAAA,CAAQ,cAAc,CAAC,CAAA,CACxE0J,EAAQ,IAAA,CAAK0D,EAAAA,CAAoCpN,EAAQ,cAAc,CAAC,GAE5E,CAEIoD,CAAAA,CAAO,QAAA,CAAS,YAAA,EAAgBpD,EAAQ,SAAA,EAC1C0J,CAAAA,CAAQ,IAAA,CACN2D,EAAAA,CAAsB,CAAE,eAAA,CAAiBrN,CAAAA,CAAQ,eAAgB,CAAC,CACpE,CAAA,CAOF,IAAIuJ,GAJW,MAAMK,CAAAA,CAAQF,CAAO,CAAA,CAAE,OAAA,CAAQD,CAAAA,CAAO,CACnD,KAAM,MACR,CAAC,GAEmB,GAAA,CAEpB,OAAAF,EAASA,CAAAA,CAAO,OAAA,CAAQ,wBAAA,CAA0B,EAAE,EAEhDvJ,CAAAA,CAAQ,eAAA,GAAoB,OAC9BuJ,CAAAA,CAASA,CAAAA,CAAO,QAAQ,aAAA,CAAe;;AAAA,CAAM,CAAA,CAAA,CAGxCA,CACT,CAEA,SAAS8D,GAAsB,CAC7B,eAAA,CAAAlF,CACF,CAAA,CAEG,CACD,OAAO,CACL,aAAA,CAAe,mBAAA,CACf,KAAK0B,CAAAA,CAAY,CACf,IAAMyD,CAAAA,CAAgB,CACpB,CACE,QAAA,CAAU,GAAA,CACV,KAAA,CACEnF,IAAoB,IAAA,CAChB,+BAAA,CACA,eACR,CAAA,CACA,CAAE,SAAU,MAAA,CAAQ,KAAA,CAAO,+BAAgC,CAC7D,CAAA,CAEIoF,CAAAA,CAAY1D,EAAK,KAAA,CAAM,IAAA,CACxBM,GACCA,CAAAA,CAAK,IAAA,GAAS,UACdA,CAAAA,CAAK,IAAA,GAAS,OAAA,EACdA,CAAAA,CAAK,MAAA,GAAW,MAAA,EAChBmD,EAAc,KAAA,CAAM,CAAC,CAAE,QAAA,CAAAvD,CAAAA,CAAU,MAAAyD,CAAM,CAAA,GACrCrD,CAAAA,CAAK,KAAA,EAAO,IAAA,CACT6B,CAAAA,EACCA,EAAK,IAAA,GAAS,MAAA,EACdA,EAAK,QAAA,GAAajC,CAAAA,EAClBiC,EAAK,KAAA,CAAM,IAAA,CACRyB,CAAAA,EACCA,CAAAA,CAAU,IAAA,GAAS,QAAA,EACnBA,EAAU,IAAA,GAAS,OAAA,EACnBA,EAAU,MAAA,GAAWD,CACzB,CACJ,CACF,CACJ,CAAA,CAEKD,CAAAA,GACHA,CAAAA,CAAY3D,CAAAA,CAAQ,OAAO,CACzB,IAAA,CAAM,OAAA,CACN,MAAA,CAAQ,MAAA,CACR,IAAA,CAAM,CAAE,SAAA,CAAW,IAAA,CAAM,OAAA,CAAS,GAAA,CAAK,MAAA,CAAQ;AAAA,CAAK,CACtD,CAAC,CAAA,CACDC,CAAAA,CAAK,MAAA,CAAO0D,CAAS,CAAA,CACrB1D,CAAAA,CAAK,YAAA,CAAa0D,CAAAA,CAAW3D,CAAAA,CAAQ,OAAA,CAAQ,CAAE,IAAA,CAAM,aAAc,CAAC,CAAC,CAAA,CAAA,CAGvE0D,CAAAA,CAAc,OAAA,CAAQ,CAAC,CAAE,QAAA,CAAAvD,CAAAA,CAAU,KAAA,CAAAyD,CAAM,CAAA,GAAM,CACxBD,CAAAA,EAAW,KAAA,EAAO,IAAA,CACpCpD,CAAAA,EACCA,CAAAA,CAAK,IAAA,GAAS,MAAA,EAAUA,CAAAA,CAAK,QAAA,GAAaJ,CAC9C,CAAA,EAGEwD,CAAAA,EAAW,MAAA,CACT3D,CAAAA,CAAQ,IAAA,CAAK,CACX,QAAA,CAAAG,CAAAA,CACA,KAAA,CAAO,CACLH,CAAAA,CAAQ,MAAA,CAAO,CACb,IAAA,CAAM,OAAA,CACN,MAAA,CAAQ4D,CAAAA,CACR,IAAA,CAAM,CAAE,SAAA,CAAW,IAAA,CAAM,MAAA,CAAQ;AAAA,IAAA,CAAS,CAC5C,CAAC,CACH,CAAA,CACA,IAAA,CAAM,CAAE,SAAA,CAAW,IAAA,CAAM,OAAA,CAAS,GAAA,CAAK,MAAA,CAAQ;AAAA,EAAA,CAAO,CACxD,CAAC,CACH,EAEJ,CAAC,EACH,CACF,CACF,CAEA,SAASd,EAAAA,CACPH,CAAAA,CACA,CACA,OAAO,CACL,aAAA,CAAe,iBAAA,CACf,IAAA,CAAK1C,CAAAA,CAAY,CACf,IAAI0D,CAAAA,CAAY1D,CAAAA,CAAK,KAAA,CAAM,IAAA,CACxBM,CAAAA,EACCA,EAAK,IAAA,GAAS,QAAA,EACdA,CAAAA,CAAK,IAAA,GAAS,OAAA,EACdA,CAAAA,CAAK,SAAW,MACpB,CAAA,CAEMoD,CAAAA,YAAqBG,EAAAA,GACzBH,CAAAA,CAAY3D,CAAAA,CAAQ,OAAO,CACzB,IAAA,CAAM,OAAA,CACN,MAAA,CAAQ,MAAA,CACR,KAAA,CAAO,EAAC,CACR,IAAA,CAAM,CACJ,SAAA,CAAW,IAAA,CACX,MAAA,CAAQ;AAAA,CAAA,CACR,OAAA,CAAS,GACX,CACF,CAAC,CAAA,CACDC,CAAAA,CAAK,MAAA,CAAO0D,CAAS,CAAA,CACrB1D,CAAAA,CAAK,YAAA,CAAa0D,CAAAA,CAAW3D,CAAAA,CAAQ,OAAA,CAAQ,CAAE,IAAA,CAAM,aAAc,CAAC,CAAC,CAAA,CAAA,CAGnE2D,CAAAA,GAAc,MAAA,EAEhB,MAAA,CAAO,OAAA,CAAQhB,CAAO,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAClH,CAAAA,CAAKsI,CAAI,CAAA,GAAM,CAC/C,IAAM5D,CAAAA,CAAW1E,CAAAA,GAAQ,OAAA,CAAU,OAAA,CAAU,CAAA,CAAA,EAAIA,CAAG,CAAA,CAAA,CAEpDuI,EAAAA,CAAgBL,CAAAA,CAAqBxD,CAAAA,CAAU4D,CAAI,EACrD,CAAC,EAEL,CACF,CACF,CAEA,SAASE,EAAAA,CAAmBhE,CAAAA,CAAmB,CAC7C,IAAMiE,CAAAA,CAAWjE,CAAAA,CAAK,KAAA,CAAM,IAAA,CACzBM,CAAAA,EAAuBA,EAAK,IAAA,GAAS,MAAA,EAAUA,CAAAA,CAAK,QAAA,GAAa,OACpE,CAAA,CAEA,GAAI2D,CAAAA,CAAU,CACZ,IAAMC,CAAAA,CAAgB,CAAC,cAAA,CAAgB,cAAc,CAAA,CAErDD,CAAAA,CAAS,KAAA,CACN,MAAA,CACE3D,CAAAA,EACCA,CAAAA,CAAK,IAAA,GAAS,MAAA,EAAU4D,CAAAA,CAAc,QAAA,CAAS5D,CAAAA,CAAK,IAAI,CAC5D,CAAA,CACC,OAAA,CAASA,CAAAA,EAASA,CAAAA,CAAK,MAAA,EAAQ,CAAA,CAE9B2D,CAAAA,CAAS,KAAA,CAAM,MAAA,GAAW,CAAA,EAC5BA,CAAAA,CAAS,MAAA,GAEb,CACF,CAEA,SAASnB,EAAAA,EAAiC,CACxC,OAAO,CACL,aAAA,CAAe,6BAAA,CACf,IAAA,CAAK9C,CAAAA,CAAY,CACf,IAAMmE,CAAAA,CAAWnE,CAAAA,CAAK,KAAA,CAAM,IAAA,CACzBM,CAAAA,EAAuBA,CAAAA,CAAK,IAAA,GAAS,MAAA,EAAUA,CAAAA,CAAK,QAAA,GAAa,MACpE,EACI6D,CAAAA,GAEFA,CAAAA,CAAS,KAAA,CACN,IAAA,CACE7D,CAAAA,EACCA,CAAAA,CAAK,IAAA,GAAS,MAAA,EACdA,CAAAA,CAAK,IAAA,GAAS,OAAA,EACd,CAAC,4BAAA,CAA8B,mBAAmB,CAAA,CAAE,QAAA,CAClDA,CAAAA,CAAK,KACP,CACJ,CAAA,EACE,MAAA,EAAO,CAGX6D,CAAAA,CAAS,KAAA,CACN,IAAA,CAAM7D,CAAAA,EAEHA,CAAAA,CAAK,IAAA,GAAS,MAAA,EACdA,CAAAA,CAAK,IAAA,GAAS,YAAA,GAEbA,EAAK,KAAA,CAAM,UAAA,CAAW,iBAAiB,CAAA,EACtCA,CAAAA,CAAK,KAAA,GAAU,mBAAA,CAEpB,CAAA,EACC,MAAA,EAAO,CAGX6D,CAAAA,CAAS,KAAA,CACN,IAAA,CACE7D,CAAAA,EACCA,CAAAA,CAAK,IAAA,GAAS,MAAA,EACdA,CAAAA,CAAK,IAAA,GAAS,aAAA,EACdA,CAAAA,CAAK,KAAA,GAAU,8BACnB,CAAA,EACE,MAAA,EAAO,CAGP6D,CAAAA,CAAS,KAAA,CAAM,MAAA,GAAW,CAAA,EAC5BA,CAAAA,CAAS,MAAA,IAIbH,EAAAA,CAAmBhE,CAAI,CAAA,CAEvB,IAAMoE,CAAAA,CAAepE,CAAAA,CAAK,KAAA,CAAM,IAAA,CAC7BM,CAAAA,EACCA,CAAAA,CAAK,IAAA,GAAS,QAAA,EACdA,CAAAA,CAAK,MAAA,GAAW,8BACpB,CAAA,CAEI8D,CAAAA,GACFJ,EAAAA,CAAmBI,CAAY,CAAA,CAC3BA,CAAAA,CAAa,KAAA,CAAM,MAAA,GAAW,CAAA,EAChCA,CAAAA,CAAa,MAAA,EAAO,EAG1B,CACF,CACF,CAEA,SAASL,EAAAA,CACPL,EACAxD,CAAAA,CACA4D,CAAAA,CACA,CACA,IAAIO,CAAAA,CAAWX,CAAAA,CAAU,KAAA,EAAO,IAAA,CAC7BpD,CAAAA,EAAuBA,CAAAA,CAAK,IAAA,GAAS,MAAA,EAAUA,CAAAA,CAAK,QAAA,GAAaJ,CACpE,CAAA,CAEKmE,CAAAA,EACC,MAAA,CAAO,IAAA,CAAKP,CAAI,CAAA,CAAE,MAAA,CAAS,CAAA,GAC7BO,CAAAA,CAAWtE,CAAAA,CAAQ,IAAA,CAAK,CACtB,QAAA,CAAAG,CAAAA,CACA,IAAA,CAAM,CAAE,OAAA,CAAS,IAAK,MAAA,CAAQ;AAAA,EAAA,CAAO,CACvC,CAAC,CAAA,CACDwD,CAAAA,CAAU,OAAOW,CAAQ,CAAA,CAAA,CAI7B,MAAA,CAAO,OAAA,CAAQP,CAAI,CAAA,CAAE,QAAQ,CAAC,CAACtI,EAAKvD,CAAK,CAAA,GAAM,CAC7C,IAAMuJ,CAAAA,CAAO,CAAA,EAAA,EAAKhG,CAAAA,CAAI,OAAA,CAAQ,KAAA,CAAO,EAAE,CAAC,CAAA,CAAA,CAClC8I,EAAUvE,CAAAA,CAAQ,IAAA,CAAK,CAC3B,IAAA,CAAAyB,CAAAA,CACA,KAAA,CAAAvJ,CAAAA,CACA,IAAA,CAAM,CAAE,UAAW,IAAK,CAC1B,CAAC,CAAA,CAEKwJ,CAAAA,CAAe4C,CAAAA,EAAU,MAAM,IAAA,CAClC/D,CAAAA,EACCA,CAAAA,CAAK,IAAA,GAAS,MAAA,EAAUA,CAAAA,CAAK,OAASkB,CAC1C,CAAA,CAEAC,EAAeA,CAAAA,CAAa,WAAA,CAAY6C,CAAO,CAAA,CAAID,CAAAA,EAAU,MAAA,CAAOC,CAAO,EAC7E,CAAC,EACH,CAEA,SAASnB,EAAAA,CACPT,CAAAA,CACAvM,CAAAA,CAGA,CACA,OAAO,CACL,aAAA,CAAe,oBAAA,CACf,IAAA,CAAK6J,CAAAA,CAAY,CACf,OAAO,OAAA,CAAQ0C,CAAO,EAAE,OAAA,CAAQ,CAAC,CAAClH,CAAAA,CAAKsI,CAAI,CAAA,GAAM,CAC/C,IAAI5D,CAAAA,CAAW1E,IAAQ,OAAA,CAAU,OAAA,CAAU,CAAA,CAAA,EAAIA,CAAG,CAAA,CAAA,CAElD,GAAIA,IAAQ,OAAA,CAAS,CACnB0E,CAAAA,CAAW,QAAA,CACX,IAAMqE,CAAAA,CAAYC,GAAgBxE,CAAI,CAAA,CACtC,OAAO,OAAA,CAAQ8D,CAAI,EAAE,OAAA,CAAQ,CAAC,CAACtI,CAAAA,CAAKvD,CAAK,CAAA,GAAM,CAC7C,IAAMuJ,CAAAA,CAAO,CAAA,EAAA,EAAKhG,CAAAA,CAAI,OAAA,CAAQ,KAAA,CAAO,EAAE,CAAC,CAAA,CAAA,CAClC8I,CAAAA,CAAUvE,CAAAA,CAAQ,IAAA,CAAK,CAC3B,KAAAyB,CAAAA,CACA,KAAA,CAAAvJ,EACA,IAAA,CAAM,CAAE,UAAW,IAAK,CAC1B,CAAC,CAAA,CAEKwJ,CAAAA,CAAe8C,CAAAA,EAAW,OAAO,IAAA,CACpCjE,CAAAA,EACCA,CAAAA,CAAK,IAAA,GAAS,MAAA,EAAUA,CAAAA,CAAK,OAASkB,CAC1C,CAAA,CAMIrL,CAAAA,CAAQ,gBAAA,CACNsL,CAAAA,CACFA,CAAAA,CAAa,YAAY6C,CAAO,CAAA,CAEhCC,GAAW,MAAA,CAAOD,CAAO,EAGtB7C,CAAAA,EACH8C,CAAAA,EAAW,MAAA,CAAOD,CAAO,EAG/B,CAAC,EACD,MACF,CAEA,IAAID,CAAAA,CAAWrE,CAAAA,CAAK,KAAA,EAAO,KACxBM,CAAAA,EACCA,CAAAA,CAAK,IAAA,GAAS,MAAA,EAAUA,CAAAA,CAAK,QAAA,GAAaJ,CAC9C,CAAA,CAEI,CAACmE,GAAY,MAAA,CAAO,IAAA,CAAKP,CAAI,CAAA,CAAE,MAAA,CAAS,CAAA,GAC1CO,CAAAA,CAAWtE,CAAAA,CAAQ,IAAA,CAAK,CACtB,QAAA,CAAAG,CAAAA,CACA,KAAA,CAAO,EAAC,CACR,IAAA,CAAM,CAAE,SAAA,CAAW,IAAA,CAAM,OAAA,CAAS,GAAA,CAAK,MAAA,CAAQ;AAAA,CAAK,CACtD,CAAC,CAAA,CACDF,EAAK,MAAA,CAAOqE,CAAQ,EACpBrE,CAAAA,CAAK,YAAA,CAAaqE,EAAUtE,CAAAA,CAAQ,OAAA,CAAQ,CAAE,IAAA,CAAM,aAAc,CAAC,CAAC,CAAA,CAAA,CAGtE,OAAO,OAAA,CAAQ+D,CAAI,CAAA,CAAE,OAAA,CAAQ,CAAC,CAACtI,CAAAA,CAAKvD,CAAK,CAAA,GAAM,CAC7C,IAAIuJ,CAAAA,CAAO,CAAA,EAAA,EAAKhG,EAAI,OAAA,CAAQ,KAAA,CAAO,EAAE,CAAC,CAAA,CAAA,CAGlCgG,IAAS,sBAAA,GACXA,CAAAA,CAAO,aAGLiD,EAAAA,CAAgBxM,CAAK,CAAA,GACvBA,CAAAA,CAAQ,OAAOA,CAAK,CAAA,CAAA,CAAA,CAAA,CAGtB,IAAMqM,CAAAA,CAAUvE,CAAAA,CAAQ,KAAK,CAC3B,IAAA,CAAAyB,EACA,KAAA,CAAAvJ,CAAAA,CACA,KAAM,CAAE,SAAA,CAAW,IAAK,CAC1B,CAAC,EACKwJ,CAAAA,CAAe4C,CAAAA,EAAU,MAAM,IAAA,CAClC/D,CAAAA,EACCA,EAAK,IAAA,GAAS,MAAA,EAAUA,EAAK,IAAA,GAASkB,CAC1C,EAMIrL,CAAAA,CAAQ,gBAAA,CACNsL,EACFA,CAAAA,CAAa,WAAA,CAAY6C,CAAO,CAAA,CAEhCD,CAAAA,EAAU,OAAOC,CAAO,CAAA,CAGrB7C,GACH4C,CAAAA,EAAU,MAAA,CAAOC,CAAO,EAG9B,CAAC,EACH,CAAC,EACH,CACF,CACF,CAEA,SAASlB,EAAAA,CAAkBV,EAAoD,CAC7E,OAAO,CACL,aAAA,CAAe,cAAA,CACf,KAAK1C,CAAAA,CAAY,CAEf,IAAM0E,CAAAA,CAAY,KAAA,CAAM,KACtB,IAAI,GAAA,CACF,OAAO,IAAA,CAAKhC,CAAO,EAAE,OAAA,CAASlH,CAAAA,EAC5B,OAAO,IAAA,CAAKkH,CAAAA,CAAQlH,CAA2B,CAAA,EAAK,EAAE,CACxD,CACF,CACF,CAAA,CAEA,GAAI,CAACkJ,CAAAA,CAAU,MAAA,CACb,OAGF,IAAMH,EAAYC,EAAAA,CAAgBxE,CAAI,EAEhC2E,CAAAA,CAAgBJ,CAAAA,CAAU,OAAO,MAAA,CACpCjE,CAAAA,EACCA,EAAK,IAAA,GAAS,MAAA,EAAUA,EAAK,IAAA,CAAK,UAAA,CAAW,IAAI,CACrD,CAAA,CAEA,QAAWsE,CAAAA,IAAYF,CAAAA,CAAW,CAChC,IAAMzM,CAAAA,CAAQ,OAAO,MAAA,CAAOyK,CAAO,EAAE,IAAA,CAAMoB,CAAAA,EAASA,EAAKc,CAAQ,CAAC,IAChEA,CACF,CAAA,CAEA,GAAI,CAAC3M,CAAAA,CACH,SAGF,GAAI2M,CAAAA,GAAa,SAAU,CACzB,IAAMC,CAAAA,CAAkB,CACtB,GAAI,2BAAA,CACJ,EAAA,CAAI,4BACJ,EAAA,CAAI,eAAA,CACJ,GAAI,2BAAA,CACJ,KAAA,CAAO,4BACP,KAAA,CAAO,4BAAA,CACP,MAAO,4BACT,CAAA,CACA,OAAW,CAACrJ,CAAAA,CAAKvD,CAAK,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQ4M,CAAe,EAAG,CAC1D,IAAMC,EAAa/E,CAAAA,CAAQ,IAAA,CAAK,CAC9B,IAAA,CAAM,CAAA,SAAA,EAAYvE,CAAG,CAAA,CAAA,CACrB,KAAA,CAAAvD,EACA,IAAA,CAAM,CAAE,UAAW,IAAK,CAC1B,CAAC,CAAA,CAECsM,CAAAA,EAAW,KAAA,EAAO,IAAA,CACfjE,GACCA,CAAAA,CAAK,IAAA,GAAS,QAAUA,CAAAA,CAAK,IAAA,GAASwE,EAAW,IACrD,CAAA,EAIFP,GAAW,MAAA,CAAOO,CAAU,EAC9B,CACA,QACF,CAEA,IAAItD,CAAAA,CACFiD,GAAgBxM,CAAK,CAAA,EAAK8M,GAAa9M,CAAK,CAAA,CACxC,WAAW2M,CAAAA,CAAS,OAAA,CAAQ,MAAO,EAAE,CAAC,GACtC,CAAA,EAAA,EAAKA,CAAAA,CAAS,QAAQ,KAAA,CAAO,EAAE,CAAC,CAAA,CAAA,CAClCpD,CAAAA,GAAS,+BACXA,CAAAA,CAAO,iBAAA,CAAA,CAGT,IAAIwD,CAAAA,CAAY,CAAA,MAAA,EAASJ,CAAQ,CAAA,CAAA,CAAA,CAC7BpD,IAAS,iBAAA,GACXwD,CAAAA,CAAY,kBAGd,IAAMF,CAAAA,CAAa/E,EAAQ,IAAA,CAAK,CAC9B,KAAAyB,CAAAA,CACA,KAAA,CAAOwD,EACP,IAAA,CAAM,CAAE,UAAW,IAAK,CAC1B,CAAC,CAAA,CACoBT,CAAAA,EAAW,OAAO,IAAA,CACpCjE,CAAAA,EACCA,EAAK,IAAA,GAAS,MAAA,EAAUA,EAAK,IAAA,GAASwE,CAAAA,CAAW,IACrD,CAAA,GAEMH,CAAAA,EAAe,OACjBJ,CAAAA,EAAW,WAAA,CACTI,EAAcA,CAAAA,CAAc,MAAA,CAAS,CAAC,CAAA,CACtCG,CACF,EAEAP,CAAAA,EAAW,MAAA,CAAOO,CAAU,CAAA,EAGlC,CACF,CACF,CACF,CAEA,SAASN,EAAAA,CAAgBxE,EAAoB,CAC3C,IAAIuE,EAAYvE,CAAAA,CAAK,KAAA,CAAM,KACxBM,CAAAA,EACCA,CAAAA,CAAK,OAAS,QAAA,EACdA,CAAAA,CAAK,OAAS,OAAA,EACdA,CAAAA,CAAK,SAAW,QACpB,CAAA,CAEA,OAAKiE,CAAAA,GACHA,CAAAA,CAAYxE,EAAQ,MAAA,CAAO,CACzB,KAAM,OAAA,CACN,MAAA,CAAQ,SACR,KAAA,CAAO,GACP,IAAA,CAAM,CAAE,UAAW,IAAA,CAAM,OAAA,CAAS,IAAK,MAAA,CAAQ;AAAA,CAAK,CACtD,CAAC,CAAA,CACDC,CAAAA,CAAK,OAAOuE,CAAS,CAAA,CACrBvE,CAAAA,CAAK,YAAA,CAAauE,EAAWxE,CAAAA,CAAQ,OAAA,CAAQ,CAAE,IAAA,CAAM,aAAc,CAAC,CAAC,CAAA,CAAA,CAGhEwE,CACT,CAEA,SAASrB,EAAAA,CAAiB,CAAE,OAAA7C,CAAO,CAAA,CAAuB,CACxD,OAAO,CACL,aAAA,CAAe,oBAAA,CACf,IAAA,CAAKL,CAAAA,CAAY,CAMf,GAAI,CALkBA,CAAAA,CAAK,KAAA,CAAM,IAAA,CAC9BM,CAAAA,EACCA,CAAAA,CAAK,IAAA,GAAS,UAAYA,CAAAA,CAAK,IAAA,GAAS,gBAC5C,CAAA,CAEoB,CAElB,IAAME,CAAAA,CAAcR,CAAAA,CAAK,KAAA,CAAM,OAC5BM,CAAAA,EACCA,CAAAA,CAAK,IAAA,GAAS,QAAA,EAAYA,EAAK,IAAA,GAAS,QAC5C,CAAA,CAEM2E,CAAAA,CAAclF,EAAQ,MAAA,CAAO,CACjC,IAAA,CAAM,gBAAA,CACN,OAAAM,CAAAA,CACA,IAAA,CAAM,CAAE,SAAA,CAAW,KAAM,MAAA,CAAQ;AAAA,CAAK,CACxC,CAAC,CAAA,CAED,GAAIG,CAAAA,CAAY,OAAS,CAAA,CAAG,CAE1B,IAAMC,CAAAA,CAAaD,CAAAA,CAAYA,CAAAA,CAAY,OAAS,CAAC,CAAA,CACrDR,CAAAA,CAAK,WAAA,CAAYS,CAAAA,CAAYwE,CAAW,EAC1C,CAAA,KAEEjF,CAAAA,CAAK,WAAA,CAAYA,CAAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAAGiF,CAAW,CAAA,CAG7CjF,CAAAA,CAAK,YAAA,CAAaiF,CAAAA,CAAalF,CAAAA,CAAQ,OAAA,CAAQ,CAAE,IAAA,CAAM,aAAc,CAAC,CAAC,EACzE,CACF,CACF,CACF,CAEA,SAASkD,EAAAA,CAAgB,CAAE,MAAA,CAAA5C,CAAO,CAAA,CAAuB,CACvD,OAAO,CACL,aAAA,CAAe,mBAAA,CACf,IAAA,CAAKL,EAAY,CACf,IAAMQ,CAAAA,CAAcR,CAAAA,CAAK,KAAA,CAAM,MAAA,CAC5BM,GACCA,CAAAA,CAAK,IAAA,GAAS,QAAA,EAAYA,CAAAA,CAAK,IAAA,GAAS,QAC5C,EAGM4E,CAAAA,CAAoBlF,CAAAA,CAAK,KAAA,CAAM,IAAA,CAClCM,CAAAA,EACCA,CAAAA,CAAK,IAAA,GAAS,QAAA,EAAYA,CAAAA,CAAK,IAAA,GAAS,gBAC5C,CAAA,CAOA,GAAI,CAJcE,EAAY,IAAA,CAC3BF,CAAAA,EAASA,CAAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,OAAA,CAAS,EAAE,CAAA,GAAMD,CACjD,CAAA,CAEgB,CACd,IAAM8E,CAAAA,CAAapF,EAAQ,MAAA,CAAO,CAChC,IAAA,CAAM,QAAA,CACN,MAAA,CAAQ,CAAA,CAAA,EAAIM,CAAM,CAAA,CAAA,CAAA,CAClB,IAAA,CAAM,CAAE,SAAA,CAAW,IAAA,CAAM,MAAA,CAAQ;AAAA,CAAK,CACxC,CAAC,CAAA,CAED,GAAIG,EAAY,MAAA,CAAS,CAAA,CAAG,CAE1B,IAAMC,CAAAA,CAAaD,CAAAA,CAAYA,CAAAA,CAAY,MAAA,CAAS,CAAC,CAAA,CACrDR,CAAAA,CAAK,WAAA,CAAYS,CAAAA,CAAY0E,CAAU,EACzC,CAAA,KAAWD,CAAAA,EAETlF,EAAK,YAAA,CAAakF,CAAAA,CAAmBC,CAAU,CAAA,CAC/CnF,EAAK,YAAA,CACHkF,CAAAA,CACAnF,CAAAA,CAAQ,OAAA,CAAQ,CAAE,IAAA,CAAM,aAAc,CAAC,CACzC,CAAA,GAGAC,CAAAA,CAAK,OAAA,CAAQmF,CAAU,EACvBnF,CAAAA,CAAK,WAAA,CAAYmF,CAAAA,CAAYpF,CAAAA,CAAQ,QAAQ,CAAE,IAAA,CAAM,aAAc,CAAC,CAAC,CAAA,EAEzE,CACF,CACF,CACF,CAEA,SAASsD,EAAAA,CACP+B,CAAAA,CACA,CACA,OAAO,CACL,aAAA,CAAe,wBAAA,CACf,KAAKpF,CAAAA,CAAY,CACf,GAAI,CAACoF,GAAgB,OAAA,CACnB,OAIF,IAAMC,CAAAA,CADYC,EAAAA,CAAatF,CAAI,CAAA,GACP,QAAA,CAAW,IAAM,GAAA,CAEvCc,CAAAA,CAAcd,CAAAA,CAAK,KAAA,CAAM,OAC5BM,CAAAA,EACCA,CAAAA,CAAK,IAAA,GAAS,QAAA,EAAYA,EAAK,IAAA,GAAS,QAC5C,CAAA,CAEMiF,CAAAA,CACJzE,CAAAA,CAAYA,CAAAA,CAAY,MAAA,CAAS,CAAC,GAAKd,CAAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAErD,QAAWwF,CAAAA,IAAUJ,CAAAA,CAAe,OAAA,CAAS,CAC3C,IAAMK,CAAAA,CAAaD,CAAAA,CAAO,OAAA,CAAQ,yBAAA,CAA2B,EAAE,CAAA,CAG/D,GACE1E,CAAAA,CAAY,KAAMR,CAAAA,EACTA,CAAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,QAAS,EAAE,CAAA,GAAMmF,CAC7C,CAAA,CAED,SAGF,IAAMC,CAAAA,CAAa3F,CAAAA,CAAQ,MAAA,CAAO,CAChC,IAAA,CAAM,QAAA,CACN,MAAA,CAAQ,GAAGsF,CAAK,CAAA,EAAGI,CAAU,CAAA,EAAGJ,CAAK,CAAA,CAAA,CACrC,IAAA,CAAM,CAAE,SAAA,CAAW,KAAM,MAAA,CAAQ;AAAA,CAAK,CACxC,CAAC,CAAA,CACDrF,CAAAA,CAAK,WAAA,CAAYuF,CAAAA,CAAgBG,CAAU,CAAA,CAC3C1F,CAAAA,CAAK,YAAA,CAAa0F,CAAAA,CAAY3F,CAAAA,CAAQ,QAAQ,CAAE,IAAA,CAAM,aAAc,CAAC,CAAC,EACxE,CACF,CACF,CACF,CAEA,SAASwD,EAAAA,CACP6B,CAAAA,CACA,CACA,OAAO,CACL,cAAe,kCAAA,CACf,IAAA,CAAKpF,CAAAA,CAAY,CACf,GAAI,CAACoF,CAAAA,EAAgB,KAAA,EAAO,MAAA,EAAQ,SAAA,CAClC,OAGF,IAAMb,CAAAA,CAAYC,EAAAA,CAAgBxE,CAAI,CAAA,CAChC2F,EAAwBpB,CAAAA,CAAU,KAAA,EAAO,MAAA,CAC5CjE,CAAAA,EACCA,CAAAA,CAAK,IAAA,GAAS,QAAA,EAAYA,CAAAA,CAAK,OAAS,WAC5C,CAAA,CAEMsF,CAAAA,CAAsBjO,GAAAA,CAAE,MAAA,CAC5BA,GAAAA,CAAE,MAAA,EAAO,CACTA,IAAE,MAAA,CAAOA,GAAAA,CAAE,MAAA,EAAO,CAAGA,GAAAA,CAAE,MAAA,EAAQ,CACjC,CAAA,CAEA,IAAA,GAAW,CAACkO,CAAAA,CAAcC,CAAa,CAAA,GAAK,MAAA,CAAO,OAAA,CACjDV,EAAe,KAAA,CAAM,MAAA,CAAO,SAC9B,CAAA,CAAG,CACD,GAAI,OAAOS,CAAAA,EAAiB,QAAA,CAC1B,SAGF,IAAME,CAAAA,CAAsBH,CAAAA,CAAoB,SAAA,CAAUE,CAAa,CAAA,CAMvE,GAJI,CAACC,CAAAA,CAAoB,OAAA,EAKvBJ,CAAAA,EAAuB,IAAA,CACpBrF,CAAAA,EACCA,CAAAA,CAAK,IAAA,GAAS,QAAA,EACdA,CAAAA,CAAK,IAAA,GAAS,WAAA,EACdA,CAAAA,CAAK,MAAA,GAAWuF,CACpB,CAAA,CAEA,SAGF,IAAMG,CAAAA,CAAejG,CAAAA,CAAQ,MAAA,CAAO,CAClC,IAAA,CAAM,WAAA,CACN,MAAA,CAAQ8F,EACR,KAAA,CAAO,EAAC,CACR,IAAA,CAAM,CAAE,SAAA,CAAW,IAAA,CAAM,OAAA,CAAS,IAAK,MAAA,CAAQ;AAAA,EAAA,CAAO,CACxD,CAAC,CAAA,CAED,OAAW,CAACrK,CAAAA,CAAKyK,CAAM,CAAA,GAAK,MAAA,CAAO,QAAQF,CAAAA,CAAoB,IAAI,EAAG,CACpE,IAAM5D,EAAOpC,CAAAA,CAAQ,IAAA,CAAK,CACxB,QAAA,CAAUvE,CAAAA,CACV,MAAO,MAAA,CAAO,OAAA,CAAQyK,CAAM,CAAA,CAAE,GAAA,CAAI,CAAC,CAACzK,CAAAA,CAAKvD,CAAK,CAAA,GAC5C8H,CAAAA,CAAQ,KAAK,CACX,IAAA,CAAMvE,EACN,KAAA,CAAAvD,CAAAA,CACA,KAAM,CAAE,SAAA,CAAW,KAAM,MAAA,CAAQ;AAAA,MAAA,CAAA,CAAY,OAAA,CAAS,IAAK,CAC7D,CAAC,CACH,CAAA,CACA,IAAA,CAAM,CAAE,SAAA,CAAW,IAAA,CAAM,OAAA,CAAS,GAAA,CAAK,MAAA,CAAQ;AAAA,IAAA,CAAS,CAC1D,CAAC,CAAA,CACD+N,CAAAA,CAAa,MAAA,CAAO7D,CAAI,EAC1B,CAEAoC,CAAAA,CAAU,MAAA,CAAOyB,CAAY,CAAA,CAC7BzB,CAAAA,CAAU,YAAA,CACRyB,CAAAA,CACAjG,CAAAA,CAAQ,OAAA,CAAQ,CAAE,IAAA,CAAM,aAAc,CAAC,CACzC,EACF,CACF,CACF,CACF,CAEA,SAASuD,EAAAA,CACP8B,CAAAA,CACA,CACA,OAAO,CACL,aAAA,CAAe,kCAAA,CACf,IAAA,CAAKpF,CAAAA,CAAY,CACf,GAAI,CAACoF,CAAAA,EAAgB,KAAA,EAAO,MAAA,EAAQ,SAAA,CAClC,OAGF,IAAMb,CAAAA,CAAYC,EAAAA,CAAgBxE,CAAI,CAAA,CAChCkG,CAAAA,CAAyB3B,CAAAA,CAAU,KAAA,EAAO,MAAA,CAC7CjE,CAAAA,EACCA,CAAAA,CAAK,IAAA,GAAS,MAAA,EAAUA,CAAAA,CAAK,IAAA,CAAK,UAAA,CAAW,YAAY,CAC7D,CAAA,CAEM6F,CAAAA,CAAuBxO,GAAAA,CAC1B,MAAA,CAAOA,GAAAA,CAAE,MAAA,EAAO,CAAGA,GAAAA,CAAE,MAAA,EAAQ,CAAA,CAC7B,SAAA,CAAUyN,CAAAA,CAAe,KAAA,CAAM,MAAA,CAAO,SAAS,CAAA,CAClD,GAAKe,CAAAA,CAAqB,OAAA,CAI1B,IAAA,GAAW,CAAC3K,CAAAA,CAAKvD,CAAK,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQkO,CAAAA,CAAqB,IAAI,CAAA,CAAG,CACpE,IAAM3E,CAAAA,CAAO,CAAA,UAAA,EAAahG,CAAG,CAAA,CAAA,CAC7B,GACE0K,CAAAA,EAAwB,IAAA,CACrB5F,CAAAA,EAAsCA,CAAAA,CAAK,IAAA,GAASkB,CACvD,CAAA,CAEA,SAGF,IAAM4E,CAAAA,CAAgBrG,CAAAA,CAAQ,IAAA,CAAK,CACjC,IAAA,CAAAyB,CAAAA,CACA,KAAA,CAAAvJ,CAAAA,CACA,IAAA,CAAM,CAAE,SAAA,CAAW,IAAA,CAAM,OAAA,CAAS,IAAA,CAAM,MAAA,CAAQ;AAAA,EAAA,CAAO,CACzD,CAAC,CAAA,CACDsM,EAAU,MAAA,CAAO6B,CAAa,EAChC,CACF,CACF,CACF,CAEA,SAASd,GAAatF,CAAAA,CAAiC,CAIrD,OAHkBA,CAAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CACR,QAAA,EAAS,CAEvB,QAAA,CAAS,GAAG,CAAA,CACX,QAAA,CAEF,QACT,CAEO,SAASyE,GAAgBxM,CAAAA,CAAe,CAC7C,GACEA,CAAAA,CAAM,UAAA,CAAW,KAAK,CAAA,EACtBA,CAAAA,CAAM,WAAW,KAAK,CAAA,EACtBA,EAAM,UAAA,CAAW,GAAG,CAAA,EACpBA,CAAAA,CAAM,WAAW,OAAO,CAAA,CAExB,OAAO,MAAA,CAGT,IAAMoO,EAASpO,CAAAA,CAAM,KAAA,CAAM,GAAG,CAAA,CAE9B,OACEoO,EAAO,MAAA,GAAW,CAAA,EAClBA,EAAO,KAAA,CAAM,CAAA,CAAG,CAAC,CAAA,CAAE,KAAA,CAAOC,CAAAA,EAAUA,CAAAA,CAAM,SAAS,GAAG,CAAC,CAE3D,CAEO,SAASvB,GAAa9M,CAAAA,CAAe,CAC1C,OACEA,CAAAA,CAAM,UAAA,CAAW,KAAK,CAAA,EACtBA,CAAAA,CAAM,WAAW,KAAK,CAAA,EACtBA,EAAM,UAAA,CAAW,GAAG,CAAA,EACpBA,CAAAA,CAAM,WAAW,OAAO,CAAA,EACxBA,EAAM,QAAA,CAAS,UAAU,CAE7B,CCh4BA,eAAsBsO,CAAAA,CACpBC,CAAAA,CACAC,EACAlN,CAAAA,CACApD,GAAAA,CAGA,CAIA,GAHAqQ,EAAe,KAAA,CAAM,IAAA,CAAK,IAAI,GAAA,CAAIA,CAAY,CAAC,CAAA,CAC/CC,CAAAA,CAAkB,MAAM,IAAA,CAAK,IAAI,IAAIA,CAAe,CAAC,EAEjD,CAACD,CAAAA,EAAc,QAAU,CAACC,CAAAA,EAAiB,MAAA,CAC7C,OAGFtQ,IAAU,CACR,MAAA,CAAQ,MACR,GAAGA,GACL,EAEA,IAAMuQ,CAAAA,CAAsBlQ,EAAQ,0BAAA,CAA4B,CAC9D,OAAQL,GAAAA,CAAQ,MAClB,CAAC,CAAA,EAAG,KAAA,GACE+B,CAAAA,CAAiB,MAAMyO,EAAAA,CAAoCpN,CAAM,EAGnEqN,CAAAA,CAAO,EAAA,CACX,GAAIC,EAAAA,CAAuBtN,CAAM,GAAKrB,CAAAA,GAAmB,KAAA,CACvD,GAAI/B,GAAAA,CAAQ,MAAA,CACVyQ,EAAO,OAAA,CAAA,KACF,CACLF,EAAoB,cAAA,EAAe,CACnCjQ,EAAO,IAAA,CACL;AAAA;AAAA;AAAA,CACF,CAAA,CACA,IAAMqQ,CAAAA,CAAe,MAAM9O,GAAQ,CACjC,CACE,IAAA,CAAM,QAAA,CACN,IAAA,CAAM,MAAA,CACN,QAAS,gCAAA,CACT,OAAA,CAAS,CACP,CAAE,KAAA,CAAO,cAAe,KAAA,CAAO,OAAQ,CAAA,CACvC,CAAE,KAAA,CAAO,wBAAA,CAA0B,MAAO,kBAAmB,CAC/D,CACF,CACF,CAAC,EAEG8O,CAAAA,GACFF,CAAAA,CAAOE,CAAAA,CAAa,IAAA,EAExB,CAGFJ,CAAAA,EAAqB,OAAM,CAE3B,MAAMK,EAAAA,CACJ7O,CAAAA,CACAsO,CAAAA,CACAC,CAAAA,CACAlN,EAAO,aAAA,CAAc,GAAA,CACrBqN,CACF,CAAA,CAEAF,CAAAA,EAAqB,OAAA,GACvB,CAEA,SAASG,GAAuBtN,CAAAA,CAAgB,CAC9C,IAAMwJ,CAAAA,CAAcC,GAAAA,CAAezJ,CAAAA,CAAO,aAAA,CAAc,GAAA,CAAK,KAAK,EAElE,GAAI,CAACwJ,CAAAA,EAAa,YAAA,EAAc,KAAA,CAC9B,OAAO,OAGT,IAAMiE,CAAAA,CAAa,iCAAA,CAAkC,IAAA,CACnDjE,CAAAA,CAAY,YAAA,CAAa,KAC3B,CAAA,CACMkE,CAAAA,CACJlE,EAAY,YAAA,CAAa,kBAAkB,GAAG,UAAA,CAAW,GAAG,CAAA,CAE9D,OAAOiE,CAAAA,EAAcC,CACvB,CAEA,eAAeN,EAAAA,CAAoCpN,CAAAA,CAAgB,CAIjE,OAHoByJ,GAAAA,CAAezJ,EAAO,aAAA,CAAc,GAAA,CAAK,KAAK,CAAA,EAC9D,YAAA,EAAc,IAAA,CAKT,OAGFpB,GAAAA,CAAkBoB,CAAAA,CAAO,cAAc,GAAG,CACnD,CAEA,eAAewN,EAAAA,CACb7O,CAAAA,CAGAsO,CAAAA,CACAC,CAAAA,CACArN,CAAAA,CACAwN,EACA,CACA,GAAI1O,IAAmB,KAAA,CACrB,OAAOgP,GAAeV,CAAAA,CAAcC,CAAAA,CAAiBrN,CAAAA,CAAKwN,CAAI,CAAA,CAGhE,GAAI1O,IAAmB,MAAA,CACrB,OAAOiP,GAAgBX,CAAAA,CAAcC,CAAAA,CAAiBrN,CAAG,CAAA,CAG3D,GAAIlB,CAAAA,GAAmB,MAAA,CACrB,OAAOkP,EAAAA,CAAgBZ,EAAcC,CAAAA,CAAiBrN,CAAG,CAAA,CAGvDoN,CAAAA,EAAc,MAAA,EAChB,MAAM7N,MAAMT,CAAAA,CAAgB,CAAC,KAAA,CAAO,GAAGsO,CAAY,CAAA,CAAG,CACpD,GAAA,CAAApN,CACF,CAAC,CAAA,CAGCqN,CAAAA,EAAiB,QACnB,MAAM9N,KAAAA,CAAMT,CAAAA,CAAgB,CAAC,KAAA,CAAO,IAAA,CAAM,GAAGuO,CAAe,CAAA,CAAG,CAAE,GAAA,CAAArN,CAAI,CAAC,EAE1E,CAEA,eAAe8N,EAAAA,CACbV,CAAAA,CACAC,CAAAA,CACArN,CAAAA,CACAwN,EACA,CACIJ,CAAAA,CAAa,QACf,MAAM7N,KAAAA,CACJ,MACA,CAAC,SAAA,CAAW,GAAIiO,CAAAA,CAAO,CAAC,CAAA,EAAA,EAAKA,CAAI,CAAA,CAAE,CAAA,CAAI,EAAC,CAAI,GAAGJ,CAAY,EAC3D,CAAE,GAAA,CAAApN,CAAI,CACR,CAAA,CAGEqN,CAAAA,CAAgB,QAClB,MAAM9N,KAAAA,CACJ,MACA,CAAC,SAAA,CAAW,GAAIiO,CAAAA,CAAO,CAAC,CAAA,EAAA,EAAKA,CAAI,CAAA,CAAE,CAAA,CAAI,EAAC,CAAI,IAAA,CAAM,GAAGH,CAAe,CAAA,CACpE,CAAE,GAAA,CAAArN,CAAI,CACR,EAEJ,CAEA,eAAe+N,GACbX,CAAAA,CACAC,CAAAA,CACArN,EACA,CACIoN,CAAAA,EAAc,QAChB,MAAM7N,KAAAA,CAAM,MAAA,CAAQ,CAAC,KAAA,CAAO,GAAG6N,EAAa,GAAA,CAAKzL,CAAAA,EAAQ,CAAA,IAAA,EAAOA,CAAG,CAAA,CAAE,CAAC,EAAG,CACvE,GAAA,CAAA3B,CACF,CAAC,CAAA,CAGCqN,CAAAA,EAAiB,QACnB,MAAM9N,KAAAA,CACJ,OACA,CAAC,KAAA,CAAO,KAAM,GAAG8N,CAAAA,CAAgB,GAAA,CAAK1L,CAAAA,EAAQ,CAAA,IAAA,EAAOA,CAAG,EAAE,CAAC,CAAA,CAC3D,CAAE,GAAA,CAAA3B,CAAI,CACR,EAEJ,CAEA,eAAegO,EAAAA,CACbZ,CAAAA,CACAC,CAAAA,CACArN,CAAAA,CACA,CACIoN,CAAAA,CAAa,MAAA,EACf,MAAM7N,KAAAA,CAAM,KAAA,CAAO,CAAC,MAAA,CAAQ,SAAA,CAAW,GAAG6N,CAAY,CAAA,CAAG,CAAE,IAAApN,CAAI,CAAC,CAAA,CAG9DqN,CAAAA,CAAgB,MAAA,EAClB,MAAM9N,MAAM,KAAA,CAAO,CAAC,MAAA,CAAQ,SAAA,CAAW,OAAA,CAAS,GAAG8N,CAAe,CAAA,CAAG,CACnE,IAAArN,CACF,CAAC,EAEL,CCnLA,eAAsBiO,EAAAA,CACpBC,EACA/N,CAAAA,CACApD,CAAAA,CAGA,CACA,GAAI,CAACmR,CAAAA,EAAW,OAAO,IAAA,CAAKA,CAAO,EAAE,MAAA,GAAW,CAAA,CAC9C,OAAO,CACL,YAAA,CAAc,EAAC,CACf,cAAA,CAAgB,IAAA,CAChB,eAAgB,IAClB,CAAA,CAGFnR,CAAAA,CAAU,CACR,MAAA,CAAQ,KAAA,CACR,GAAGA,CACL,CAAA,CAEA,IAAMoR,GAAAA,CAAa/Q,CAAAA,CAAQ,+BAAA,CAAiC,CAC1D,MAAA,CAAQL,CAAAA,CAAQ,MAClB,CAAC,CAAA,EAAG,OAAM,CAEJqR,CAAAA,CAAcjO,CAAAA,CAAO,aAAA,CAAc,GAAA,CAGrCkO,CAAAA,CAAcnR,WAAK,IAAA,CAAKkR,CAAAA,CAAa,YAAY,CAAA,CAC/CE,CAAAA,CAAkBC,CAAAA,CAAoBH,CAAW,CAAA,CAEnDE,CAAAA,GACFD,CAAAA,CAAcC,CAAAA,CAAAA,CAGhB,IAAME,GAAAA,CAAgBhO,WAAW6N,CAAW,CAAA,CACtCI,EAAcvR,UAAAA,CAAK,QAAA,CAASmR,CAAW,CAAA,CAGvCK,CAAAA,CAAgB,MAAA,CAAO,OAAA,CAAQR,CAAO,CAAA,CACzC,IAAI,CAAC,CAAC9L,CAAAA,CAAKvD,CAAK,CAAA,GAAM,CAAA,EAAGuD,CAAG,CAAA,CAAA,EAAIvD,CAAK,CAAA,CAAE,CAAA,CACvC,IAAA,CAAK;AAAA,CAAI,EAER8P,CAAAA,CAAyB,EAAC,CAC1BC,CAAAA,CAAgC,KAChCC,CAAAA,CAAgC,IAAA,CAEpC,GAAIL,GAAAA,CAAe,CACjB,IAAMM,CAAAA,CAAkB,MAAM7R,QAAAA,CAAG,QAAA,CAASoR,EAAa,OAAO,CAAA,CACxDU,CAAAA,CAAgBC,CAAAA,CAAgBF,EAAiBJ,CAAa,CAAA,CAGpE,GAFAC,CAAAA,CAAeM,EAAcH,CAAAA,CAAiBJ,CAAa,CAAA,CAEvDC,CAAAA,CAAa,OAAS,CAAA,CAAA,CAQxB,GAPA,MAAM1R,QAAAA,CAAG,SAAA,CAAUoR,EAAaU,CAAAA,CAAe,OAAO,CAAA,CACtDH,CAAAA,CAAiB1R,WAAK,QAAA,CAASkR,CAAAA,CAAaC,CAAW,CAAA,CAEvDF,KAAY,OAAA,CACV,CAAA,iCAAA,EAAoC7Q,CAAAA,CAAY,IAAA,CAAKmR,CAAW,CAAC,CAAA,CAAA,CACnE,EAEI,CAAC1R,CAAAA,CAAQ,OACX,IAAA,IAAWqF,CAAAA,IAAOuM,CAAAA,CAChBtR,CAAAA,CAAO,IAAI,CAAA,EAAA,EAAKC,CAAAA,CAAY,QAAQ,GAAG,CAAC,IAAI8E,CAAG,CAAA,CAAE,EAAA,CAAA,KAIrD+L,GAAAA,EAAY,OAEhB,CAAA,KAAA,GAEE,MAAMlR,QAAAA,CAAG,SAAA,CAAUoR,EAAaK,CAAAA,CAAgB;AAAA,CAAA,CAAM,OAAO,EAC7DG,CAAAA,CAAiB3R,UAAAA,CAAK,SAASkR,CAAAA,CAAaC,CAAW,EACvDM,CAAAA,CAAe,MAAA,CAAO,KAAKT,CAAO,CAAA,CAElCC,KAAY,OAAA,CACV,CAAA,iCAAA,EAAoC7Q,EAAY,IAAA,CAAKmR,CAAW,CAAC,CAAA,CAAA,CACnE,CAAA,CAEI,CAAC1R,CAAAA,CAAQ,MAAA,CACX,QAAWqF,CAAAA,IAAOuM,CAAAA,CAChBtR,EAAO,GAAA,CAAI,CAAA,EAAA,EAAKC,EAAY,OAAA,CAAQ,GAAG,CAAC,CAAA,CAAA,EAAI8E,CAAG,EAAE,CAAA,CAKvD,OAAI,CAACrF,CAAAA,CAAQ,MAAA,EAAU4R,EAAa,MAAA,CAAS,CAAA,EAC3CtR,EAAO,KAAA,EAAM,CAGR,CACL,YAAA,CAAAsR,CAAAA,CACA,eAAAC,CAAAA,CACA,cAAA,CAAAC,CACF,CACF,CC9BA,eAAsBK,EAAAA,CACpBC,EACAhP,CAAAA,CACApD,CAAAA,CAGA,CACA,GAAI,CAACoS,GAAO,MAAA,CACV,OAGF,IAAM3R,CAAAA,CAAc,MAAMC,CAAAA,CAAe0C,CAAAA,CAAO,aAAA,CAAc,GAAG,EAMjE,GAJI,CAAC3C,GAKHA,CAAAA,CAAY,SAAA,CAAU,OAAS,UAAA,EAC/BA,CAAAA,CAAY,UAAU,IAAA,GAAS,YAAA,CAE/B,OAGF,IAAM4R,GAAAA,CAAehS,EAAQ,iBAAA,CAAmB,CAC9C,OAAQL,CAAAA,CAAQ,MAClB,CAAC,CAAA,EAAG,KAAA,GAEJ,GAAI,CACF,MAAMsS,EAAAA,CAAgBF,CAAAA,CAAOhP,EAAQ3C,CAAW,CAAA,CAChD4R,KAAc,OAAA,CAAQ,iBAAiB,EACzC,CAAA,MAAS5Q,CAAAA,CAAO,CACd,MAAA4Q,GAAAA,EAAc,KAAK,yBAAyB,CAAA,CACtC5Q,CACR,CACF,CAEA,eAAe6Q,GACbF,CAAAA,CACAhP,CAAAA,CACA3C,EACA,CAEA,IAAM8R,EAAa,MAAMC,EAAAA,CAAepP,EAAQ3C,CAAW,CAAA,CAE3D,GAAI,CAAC8R,CAAAA,CACH,OAGF,IAAME,CAAAA,CAAgB,MAAMvS,QAAAA,CAAG,QAAA,CAASqS,EAAY,OAAO,CAAA,CACrDG,EAAiB,MAAMC,EAAAA,CAC3BF,EACAL,CAEF,EAEIM,CAAAA,GAAmBD,CAAAA,EACrB,MAAMvS,QAAAA,CAAG,SAAA,CAAUqS,EAAYG,CAAAA,CAAgB,OAAO,EAE1D,CAEA,eAAeF,GACbpP,CAAAA,CACA3C,CAAAA,CACwB,CACxB,IAAMwC,CAAAA,CAAMG,CAAAA,CAAO,cAAc,GAAA,CAC3BwP,CAAAA,CAAWnS,EAAY,QAAA,CAEvBoS,CAAAA,CADQpS,EAAY,KAAA,CACN,KAAA,CAAQ,MAEtBqS,CAAAA,CAAgBF,CAAAA,CAClB,CAAC,CAAA,eAAA,EAAkBC,CAAG,GAAI,CAAA,WAAA,EAAcA,CAAG,EAAE,CAAA,CAC7C,CAAC,cAAcA,CAAG,CAAA,CAAE,EAExB,IAAA,IAAWE,CAAAA,IAAgBD,EAAe,CACxC,IAAME,EAAW7S,UAAAA,CAAK,IAAA,CAAK8C,EAAK8P,CAAY,CAAA,CAC5C,GAAItP,UAAAA,CAAWuP,CAAQ,EACrB,OAAOA,CAEX,CAEA,OAAO,IACT,CAEA,eAAsBL,EAAAA,CACpBlJ,CAAAA,CACA2I,EACAa,CAAAA,CACA,CAKA,IAAMC,CAAAA,CAJU,IAAIC,QAAQ,CAC1B,eAAA,CAAiB,EACnB,CAAC,EAE0B,gBAAA,CAAiB,YAAA,CAAc1J,EAAO,CAC/D,UAAA,CAAY2J,WAAW,GACzB,CAAC,EAGKC,CAAAA,CAAcjB,CAAAA,CAAM,OAAQkB,CAAAA,EAAMA,CAAAA,CAAE,KAAK,QAAA,GAAa,QAAQ,EAG9DC,CAAAA,CAA8B,GAGpC,IAAA,IAAWC,CAAAA,IAAQH,EAAa,CAC9B,IAAMI,EAAaD,CAAAA,CAAK,IAAA,CAAK,OAC7B,GAAI,CAACC,CAAAA,CACH,SAIF,IAAMC,CAAAA,CAAUC,GAAYF,CAAU,CAAA,CAGhCG,EAAiBV,CAAAA,CAAW,oBAAA,CAAsB3H,GAC9BA,CAAAA,CAAK,uBAAA,KACF,kBAC5B,CAAA,CAGKsI,EAAcC,EAAAA,CAAiBN,CAAI,EAErCI,CAAAA,CAEmBA,CAAAA,CAAe,iBAAgB,CACrB,IAAA,CAAMG,GAAQA,CAAAA,CAAI,OAAA,KAAcN,CAAU,CAAA,EAGvEG,EAAe,cAAA,CAAeH,CAAU,EAI1CP,CAAAA,CAAW,oBAAA,CAAqB,CAC9B,eAAA,CAAiB,kBAAA,CACjB,aAAc,CAACO,CAAU,CAC3B,CAAC,CAAA,CAIH,IAAMO,CAAAA,CAAkBC,EAAAA,CACtBf,CAAAA,CACAM,CAAAA,CAAK,IAAA,CAAK,QACZ,EAEA,GAAIQ,CAAAA,CAEFA,EAAgB,cAAA,CAAe,CAAA,EAAGP,CAAU,CAAA,CAAA,EAAII,CAAW,GAAG,CAAA,CAE1DG,CAAAA,CAAgB,SAAQ,GAAMN,CAAAA,EAChCM,EAAgB,MAAA,CAAON,CAAO,OAE3B,CAEL,IAAMQ,EAAiBC,EAAAA,CAAmBjB,CAAU,EAGlCA,CAAAA,CAAW,uBAAA,CAAwBgB,EAAgB,CACnE,eAAA,CAAiBE,wBAAwB,KAAA,CACzC,YAAA,CAAc,CACZ,CACE,IAAA,CAAMV,EACN,WAAA,CAAa,CAAA,EAAGD,CAAU,CAAA,CAAA,EAAII,CAAW,GAC3C,CACF,CACF,CAAC,CAAA,CAGS,gBAAA,CAAiB;AAAA,CAAI,EACjC,CAEAN,CAAAA,CAAkB,IAAA,CAAKG,CAAO,EAChC,CAGA,OAAIH,CAAAA,CAAkB,MAAA,CAAS,CAAA,EAC7Bc,GAAoBnB,CAAAA,CAAYK,CAAiB,CAAA,CAG5CL,CAAAA,CAAW,WAAA,EACpB,CAEA,SAASY,EAAAA,CAAiBN,CAAAA,CAAwB,CAChD,IAAMxT,CAAAA,CAAmC,EAAC,CAE1C,OAAIwT,CAAAA,CAAK,IAAA,CAAK,OAAA,EAAS,MAAA,GACrBxT,EAAQ,OAAA,CAAUwT,CAAAA,CAAK,IAAA,CAAK,OAAA,CAAA,CAG1BA,CAAAA,CAAK,IAAA,CAAK,QAAQ,MAAA,GACpBxT,CAAAA,CAAQ,MAAA,CAASwT,CAAAA,CAAK,IAAA,CAAK,MAAA,CAAA,CAG7BxT,EAAQ,QAAA,CAAWwT,CAAAA,CAAK,IAAA,CAAK,QAAA,CAEtB,IAAA,CAAK,SAAA,CAAUxT,CAAO,CAAA,CAC1B,OAAA,CAAQ,aAAA,CAAe,KAAK,CAAA,CAC5B,OAAA,CAAQ,KAAM,GAAG,CACtB,CAEA,SAAS2T,EAAAA,CAAYW,CAAAA,CAAa,CAEhC,OAAOA,CAAAA,CACJ,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAACC,CAAAA,CAAMC,CAAAA,GACVA,CAAAA,GAAU,CAAA,CACND,CAAAA,CAAK,WAAA,GACLA,CAAAA,CAAK,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAY,CAAIA,EAAK,KAAA,CAAM,CAAC,CAAA,CAAE,WAAA,EACnD,CAAA,CACC,KAAK,EAAE,CACZ,CAEA,SAASN,EAAAA,CACPf,CAAAA,CACAzE,EACA,CAEA,IAAMgG,CAAAA,CAAqBvB,CAAAA,CAAW,qBAAA,EAAsB,CAE5D,QAAWwB,CAAAA,IAAaD,CAAAA,CACtB,IAAA,IAAWE,CAAAA,IAAeD,CAAAA,CAAU,eAAA,GAAmB,CACrD,IAAME,CAAAA,CAAcD,CAAAA,CAAY,cAAA,EAAe,CAI/C,GAHI,CAACC,CAAAA,EAGDA,CAAAA,CAAY,OAAA,EAAQ,GAAMC,UAAAA,CAAW,eAAgB,SAKzD,IAAMtS,CAAAA,CAHWqS,CAAAA,CAGK,YAAA,EAAa,CACnC,GAAIrS,CAAAA,CAAK,MAAA,GAAW,CAAA,CAAG,SAGvB,IAAMuS,CAAAA,CAAUvS,EAAK,CAAC,CAAA,CAAE,OAAA,EAAQ,CAChC,GAAIuS,CAAAA,CAAQ,SAAS,WAAW,CAAA,EAAKA,CAAAA,CAAQ,QAAA,CAASrG,CAAQ,CAAA,CAC5D,OAAOkG,CAEX,CAGF,OAAO,IACT,CAEA,SAASR,GACPjB,CAAAA,CACA,CACA,IAAM6B,CAAAA,CAAU7B,CAAAA,CAAW,qBAAA,GAC3B,OAAI6B,CAAAA,CAAQ,MAAA,CAAS,CAAA,CACAA,CAAAA,CAAQA,CAAAA,CAAQ,OAAS,CAAC,CAAA,CAC3B,aAAA,EAAc,CAAI,CAAA,CAE/B,CACT,CAEA,SAASV,EAAAA,CACPnB,CAAAA,CACAK,CAAAA,CACA,CAEA,IAAMyB,EAAc9B,CAAAA,CAAW,oBAAA,CAC7B2B,UAAAA,CAAW,iBACb,CAAA,CAEA,IAAA,IAAWI,KAAWD,CAAAA,CAAa,CAEjC,GADgBC,CAAAA,CAAQ,cAAA,EAAe,CAAE,SAAQ,GACjC,MAAA,CAAQ,SAExB,IAAMC,CAAAA,CAAgBD,CAAAA,CAAQ,aAAa,WAAW,CAAA,CACtD,GAAI,CAACC,CAAAA,CAAe,CAElB,IAAMC,CAAAA,CAAsB5B,CAAAA,CACzB,IAAK3R,CAAAA,EAAS,CAAA,EAAGA,CAAI,CAAA,SAAA,CAAW,CAAA,CAChC,IAAA,CAAK,IAAI,CAAA,CAER2R,CAAAA,CAAkB,SAAW,CAAA,CAC/B0B,CAAAA,CAAQ,YAAA,CAAa,CACnB,IAAA,CAAM,WAAA,CACN,YAAa,CAAA,CAAA,EAAIE,CAAmB,CAAA,CAAA,CACtC,CAAC,CAAA,EAGDC,EAAAA,CAAelC,CAAU,CAAA,CACzB+B,CAAAA,CAAQ,YAAA,CAAa,CACnB,IAAA,CAAM,WAAA,CACN,YAAa,CAAA,IAAA,EAAOE,CAAmB,CAAA,EAAA,CACzC,CAAC,CAAA,CAAA,CAEH,MACF,CAGA,GAAID,CAAAA,CAAc,OAAA,EAAQ,GAAML,UAAAA,CAAW,YAAA,CACzC,OAGF,IAAMQ,CAAAA,CAAUH,CAAAA,CAAc,aAAA,CAAcL,UAAAA,CAAW,YAAY,EAC7DD,CAAAA,CAAcS,CAAAA,CAAQ,cAAA,EAAe,CAE3C,GAAI,CAACT,EAAa,OAGlB,IAAMU,CAAAA,CAAoB/B,CAAAA,CAAkB,GAAA,CACzC3R,CAAAA,EAAS,GAAGA,CAAI,CAAA,SAAA,CACnB,CAAA,CAEA,GAAIgT,CAAAA,CAAY,OAAA,KAAcC,UAAAA,CAAW,aAAA,CAAe,CAEtD,IAAMU,CAAAA,CAAeX,CAAAA,CAAY,SAAQ,CAAE,KAAA,CAAM,CAAA,CAAG,EAAE,CAAA,CACtDQ,EAAAA,CAAelC,CAAU,CAAA,CACzBmC,CAAAA,CAAQ,cAAA,CACN,CAAA,KAAA,EAAQE,CAAY,CAAA,GAAA,EAAMD,EAAkB,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,CACxD,EACF,CAAA,KAAA,GAAWV,EAAY,OAAA,EAAQ,GAAMC,UAAAA,CAAW,aAAA,CAAe,CAE7D,IAAMW,EAAUZ,CAAAA,CAAY,aAAA,CAAcC,UAAAA,CAAW,aAAa,CAAA,CAC5DY,CAAAA,CAAOD,EAAQ,aAAA,EAAc,CACnC,GAAI,CAACC,CAAAA,CAAM,OAEX,IAAMC,CAAAA,CAAWD,CAAAA,CAAK,OAAA,EAAQ,CAG9B,GAAIC,CAAAA,CAAS,WAAW,KAAK,CAAA,CAAG,CAK9B,GAHuBJ,CAAAA,CAAkB,KAAA,CAAOK,GAC9CD,CAAAA,CAAS,QAAA,CAASC,CAAC,CACrB,CAAA,CAGE,SAIF,IAAMC,CAAAA,CAAcC,EAAAA,CAA0BH,CAAQ,CAAA,CAChDI,CAAAA,CAAUC,EAAAA,CACdH,EACAN,CACF,CAAA,CACAE,CAAAA,CAAQ,eAAA,CAAgB,CAAA,CAAA,EAAIM,CAAO,GAAG,EACxC,CAAA,KAAA,GAAW,iBAAA,CAAkB,IAAA,CAAKJ,CAAQ,CAAA,CAAG,CAG3C,GAAIJ,CAAAA,CAAkB,QAAA,CAASI,CAAQ,CAAA,CAErC,SAGEJ,EAAkB,MAAA,GAAW,CAAA,CAC/BE,CAAAA,CAAQ,eAAA,CAAgB,CAAA,CAAA,EAAIF,CAAAA,CAAkB,CAAC,CAAC,CAAA,CAAA,CAAG,CAAA,EAEnDF,EAAAA,CAAelC,CAAU,CAAA,CACzBsC,EAAQ,eAAA,CAAgB,CAAA,IAAA,EAAOF,CAAAA,CAAkB,IAAA,CAAK,IAAI,CAAC,IAAI,CAAA,EAEnE,CAAA,KAAA,GAAWI,CAAAA,CAAS,UAAA,CAAW,GAAG,CAAA,EAAKA,EAAS,QAAA,CAAS,GAAG,CAAA,CAAG,CAE7D,IAAMM,CAAAA,CAASC,GAA6BP,CAAQ,CAAA,CACpDN,EAAAA,CAAelC,CAAU,CAAA,CACzBsC,CAAAA,CAAQ,gBACN,CAAA,IAAA,EAAO,CAAC,GAAGQ,CAAAA,CAAQ,GAAGV,CAAiB,EAAE,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,CACrD,EACF,MAEEF,EAAAA,CAAelC,CAAU,CAAA,CACzBsC,CAAAA,CAAQ,eAAA,CACN,CAAA,IAAA,EAAOE,CAAQ,CAAA,EAAA,EAAKJ,CAAAA,CAAkB,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,CAClD,EAEJ,CACF,CACF,CAEA,SAASF,EAAAA,CAAelC,CAAAA,CAAqD,CAM3E,GAAI,CALmBA,CAAAA,CAAW,oBAAA,CAAsB3H,CAAAA,EACjCA,CAAAA,CAAK,iBAAgB,CACtB,IAAA,CAAMwI,CAAAA,EAAQA,CAAAA,CAAI,OAAA,EAAQ,GAAM,IAAI,CACzD,CAAA,CAEoB,CAEnB,IAAMmC,CAAAA,CAAchD,CAAAA,CAAW,qBAAsB3H,CAAAA,EAC3BA,CAAAA,CAAK,uBAAA,EAAwB,CAC9B,QAAA,CAAS,YAAY,CAC7C,CAAA,CAEG2K,CAAAA,CACmBA,CAAAA,CAAY,eAAA,EAAgB,CAC/B,IAAA,CAAMnC,GAAQA,CAAAA,CAAI,OAAA,EAAQ,GAAM,IAAI,CAAA,EACpDmC,CAAAA,CAAY,eAAe,IAAI,CAAA,CAIjChD,CAAAA,CAAW,oBAAA,CAAqB,CAC9B,eAAA,CAAiB,cACjB,YAAA,CAAc,CAAC,IAAI,CACrB,CAAC,EAEL,CACF,CAEA,SAAS+C,EAAAA,CAA6BE,CAAAA,CAAyB,CAI7D,IAAMC,EAAuB,EAAC,CACxBC,CAAAA,CAAyB,EAAC,CAM1BC,CAAAA,CAHUH,EAAgB,KAAA,CAAM,CAAA,CAAG,EAAE,CAAA,CAGrB,KAAA,CAAM,eAAe,EAE3C,IAAA,IAAW5B,CAAAA,IAAQ+B,CAAAA,CACjB,GAAK/B,CAAAA,CAEL,GAAIA,EAAK,UAAA,CAAW,IAAI,CAAA,EAAKA,CAAAA,CAAK,QAAA,CAAS,GAAG,EAAG,CAE/C,IAAMkB,CAAAA,CAAOlB,CAAAA,CAAK,KAAA,CAAM,CAAA,CAAG,EAAE,CAAA,CAAE,IAAA,EAAK,CAChCkB,CAAAA,EACFY,CAAAA,CAAa,IAAA,CAAKZ,CAAI,EAE1B,CAAA,KAAO,CAEL,IAAMc,CAAAA,CAAchC,CAAAA,CAAK,MAAK,CAAE,KAAA,CAAM,KAAK,CAAA,CAAE,MAAA,CAAO,OAAO,EAC3D,IAAA,IAAWiC,CAAAA,IAAcD,CAAAA,CACvBH,CAAAA,CAAW,IAAA,CAAK,CAAA,CAAA,EAAII,CAAU,CAAA,CAAA,CAAG,EAErC,CAIF,OAAO,CAAC,GAAGJ,EAAY,GAAGC,CAAY,CACxC,CAEA,SAASR,EAAAA,CAA0BY,EAAgB,CAGjD,OAAOA,CAAAA,CAAO,OAAA,CAAQ,qBAAA,CAAuB,EAAE,EAAE,OAAA,CAAQ,UAAA,CAAY,KAAK,CAC5E,CAEA,SAASV,GAA0BU,CAAAA,CAAgBC,CAAAA,CAAoB,CAErE,IAAMC,CAAAA,CAAUD,CAAAA,CAAS,KAAK,IAAI,CAAA,CAClC,OAAOD,CAAAA,CAAO,OAAA,CAAQ,KAAA,CAAO,KAAKE,CAAO,CAAA,CAAA,CAAG,CAC9C,CCveA,eAAsBC,EAAAA,CACpB1S,CAAAA,CACAd,CAAAA,CACApD,CAAAA,CAQA,CACAA,CAAAA,CAAU,CACR,SAAA,CAAW,KAAA,CACX,MAAA,CAAQ,KAAA,CACR,aAAc,KAAA,CACd,SAAA,CAAW,IAAA,CACX,GAAGA,CACL,CAAA,CAEA,IAAM6W,CAAAA,CAAkB,MAAMC,CAAAA,CAAmB1T,CAAM,CAAA,CACvD,OACEyT,GACAA,CAAAA,CAAgB,EAAA,EAChBA,CAAAA,CAAgB,EAAA,CAAG,aAAA,CAAc,GAAA,GAAQzT,EAAO,aAAA,CAAc,GAAA,CAEvD,MAAM2T,EAAAA,CAAuB7S,CAAAA,CAAYd,CAAAA,CAAQyT,EAAiB,CACvE,GAAG7W,CAAAA,CACH,QAAA,CACEkE,CAAAA,EAAY,MAAA,GAAW,GAAK,CAAC,CAACA,CAAAA,CAAW,CAAC,CAAA,CAAE,KAAA,CAAM,aAAa,CACnE,CAAC,CAAA,CAGI,MAAM8S,EAAAA,CAAqB9S,CAAAA,CAAYd,EAAQpD,CAAO,CAC/D,CAEA,eAAegX,EAAAA,CACb9S,CAAAA,CACAd,EACApD,CAAAA,CAOA,CACA,GAAI,CAACA,CAAAA,CAAQ,SAAA,EAAa,CAACkE,CAAAA,CAAW,MAAA,CACpC,OAGF,IAAM+S,GAAAA,CAAkB5W,CAAAA,CAAQ,qBAAsB,CACpD,MAAA,CAAQL,CAAAA,CAAQ,MAClB,CAAC,CAAA,EAAG,OAAM,CACNkX,CAAAA,CAAO,MAAMC,CAAAA,CAAoBjT,CAAAA,CAAYmC,CAAAA,CAAmBjD,CAAM,CAAC,CAAA,CAE3E,GAAI,CAAC8T,CAAAA,CACH,OAAAD,KAAiB,IAAA,EAAK,CACfvV,GAAAA,CAAY,IAAI,KAAA,CAAM,2CAA2C,CAAC,CAAA,CAG3E,GAAI,CACF0V,EAAAA,CAAoBF,CAAAA,CAAK,KAAA,EAAS,EAAC,CAAG9T,CAAAA,CAAO,aAAA,CAAc,GAAG,EAChE,CAAA,MAAS3B,EAAO,CACd,OAAAwV,GAAAA,EAAiB,IAAA,EAAK,CACfvV,GAAAA,CAAYD,CAAK,CAC1B,CAEAwV,GAAAA,EAAiB,OAAA,EAAQ,CA8BzB,MAAM7G,EAAmB8G,CAAAA,CAAK,YAAA,CAAcA,CAAAA,CAAK,eAAA,CAAiB9T,CAAAA,CAAQ,CACxE,OAAQpD,CAAAA,CAAQ,MAClB,CAAC,CAAA,CAMD,MAAMqX,GAAAA,CAAYH,EAAK,KAAA,CAAO9T,CAAAA,CAAQ,CACpC,SAAA,CAAWpD,CAAAA,CAAQ,SAAA,CACnB,OAAQA,CAAAA,CAAQ,MAAA,CAChB,IAAA,CAAMA,CAAAA,CAAQ,IAChB,CAAC,EAEGkX,CAAAA,CAAK,IAAA,EACP5W,CAAAA,CAAO,IAAA,CAAK4W,CAAAA,CAAK,IAAI,EAEzB,CAEA,eAAeH,EAAAA,CACb7S,CAAAA,CACAd,CAAAA,CACAyT,CAAAA,CACA7W,IAQA,CACA,GAAI,CAACA,GAAAA,CAAQ,SAAA,EAAa,CAACkE,EAAW,MAAA,CACpC,OAGF,IAAM+S,CAAAA,CAAkB5W,CAAAA,CAAQ,oBAAA,CAAsB,CACpD,MAAA,CAAQL,GAAAA,CAAQ,MAClB,CAAC,CAAA,EAAG,KAAA,GACEkX,CAAAA,CAAO,MAAMC,CAAAA,CAAoBjT,CAAAA,CAAYmC,CAAAA,CAAmBjD,CAAM,CAAC,CAAA,CAE7E,GAAI,CAAC8T,CAAAA,CACH,OAAAD,CAAAA,EAAiB,MAAK,CACfvV,GAAAA,CAAY,IAAI,KAAA,CAAM,2CAA2C,CAAC,EAG3E,GAAI,CACF0V,EAAAA,CAAoBF,CAAAA,CAAK,KAAA,EAAS,GAAI9T,CAAAA,CAAO,aAAA,CAAc,GAAG,EAChE,CAAA,MAAS3B,CAAAA,CAAO,CACd,OAAAwV,CAAAA,EAAiB,IAAA,EAAK,CACfvV,GAAAA,CAAYD,CAAK,CAC1B,CAEAwV,CAAAA,EAAiB,SAAQ,CAEzB,IAAMK,EAAyB,EAAC,CAC1BC,GAAAA,CAAyB,EAAC,CAC1BC,CAAAA,CAAyB,EAAC,CAE1BC,CAAAA,CAAcpX,CAAAA,CAAQ,wBAAwB,CAAA,EAAG,KAAA,GAIjDqX,GAAAA,CAAmBb,CAAAA,CAAgB,EAAA,CACnC1O,CAAAA,CAAkB,MAAMC,CAAAA,CAC5BsP,GACF,CAAA,CACMC,CAAAA,CAAgBC,CAAAA,CACpBxU,CAAAA,CAAO,aAAA,CAAc,GAAA,CACrBsU,IAAiB,aAAA,CAAc,EACjC,CAAA,CAiBA,GAdIR,CAAAA,CAAK,QAAA,EAAU,SACjB,MAAMW,CAAAA,CAAqBX,CAAAA,CAAK,QAAA,EAAU,MAAA,CAAQQ,GAAAA,CAAkB,CAClE,MAAA,CAAQ,IAAA,CACR,eAAA,CAAAvP,CACF,CAAC,CAAA,CACDoP,IAAa,IAAA,CACXpX,UAAAA,CAAK,QAAA,CACHwX,CAAAA,CACAD,GAAAA,CAAiB,aAAA,CAAc,cACjC,CACF,CAAA,CAAA,CAIER,CAAAA,CAAK,OAAA,CAAS,CAChB,IAAMY,EAAmB,MAAMC,EAAAA,CAAuB7T,CAAAA,CAAYd,CAAM,CAAA,CACxE,MAAMkJ,GAAc4K,CAAAA,CAAK,OAAA,CAASQ,GAAAA,CAAkB,CAClD,MAAA,CAAQ,IAAA,CACR,gBAAAvP,CAAAA,CACA,cAAA,CAAgB+O,CAAAA,CAAK,QAAA,EAAU,MAAA,CAC/B,gBAAA,CAAAY,CACF,CAAC,CAAA,CACDP,GAAAA,CAAa,IAAA,CACXpX,UAAAA,CAAK,QAAA,CAASwX,EAAeD,GAAAA,CAAiB,aAAA,CAAc,WAAW,CACzE,EACF,CAGIR,EAAK,GAAA,GACP,MAAMjO,EAAAA,CAAUiO,CAAAA,CAAK,GAAA,CAAKQ,GAAAA,CAAkB,CAC1C,MAAA,CAAQ,IACV,CAAC,CAAA,CACDH,GAAAA,CAAa,IAAA,CACXpX,WAAK,QAAA,CAASwX,CAAAA,CAAeD,GAAAA,CAAiB,aAAA,CAAc,WAAW,CACzE,GAIER,CAAAA,CAAK,OAAA,EACP,MAAMhG,EAAAA,CAAcgG,CAAAA,CAAK,OAAA,CAASQ,IAAkB,CAClD,MAAA,CAAQ,IACV,CAAC,CAAA,CAIH,MAAMtH,EACJ8G,CAAAA,CAAK,YAAA,CACLA,CAAAA,CAAK,eAAA,CACLQ,GAAAA,CACA,CACE,OAAQ,IACV,CACF,CAAA,CAGA,MAAMvF,EAAAA,CAAY+E,CAAAA,CAAK,MAAOQ,GAAAA,CAAkB,CAC9C,MAAA,CAAQ,IACV,CAAC,CAAA,CAGD,IAAMM,CAAAA,CAAc,IAAI,GAAA,CAExB,IAAA,IAAWC,CAAAA,IAAQf,CAAAA,CAAK,OAAS,EAAC,CAAG,CACnC,IAAMvV,CAAAA,CAAOsW,CAAAA,CAAK,MAAQ,aAAA,CACrBD,CAAAA,CAAY,GAAA,CAAIrW,CAAI,CAAA,EACvBqW,CAAAA,CAAY,IAAIrW,CAAAA,CAAM,EAAE,CAAA,CAE1BqW,CAAAA,CAAY,GAAA,CAAIrW,CAAI,CAAA,CAAG,IAAA,CAAKsW,CAAI,EAClC,CAGA,IAAA,IAAWtW,KAAQ,KAAA,CAAM,IAAA,CAAKqW,CAAAA,CAAY,IAAA,EAAM,CAAA,CAAG,CACjD,IAAME,GAAAA,CAAYF,CAAAA,CAAY,GAAA,CAAIrW,CAAI,CAAA,CAElCwW,EAAexW,CAAAA,GAAS,aAAA,CAAgBkV,CAAAA,CAAgB,EAAA,CAAKzT,CAAAA,CAE3DgV,CAAAA,CAAoBR,EACxBxU,CAAAA,CAAO,aAAA,CAAc,GAAA,CACrB+U,CAAAA,CAAa,aAAA,CAAc,EAAA,EAAMA,EAAa,aAAA,CAAc,GAC9D,EACME,CAAAA,CACH,MAAMC,EACLF,CAAAA,CACAD,CAAAA,CAAa,aAAA,CAAc,GAC7B,CAAA,EAAMA,CAAAA,CAAa,cAAc,GAAA,CAG7BI,CAAAA,CAAQ,MAAMlB,GAAAA,CAAYa,GAAAA,CAAWC,CAAAA,CAAc,CACvD,SAAA,CAAWnY,GAAAA,CAAQ,SAAA,CACnB,MAAA,CAAQ,IAAA,CACR,WAAA,CAAAyX,EACA,QAAA,CAAUzX,GAAAA,CAAQ,QAAA,CAClB,WAAA,CAAa,IAAA,CACb,IAAA,CAAMA,IAAQ,IAChB,CAAC,CAAA,CAEDsX,CAAAA,CAAa,IAAA,CACX,GAAGiB,EAAM,YAAA,CAAa,GAAA,CAAKN,CAAAA,EACzB9X,UAAAA,CAAK,QAAA,CAASiY,CAAAA,CAAmBjY,WAAK,IAAA,CAAKkY,CAAAA,CAAaJ,CAAI,CAAC,CAC/D,CACF,EACAV,GAAAA,CAAa,IAAA,CACX,GAAGgB,CAAAA,CAAM,YAAA,CAAa,GAAA,CAAKN,GACzB9X,UAAAA,CAAK,QAAA,CAASiY,CAAAA,CAAmBjY,UAAAA,CAAK,IAAA,CAAKkY,CAAAA,CAAaJ,CAAI,CAAC,CAC/D,CACF,CAAA,CACAT,CAAAA,CAAa,IAAA,CACX,GAAGe,CAAAA,CAAM,YAAA,CAAa,GAAA,CAAKN,CAAAA,EACzB9X,UAAAA,CAAK,QAAA,CAASiY,EAAmBjY,UAAAA,CAAK,IAAA,CAAKkY,CAAAA,CAAaJ,CAAI,CAAC,CAC/D,CACF,EACF,CAgBA,GAdAR,CAAAA,EAAa,OAAA,EAAQ,CAGrBH,EAAa,IAAA,EAAK,CAClBC,GAAAA,CAAa,IAAA,EAAK,CAClBC,CAAAA,CAAa,MAAK,CAGd,EADoBF,CAAAA,CAAa,MAAA,EAAUC,GAAAA,CAAa,MAAA,CAAA,EACpC,CAACC,CAAAA,CAAa,MAAA,EACpCnX,CAAAA,CAAQ,mBAAA,CAAqB,CAC3B,MAAA,CAAQL,IAAQ,MAClB,CAAC,CAAA,EAAG,IAAA,EAAK,CAGPsX,CAAAA,CAAa,OAAQ,CACvBjX,CAAAA,CACE,CAAA,QAAA,EAAWiX,CAAAA,CAAa,MAAM,CAAA,CAAA,EAC5BA,EAAa,MAAA,GAAW,CAAA,CAAI,MAAA,CAAS,OACvC,CAAA,CAAA,CAAA,CACA,CACE,OAAQtX,GAAAA,CAAQ,MAClB,CACF,CAAA,EAAG,OAAA,EAAQ,CACX,QAAWiY,CAAAA,IAAQX,CAAAA,CACjBhX,CAAAA,CAAO,GAAA,CAAI,CAAA,IAAA,EAAO2X,CAAI,EAAE,EAE5B,CAEA,GAAIV,GAAAA,CAAa,MAAA,CAAQ,CACvBlX,EACE,CAAA,QAAA,EAAWkX,GAAAA,CAAa,MAAM,CAAA,CAAA,EAC5BA,GAAAA,CAAa,MAAA,GAAW,EAAI,MAAA,CAAS,OACvC,CAAA,CAAA,CAAA,CACA,CACE,MAAA,CAAQvX,GAAAA,CAAQ,MAClB,CACF,CAAA,EAAG,IAAA,EAAK,CACR,IAAA,IAAWiY,CAAAA,IAAQV,IACjBjX,CAAAA,CAAO,GAAA,CAAI,CAAA,IAAA,EAAO2X,CAAI,CAAA,CAAE,EAE5B,CAEA,GAAIT,CAAAA,CAAa,MAAA,CAAQ,CACvBnX,CAAAA,CACE,CAAA,QAAA,EAAWmX,EAAa,MAAM,CAAA,CAAA,EAC5BD,GAAAA,CAAa,MAAA,GAAW,CAAA,CAAI,MAAA,CAAS,OACvC,CAAA,gCAAA,CAAA,CACA,CACE,MAAA,CAAQvX,GAAAA,CAAQ,MAClB,CACF,GAAG,IAAA,EAAK,CACR,IAAA,IAAWiY,CAAAA,IAAQT,CAAAA,CACjBlX,CAAAA,CAAO,IAAI,CAAA,IAAA,EAAO2X,CAAI,CAAA,CAAE,EAE5B,CAEIf,CAAAA,CAAK,MACP5W,CAAAA,CAAO,IAAA,CAAK4W,EAAK,IAAI,EAEzB,CAEA,eAAea,EAAAA,CACb7T,CAAAA,CACAd,CAAAA,CACA,CACA,IAAM/B,EAAS,MAAMsF,CAAAA,CAAiBzC,CAAAA,CAAY,CAAE,MAAA,CAAAd,CAAO,CAAC,CAAA,CAG5D,OAFgB5B,GAAAA,CAAE,KAAA,CAAMgX,CAAkB,CAAA,CAAE,MAAMnX,CAAM,CAAA,CAEzC,IAAA,CACZoX,CAAAA,EACCA,CAAAA,CAAU,IAAA,GAAS,kBACnBA,CAAAA,CAAU,IAAA,GAAS,gBAAA,EACnBA,CAAAA,CAAU,IAAA,GAAS,eAAA,EACnBA,EAAU,IAAA,GAAS,eACvB,CACF,CAEA,SAASrB,EAAAA,CACPmB,EACAtV,CAAAA,CACA,CACA,IAAA,IAAWgV,CAAAA,IAAQM,CAAAA,CACjB,GAAKN,GAAM,MAAA,EAIP,CAAC5P,EAAAA,CAAa4P,CAAAA,CAAK,MAAA,CAAQhV,CAAG,EAChC,MAAM,IAAI,KAAA,CACR,CAAA,8BAAA,EAAiCgV,CAAAA,CAAK,MAAM,8CAC9C,CAGN,CClYO,IAAMS,EAAAA,CAAmBlX,GAAAA,CAAE,MAAA,CAAO,CACvC,UAAA,CAAYA,GAAAA,CAAE,MAAMA,GAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CACzC,IAAKA,GAAAA,CAAE,OAAA,EAAQ,CACf,SAAA,CAAWA,GAAAA,CAAE,OAAA,GACb,GAAA,CAAKA,GAAAA,CAAE,MAAA,EAAO,CACd,GAAA,CAAKA,GAAAA,CAAE,SAAQ,CACf,IAAA,CAAMA,GAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GACjB,MAAA,CAAQA,GAAAA,CAAE,OAAA,EAAQ,CAClB,MAAA,CAAQA,GAAAA,CAAE,SAAQ,CAAE,QAAA,EAAS,CAC7B,YAAA,CAAcA,GAAAA,CAAE,OAAA,EAClB,CAAC,CAAA,CAEYmX,EAAAA,CAAM,IAAIzS,OAAAA,EAAQ,CAC5B,KAAK,KAAK,CAAA,CACV,WAAA,CAAY,iCAAiC,CAAA,CAC7C,QAAA,CAAS,kBAAmB,uCAAuC,CAAA,CACnE,MAAA,CAAO,WAAA,CAAa,2BAAA,CAA6B,KAAK,EACtD,MAAA,CAAO,iBAAA,CAAmB,2BAAA,CAA6B,KAAK,CAAA,CAC5D,MAAA,CACC,kBACA,2DAAA,CACA,OAAA,CAAQ,GAAA,EACV,CAAA,CACC,MAAA,CAAO,YAAa,8BAAA,CAAgC,KAAK,CAAA,CACzD,MAAA,CAAO,mBAAA,CAAqB,mCAAmC,EAC/D,MAAA,CAAO,cAAA,CAAgB,cAAA,CAAgB,KAAK,CAAA,CAC5C,MAAA,CACC,YACA,oDAAA,CACA,KACF,CAAA,CACC,MAAA,CACC,cAAA,CACA,2DACF,EACC,MAAA,CAAO,iBAAA,CAAmB,gCAAA,CAAkC,IAAI,CAAA,CAChE,MAAA,CAAO,qBAAsB,uCAAuC,CAAA,CACpE,MAAA,CAAO,MAAOhC,CAAAA,CAAYiC,CAAAA,GAAS,CAClC,GAAI,CACF,IAAMnG,GAAAA,CAAU0Y,EAAAA,CAAiB,KAAA,CAAM,CACrC,UAAA,CAAAxU,CAAAA,CACA,GAAA,CAAK/D,UAAAA,CAAK,OAAA,CAAQgG,CAAAA,CAAK,GAAG,CAAA,CAC1B,GAAGA,CACL,CAAC,CAAA,CAED,MAAMhD,EAAanD,GAAAA,CAAQ,GAAG,CAAA,CAE9B,IAAI4Y,GAAAA,CAAgB,MAAM3R,EAAUjH,GAAAA,CAAQ,GAAG,CAAA,CAC1C4Y,GAAAA,GACHA,GAAAA,CAAgBtS,CAAAA,CAAa,CAC3B,KAAA,CAAO,UAAA,CACP,aAAA,CAAe,CACb,GAAA,CAAKtG,GAAAA,CAAQ,GACf,CACF,CAAC,CAAA,CAAA,CAIH,IAAM6Y,GAAAA,CAA8B,CAClC,WACA,QAAA,CACA,SAAA,CACA,MAAA,CACA,WACF,CAAA,CACMC,CAAAA,CAA0B,CAAC,OAAA,CAAS,QAAQ,CAAA,CAElD,GAAI5U,CAAAA,CAAW,MAAA,CAAS,GAClB0U,GAAAA,EAAe,KAAA,EACSE,CAAAA,CAAwB,IAAA,CAAMC,CAAAA,EACtDH,GAAAA,EAAe,MAAM,UAAA,CAAWG,CAAM,CACxC,CAAA,CAEuB,CACrB,IAAMC,EAAuB9U,CAAAA,CAAW,MAAA,CACrCuU,CAAAA,EACCI,GAAAA,CAA4B,IAAA,CAAME,CAAAA,EAChCN,EAAU,UAAA,CAAWM,CAAM,CAC7B,CACJ,CAAA,CAEIC,CAAAA,CAAqB,SACvB1Y,CAAAA,CAAO,IAAA,CACL,CAAA,IAAA,EAAOC,CAAAA,CAAY,IAAA,CACjByY,CAAAA,CACG,IAAKP,CAAAA,EAAsBA,CAAS,CAAA,CACpC,IAAA,CAAK,IAAI,CACd,CAAC,CAAA,wCAAA,EAA2ClY,CAAAA,CAAY,IAAA,CACtDqY,GAAAA,CAAc,KAChB,CAAC,mCACH,CAAA,CACAtY,CAAAA,CAAO,IAAA,CACL,mGACF,CAAA,CACAA,CAAAA,CAAO,OAAM,CACb,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,EAElB,CAIJ,IAAI2Y,CAAAA,CAAmB,CAAA,CAAA,CACvB,GAAI/U,CAAAA,CAAW,MAAA,CAAS,CAAA,CAAG,CACzB,GAAM,CAAE,MAAA,CAAQwB,CAAAA,CAAe,aAAA,CAAAwT,CAAc,EAC3C,MAAMnU,CAAAA,CAAyBb,CAAAA,CAAY0U,GAAAA,CAAe,CACxD,MAAA,CAAQ5Y,IAAQ,MAAA,CAChB,SAAA,CAAW,CAAA,CACb,CAAC,CAAA,CACH4Y,GAAAA,CAAgBlT,EAChBuT,CAAAA,CAAmBC,CAAAA,CAAc,MAAA,CAAS,EAC5C,CAEA,IAAIC,EACAC,CAAAA,CAAyB,CAAA,CAAA,CAC7B,GAAIlV,CAAAA,CAAW,MAAA,CAAS,CAAA,CAAG,CACzB,GAAM,CAACmV,CAAY,CAAA,CAAI,MAAM1S,CAAAA,CAAiB,CAACzC,CAAAA,CAAW,CAAC,CAAC,CAAA,CAAG,CAC7D,MAAA,CAAQ0U,GACV,CAAC,CAAA,CAKD,GAJAO,CAAAA,CAAWE,CAAAA,EAAc,IAAA,CACzBD,EACED,CAAAA,GAAa,gBAAA,EAAoBA,CAAAA,GAAa,gBAAA,CAE5CG,CAAAA,CAAwBD,CAAY,EAAG,CACzC,MAAMzC,EAAAA,CAAc1S,CAAAA,CAAY0U,GAAAA,CAAe,CAC7C,GAAG5Y,GAAAA,CACH,SAAA,CAAWoZ,CACb,CAAC,CAAA,CACD,MACF,CAEA,GACE,CAACpZ,GAAAA,CAAQ,GAAA,GACRmZ,CAAAA,GAAa,gBAAA,EAAoBA,IAAa,gBAAA,CAAA,CAC/C,CACA7Y,CAAAA,CAAO,KAAA,EAAM,CACb,GAAM,CAAE,OAAA,CAAAiZ,CAAQ,CAAA,CAAI,MAAM1X,EAAAA,CAAQ,CAChC,KAAM,SAAA,CACN,IAAA,CAAM,SAAA,CACN,OAAA,CAAStB,CAAAA,CAAY,IAAA,CACnB,kCAAkC4Y,CAAAA,CAAS,OAAA,CACzC,WAAA,CACA,EACF,CAAC,CAAA;AAAA,oEAAA,CACH,CACF,CAAC,CAAA,CACII,CAAAA,GACHjZ,CAAAA,CAAO,KAAA,EAAM,CACbA,CAAAA,CAAO,GAAA,CAAI,yBAAyB,CAAA,CACpCA,CAAAA,CAAO,KAAA,EAAM,CACb,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,EAElB,CACF,CAOA,GALKN,GAAAA,CAAQ,UAAA,EAAY,MAAA,GACvBA,GAAAA,CAAQ,UAAA,CAAa,MAAMwZ,EAAAA,CAA4BxZ,GAAO,CAAA,CAAA,CAAA,CAG5C,MAAMU,CAAAA,CAAeV,GAAAA,CAAQ,GAAG,CAAA,GACnC,eAAA,GAAoB,IAAA,CAAM,CACzC,IAAMyZ,CAAAA,CAAuBC,GAAAA,CAAsB,MAAA,CAAQjB,CAAAA,EACzDzY,GAAAA,CAAQ,UAAA,EAAY,QAAA,CAASyY,CAAAA,CAAU,IAAI,CAC7C,CAAA,CAEIgB,CAAAA,EAAsB,MAAA,GACxBnZ,CAAAA,CAAO,KAAA,EAAM,CACbmZ,CAAAA,CAAqB,OAAA,CAAShB,CAAAA,EAAc,CAC1CnY,CAAAA,CAAO,KAAKC,CAAAA,CAAY,IAAA,CAAKkY,CAAAA,CAAU,OAAO,CAAC,EACjD,CAAC,CAAA,CACDnY,CAAAA,CAAO,KAAA,EAAM,CACb,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,EAElB,CACA,OAAA,CAAQ,GAAA,CAAI,CACV,OAAA,CAAAN,GACF,CAAC,CAAA,CAED,MAAM6G,EAAAA,CAAQ,CACZ,GAAA,CAAK7G,GAAAA,CAAQ,GAAA,CACb,GAAA,CAAK,CAAA,CAAA,CACL,KAAA,CAAO,CAAA,CAAA,CACP,QAAA,CAAU,CAAA,CAAA,CACV,aAAA,CAAe,CAAA,CAAA,CACf,MAAA,CAAQA,GAAAA,CAAQ,MAAA,EAAU,CAACiZ,CAAAA,CAC3B,YAAA,CAAc,CAAA,CAAA,CACd,MAAA,CAAQjZ,GAAAA,CAAQ,MAAA,CAChB,YAAA,CAAcA,GAAAA,CAAQ,YAAA,CACtB,SAAA,CAAWoZ,CAAAA,CACX,SAAA,CAAWA,CAAAA,CAAyB,KAAA,CAAA,CAAY,SAAA,CAChD,UAAA,CAAYpZ,GAAAA,CAAQ,UACtB,CAAC,EAgHH,CAAA,MAASyB,CAAAA,CAAO,CACd,QAAQ,GAAA,CAAI,WAAW,CAAA,CAEvBnB,CAAAA,CAAO,KAAA,EAAM,CACboB,GAAAA,CAAYD,CAAK,EACnB,CAAA,OAAE,CACAqF,CAAAA,GACF,CACF,CAAC,CAAA,CAEH,eAAe0S,EAAAA,CACbxZ,CAAAA,CACA,CACA,IAAMiF,CAAAA,CAAgB,MAAM0U,CAAAA,EAAuB,CACnD,GAAI,CAAC1U,CAAAA,CACH,OAAA3E,CAAAA,CAAO,KAAA,EAAM,CACboB,GAAAA,CAAY,IAAI,KAAA,CAAM,iCAAiC,CAAC,CAAA,CACjD,EAAC,CAGV,GAAI1B,CAAAA,CAAQ,GAAA,CACV,OAAOiF,CAAAA,CACJ,GAAA,CAAK2U,CAAAA,EAAUA,CAAAA,CAAM,IAAI,CAAA,CACzB,MAAA,CACEnB,CAAAA,EAAc,CAACiB,GAAAA,CAAsB,IAAA,CAAMG,CAAAA,EAAMA,CAAAA,CAAE,IAAA,GAASpB,CAAS,CACxE,CAAA,CAGJ,GAAIzY,CAAAA,CAAQ,UAAA,EAAY,OACtB,OAAOA,CAAAA,CAAQ,UAAA,CAGjB,GAAM,CAAE,UAAA,CAAAkE,CAAW,CAAA,CAAI,MAAMrC,EAAAA,CAAQ,CACnC,IAAA,CAAM,aAAA,CACN,IAAA,CAAM,YAAA,CACN,OAAA,CAAS,yCAAA,CACT,IAAA,CAAM,oDAAA,CACN,YAAA,CAAc,KAAA,CACd,OAAA,CAASoD,CAAAA,CACN,MAAA,CACE2U,CAAAA,EACCA,CAAAA,CAAM,IAAA,GAAS,aAAA,EACf,CAACF,GAAAA,CAAsB,IAAA,CACpBjB,CAAAA,EAAcA,CAAAA,CAAU,IAAA,GAASmB,CAAAA,CAAM,IAC1C,CACJ,CAAA,CACC,GAAA,CAAKA,CAAAA,GAAW,CACf,KAAA,CAAOA,CAAAA,CAAM,IAAA,CACb,KAAA,CAAOA,CAAAA,CAAM,IAAA,CACb,QAAA,CAAU5Z,CAAAA,CAAQ,GAAA,CAAM,IAAA,CAAOA,CAAAA,CAAQ,UAAA,EAAY,QAAA,CAAS4Z,CAAAA,CAAM,IAAI,CACxE,CAAA,CAAE,CACN,CAAC,CAAA,CAEI1V,CAAAA,EAAY,MAAA,GACf5D,CAAAA,CAAO,KAAK,kCAAkC,CAAA,CAC9CA,CAAAA,CAAO,IAAA,CAAK,EAAE,CAAA,CACd,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGhB,IAAMe,GAAAA,CAASG,GAAAA,CAAE,KAAA,CAAMA,GAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,SAAA,CAAU0C,CAAU,CAAA,CACvD,OAAK7C,GAAAA,CAAO,OAAA,CAKLA,GAAAA,CAAO,IAAA,EAJZf,CAAAA,CAAO,KAAA,CAAM,EAAE,CAAA,CACfoB,GAAAA,CAAY,IAAI,KAAA,CAAM,yCAAyC,CAAC,CAAA,CACzD,EAAC,CAGZ,CC/XA,eAAsBoY,EAAAA,CACpB9Z,CAAAA,CACA,CACA,IAAMC,CAAAA,CAAkC,EAAC,CAEnC8Z,CAAAA,CAAe,CACnB,GAAA,CAAK/Z,CAAAA,CAAQ,GAAA,CACb,aAAcG,UAAAA,CAAK,OAAA,CAAQH,CAAAA,CAAQ,GAAA,CAAKA,CAAAA,CAAQ,YAAY,CAAA,CAC5D,SAAA,CAAWG,UAAAA,CAAK,OAAA,CAAQH,CAAAA,CAAQ,GAAA,CAAKA,CAAAA,CAAQ,SAAS,CACxD,CAAA,CAGA,OAAKE,CAAAA,CAAG,UAAA,CAAW6Z,CAAAA,CAAa,YAAY,CAAA,GAC1C9Z,CAAAA,CAAc,IAA2B,CAAA,CAAI,IAAA,CAAA,CAI/C,MAAMC,CAAAA,CAAG,KAAA,CAAM6Z,CAAAA,CAAa,SAAA,CAAW,CAAE,SAAA,CAAW,IAAK,CAAC,CAAA,CAEtD,MAAA,CAAO,IAAA,CAAK9Z,CAAM,CAAA,CAAE,MAAA,CAAS,CAAA,GAC3BA,CAAAA,CAAc,IAA2B,CAAA,GAC3CK,CAAAA,CAAO,KAAA,EAAM,CACbA,CAAAA,CAAO,KAAA,CACL,CAAA,SAAA,EAAYC,CAAAA,CAAY,IAAA,CACtBwZ,CAAAA,CAAa,YACf,CAAC,CAAA,gBAAA,CACH,CAAA,CAAA,CAGFzZ,CAAAA,CAAO,KAAA,EAAM,CACb,OAAA,CAAQ,IAAA,CAAK,CAAC,GAGT,CACL,MAAA,CAAAL,CAAAA,CACA,YAAA,CAAA8Z,CACF,CACF,CClCO,IAAMC,EAAAA,CAAqBxY,GAAAA,CAAE,MAAA,CAAO,CACzC,GAAA,CAAKA,GAAAA,CAAE,MAAA,EAAO,CACd,YAAA,CAAcA,GAAAA,CAAE,MAAA,EAAO,CACvB,SAAA,CAAWA,GAAAA,CAAE,MAAA,EACf,CAAC,CAAA,CAEYyY,EAAAA,CAAQ,IAAI/T,OAAAA,EAAQ,CAC9B,IAAA,CAAK,OAAO,CAAA,CACZ,WAAA,CAAY,wCAAwC,CAAA,CACpD,QAAA,CAAS,YAAA,CAAc,4BAAA,CAA8B,iBAAiB,CAAA,CACtE,MAAA,CACC,qBAAA,CACA,sCAAA,CACA,YACF,CAAA,CACC,MAAA,CACC,iBAAA,CACA,2DAAA,CACA,OAAA,CAAQ,GAAA,EACV,CAAA,CACC,MAAA,CAAO,MAAO3B,CAAAA,CAAkB4B,IAAS,CACxC,GAAI,CACF,IAAMnG,CAAAA,CAAUga,EAAAA,CAAmB,KAAA,CAAM,CACvC,GAAA,CAAUE,CAAA,CAAA,OAAA,CAAQ/T,CAAAA,CAAK,GAAG,CAAA,CAC1B,YAAA,CAAc5B,CAAAA,CACd,SAAA,CAAW4B,CAAAA,CAAK,MAClB,CAAC,CAAA,CAEK,CAAE,YAAA,CAAA4T,GAAa,CAAA,CAAI,MAAMD,EAAAA,CAAe9Z,CAAO,CAAA,CAC/Cma,CAAAA,CAAU,MAASC,CAAA,CAAA,QAAA,CAASL,GAAAA,CAAa,aAAc,OAAO,CAAA,CAE9D1Y,GAAAA,CAASgZ,GAAAA,CAAe,SAAA,CAAU,IAAA,CAAK,KAAA,CAAMF,CAAO,CAAC,CAAA,CAEtD9Y,GAAAA,CAAO,OAAA,GACVf,CAAAA,CAAO,KAAA,CACL,CAAA,+BAAA,EAAkCC,CAAAA,CAAY,IAAA,CAC5CwZ,GAAAA,CAAa,YACf,CAAC,CAAA,CAAA,CACH,CAAA,CACA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGhB,IAAMO,CAAAA,CAAeja,CAAAA,CAAQ,sBAAsB,CAAA,CACnD,IAAA,IAAWgZ,KAAgBhY,GAAAA,CAAO,IAAA,CAAK,KAAA,CAAO,CAC5CiZ,CAAAA,CAAa,KAAA,CAAM,CAAA,SAAA,EAAYjB,CAAAA,CAAa,IAAI,CAAA,GAAA,CAAK,CAAA,CAGrDA,CAAAA,CAAa,OAAA,CACX,iDAAA,CAGF,IAAA,IAAWpB,CAAAA,IAAQoB,CAAAA,CAAa,KAAA,EAAS,EAAC,CACxCpB,CAAAA,CAAK,OAAA,CAAa,MAASmC,CAAA,CAAA,QAAA,CACpBF,CAAA,CAAA,OAAA,CAAQH,GAAAA,CAAa,GAAA,CAAK9B,CAAAA,CAAK,IAAI,CAAA,CACxC,OACF,CAAA,CAIF,IAAM5W,CAAAA,CAASmX,CAAAA,CAAmB,SAAA,CAAUa,CAAY,CAAA,CACxD,GAAI,CAAChY,CAAAA,CAAO,OAAA,CAAS,CACnBf,CAAAA,CAAO,KAAA,CACL,CAAA,gCAAA,EAAmCC,CAAAA,CAAY,IAAA,CAC7C8Y,CAAAA,CAAa,IACf,CAAC,CAAA,CAAA,CACH,CAAA,CACA,QACF,CAGA,MAASe,CAAA,CAAA,SAAA,CACFF,CAAA,CAAA,OAAA,CAAQH,GAAAA,CAAa,SAAA,CAAW,CAAA,EAAG1Y,CAAAA,CAAO,IAAA,CAAK,IAAI,OAAO,CAAA,CAC/D,IAAA,CAAK,SAAA,CAAUA,CAAAA,CAAO,IAAA,CAAM,IAAA,CAAM,CAAC,CACrC,EACF,CAGA,MAAS+Y,CAAA,CAAA,QAAA,CACPL,GAAAA,CAAa,YAAA,CACRG,CAAA,CAAA,OAAA,CAAQH,GAAAA,CAAa,SAAA,CAAW,eAAe,CACtD,CAAA,CAEAO,CAAAA,CAAa,OAAA,CAAQ,oBAAoB,EAC3C,CAAA,MAAS7Y,CAAAA,CAAO,CACdnB,CAAAA,CAAO,KAAA,EAAM,CACboB,GAAAA,CAAYD,CAAK,EACnB,CACF,CAAC,CAAA,CC/EH,IAAM8Y,EAAAA,CAAa,uBAAA,CAEbC,EAAAA,CAAmB,CACvB,IAAA,CAAM,SAAA,CACN,IAAA,CAAM,MAAA,CACN,KAAA,CAAO,gBACT,CAAA,CAIaC,GAAS,IAAIvU,OAAAA,EAAQ,CAC/B,IAAA,CAAK,QAAQ,CAAA,CACb,WAAA,CAAY,qCAAqC,CAAA,CACjD,QAAA,CAAS,QAAA,CAAU,0BAA0B,CAAA,CAC7C,MAAA,CACC,2BAAA,CACA,+CACF,CAAA,CACC,MAAA,CAAO,qBAAA,CAAuB,4BAA4B,CAAA,CAC1D,MAAA,CACC,iBAAA,CACA,2DAAA,CACA,OAAA,CAAQ,GAAA,EACV,CAAA,CACC,MAAA,CACC,WAAA,CACA,oDAAA,CACA,KACF,CAAA,CACC,MAAA,CACC,cAAA,CACA,2DACF,CAAA,CACC,MAAA,CAAO,WAAA,CAAa,2BAAA,CAA6B,IAAI,CAAA,CACrD,MAAA,CAAO,MAAOtE,CAAAA,CAAMuE,CAAAA,GAAS,CAC5B,GAAI,CAGF,GADkB,CAACvE,CAAAA,EAAQ,CAACuE,CAAAA,CAAK,QAAA,EAAY,CAACA,CAAAA,CAAK,MAAA,CACpC,CACb,IAAMuU,CAAAA,CAAYC,EAAAA,EAAmB,CACrCra,CAAAA,CAAO,IAAI,2BAA2B,CAAA,CACtCA,CAAAA,CAAO,GAAA,CACL,CAAA,qBAAA,EAAwBC,CAAAA,CAAY,IAAA,CAClCma,CACF,CAAC,CAAA,oCAAA,CACH,CAAA,CACApa,CAAAA,CAAO,KAAA,EAAM,CAEb,GAAM,CAAE,OAAA,CAAAsa,CAAQ,CAAA,CAAI,MAAM/Y,EAAAA,CAAQ,CAChC,IAAA,CAAM,SAAA,CACN,IAAA,CAAM,SAAA,CACN,OAAA,CAAS,kBAAA,CACT,OAAA,CAAS,CAAA,CACX,CAAC,CAAA,CAEG+Y,GACF,MAAMC,EAAAA,CAAKH,CAAS,CAAA,CAGtB,OAAA,CAAQ,IAAA,CAAK,CAAC,EAChB,CAGA,IAAIxZ,GAAAA,CAAcU,CAAAA,CAClB,GAAI,CAACV,GAAAA,CAAa,CAChB,GAAM,CAAE,WAAA,CAAA4Z,CAAY,CAAA,CAAI,MAAMjZ,EAAAA,CAAQ,CACpC,IAAA,CAAM,MAAA,CACN,IAAA,CAAM,aAAA,CACN,OAAA,CAAS,6BAAA,CACT,OAAA,CAASsE,CAAAA,CAAK,SAAW,CAAA,EAAGA,CAAAA,CAAK,QAAQ,CAAA,IAAA,CAAA,CAAS,QAAA,CAClD,MAAA,CAASrE,CAAAA,EAAkBA,CAAAA,CAAM,IAAA,EAAK,CACtC,QAAA,CAAWA,CAAAA,EACTA,CAAAA,CAAM,MAAA,CAAS,GAAA,CACX,0CAAA,CACA,CAAA,CACR,CAAC,CAAA,CAEIgZ,CAAAA,EACH,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAGhB5Z,GAAAA,CAAc4Z,EAChB,CAGA,IAAI7Z,CAAAA,CAAWkF,CAAAA,CAAK,QAAA,CACpB,GAAI,CAAClF,CAAAA,CAAU,CACb,GAAM,CAAE,gBAAA,CAAA8Z,CAAiB,CAAA,CAAI,MAAMlZ,EAAAA,CAAQ,CACzC,IAAA,CAAM,QAAA,CACN,IAAA,CAAM,kBAAA,CACN,OAAA,CAAS,CAAA,MAAA,EAAStB,CAAAA,CAAY,IAAA,CAC5B,UACF,CAAC,CAAA,uBAAA,CAAA,CACD,OAAA,CAAS,MAAA,CAAO,OAAA,CAAQia,EAAgB,CAAA,CAAE,GAAA,CAAI,CAAC,CAACnV,CAAAA,CAAKvD,CAAK,KAAO,CAC/D,KAAA,CAAOA,CAAAA,CACP,KAAA,CAAOuD,CACT,CAAA,CAAE,CACJ,CAAC,CAAA,CAEI0V,CAAAA,EACH,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAGhB9Z,CAAAA,CAAW8Z,EACb,CAGA,IAAMC,CAAAA,CAAe,MAAMC,EAAAA,CAAmB9U,CAAAA,CAAK,MAAA,EAAU,CAAA,CAAI,CAAA,CAE5D6U,CAAAA,EACH,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAIhB,IAAIE,CAAAA,CACAlT,CAAAA,CAEA,QAAA,GAAYgT,CAAAA,EAEdE,CAAAA,CAAUF,CAAAA,CAAa,GAAA,CAEvBhT,CAAAA,CADY,IAAI,GAAA,CAAIgT,CAAAA,CAAa,GAAG,CAAA,CACpB,YAAA,CAAa,GAAA,CAAI,WAAW,CAAA,EAAK,SAAA,GAGjDE,CAAAA,CAAUC,EAAAA,CAAaH,CAAY,CAAA,CACnChT,CAAAA,CAAYgT,CAAAA,CAAa,SAAA,CAAA,CAI3B,IAAI5U,CAAAA,CAAeC,CAAAA,CAAmB,EAAE,CAAA,CAClC,CAAE,MAAA,CAAQX,CAAc,CAAA,CAAI,MAAMX,CAAAA,CACtC,CAACmW,CAAO,CAAA,CACR9U,CAAAA,CACA,CAAE,MAAA,CAAQ,CAAA,CAAK,CACjB,CAAA,CACAA,CAAAA,CAAeV,CAAAA,CAEf,GAAM,CAAChB,CAAI,CAAA,CAAI,MAAMiC,CAAAA,CAAiB,CAACuU,CAAO,CAAA,CAAG,CAC/C,MAAA,CAAQ9U,CACV,CAAC,CAAA,CAGGgV,CAAAA,CACA1W,CAAAA,EAAM,IAAA,GAAS,eAAA,EAAmBA,CAAAA,CAAK,MAAA,GACzC0W,CAAAA,CAAqB1W,CAAAA,CAAK,MAAA,CAAA,CAG5B,IAAM1E,CAAAA,CAAU6F,EAAAA,CAAkB,KAAA,CAAM,CACtC,GAAA,CAAK1F,UAAAA,CAAK,OAAA,CAAQgG,CAAAA,CAAK,GAAG,CAAA,CAC1B,IAAA,CAAMjF,GAAAA,CACN,UAAA,CAAY,CAACga,CAAO,CAAA,CACpB,GAAA,CAAK/U,CAAAA,CAAK,GAAA,CACV,QAAA,CAAU,CAAA,CAAA,CACV,KAAA,CAAO,CAAA,CAAA,CACP,MAAA,CAAQ,CAAA,CAAA,CACR,YAAA,CAAc,GACd,MAAA,CAAQA,CAAAA,CAAK,MAAA,CACb,YAAA,CAAc,CAAA,CAAA,CACd,QAAA,CAAAlF,CAAAA,CACA,SAAA,CAAA+G,CAAAA,CACA,SAAA,CAAW,CAAA,CAAA,CACX,kBAAA,CAAAoT,CAAAA,CACA,aAAA,CAAe,CAAA,CACjB,CAAC,CAAA,CAEKhY,CAAAA,CAAS,MAAMyD,EAAAA,CAAQ7G,CAAO,CAAA,CAGpC,GAAIoD,CAAAA,CAAQ,CACV,MAAMwT,EAAAA,CAAc,CAAC,mBAAmB,CAAA,CAAGxT,CAAAA,CAAQ,CACjD,UAAW,CAAA,CAAA,CACX,MAAA,CAAQ,CAAA,CAAA,CACR,SAAA,CAAW,CAAA,CACb,CAAC,CAAA,CAED,IAAMiY,CAAAA,CAAgBC,EAAAA,CAAiBra,CAAoB,CAAA,CACvDoa,CAAAA,CAAc,MAAA,CAAS,CAAA,EACzB,MAAMhE,GAAAA,CAAYgE,CAAAA,CAAejY,CAAAA,CAAQ,CACvC,SAAA,CAAW,CAAA,CAAA,CACX,MAAA,CAAQ,CAAA,CACV,CAAC,EAEL,CAEA9C,CAAAA,CAAO,GAAA,CACL,CAAA,EAAGC,CAAAA,CAAY,OAAA,CACb,UACF,CAAC,CAAA;AAAA,2BAAA,CACH,CAAA,CACAD,CAAAA,CAAO,KAAA,GACT,OAASmB,CAAAA,CAAO,CACdnB,CAAAA,CAAO,KAAA,EAAM,CACboB,GAAAA,CAAYD,CAAK,EACnB,QAAE,CACAqF,CAAAA,GACF,CACF,CAAC,CAAA,CAEH,SAASqU,EAAAA,CAAaI,EAAgB,CACpC,IAAMrR,CAAAA,CAAS,IAAI,eAAA,CAAgB,CACjC,IAAA,CAAMqR,CAAAA,CAAO,KACb,KAAA,CAAOA,CAAAA,CAAO,KAAA,CACd,SAAA,CAAWA,CAAAA,CAAO,SAAA,CAClB,KAAA,CAAOA,CAAAA,CAAO,MACd,WAAA,CAAaA,CAAAA,CAAO,WAAA,CACpB,IAAA,CAAMA,CAAAA,CAAO,IAAA,CACb,UAAA,CAAYA,CAAAA,CAAO,WACnB,SAAA,CAAWA,CAAAA,CAAO,SAAA,CAClB,MAAA,CAAQA,CAAAA,CAAO,MACjB,CAAC,CAAA,CAED,OAAO,CAAA,EAAGC,EAAAA,EAAkB,CAAA,CAAA,EAAItR,EAAO,QAAA,EAAU,CAAA,CACnD,CAEA,eAAe+Q,EAAAA,CAAmBQ,CAAAA,CAA6B,CAE7D,GAAIA,CAAAA,GAAc,IAAA,CAAM,CACtB,IAAMC,EAAU,MAAMC,EAAAA,EAAW,CAE3B,CAAE,cAAA,CAAAC,CAAe,CAAA,CAAI,MAAM/Z,GAAQ,CACvC,IAAA,CAAM,QAAA,CACN,IAAA,CAAM,gBAAA,CACN,OAAA,CAAS,CAAA,MAAA,EAAStB,CAAAA,CAAY,KAAK,QAAQ,CAAC,CAAA,uBAAA,CAAA,CAC5C,OAAA,CAAS,CACP,GAAGmb,CAAAA,CAAQ,GAAA,CAAKH,CAAAA,GAAY,CAC1B,KAAA,CAAOA,CAAAA,CAAO,KAAA,CACd,WAAA,CAAaA,CAAAA,CAAO,WAAA,CACpB,KAAA,CAAOA,CAAAA,CAAO,IAChB,CAAA,CAAE,CAAA,CACF,CACE,KAAA,CAAO,QAAA,CACP,WAAA,CAAa,yCAAA,CACb,KAAA,CAAO,QACT,CACF,CACF,CAAC,CAAA,CAED,GAAI,CAACK,CAAAA,CACH,OAAO,KAGT,GAAIA,CAAAA,GAAmB,QAAA,CAAU,CAC/B,IAAMC,GAAAA,CAAMlB,EAAAA,EAAmB,CAC/B,OAAAra,EAAO,IAAA,CAAK;AAAA,QAAA,EAAaC,CAAAA,CAAY,IAAA,CAAKsb,GAAG,CAAC,CAAA;AAAA,CAAuB,CAAA,CACrE,MAAMhB,EAAAA,CAAKgB,GAAG,EACP,IACT,CAEA,OAAOH,CAAAA,CAAQ,IAAA,CAAMjR,GAAMA,CAAAA,CAAE,IAAA,GAASmR,CAAc,CAAA,EAAK,IAC3D,CAGA,GAAI,OAAOH,GAAc,QAAA,CAAU,CAEjC,GAAIK,GAAAA,CAAML,CAAS,EACjB,OAAO,CAAE,OAAQ,IAAA,CAAM,GAAA,CAAKA,CAAU,CAAA,CAIxC,IAAMF,EAAS,MAAMQ,EAAAA,CAAUN,CAAS,CAAA,CAExC,GAAI,CAACF,CAAAA,CAAQ,CAEX,IAAMS,GAAAA,CAAAA,CADU,MAAML,IAAW,EACL,GAAA,CAAKlR,GAAMA,CAAAA,CAAE,IAAI,EAAE,IAAA,CAAK,IAAI,EACxDnK,CAAAA,CAAO,KAAA,CACL,WAAWmb,CAAS,CAAA,gCAAA,EAAmCO,GAAW,CAAA,CACpE,CAAA,CACA,QAAQ,IAAA,CAAK,CAAC,EAChB,CAEA,OAAOT,CACT,CAEA,OAAO,IACT,CAEA,SAASD,GAAiBra,CAAAA,CAAoB,CAC5C,OAAQA,CAAAA,EACN,KAAK,MAAA,CACH,OAAO,CACL,CACE,IAAA,CAAM,gBACN,IAAA,CAAM,aAAA,CACN,MAAA,CAAQ,aAAA,CACR,OAAA,CAASgb,EAAAA,CAAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA,CAQX,CACF,CAAA,CACF,KAAK,MAAA,CACH,OAAO,CACL,CACE,IAAA,CAAM,eAAA,CACN,IAAA,CAAM,cAAA,CACN,MAAA,CAAQ,eACR,OAAA,CAASA,EAAAA,CAAAA;;AAAA;AAAA;AAAA;AAAA,CAMX,CACF,CAAA,CACF,KAAK,OAAA,CACH,OAAO,CACL,CACE,IAAA,CAAM,eAAA,CACN,IAAA,CAAM,sBAAA,CACN,MAAA,CAAQ,uBACR,OAAA,CAASA,EAAAA,CAAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAWX,CACF,CAAA,CACF,QACE,OAAO,EACX,CACF,CAEA,SAAStB,EAAAA,EAAqB,CAC5B,OAAO,CAAA,EAAGJ,EAAU,SACtB,CAEA,SAASiB,IAAmB,CAC1B,OAAO,CAAA,EAAGjB,EAAU,OACtB,CCnVA,IAAM2B,EAAAA,CAAsB1a,GAAAA,CAAE,OAAO,CACnC,SAAA,CAAWA,IAAE,MAAA,EAAO,CAAE,QAAA,EAAS,CAC/B,IAAKA,GAAAA,CAAE,OAAA,GACP,GAAA,CAAKA,GAAAA,CAAE,QAAO,CACd,IAAA,CAAMA,GAAAA,CAAE,MAAA,GAAS,QAAA,EACnB,CAAC,CAAA,CAEY2a,EAAAA,CAAO,IAAIjW,OAAAA,EAAQ,CAC7B,KAAK,MAAM,CAAA,CACX,YAAY,wCAAwC,CAAA,CACpD,SAAS,aAAA,CAAe,oBAAoB,EAC5C,MAAA,CAAO,WAAA,CAAa,2BAAA,CAA6B,KAAK,EACtD,MAAA,CACC,iBAAA,CACA,4DACA,OAAA,CAAQ,GAAA,EACV,CAAA,CACC,MAAA,CAAO,MAAOtE,CAAAA,CAAMuE,IAAS,CAC5B,GAAI,CACF,IAAMnG,GAAAA,CAAUkc,GAAoB,KAAA,CAAM,CACxC,SAAA,CAAWta,CAAAA,CACX,GAAGuE,CACL,CAAC,EAEKlD,GAAAA,CAAM9C,UAAAA,CAAK,QAAQH,GAAAA,CAAQ,GAAG,EAE/ByD,UAAAA,CAAWR,GAAG,IACjB3C,CAAAA,CAAO,KAAA,CAAM,YAAY2C,GAAG,CAAA,kCAAA,CAAoC,EAChE,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGhB,IAAMG,CAAAA,CAAS,MAAM6D,EAAUhE,GAAG,CAAA,CAC7BG,IACH9C,CAAAA,CAAO,IAAA,CACL,wCAAwCC,CAAAA,CAAY,OAAA,CAClD,MACF,CAAC,CAAA,kCAAA,CACH,EACA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGhB,IAAM0E,CAAAA,CAAgB,MAAM0U,GAAuB,CAOnD,GALK1U,IACHvD,GAAAA,CAAY,IAAI,MAAM,iCAAiC,CAAC,EACxD,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGZ,CAAC1B,IAAQ,SAAA,CAAW,CACtB,IAAMoc,CAAAA,CAAYhZ,CAAAA,CAAO,aAAA,CAAc,UAAA,CAGjCiZ,EAAoBpX,CAAAA,CAAc,MAAA,CAAQP,GAAS,CACvD,IAAA,IAAWuT,KAAQvT,CAAAA,CAAK,KAAA,EAAS,EAAC,CAAG,CACnC,IAAMd,CAAAA,CAAWzD,WAAK,OAAA,CACpBic,CAAAA,CACA,OAAOnE,CAAAA,EAAS,QAAA,CAAWA,CAAAA,CAAOA,CAAAA,CAAK,IACzC,CAAA,CACA,GAAIxU,WAAWG,CAAQ,CAAA,CACrB,OAAO,CAAA,CAEX,CAEA,OAAO,CAAA,CACT,CAAC,EAGK0Y,CAAAA,CAAwB,GAC9B,IAAA,IAAW7D,CAAAA,IAAa4D,EAAmB,CACzC,IAAME,CAAAA,CAAU,MAAMC,GAAc/D,CAAAA,CAAWrV,CAAM,EACjDmZ,CAAAA,CAAQ,MAAA,EACVD,EAAsB,IAAA,CAAK,CACzB,KAAM7D,CAAAA,CAAU,IAAA,CAChB,QAAA8D,CACF,CAAC,EAEL,CAEKD,CAAAA,CAAsB,SACzBhc,CAAAA,CAAO,IAAA,CAAK,mBAAmB,CAAA,CAC/B,QAAQ,IAAA,CAAK,CAAC,GAGhBA,CAAAA,CAAO,IAAA,CAAK,kDAAkD,CAAA,CAC9D,IAAA,IAAWmY,KAAa6D,CAAAA,CAAuB,CAC7Chc,EAAO,IAAA,CAAK,CAAA,EAAA,EAAKmY,EAAU,IAAI,CAAA,CAAE,EACjC,IAAA,IAAWgE,CAAAA,IAAUhE,CAAAA,CAAU,OAAA,CAC7BnY,EAAO,IAAA,CAAK,CAAA,IAAA,EAAOmc,EAAO,QAAQ,CAAA,CAAE,EAExC,CACAnc,CAAAA,CAAO,KAAA,EAAM,CACbA,EAAO,IAAA,CACL,CAAA,IAAA,EAAOC,EAAY,OAAA,CAAQ,kBAAkB,CAAC,CAAA,oBAAA,CAChD,CAAA,CACA,OAAA,CAAQ,IAAA,CAAK,CAAC,EAChB,CAGA,IAAMkY,CAAAA,CAAYxT,CAAAA,CAAc,KAC7BP,CAAAA,EAASA,CAAAA,CAAK,OAAS1E,GAAAA,CAAQ,SAClC,EAEKyY,CAAAA,GACHnY,CAAAA,CAAO,MACL,CAAA,cAAA,EAAiBC,CAAAA,CAAY,QAC3BP,GAAAA,CAAQ,SACV,CAAC,CAAA,gBAAA,CACH,EACA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGhB,IAAMuc,EAAU,MAAMC,EAAAA,CAAc/D,EAAWrV,CAAM,CAAA,CAEhDmZ,EAAQ,MAAA,GACXjc,CAAAA,CAAO,KAAK,CAAA,qBAAA,EAAwBN,GAAAA,CAAQ,SAAS,CAAA,CAAA,CAAG,CAAA,CACxD,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGhB,IAAA,IAAWyc,KAAUF,CAAAA,CACnBjc,CAAAA,CAAO,KAAK,CAAA,EAAA,EAAKmc,CAAAA,CAAO,QAAQ,CAAA,CAAE,CAAA,CAClC,MAAMC,EAAAA,CAAUD,CAAAA,CAAO,KAAK,CAAA,CAC5Bnc,CAAAA,CAAO,KAAK,EAAE,EAElB,CAAA,MAASmB,CAAAA,CAAO,CACdC,GAAAA,CAAYD,CAAK,EACnB,CACF,CAAC,EAEH,eAAe+a,EAAAA,CACb/D,CAAAA,CACArV,CAAAA,CACA,CACA,IAAMuZ,CAAAA,CAAU,MAAMC,EAAAA,CAAUxZ,CAAAA,CAAO,MAAO,CAACqV,CAAS,CAAC,CAAA,CACnDzQ,EAAY,MAAM6U,EAAAA,CAAqBzZ,EAAO,QAAA,CAAS,SAAS,EAEtE,GAAI,CAACuZ,EACH,OAAO,GAGT,IAAMJ,CAAAA,CAAU,EAAC,CAEjB,IAAA,IAAW7X,KAAQiY,CAAAA,CAAS,CAC1B,IAAMP,CAAAA,CAAY,MAAMU,EAAAA,CAAkB1Z,CAAAA,CAAQsB,CAAI,CAAA,CAEtD,GAAK0X,EAIL,IAAA,IAAWnE,CAAAA,IAAQvT,CAAAA,CAAK,KAAA,EAAS,EAAC,CAAG,CACnC,IAAMd,CAAAA,CAAWzD,UAAAA,CAAK,QACpBic,CAAAA,CACA,OAAOnE,CAAAA,EAAS,QAAA,CAAWA,EAAOA,CAAAA,CAAK,IACzC,EAEA,GAAI,CAACxU,WAAWG,CAAQ,CAAA,CACtB,SAGF,IAAMmZ,CAAAA,CAAc,MAAM7c,QAAAA,CAAG,QAAA,CAAS0D,EAAU,MAAM,CAAA,CAEtD,GAAI,OAAOqU,CAAAA,EAAS,QAAA,EAAY,CAACA,EAAK,OAAA,CACpC,SAGF,IAAM+E,CAAAA,CAAkB,MAAMC,EAAU,CACtC,QAAA,CAAUhF,CAAAA,CAAK,IAAA,CACf,IAAKA,CAAAA,CAAK,OAAA,CACV,OAAA7U,CAAAA,CACA,SAAA,CAAA4E,CACF,CAAC,CAAA,CAEKkV,CAAAA,CAAQC,SAAAA,CAAUH,EAA2BD,CAAW,CAAA,CAC1DG,EAAM,MAAA,CAAS,CAAA,EACjBX,EAAQ,IAAA,CAAK,CACX,SAAA3Y,CAAAA,CACA,KAAA,CAAAsZ,CACF,CAAC,EAEL,CACF,CAEA,OAAOX,CACT,CAEA,eAAeG,EAAAA,CAAUP,CAAAA,CAAgB,CACvCA,CAAAA,CAAK,OAAA,CAAS5H,GAAS,CACrB,GAAIA,EACF,OAAIA,CAAAA,CAAK,MACA,OAAA,CAAQ,MAAA,CAAO,MAAMhU,CAAAA,CAAY,OAAA,CAAQgU,EAAK,KAAK,CAAC,EAEzDA,CAAAA,CAAK,OAAA,CACA,OAAA,CAAQ,MAAA,CAAO,MAAMhU,CAAAA,CAAY,KAAA,CAAMgU,EAAK,KAAK,CAAC,EAGpD,OAAA,CAAQ,MAAA,CAAO,MAAMA,CAAAA,CAAK,KAAK,CAE1C,CAAC,EACH,CCjNO,IAAM6I,EAAAA,CAAO,IAAIlX,SAAQ,CAC7B,IAAA,CAAK,MAAM,CAAA,CACX,WAAA,CAAY,oCAAoC,CAAA,CAChD,MAAA,CACC,iBAAA,CACA,2DAAA,CACA,QAAQ,GAAA,EACV,EACC,MAAA,CAAO,MAAOC,GAAS,CACtB,GAAI,CACF7F,CAAAA,CAAO,KAAK,gBAAgB,CAAA,CAC5B,QAAQ,GAAA,CAAI,MAAMI,EAAeyF,CAAAA,CAAK,GAAG,CAAC,CAAA,CAC1C7F,CAAAA,CAAO,OAAM,CACbA,CAAAA,CAAO,KAAK,mBAAmB,CAAA,CAC/B,QAAQ,GAAA,CAAI,MAAM2G,CAAAA,CAAUd,CAAAA,CAAK,GAAG,CAAC,EACvC,OAAS1E,CAAAA,CAAO,CACdC,IAAYD,CAAK,EACnB,CACF,CAAC,CAAA,CCLH,IAAM4b,EAAAA,CAAqB,QAAA,CAErBC,GAAU,CACd,CACE,KAAM,QAAA,CACN,KAAA,CAAO,cACP,UAAA,CAAY,WAAA,CACZ,MAAA,CAAQ,CACN,WAAY,CACV,MAAA,CAAQ,CACN,OAAA,CAAS,KAAA,CACT,KAAM,CAAC,CAAA,OAAA,EAAUD,EAAkB,CAAA,CAAA,CAAI,KAAK,CAC9C,CACF,CACF,CACF,CAAA,CACA,CACE,IAAA,CAAM,QAAA,CACN,MAAO,QAAA,CACP,UAAA,CAAY,mBACZ,MAAA,CAAQ,CACN,WAAY,CACV,MAAA,CAAQ,CACN,OAAA,CAAS,KAAA,CACT,IAAA,CAAM,CAAC,UAAUA,EAAkB,CAAA,CAAA,CAAI,KAAK,CAC9C,CACF,CACF,CACF,CAAA,CACA,CACE,IAAA,CAAM,QAAA,CACN,MAAO,SAAA,CACP,UAAA,CAAY,mBACZ,MAAA,CAAQ,CACN,QAAS,CACP,MAAA,CAAQ,CACN,OAAA,CAAS,MACT,IAAA,CAAM,CAAC,UAAUA,EAAkB,CAAA,CAAA,CAAI,KAAK,CAC9C,CACF,CACF,CACF,CAAA,CACA,CACE,IAAA,CAAM,OAAA,CACN,MAAO,OAAA,CACP,UAAA,CAAY,qBACZ,MAAA,CAAQ,CAAA;AAAA;AAAA,gBAAA,EAEMA,EAAkB,CAAA;AAAA,CAElC,CACF,CAAA,CAEME,EAAAA,CAAe,CAAC,CAAA,OAAA,EAAUF,EAAkB,CAAA,CAAE,CAAA,CAEvCG,EAAAA,CAAM,IAAItX,OAAAA,EAAQ,CAC5B,KAAK,KAAK,CAAA,CACV,WAAA,CAAY,uCAAuC,CAAA,CACnD,MAAA,CACC,iBAAA,CACA,2DAAA,CACA,OAAA,CAAQ,GAAA,EACV,CAAA,CACC,MAAA,CAAO,MAAOlG,CAAAA,EAAY,CACzB,GAAI,CACF,MAAMmD,CAAAA,CAAanD,CAAAA,CAAQ,GAAG,CAAA,CAC9B,IAAMyd,CAAAA,CAAY,IAAIC,oBAAAA,CACtB,MAAMC,CAAAA,CAAO,OAAA,CAAQF,CAAS,EAChC,CAAA,MAAShc,EAAO,CACdnB,CAAAA,CAAO,KAAA,EAAM,CACboB,GAAAA,CAAYD,CAAK,EACnB,CACF,CAAC,CAAA,CAEGmc,EAAAA,CAAuBpc,EAAAA,CAAE,MAAA,CAAO,CACpC,MAAA,CAAQA,EAAAA,CAAE,KAAK,CAAC,QAAA,CAAU,QAAA,CAAU,QAAA,CAAU,OAAO,CAAC,CAAA,CACtD,GAAA,CAAKA,EAAAA,CAAE,MAAA,EACT,CAAC,CAAA,CAEDgc,EAAAA,CACG,OAAA,CAAQ,MAAM,EACd,WAAA,CAAY,8CAA8C,CAAA,CAC1D,MAAA,CACC,mBAAA,CACA,CAAA,YAAA,EAAeF,EAAAA,CAAQ,GAAA,CAAKzD,CAAAA,EAAMA,CAAAA,CAAE,IAAI,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CACtD,EACC,MAAA,CAAO,MAAO1T,CAAAA,CAAM0X,CAAAA,GAAY,CAC/B,GAAI,CAGF,IAAM5a,GAAAA,CAAAA,CADa4a,CAAAA,CAAQ,MAAA,EAAQ,IAAA,EAAK,EAAK,EAAC,EACvB,GAAA,EAAO,QAAQ,GAAA,EAAI,CAEtCC,CAAAA,CAAS3X,CAAAA,CAAK,MAAA,CAElB,GAAI,CAAC2X,CAAAA,CAAQ,CACX,IAAMnb,CAAAA,CAAW,MAAMd,EAAAA,CAAQ,CAC7B,IAAA,CAAM,QAAA,CACN,KAAM,QAAA,CACN,OAAA,CAAS,iCAAA,CACT,OAAA,CAASyb,EAAAA,CAAQ,GAAA,CAAKzD,CAAAA,GAAO,CAC3B,KAAA,CAAOA,CAAAA,CAAE,KAAA,CACT,KAAA,CAAOA,CAAAA,CAAE,IACX,CAAA,CAAE,CACJ,CAAC,CAAA,CAEIlX,CAAAA,CAAS,MAAA,GACZrC,CAAAA,CAAO,KAAA,EAAM,CACb,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGhBwd,CAAAA,CAASnb,CAAAA,CAAS,OACpB,CAEA,IAAM3C,CAAAA,CAAU4d,GAAqB,KAAA,CAAM,CACzC,MAAA,CAAAE,CAAAA,CACA,GAAA,CAAA7a,GACF,CAAC,CAAA,CAEKG,CAAAA,CAAS,MAAM6D,CAAAA,CAAUjH,CAAAA,CAAQ,GAAG,CAAA,CAE1C,GAAIA,CAAAA,CAAQ,SAAW,OAAA,CAAS,CAC9B,GAAIoD,CAAAA,CACF,MAAMgN,CAAAA,CAAmB,EAAC,CAAGmN,EAAAA,CAAcna,CAAAA,CAAQ,CACjD,MAAA,CAAQ,CAAA,CACV,CAAC,CAAA,CAAA,KACI,CACL,IAAMrB,CAAAA,CAAiB,MAAMC,GAAAA,CAAkBhC,CAAAA,CAAQ,GAAG,CAAA,CACpD+d,CAAAA,CAAiBhc,CAAAA,GAAmB,KAAA,CAAQ,SAAA,CAAY,KAAA,CACxDic,CAAAA,CAAUjc,CAAAA,GAAmB,KAAA,CAAQ,YAAA,CAAe,IAAA,CAEpDkc,EAAiB5d,CAAAA,CAAQ,4BAA4B,CAAA,CAAE,KAAA,EAAM,CACnE,MAAMmC,KAAAA,CACJT,CAAAA,CACA,CAACgc,CAAAA,CAAgBC,CAAAA,CAAS,GAAGT,EAAY,CAAA,CACzC,CACE,GAAA,CAAKvd,EAAQ,GACf,CACF,CAAA,CACAie,CAAAA,CAAe,OAAA,CAAQ,0BAA0B,EACnD,CAEA3d,CAAAA,CAAO,KAAA,EAAM,CACbA,CAAAA,CAAO,GAAA,CAAI,8CAA8C,CAAA,CACzDA,CAAAA,CAAO,OAAM,CACbA,CAAAA,CAAO,GAAA,CACL,CAAA,2BAAA,EAA8BC,CAAAA,CAAY,IAAA,CACxC,sBACF,CAAC,EACH,CAAA,CACAD,CAAAA,CAAO,GAAA,CAAI,qCAAqC,CAAA,CAChDA,CAAAA,CAAO,GAAA,EAAI,CACXA,EAAO,IAAA,CAAK,CAAA;AAAA;AAAA,gBAAA,EAEF+c,EAAkB,WAAW,CAAA,CACvC/c,CAAAA,CAAO,OAAM,CACbA,CAAAA,CAAO,IAAA,CAAK,yCAAyC,CAAA,CACrDA,CAAAA,CAAO,OAAM,CACb,OAAA,CAAQ,IAAA,CAAK,CAAC,EAChB,CAEA,IAAMmF,GAAAA,CAAgBpF,CAAAA,CAAQ,2BAA2B,CAAA,CAAE,KAAA,EAAM,CAC3D6d,EAAa,MAAMC,EAAAA,CAAWne,CAAO,CAAA,CAG3C,GAFAyF,GAAAA,CAAc,QAAQ,yBAAyB,CAAA,CAE3CrC,CAAAA,CACF,MAAMgN,CAAAA,CAAmB,GAAImN,EAAAA,CAAcna,CAAAA,CAAQ,CACjD,MAAA,CAAQ,CAAA,CACV,CAAC,OACI,CACL,IAAMrB,CAAAA,CAAiB,MAAMC,GAAAA,CAAkBhC,CAAAA,CAAQ,GAAG,CAAA,CACpD+d,CAAAA,CAAiBhc,CAAAA,GAAmB,KAAA,CAAQ,SAAA,CAAY,KAAA,CACxDic,EAAUjc,CAAAA,GAAmB,KAAA,CAAQ,YAAA,CAAe,IAAA,CAEpDkc,CAAAA,CAAiB5d,CAAAA,CAAQ,4BAA4B,CAAA,CAAE,KAAA,EAAM,CACnE,MAAMmC,KAAAA,CACJT,CAAAA,CACA,CAACgc,CAAAA,CAAgBC,CAAAA,CAAS,GAAGT,EAAY,CAAA,CACzC,CACE,IAAKvd,CAAAA,CAAQ,GACf,CACF,CAAA,CACAie,CAAAA,CAAe,OAAA,CAAQ,0BAA0B,EACnD,CAEA3d,CAAAA,CAAO,KAAA,EAAM,CACbA,CAAAA,CAAO,QAAQ,CAAA,uBAAA,EAA0B4d,CAAU,CAAA,CAAA,CAAG,CAAA,CACtD5d,CAAAA,CAAO,KAAA,GACT,CAAA,MAASmB,CAAAA,CAAO,CACdC,GAAAA,CAAYD,CAAK,EACnB,CACF,CAAC,CAAA,CAEH,IAAM2c,EAAAA,CAAiB,CAACC,EAAUC,CAAAA,GAAuBA,CAAAA,CAEzD,eAAeH,EAAAA,CAAWne,CAAAA,CAA+C,CACvE,GAAM,CAAE,MAAA,CAAA8d,CAAAA,CAAQ,GAAA,CAAA7a,CAAI,CAAA,CAAIjD,EAElBue,CAAAA,CAAajB,EAAAA,CAAQ,IAAA,CAAM,CAAA,EAAM,CAAA,CAAE,IAAA,GAASQ,CAAM,CAAA,CACxD,GAAI,CAACS,CAAAA,CACH,MAAM,IAAI,MACR,CAAA,gBAAA,EAAmBT,CAAM,CAAA,qBAAA,EAAwBR,EAAAA,CAAQ,GAAA,CACtD,CAAA,EAAM,EAAE,IACX,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CACd,EAGF,IAAMY,CAAAA,CAAa/d,UAAAA,CAAK,IAAA,CAAK8C,CAAAA,CAAKsb,CAAAA,CAAW,UAAU,CAAA,CACjDC,CAAAA,CAAMre,UAAAA,CAAK,OAAA,CAAQ+d,CAAU,CAAA,CACnC,MAAMra,CAAAA,CAAQ,SAAA,CAAU2a,CAAG,CAAA,CAG3B,IAAIhY,CAAAA,CAAiB,EAAC,CACtB,GAAI,CACF,IAAM2T,CAAAA,CAAU,MAAMja,SAAG,QAAA,CAASge,CAAAA,CAAY,OAAO,CAAA,CACrD1X,CAAAA,CAAiB,IAAA,CAAK,MAAM2T,CAAO,EACrC,CAAA,KAAQ,CAAC,CAET,IAAMsE,EAAe7X,EAAAA,CACnBJ,CAAAA,CACA+X,CAAAA,CAAW,MAAA,CACX,CAAE,UAAA,CAAYH,EAAe,CAC/B,CAAA,CAEA,OAAA,MAAMle,QAAAA,CAAG,SAAA,CACPge,CAAAA,CACA,KAAK,SAAA,CAAUO,CAAAA,CAAc,IAAA,CAAM,CAAC,CAAA,CAAI;AAAA,CAAA,CACxC,OACF,CAAA,CAEOF,CAAAA,CAAW,UACpB,CCzPO,IAAMG,CAAAA,CAAwB,CACnC,MAAA,CAAQ,CACN,KAAM,cAAA,CACN,OAAA,CAAS,cAAA,CACT,MAAA,CAAQ,cACV,CAAA,CACA,KAAA,CAAO,CACL,IAAA,CAAM,uBAAA,CACN,OAAA,CAAS,uBAAA,CACT,MAAA,CAAQ,uBACV,CACF,CAAA,CCMA,eAAsBC,EAAAA,CAAavb,CAAAA,CAAgB,CACjD,GAAI,CAACA,CAAAA,CAAO,aAAA,CAAc,EAAA,CACxB,MAAM,IAAI,KAAA,CACR,8IACF,CAAA,CAGF,IAAMwb,CAAAA,CAASxb,CAAAA,CAAO,aAAA,CAAc,EAAA,CAC9B,CAACmV,CAAAA,CAAOsG,GAAa,CAAA,CAAI,MAAM,OAAA,CAAQ,GAAA,CAAI,CAC/CC,EAAAA,CAAG,sBAAA,CAAwB,CACzB,GAAA,CAAKF,CACP,CAAC,CAAA,CACDG,EAAAA,EACF,CAAC,CAAA,CAED,GAAI,MAAA,CAAO,IAAA,CAAKF,GAAa,CAAA,CAAE,MAAA,GAAW,EACxC,MAAM,IAAI,KAAA,CAAM,mDAAmD,CAAA,CAGrE,IAAMG,CAAAA,CAAiB,MAAA,CAAO,OAAA,CAAQN,CAAqB,CAAA,CAAE,GAAA,CAC3D,CAAC,CAAC9c,EAAMsG,CAAW,CAAA,IAAO,CACxB,KAAA,CAAOA,CAAAA,CAAY,IAAA,CACnB,KAAA,CAAOtG,CACT,CAAA,CACF,CAAA,CAEMqd,CAAAA,CAAiB,MAAMpd,EAAAA,CAAQ,CACnC,CACE,IAAA,CAAM,QAAA,CACN,IAAA,CAAM,eAAA,CACN,OAAA,CAAS,CAAA,qCAAA,EAAwCtB,CAAAA,CAAY,IAAA,CAC3D,cACF,CAAC,CAAA,CAAA,CAAA,CACD,OAAA,CAASye,CACX,CAAA,CACA,CACE,IAAA,CAAM,QAAA,CACN,IAAA,CAAM,eAAA,CACN,OAAA,CAAS,CAAA,qCAAA,EAAwCze,CAAAA,CAAY,IAAA,CAC3D,YACF,CAAC,CAAA,CAAA,CAAA,CACD,OAAA,CAASye,CACX,CACF,CAAC,CAAA,CAED,GAAIC,CAAAA,CAAe,aAAA,GAAkBA,CAAAA,CAAe,aAAA,CAClD,MAAM,IAAI,KAAA,CACR,sFACF,CAAA,CAGF,GACE,EACEA,CAAAA,CAAe,iBAAiBP,CAAAA,EAChCO,CAAAA,CAAe,aAAA,IAAiBP,CAAAA,CAAAA,CAGlC,MAAM,IAAI,KAAA,CAAM,2DAA2D,CAAA,CAG7E,IAAMQ,CAAAA,CACJR,CAAAA,CACEO,CAAAA,CAAe,aACjB,EACIE,GAAAA,CACJT,CAAAA,CACEO,CAAAA,CAAe,aACjB,CAAA,CACI,CAAE,OAAA,CAAA1F,CAAQ,CAAA,CAAI,MAAM1X,EAAAA,CAAQ,CAChC,IAAA,CAAM,SAAA,CACN,KAAM,SAAA,CACN,OAAA,CAAS,IAAA,CACT,OAAA,CAAS,CAAA,gBAAA,EAAmBtB,CAAAA,CAAY,IAAA,CACtCgY,CAAAA,CAAM,MACR,CAAC,CAAA,UAAA,EAAahY,CAAAA,CAAY,IAAA,CACxB,CAAA,EAAA,EAAKJ,WAAK,QAAA,CAASiD,CAAAA,CAAO,aAAA,CAAc,GAAA,CAAKwb,CAAM,CAAC,CAAA,CACtD,CAAC,CAAA,MAAA,EAASre,CAAAA,CAAY,IAAA,CAAK2e,CAAAA,CAAc,IAAI,CAAC,OAAO3e,CAAAA,CAAY,IAAA,CAC/D4e,GAAAA,CAAc,IAChB,CAAC,CAAA,WAAA,CACH,CAAC,CAAA,CAEI5F,CAAAA,GACHjZ,CAAAA,CAAO,IAAA,CAAK,sBAAsB,CAAA,CAClC,OAAA,CAAQ,KAAK,CAAC,CAAA,CAAA,CAGZ6e,GAAAA,CAAc,OAAA,EAChB,MAAM/O,CAAAA,CAAmB,CAAC+O,GAAAA,CAAc,OAAO,CAAA,CAAG,EAAC,CAAG/b,CAAAA,CAAQ,CAC5D,OAAQ,KACV,CAAC,CAAA,CAGH,IAAMgc,CAAAA,CAAmB/e,CAAAA,CAAQ,oBAAoB,CAAA,EAAG,KAAA,EAAM,CAE9D,MAAM,OAAA,CAAQ,GAAA,CACZkY,CAAAA,CAAM,IAAI,MAAON,CAAAA,EAAS,CACxBmH,CAAAA,CAAiB,IAAA,CAAO,CAAA,UAAA,EAAanH,CAAI,CAAA,GAAA,CAAA,CAEzC,IAAMrU,CAAAA,CAAWzD,UAAAA,CAAK,IAAA,CAAKye,CAAAA,CAAQ3G,CAAI,EACjC8E,CAAAA,CAAc,MAAM7c,QAAAA,CAAG,QAAA,CAAS0D,CAAAA,CAAU,OAAO,CAAA,CAEjDuW,CAAAA,CAAU,MAAMkF,EAAAA,CACpBtC,CAAAA,CACAkC,CAAAA,CAAe,aAAA,CACfA,CAAAA,CAAe,cACfJ,GACF,CAAA,CAEA,MAAM3e,QAAAA,CAAG,SAAA,CAAU0D,CAAAA,CAAUuW,CAAO,EACtC,CAAC,CACH,CAAA,CAEAiF,CAAAA,CAAiB,OAAA,CAAQ,qBAAqB,EAChD,CAEA,eAAsBC,EAAAA,CACpBlF,CAAAA,CACA+E,CAAAA,CACAC,CAAAA,CACAG,CAAAA,CACA,CACA,IAAMC,CAAAA,CAAsBb,CAAAA,CAAsBQ,CAAa,CAAA,EAAG,MAAA,CAC5DM,EAAsBd,CAAAA,CAAsBS,CAAa,CAAA,EAAG,MAAA,CAE5DX,CAAAA,CAAM,MAAMte,QAAAA,CAAG,OAAA,CAAQC,UAAAA,CAAK,IAAA,CAAKsf,MAAAA,EAAO,CAAG,SAAS,CAAC,EACrDC,CAAAA,CAAU,IAAIvM,OAAAA,CAAQ,CAC1B,eAAA,CAAiB,EACnB,CAAC,CAAA,CAEKwM,CAAAA,CAAWxf,UAAAA,CAAK,IAAA,CACpBqe,CAAAA,CACA,CAAA,aAAA,EAAgBoB,YAAY,CAAC,CAAA,CAAE,QAAA,CAAS,KAAK,CAAC,CAAA,IAAA,CAChD,CAAA,CACM1M,CAAAA,CAAawM,CAAAA,CAAQ,gBAAA,CAAiBC,CAAAA,CAAUxF,CAAAA,CAAS,CAC7D,UAAA,CAAY/G,WAAW,GACzB,CAAC,CAAA,CAGGyM,CAAAA,CAA0B,EAAC,CAC/B,IAAA,IAAWC,CAAAA,IAAqB5M,CAAAA,CAAW,qBAAA,EAAsB,EAAK,EAAC,CACrE,GACE4M,EAAkB,kBAAA,EAAmB,EAAG,OAAA,EAAQ,GAChD,CAAA,CAAA,EAAIP,CAAmB,CAAA,CAAA,CAAA,CAKzB,CAAA,IAAA,IAAWQ,CAAAA,IAAaD,CAAAA,CAAkB,eAAA,EAAgB,EAAK,EAAC,CAAG,CACjE,IAAME,CAAAA,CAAWD,CAAAA,CAAU,OAAA,EAAQ,CAG7BE,CAAAA,CAAe,MAAA,CAAO,MAAA,CAAOX,CAAY,CAAA,CAAE,IAAA,CAC9CY,CAAAA,EAASA,CAAAA,CAAKhB,CAAa,IAAMc,CACpC,CAAA,GAAIb,CAAa,CAAA,CAEb,CAACc,CAAAA,EAAgBJ,CAAAA,CAAc,QAAA,CAASI,CAAY,CAAA,GAIxDJ,CAAAA,CAAc,IAAA,CAAKI,CAAY,CAAA,CAG/BF,EAAU,MAAA,EAAO,CAGjB7M,CAAAA,CACG,oBAAA,CAAqB2B,UAAAA,CAAW,qBAAqB,CAAA,CACrD,MAAA,CAAQ1K,CAAAA,EAASA,CAAAA,CAAK,cAAA,EAAe,EAAG,OAAA,EAAQ,GAAM6V,CAAQ,CAAA,CAC9D,OAAA,CAAS7V,CAAAA,EAASA,CAAAA,CAAK,cAAA,EAAe,EAAG,eAAA,CAAgB8V,CAAY,CAAC,CAAA,EAC3E,CAGIH,CAAAA,CAAkB,eAAA,EAAgB,EAAG,MAAA,GAAW,GAClDA,CAAAA,CAAkB,MAAA,GAAO,CAI7B,OAAID,CAAAA,CAAc,MAAA,CAAS,CAAA,EACzB3M,CAAAA,CAAW,oBAAA,CAAqB,CAC9B,eAAA,CAAiBsM,CAAAA,CACjB,YAAA,CAAcK,CAAAA,CAAc,IAAKK,CAAAA,GAAU,CACzC,IAAA,CAAMA,CACR,CAAA,CAAE,CACJ,CAAC,CAAA,CAGI,MAAMhN,CAAAA,CAAW,OAAA,EAC1B,CCjMA,SAASiN,EAAAA,CAAa7L,CAAAA,CAAqB,CACzC,OAAOA,CAAAA,CACJ,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAKC,CAAAA,EAASA,CAAAA,CAAK,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAY,CAAIA,CAAAA,CAAK,MAAM,CAAC,CAAC,CAAA,CAC1D,IAAA,CAAK,EAAE,CACZ,CAEA,SAAS6L,EAAAA,CACPC,CAAAA,CACAC,CAAAA,CACAvL,CAAAA,CACAwL,CAAAA,CACA,CASA,IAAMC,CAAAA,CANiBH,CAAAA,CACpB,OAAA,CAAQ,WAAA,CAAa,EAAE,CAAA,CACvB,OAAA,CAAQ,mBAAA,CAAqB,EAAE,CAAA,CAC/B,OAAA,CAAQ,MAAA,CAAQ,GAAG,CAAA,CACnB,MAAK,CAGL,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAKI,CAAAA,EAAeA,CAAAA,CAAW,IAAA,EAAM,CAAA,CACrC,MAAA,CAAO,OAAO,CAAA,CAEjB,IAAA,IAAWA,KAAcD,CAAAA,CAAiB,CACxC,IAAME,CAAAA,CAAkBD,CAAAA,CAAW,KAAA,CAAM,kCAAkC,CAAA,CACrEE,CAAAA,CAAaF,CAAAA,CAAW,KAAA,CAAM,sBAAsB,CAAA,CAE1D,GAAIC,EAAiB,CAEnB,IAAMjN,CAAAA,CAAaiN,CAAAA,CAAgB,CAAC,CAAA,CAC9BE,CAAAA,CAAcF,CAAAA,CAAgB,CAAC,CAAA,CAEjCH,CAAAA,GAAgB,MAAA,EAAU9M,CAAAA,GAAe,MAAA,EAAU,CAACmN,CAAAA,CACtD7L,CAAAA,CAAQ,IAAA,CAAK,CACX,IAAA,CAAM,MAAA,CACN,KAAA,CAAO,eAAA,CACP,MAAA,CAAQ,IACV,CAAC,CAAA,CAEDA,CAAAA,CAAQ,IAAA,CAAK,CACX,IAAA,CAAMtB,CAAAA,CACN,KAAA,CAAOmN,CAAAA,CACP,MAAA,CAAQ,IACV,CAAC,EAEL,CAAA,KAAA,GAAWD,CAAAA,CAAY,CAErB,IAAMlN,CAAAA,CAAakN,CAAAA,CAAW,CAAC,CAAA,CACzBC,CAAAA,CAAcD,CAAAA,CAAW,CAAC,CAAA,CAG9BJ,CAAAA,GAAgB,MAAA,EAChB9M,CAAAA,GAAe,MAAA,EACfmN,CAAAA,GAAgB,MAAA,CAEhB7L,CAAAA,CAAQ,IAAA,CAAK,CACX,KAAM,MAAA,CACN,KAAA,CAAO,eAAA,CACP,MAAA,CAAQuL,CACV,CAAC,CAAA,CAEDvL,CAAAA,CAAQ,IAAA,CAAK,CACX,IAAA,CAAMtB,CAAAA,CACN,KAAA,CAAOmN,CAAAA,CACP,OAAQN,CACV,CAAC,EAEL,CAAA,KAGMC,CAAAA,GAAgB,MAAA,EAAUE,CAAAA,GAAe,MAAA,CAC3C1L,CAAAA,CAAQ,IAAA,CAAK,CACX,IAAA,CAAM,MAAA,CACN,KAAA,CAAO,gBACP,MAAA,CAAQuL,CACV,CAAC,CAAA,CAEDvL,CAAAA,CAAQ,IAAA,CAAK,CACX,IAAA,CAAM0L,CAAAA,CACN,MAAA,CAAQH,CACV,CAAC,EAGP,CACF,CAEA,eAAsBO,EAAAA,CACpBzd,CAAAA,CACApD,CAAAA,CAA6B,EAAC,CAC9B,CACA,GAAI,CAACoD,CAAAA,CAAO,aAAA,CAAc,EAAA,CACxB,MAAM,IAAI,MACR,8IACF,CAAA,CAGF,IAAMwb,CAAAA,CAASxb,CAAAA,CAAO,aAAA,CAAc,EAAA,CAC9BmV,GAAAA,CAAQ,MAAMuG,EAAAA,CAAG,sBAAA,CAAwB,CAC7C,GAAA,CAAKF,CACP,CAAC,CAAA,CAED,GAAI,CAAC5e,CAAAA,CAAQ,GAAA,CAAK,CAChB,GAAM,CAAE,OAAA,CAAAuZ,CAAQ,CAAA,CAAI,MAAM1X,EAAAA,CAAQ,CAChC,KAAM,SAAA,CACN,IAAA,CAAM,SAAA,CACN,OAAA,CAAS,IAAA,CACT,OAAA,CAAS,CAAA,gBAAA,EAAmBtB,CAAAA,CAAY,IAAA,CACtCgY,GAAAA,CAAM,MACR,CAAC,CAAA,UAAA,EAAahY,CAAAA,CAAY,KACxB,CAAA,EAAA,EAAKJ,UAAAA,CAAK,QAAA,CAASiD,CAAAA,CAAO,aAAA,CAAc,GAAA,CAAKwb,CAAM,CAAC,CAAA,CACtD,CAAC,CAAA,IAAA,EAAOre,CAAAA,CAAY,IAAA,CAAK,UAAU,CAAC,CAAA,WAAA,CACtC,CAAC,CAAA,CAEIgZ,CAAAA,GACHjZ,CAAAA,CAAO,IAAA,CAAK,sBAAsB,CAAA,CAClC,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,EAElB,CAEA,IAAM8e,EAAmB/e,CAAAA,CAAQ,sBAAsB,CAAA,EAAG,KAAA,EAAM,CAC1DygB,CAAAA,CAAgB,IAAI,GAAA,CAE1B,MAAM,OAAA,CAAQ,GAAA,CACZvI,GAAAA,CAAM,GAAA,CAAI,MAAON,GAAS,CACxBmH,CAAAA,CAAiB,IAAA,CAAO,CAAA,UAAA,EAAanH,CAAI,CAAA,GAAA,CAAA,CAEzC,IAAMrU,CAAAA,CAAWzD,UAAAA,CAAK,IAAA,CAAKye,CAAAA,CAAQ3G,CAAI,CAAA,CACjC8E,CAAAA,CAAc,MAAM7c,QAAAA,CAAG,QAAA,CAAS0D,CAAAA,CAAU,OAAO,CAAA,CAEjD,CAAE,OAAA,CAAAuW,CAAAA,CAAS,gBAAA,CAAA4G,CAAiB,CAAA,CAAI,MAAMC,EAAAA,CAAiBjE,CAAW,EAGxEgE,CAAAA,CAAiB,OAAA,CAASE,CAAAA,EAAQH,CAAAA,CAAc,GAAA,CAAIG,CAAG,CAAC,CAAA,CAExD,MAAM/gB,QAAAA,CAAG,SAAA,CAAU0D,CAAAA,CAAUuW,CAAO,EACtC,CAAC,CACH,CAAA,CAEAiF,CAAAA,CAAiB,OAAA,CAAQ,oBAAoB,CAAA,CAG7C,IAAM8B,CAAAA,CAAiB7gB,CAAAA,CAAQ,0BAA0B,CAAA,EAAG,KAAA,EAAM,CAElE,GAAI,CACF,IAAM2C,CAAAA,CAAc6J,GAAAA,CAAezJ,CAAAA,CAAO,aAAA,CAAc,GAAA,CAAK,CAAA,CAAK,CAAA,CAElE,GAAI,CAACJ,CAAAA,CAAa,CAChBke,CAAAA,CAAe,IAAA,CAAK,6BAA6B,CAAA,CACjD5gB,CAAAA,CAAO,IAAA,CACL,0GACF,CAAA,CACA,MACF,CAEA,IAAM6gB,CAAAA,CAAqB,KAAA,CAAM,IAAA,CAAKL,CAAa,CAAA,CAG7CM,CAAAA,CAAkB,CAAC,cAAA,CAAgB,iBAAiB,CAAA,CAC1D,IAAA,IAAWC,CAAAA,IAAWD,CAAAA,CACpB,GAAIpe,CAAAA,CAAYqe,CAAO,CAAA,CACrB,IAAA,IAAWJ,CAAAA,IAAOE,CAAAA,CACZne,CAAAA,CAAYqe,CAAO,CAAA,CAAGJ,CAAG,CAAA,EAC3B,OAAOje,CAAAA,CAAYqe,CAAO,CAAA,CAAGJ,CAAG,CAAA,CAOxC,GAAIE,CAAAA,CAAmB,MAAA,CAAS,CAAA,CAAG,CAC5Bne,EAAY,YAAA,GACfA,CAAAA,CAAY,YAAA,CAAe,EAAC,CAAA,CAE9BA,CAAAA,CAAY,YAAA,CAAa,UAAU,CAAA,CAAI,QAAA,CAEvC,IAAMF,CAAAA,CAAkB3C,UAAAA,CAAK,IAAA,CAC3BiD,CAAAA,CAAO,aAAA,CAAc,GAAA,CACrB,cACF,CAAA,CACA,MAAMlD,QAAAA,CAAG,SAAA,CACP4C,CAAAA,CACA,IAAA,CAAK,SAAA,CAAUE,CAAAA,CAAa,IAAA,CAAM,CAAC,CAAA,CAAI;AAAA,CACzC,CAAA,CAEAke,CAAAA,CAAe,OAAA,CAAQ,uBAAuB,CAAA,CAG9C,MAAM9Q,CAAAA,CAAmB,CAAC,UAAU,CAAA,CAAG,EAAC,CAAGhN,CAAAA,CAAQ,CAAE,MAAA,CAAQ,CAAA,CAAM,CAAC,EACtE,CAAA,KACE8d,CAAAA,CAAe,OAAA,CAAQ,oCAAoC,EAE/D,CAAA,KAAgB,CACdA,CAAAA,CAAe,IAAA,CAAK,+BAA+B,EACnD5gB,CAAAA,CAAO,IAAA,CACL,2EACF,EACF,CACF,CAEA,eAAsB0gB,EAAAA,CACpB7G,CAAAA,CAC0D,CAG1D,IAAMmH,CAAAA,CACJ,sGAAA,CAEIvM,CAAAA,CAAqE,EAAC,CACtEwM,CAAAA,CAA0B,EAAC,CAC3BR,CAAAA,CAA6B,EAAC,CAChCS,CAAAA,CAAa,GAAA,CACbC,CAAAA,CAAe,KAAA,CAEfpgB,CAAAA,CAAS8Y,CAAAA,CACTuH,CAAAA,CAGJ,MAAQA,CAAAA,CAAQJ,CAAAA,CAAmB,IAAA,CAAKnH,CAAO,CAAA,IAAO,IAAA,EAAM,CAC1D,GAAM,CACJwH,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAxB,CAAAA,CACAnR,CAAAA,CACAqR,EACAuB,CACF,CAAA,CAAIJ,CAAAA,CAGJ,GAAInB,CAAAA,GAAgB,OAAA,EAAWA,CAAAA,CAAY,UAAA,CAAW,QAAQ,CAAA,CAC5D,SAGFgB,CAAAA,CAAc,IAAA,CAAKI,CAAS,EAGxBJ,CAAAA,CAAc,MAAA,GAAW,CAAA,GAC3BC,CAAAA,CAAatS,CAAAA,CACbuS,CAAAA,CAAeK,CAAAA,GAAc,GAAA,CAAA,CAI/Bf,CAAAA,CAAiB,IAAA,CAAK,CAAA,gBAAA,EAAmBR,CAAW,CAAA,CAAE,CAAA,CAEtD,IAAMD,CAAAA,CAAa,CAAA,CAAQsB,CAAAA,CAE3B,GAAIC,CAAAA,CAAgB,CAElB,IAAME,EAAAA,CAAgB5B,EAAAA,CAAaI,CAAW,CAAA,CAC9CxL,CAAAA,CAAQ,IAAA,CAAK,CACX,KAAMgN,EAAAA,CACN,KAAA,CAAOF,CAAAA,CACP,MAAA,CAAQvB,CACV,CAAC,EACH,CAAA,KAAWD,CAAAA,EAKTD,EAAAA,CAAoBC,CAAAA,CAAcC,CAAAA,CAAYvL,CAAAA,CAASwL,CAAW,EAEtE,CAEA,GAAIxL,CAAAA,CAAQ,MAAA,GAAW,CAAA,CACrB,OAAO,CACL,OAAA,CAAAoF,CAAAA,CACA,gBAAA,CAAkB,EACpB,CAAA,CAKF,IAAM6H,EAAgBjN,CAAAA,CAAQ,MAAA,CAC5B,CAACtB,CAAAA,CAAYe,CAAAA,CAAOyN,CAAAA,GAClBzN,CAAAA,GACAyN,CAAAA,CAAK,SAAA,CACFC,CAAAA,EACCA,CAAAA,CAAE,IAAA,GAASzO,CAAAA,CAAW,IAAA,EACtByO,EAAE,KAAA,GAAUzO,CAAAA,CAAW,KAAA,EACvByO,CAAAA,CAAE,MAAA,GAAWzO,CAAAA,CAAW,MAC5B,CACJ,CAAA,CAYM0O,CAAAA,CAAgB,CAAA,SAAA,EATHH,CAAAA,CAChB,GAAA,CAAKjO,CAAAA,EAAQ,CACZ,IAAMqO,CAAAA,CAAarO,CAAAA,CAAI,MAAA,CAAS,OAAA,CAAU,EAAA,CAC1C,OAAOA,CAAAA,CAAI,KAAA,CACP,CAAA,EAAGqO,CAAU,CAAA,EAAGrO,CAAAA,CAAI,IAAI,OAAOA,CAAAA,CAAI,KAAK,CAAA,CAAA,CACxC,CAAA,EAAGqO,CAAU,CAAA,EAAGrO,CAAAA,CAAI,IAAI,CAAA,CAC9B,CAAC,CAAA,CACA,IAAA,CAAK,IAAI,CAEgC,WAAWyN,CAAU,CAAA,QAAA,EAAWA,CAAU,CAAA,EACpFC,CAAAA,CAAe,GAAA,CAAM,EACvB,CAAA,CAAA,CAGApgB,CAAAA,CAASkgB,CAAAA,CAAc,MAAA,CAAO,CAACc,CAAAA,CAAKC,CAAAA,CAAM9N,CAAAA,GACjC6N,CAAAA,CAAI,OAAA,CAAQC,CAAAA,CAAM9N,CAAAA,GAAU,CAAA,CAAI2N,CAAAA,CAAgB,EAAE,CAAA,CACxD9gB,CAAM,CAAA,CAGTA,CAAAA,CAASA,CAAAA,CAAO,OAAA,CAAQ,eAAA,CAAiB;;AAAA,CAAM,CAAA,CAMzB2gB,CAAAA,CAAc,IAAA,CACjCjO,CAAAA,EAAQA,CAAAA,CAAI,IAAA,GAAS,MAAA,EAAUA,CAAAA,CAAI,KAAA,GAAU,eAChD,CAAA,GAgEE1S,CAAAA,CA5DcA,EAAO,KAAA,CAAM;AAAA,CAAI,CAAA,CACA,IAAKihB,CAAAA,EAAS,CAE3C,GAAIA,CAAAA,CAAK,IAAA,GAAO,UAAA,CAAW,SAAS,EAClC,OAAOA,CAAAA,CAGT,IAAIC,CAAAA,CAAkBD,CAAAA,CAMtB,OAAAC,CAAAA,CAAkBA,CAAAA,CAAgB,QAChC,gCAAA,CACA,0BACF,EAEAA,CAAAA,CAAkBA,CAAAA,CAAgB,QAChC,yCAAA,CACA,mDACF,EAEAA,CAAAA,CAAkBA,CAAAA,CAAgB,QAChC,kCAAA,CACA,6CACF,EAEAA,CAAAA,CAAkBA,CAAAA,CAAgB,QAChC,sBAAA,CACA,0BACF,EAGAA,CAAAA,CAAkBA,CAAAA,CAAgB,QAChC,WAAA,CACA,CAACb,EAAOc,CAAAA,CAAQC,CAAAA,GAAW,CAEzB,IAAMC,CAAAA,CAAcD,EAAO,SAAA,CAAU,CAAA,CAAGD,CAAM,CAAA,CACxCG,EAAAA,CAAAA,CAAcD,EAAY,KAAA,CAAM,IAAI,GAAK,EAAC,EAAG,OAC7CE,EAAAA,CAAAA,CAAoBF,CAAAA,CAAY,MAAM,IAAI,CAAA,EAAK,EAAC,EAAG,MAAA,CAGzD,OAAIC,EAAAA,CAAa,CAAA,GAAM,GAAKC,EAAAA,CAAmB,CAAA,GAAM,EAC5ClB,CAAAA,CAGF,sBACT,CACF,CAAA,CAGAa,CAAAA,CAAkBA,EAAgB,OAAA,CAChC,uBAAA,CACA,oBACF,CAAA,CAEOA,CACT,CAAC,CAAA,CAEyB,IAAA,CAAK;AAAA,CAAI,CAAA,CAAA,CAIrC,IAAMM,CAAAA,CAAyB,KAAA,CAAM,IAAA,CAAK,IAAI,GAAA,CAAI9B,CAAgB,CAAC,CAAA,CAEnE,OAAO,CACL,QAAS1f,CAAAA,CACT,gBAAA,CAAkBwhB,CACpB,CACF,CCrYA,eAAsBC,EAAAA,CACpB9iB,CAAAA,CACA,CACA,IAAMC,CAAAA,CAAkC,EAAC,CAIzC,GACE,CAACC,CAAAA,CAAG,UAAA,CAAWF,CAAAA,CAAQ,GAAG,CAAA,EAC1B,CAACE,CAAAA,CAAG,UAAA,CAAWC,WAAK,OAAA,CAAQH,CAAAA,CAAQ,GAAA,CAAK,cAAc,CAAC,CAAA,CAExD,OAAAC,CAAAA,CAAc,GAA4B,CAAA,CAAI,IAAA,CACvC,CACL,MAAA,CAAAA,CAAAA,CACA,OAAQ,IACV,CAAA,CAIF,GAAI,CAACC,CAAAA,CAAG,UAAA,CAAWC,UAAAA,CAAK,OAAA,CAAQH,CAAAA,CAAQ,GAAA,CAAK,iBAAiB,CAAC,CAAA,CAC7D,OAAAC,EAAc,GAAc,CAAA,CAAI,IAAA,CACzB,CACL,MAAA,CAAAA,CAAAA,CACA,MAAA,CAAQ,IACV,CAAA,CAGF,GAAI,CACF,IAAMmD,GAAAA,CAAS,MAAM6D,EAAUjH,CAAAA,CAAQ,GAAG,CAAA,CAE1C,OAAO,CACL,MAAA,CAAAC,CAAAA,CACA,MAAA,CAAQmD,GACV,CACF,CAAA,KAAgB,CACd9C,CAAAA,CAAO,KAAA,GACPA,CAAAA,CAAO,KAAA,CACL,CAAA,WAAA,EAAcC,CAAAA,CAAY,IAAA,CACxB,iBACF,CAAC,CAAA,mBAAA,EAAsBA,CAAAA,CAAY,IAAA,CACjCP,CAAAA,CAAQ,GACV,CAAC,CAAA;AAAA,wDAAA,EAA8DO,EAAY,IAAA,CACzE,iBACF,CAAC,CAAA,qBAAA,EAAwBA,CAAAA,CAAY,KAAK,MAAM,CAAC,WACnD,CAAA,CACAD,CAAAA,CAAO,MACL,CAAA,cAAA,EAAiBC,CAAAA,CAAY,KAC3B,4CACF,CAAC,GACH,CAAA,CACAD,CAAAA,CAAO,OAAM,CACb,OAAA,CAAQ,KAAK,CAAC,EAChB,CACF,CCrDO,IAAMyiB,EAAAA,CAAa,CACxB,CACE,IAAA,CAAM,QACN,WAAA,CAAa,yDACf,EACA,CACE,IAAA,CAAM,QACN,WAAA,CAAa,sBACf,CACF,CAAA,CAEaC,EAAAA,CAAuBxhB,IAAE,MAAA,CAAO,CAC3C,IAAKA,GAAAA,CAAE,MAAA,GACP,IAAA,CAAMA,GAAAA,CAAE,SAAQ,CAChB,GAAA,CAAKA,IAAE,OAAA,EAAQ,CACf,UAAWA,GAAAA,CACR,MAAA,GACA,MAAA,CACEM,CAAAA,EACCA,GAASihB,EAAAA,CAAW,IAAA,CAAME,GAAcA,CAAAA,CAAU,IAAA,GAASnhB,CAAK,CAAA,CAClE,CACE,QACE,8FACJ,CACF,EACC,QAAA,EACL,CAAC,CAAA,CAEYohB,EAAAA,CAAU,IAAIhd,OAAAA,EAAQ,CAChC,KAAK,SAAS,CAAA,CACd,YAAY,kBAAkB,CAAA,CAC9B,SAAS,aAAA,CAAe,uBAAuB,EAC/C,MAAA,CACC,iBAAA,CACA,4DACA,OAAA,CAAQ,GAAA,EACV,CAAA,CACC,MAAA,CAAO,aAAc,sBAAA,CAAwB,KAAK,EAClD,MAAA,CAAO,WAAA,CAAa,4BAA6B,KAAK,CAAA,CACtD,OAAO,MAAO+c,CAAAA,CAAW9c,IAAS,CACjC,GAAI,CACF,IAAMnG,CAAAA,CAAUgjB,GAAqB,KAAA,CAAM,CACzC,IAAK7iB,UAAAA,CAAK,OAAA,CAAQgG,EAAK,GAAG,CAAA,CAC1B,UAAA8c,CAAAA,CACA,IAAA,CAAM9c,EAAK,IAAA,CACX,GAAA,CAAKA,EAAK,GACZ,CAAC,EAED,GAAInG,CAAAA,CAAQ,MAAQ,CAACA,CAAAA,CAAQ,UAAW,CACtCM,CAAAA,CAAO,KAAK,uBAAuB,CAAA,CACnC,QAAW2iB,CAAAA,IAAaF,EAAAA,CACtBziB,EAAO,IAAA,CAAK,CAAA,EAAA,EAAK2iB,EAAU,IAAI,CAAA,EAAA,EAAKA,EAAU,WAAW,CAAA,CAAE,EAE7D,MACF,CAEA,GAAI,CAACjjB,CAAAA,CAAQ,UACX,MAAM,IAAI,MACR,wFACF,CAAA,CAGF,GAAI,CAAE,MAAA,CAAAC,IAAQ,MAAA,CAAAmD,CAAO,EAAI,MAAM0f,EAAAA,CAAiB9iB,CAAO,CAAA,CAEvD,GACEC,IAAc,GAA4B,CAAA,EAC1CA,IAAc,GAAc,CAAA,CAE5B,MAAM,IAAI,KAAA,CACR,8EACF,CAAA,CAGF,GAAI,CAACmD,CAAAA,CACH,MAAM,IAAI,KAAA,CACR,kHACF,EAGEpD,CAAAA,CAAQ,SAAA,GAAc,SACxB,MAAM2e,EAAAA,CAAavb,CAAM,CAAA,CAGvBpD,CAAAA,CAAQ,YAAc,OAAA,EACxB,MAAM6gB,GAAazd,CAAAA,CAAQ,CAAE,IAAKpD,CAAAA,CAAQ,GAAI,CAAC,EAEnD,CAAA,MAASyB,EAAO,CACdnB,CAAAA,CAAO,OAAM,CACboB,GAAAA,CAAYD,CAAK,EACnB,CACF,CAAC,CAAA,CC3FH,eAAsB0hB,GACpBnjB,CAAAA,CACA,CACA,IAAMC,CAAAA,CAAkC,GAElC8Z,GAAAA,CAAe,CACnB,IAAK/Z,CAAAA,CAAQ,GAAA,CACb,aAAcG,UAAAA,CAAK,OAAA,CAAQH,EAAQ,GAAA,CAAKA,CAAAA,CAAQ,YAAY,CAAA,CAC5D,SAAA,CAAWG,WAAK,OAAA,CAAQH,CAAAA,CAAQ,IAAKA,CAAAA,CAAQ,SAAS,CACxD,CAAA,CAGA,GAAI,CAACE,CAAAA,CAAG,UAAA,CAAW6Z,IAAa,YAAY,CAAA,CAC1C,OAAA9Z,CAAAA,CAAc,IAA2B,EAAI,IAAA,CACtC,CACL,OAAAA,CAAAA,CACA,YAAA,CAAc,KACd,MAAA,CAAQ,IACV,EAIF,GAAI,CAACC,EAAG,UAAA,CAAWC,UAAAA,CAAK,QAAQH,CAAAA,CAAQ,GAAA,CAAK,iBAAiB,CAAC,CAAA,CAC7D,OAAAC,CAAAA,CAAc,GAAc,EAAI,IAAA,CACzB,CACL,OAAAA,CAAAA,CACA,YAAA,CAAc,KACd,MAAA,CAAQ,IACV,EAIF,MAAMC,CAAAA,CAAG,MAAM6Z,GAAAA,CAAa,SAAA,CAAW,CAAE,SAAA,CAAW,IAAK,CAAC,CAAA,CAE1D,GAAI,CACF,IAAM3W,CAAAA,CAAS,MAAM6D,CAAAA,CAAUjH,CAAAA,CAAQ,GAAG,CAAA,CAE1C,OAAO,CACL,MAAA,CAAAC,CAAAA,CACA,OAAQmD,CAAAA,CACR,YAAA,CAAA2W,GACF,CACF,CAAA,KAAgB,CACdzZ,CAAAA,CAAO,KAAA,GACPA,CAAAA,CAAO,KAAA,CACL,cAAcC,CAAAA,CAAY,IAAA,CACxB,iBACF,CAAC,CAAA,mBAAA,EAAsBA,EAAY,IAAA,CACjCP,CAAAA,CAAQ,GACV,CAAC,CAAA;AAAA,2DAAA,EAAiEO,EAAY,IAAA,CAC5E,iBACF,CAAC,CAAA,qBAAA,EAAwBA,EAAY,IAAA,CAAK,MAAM,CAAC,CAAA,SAAA,CACnD,EACAD,CAAAA,CAAO,KAAA,GACP,OAAA,CAAQ,IAAA,CAAK,CAAC,EAChB,CACF,CCnDO,IAAM0Z,EAAAA,CAAqBxY,GAAAA,CAAE,OAAO,CACzC,GAAA,CAAKA,IAAE,MAAA,EAAO,CACd,aAAcA,GAAAA,CAAE,MAAA,EAAO,CACvB,SAAA,CAAWA,IAAE,MAAA,EAAO,CACpB,OAAA,CAASA,GAAAA,CAAE,SAAQ,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,KAAK,CAC/C,CAAC,EAEYyY,EAAAA,CAAQ,IAAI/T,SAAQ,CAC9B,IAAA,CAAK,gBAAgB,CAAA,CACrB,YAAY,oCAAoC,CAAA,CAChD,SAAS,YAAA,CAAc,4BAAA,CAA8B,iBAAiB,CAAA,CACtE,MAAA,CACC,qBAAA,CACA,sCAAA,CACA,YACF,CAAA,CACC,MAAA,CACC,kBACA,2DAAA,CACA,OAAA,CAAQ,KACV,CAAA,CACC,MAAA,CAAO,eAAA,CAAiB,gBAAgB,CAAA,CACxC,MAAA,CAAO,MAAO3B,CAAAA,CAAkB4B,IAAS,CACxC,MAAMid,EAAAA,CAAc,CAClB,IAAUC,CAAA,CAAA,OAAA,CAAQld,CAAAA,CAAK,GAAG,CAAA,CAC1B,YAAA,CAAc5B,EACd,SAAA,CAAW4B,CAAAA,CAAK,MAAA,CAChB,OAAA,CAASA,EAAK,OAChB,CAAC,EACH,CAAC,CAAA,CAEH,eAAeid,EAAAA,CAAcjd,CAAAA,CAA0C,CACrE,GAAI,CACF,IAAMnG,CAAAA,CAAUga,GAAmB,KAAA,CAAM7T,CAAI,EAEvC,CAAC,CAAE,MAAA,CAAAlG,CAAAA,CAAQ,aAAA8Z,GAAAA,CAAc,MAAA,CAAA3W,GAAO,CAAA,CAAG3C,GAAW,CAAA,CAAI,MAAM,OAAA,CAAQ,GAAA,CAAI,CACxE0iB,EAAAA,CAAuBnjB,CAAO,EAC9BU,CAAAA,CAAeV,CAAAA,CAAQ,GAAG,CAC5B,CAAC,CAAA,CAAA,CAEGC,CAAAA,CAAc,GAAc,CAAA,EAAK,CAACmD,KAAU,CAAC3C,GAAAA,IAC/CH,EAAO,KAAA,CACL,CAAA,EAAA,EAAKC,CAAAA,CAAY,IAAA,CACf,iBACF,CAAC,CAAA,6CAAA,EAAgDA,EAAY,IAAA,CAC3D,aACF,CAAC,CAAA,eAAA,CACH,CAAA,CACAD,CAAAA,CAAO,KAAA,GACP,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAGZL,EAAc,IAA2B,CAAA,EAAK,CAAC8Z,GAAAA,IACjDzZ,EAAO,KAAA,CACL,CAAA,qCAAA,EAAwCC,EAAY,IAAA,CAC7C8iB,CAAA,CAAA,OAAA,CAAQrjB,EAAQ,GAAA,CAAKA,CAAAA,CAAQ,YAAY,CAChD,CAAC,CAAA,CAAA,CACH,CAAA,CACAM,CAAAA,CAAO,KAAA,GACP,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGhB,IAAM6Z,CAAAA,CAAU,MAAS,WAASJ,GAAAA,CAAa,YAAA,CAAc,OAAO,CAAA,CAC9D1Y,GAAAA,CAASgZ,GAAAA,CAAe,SAAA,CAAU,KAAK,KAAA,CAAMF,CAAO,CAAC,CAAA,CAEtD9Y,IAAO,OAAA,GACVf,CAAAA,CAAO,KAAA,CACL,CAAA,+BAAA,EAAkCC,EAAY,IAAA,CAC5CwZ,GAAAA,CAAa,YACf,CAAC,CAAA,CAAA,CACH,EACAzZ,CAAAA,CAAO,KAAA,EAAM,CACb,OAAA,CAAQ,KAAK,CAAC,CAAA,CAAA,CAGhB,IAAMga,CAAAA,CAAeja,CAAAA,CAAQ,sBAAsB,CAAA,CAG7CijB,CAAAA,CAAmB,MAAMC,EAAAA,CAC7BliB,IAAO,IAAA,CACP+B,GAAAA,CACA3C,GACF,CAAA,CAGA,IAAA,IAAW4Y,KAAgBiK,CAAAA,CAAiB,KAAA,CAE1CjK,CAAAA,CAAa,KAAA,CAAQA,EAAa,KAAA,EAAO,MAAA,CACvC,CAACpB,CAAAA,CAAMzD,EAAOyN,CAAAA,GACZzN,CAAAA,GAAUyN,CAAAA,CAAK,SAAA,CAAWuB,GAAMA,CAAAA,CAAE,IAAA,GAASvL,EAAK,IAAI,CACxD,EAGIoB,CAAAA,CAAa,YAAA,GACfA,CAAAA,CAAa,YAAA,CAAeA,EAAa,YAAA,CAAa,MAAA,CACpD,CAACzU,CAAAA,CAAK4P,CAAAA,CAAOyN,IAASzN,CAAAA,GAAUyN,CAAAA,CAAK,SAAA,CAAWwB,CAAAA,EAAMA,IAAM7e,CAAG,CACjE,GAIJ,IAAA,IAAWyU,CAAAA,IAAgBiK,EAAiB,KAAA,CAAO,CACjD,GAAI,CAACjK,EAAa,KAAA,CAChB,SAGFiB,CAAAA,CAAa,KAAA,CAAM,YAAYjB,CAAAA,CAAa,IAAI,CAAA,GAAA,CAAK,CAAA,CAGrDA,EAAa,OAAA,CACX,iDAAA,CAEF,QAAWpB,CAAAA,IAAQoB,CAAAA,CAAa,MAAO,CACrC,IAAMqK,CAAAA,CAAeL,CAAA,CAAA,OAAA,CAAQtJ,IAAa,GAAA,CAAK9B,CAAAA,CAAK,IAAI,CAAA,CACxD,GAAI,CAEF,GAAI,CAAA,CADS,MAAS,CAAA,CAAA,IAAA,CAAKyL,CAAO,CAAA,EACxB,MAAA,GACR,SAEFzL,CAAAA,CAAK,QAAa,MAAS,CAAA,CAAA,QAAA,CAASyL,CAAAA,CAAS,OAAO,EACtD,CAAA,MAASC,CAAAA,CAAK,CACZ,OAAA,CAAQ,MAAM,uCAAA,CAAyCD,CAAAA,CAASC,CAAG,CAAA,CACnE,QACF,CACF,CAEA,IAAMtiB,CAAAA,CAASmX,CAAAA,CAAmB,UAAUa,CAAY,CAAA,CACxD,GAAI,CAAChY,EAAO,OAAA,CAAS,CACnBf,CAAAA,CAAO,KAAA,CACL,mCAAmCC,CAAAA,CAAY,IAAA,CAC7C8Y,CAAAA,CAAa,IACf,CAAC,CAAA,CAAA,CACH,CAAA,CACA,QACF,CAGA,MAAS,YACFgK,CAAA,CAAA,OAAA,CAAQtJ,GAAAA,CAAa,SAAA,CAAW,CAAA,EAAG1Y,EAAO,IAAA,CAAK,IAAI,CAAA,KAAA,CAAO,CAAA,CAC/D,KAAK,SAAA,CAAUA,CAAAA,CAAO,IAAA,CAAM,IAAA,CAAM,CAAC,CACrC,EACF,CAUA,GAPA,MAAS,WACP0Y,GAAAA,CAAa,YAAA,CACRsJ,CAAA,CAAA,OAAA,CAAQtJ,GAAAA,CAAa,UAAW,eAAe,CACtD,EAEAO,CAAAA,CAAa,OAAA,CAAQ,oBAAoB,CAAA,CAErCta,CAAAA,CAAQ,OAAA,CAAS,CACnBK,EACE,CAAA,iBAAA,EAAoBE,CAAAA,CAAY,KAC9B+iB,CAAAA,CAAiB,KAAA,CAAM,OAAO,QAAA,EAChC,CAAC,CAAA,OAAA,CACH,EAAE,OAAA,EAAQ,CACV,IAAA,IAAW5e,CAAAA,IAAQ4e,EAAiB,KAAA,CAAO,CACzChjB,CAAAA,CAAO,GAAA,CAAI,OAAOoE,CAAAA,CAAK,IAAI,KAAKnE,CAAAA,CAAY,IAAA,CAAKmE,EAAK,IAAI,CAAC,CAAA,CAAA,CAAG,CAAA,CAC9D,QAAWuT,CAAAA,IAAQvT,CAAAA,CAAK,OAAS,EAAC,CAChCpE,EAAO,GAAA,CAAI,CAAA,MAAA,EAAS2X,CAAAA,CAAK,IAAI,EAAE,EAEnC,CACF,CACF,CAAA,MAASxW,CAAAA,CAAO,CACdnB,CAAAA,CAAO,KAAA,EAAM,CACboB,GAAAA,CAAYD,CAAK,EACnB,CACF,CAGA,eAAe8hB,GACbhf,CAAAA,CACAnB,CAAAA,CACA3C,CAAAA,CACyC,CACzC,QAAWiE,CAAAA,IAAQH,CAAAA,CAAS,MAC1B,GAAKG,CAAAA,CAAK,OAAO,MAAA,CAKjB,IAAA,IAAWuT,CAAAA,IAAQvT,CAAAA,CAAK,MAAO,CAC7B,IAAMkf,EAAU,MAAMC,CAAAA,CACpB5L,EAAK,IAAA,CACL7U,CAAAA,CACA3C,CACF,CAAA,CAGAmjB,EAAQ,KAAA,CAAQA,CAAAA,CAAQ,OAAO,MAAA,CAAQtQ,CAAAA,EAAMA,EAAE,IAAA,GAAS2E,CAAAA,CAAK,IAAI,CAAA,CAE7D2L,EAAQ,KAAA,EACVlf,CAAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAGkf,CAAAA,CAAQ,KAAK,CAAA,CAG9BA,CAAAA,CAAQ,eACVlf,CAAAA,CAAK,YAAA,CAAeA,EAAK,YAAA,CACrBA,CAAAA,CAAK,aAAa,MAAA,CAAOkf,CAAAA,CAAQ,YAAY,CAAA,CAC7CA,EAAQ,YAAA,EAEhB,CAGF,OAAOrf,CACT,CCtNO,IAAMiZ,EAAAA,CAAM,IAAItX,SAAQ,CAC5B,IAAA,CAAK,cAAc,CAAA,CACnB,WAAA,CAAY,6CAA6C,CAAA,CACzD,OACC,iBAAA,CACA,2DAAA,CACA,OAAA,CAAQ,GAAA,EACV,CAAA,CACC,MAAA,CAAO,SAAY,CAClB5F,EAAO,IAAA,CACL,CAAA,IAAA,EAAOC,EAAY,IAAA,CACjB,qBACF,CAAC,CAAA,gCAAA,EAAmCA,CAAAA,CAAY,IAAA,CAC9C,YACF,CAAC,CAAA,iBAAA,CACH,CAAA,CACAD,EAAO,KAAA,GACT,CAAC,CAAA,CCPH,IAAMwjB,EAAAA,CAAsBtiB,GAAAA,CAAE,MAAA,CAAO,CACnC,IAAKA,GAAAA,CAAE,MAAA,EAAO,CACd,KAAA,CAAOA,IAAE,MAAA,EAAO,CAAE,UAAS,CAC3B,KAAA,CAAOA,IAAE,MAAA,EAAO,CAAE,QAAA,EAAS,CAC3B,OAAQA,GAAAA,CAAE,MAAA,GAAS,QAAA,EACrB,CAAC,CAAA,CAKYuiB,EAAAA,CAAS,IAAI7d,OAAAA,GACvB,IAAA,CAAK,QAAQ,EACb,KAAA,CAAM,MAAM,EACZ,WAAA,CAAY,8BAA8B,CAAA,CAC1C,QAAA,CACC,kBACA,iFACF,CAAA,CACC,MAAA,CACC,iBAAA,CACA,4DACA,OAAA,CAAQ,GAAA,EACV,CAAA,CACC,OAAO,qBAAA,CAAuB,cAAc,EAC5C,MAAA,CACC,sBAAA,CACA,kDACA,KACF,CAAA,CACC,MAAA,CAAO,uBAAA,CAAyB,0BAA2B,GAAG,CAAA,CAC9D,OAAO,MAAO8d,CAAAA,CAAsB7d,IAAS,CAC5C,GAAI,CACF,IAAMnG,IAAU8jB,EAAAA,CAAoB,KAAA,CAAM,CACxC,GAAA,CAAK3jB,UAAAA,CAAK,QAAQgG,CAAAA,CAAK,GAAG,CAAA,CAC1B,KAAA,CAAOA,EAAK,KAAA,CACZ,KAAA,CAAOA,CAAAA,CAAK,KAAA,CAAQ,SAASA,CAAAA,CAAK,KAAA,CAAO,EAAE,CAAA,CAAI,OAC/C,MAAA,CAAQA,CAAAA,CAAK,OAAS,QAAA,CAASA,CAAAA,CAAK,OAAQ,EAAE,CAAA,CAAI,KAAA,CACpD,CAAC,EAED,MAAMhD,CAAAA,CAAanD,GAAAA,CAAQ,GAAG,EAI9B,IAAMsH,CAAAA,CAAgBhB,CAAAA,CAAa,CACjC,MAAO,UAAA,CACP,aAAA,CAAe,CACb,GAAA,CAAKtG,GAAAA,CAAQ,GACf,CACF,CAAC,CAAA,CACGoG,CAAAA,CAAeC,EAAmBiB,CAAa,CAAA,CAG7Cf,CAAAA,CAAqBpG,UAAAA,CAAK,QAAQH,GAAAA,CAAQ,GAAA,CAAK,iBAAiB,CAAA,CACtE,GAAI6D,CAAAA,CAAQ,UAAA,CAAW0C,CAAkB,CAAA,CAAG,CAC1C,IAAMC,CAAAA,CAAiB,MAAM3C,CAAAA,CAAQ,QAAA,CAAS0C,CAAkB,CAAA,CAC1D0d,CAAAA,CAAgBte,EAAgB,OAAA,EAAQ,CAAE,MAAMa,CAAc,CAAA,CACpEJ,CAAAA,CAAeC,CAAAA,CAAmB,CAChC,GAAGiB,CAAAA,CACH,GAAG2c,CACL,CAAC,EACH,CAGA,IAAI7gB,CAAAA,CAASgD,CAAAA,CACb,GAAI,CACF,IAAM8d,CAAAA,CAAa,MAAMjd,EAAUjH,GAAAA,CAAQ,GAAG,CAAA,CAC1CkkB,CAAAA,GACF9gB,EAASiD,CAAAA,CAAmB6d,CAAU,GAE1C,CAAA,KAAQ,CAER,CAEA,GAAM,CAAE,MAAA,CAAQxe,CAAAA,CAAe,cAAAwT,GAAc,CAAA,CAC3C,MAAMnU,CAAAA,CACJif,CAAAA,CAAW,IAAKzf,CAAAA,EAAa,CAAA,EAAGA,CAAQ,CAAA,SAAA,CAAW,EACnDnB,CAAAA,CACA,CACE,OAAQ,CAAA,CAAA,CACR,SAAA,CAAW,EACb,CACF,CAAA,CACE8V,GAAAA,CAAc,MAAA,CAAS,IACzB9V,CAAAA,CAAO,UAAA,CAAasC,CAAAA,CAAc,UAAA,CAAA,CAIpCye,EAA+BH,CAAAA,CAAY5gB,CAAM,CAAA,CAGjD,IAAMwgB,IAAU,MAAMQ,EAAAA,CAAiBJ,EAA8B,CACnE,KAAA,CAAOhkB,IAAQ,KAAA,CACf,KAAA,CAAOA,GAAAA,CAAQ,KAAA,CACf,OAAQA,GAAAA,CAAQ,MAAA,CAChB,OAAAoD,CACF,CAAC,EAED,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,SAAA,CAAUwgB,IAAS,IAAA,CAAM,CAAC,CAAC,CAAA,CAC5C,OAAA,CAAQ,KAAK,CAAC,EAChB,CAAA,MAASniB,CAAAA,CAAO,CACdC,GAAAA,CAAYD,CAAK,EACnB,CAAA,OAAE,CACAqF,CAAAA,GACF,CACF,CAAC,ECxGH,IAAMud,GAAoB7iB,GAAAA,CAAE,MAAA,CAAO,CACjC,GAAA,CAAKA,IAAE,MAAA,EACT,CAAC,CAAA,CAEY8iB,EAAAA,CAAO,IAAIpe,OAAAA,EAAQ,CAC7B,IAAA,CAAK,MAAM,EACX,WAAA,CAAY,8BAA8B,CAAA,CAC1C,QAAA,CAAS,aAAc,gCAAgC,CAAA,CACvD,MAAA,CACC,iBAAA,CACA,4DACA,OAAA,CAAQ,GAAA,EACV,CAAA,CACC,MAAA,CAAO,MAAOqe,CAAAA,CAAiBpe,CAAAA,GAAS,CACvC,GAAI,CACF,IAAMnG,GAAAA,CAAUqkB,GAAkB,KAAA,CAAM,CACtC,IAAKlkB,UAAAA,CAAK,OAAA,CAAQgG,CAAAA,CAAK,GAAG,CAC5B,CAAC,CAAA,CAED,MAAMhD,CAAAA,CAAanD,GAAAA,CAAQ,GAAG,CAAA,CAG9B,IAAIoG,CAAAA,CAAeC,CAAAA,CAAmB,EAAE,CAAA,CAGlCE,CAAAA,CAAqBpG,UAAAA,CAAK,QAAQH,GAAAA,CAAQ,GAAA,CAAK,iBAAiB,CAAA,CACtE,GAAI6D,CAAAA,CAAQ,UAAA,CAAW0C,CAAkB,CAAA,CAAG,CAC1C,IAAMC,CAAAA,CAAiB,MAAM3C,CAAAA,CAAQ,QAAA,CAAS0C,CAAkB,CAAA,CAC1D0d,CAAAA,CAAgBte,EAAgB,OAAA,EAAQ,CAAE,MAAMa,CAAc,CAAA,CACpEJ,CAAAA,CAAeC,CAAAA,CAAmB4d,CAAa,EACjD,CAGA,IAAI7gB,CAAAA,CAASgD,CAAAA,CACb,GAAI,CACF,IAAM8d,CAAAA,CAAa,MAAMjd,EAAUjH,GAAAA,CAAQ,GAAG,CAAA,CAC1CkkB,CAAAA,GACF9gB,EAASiD,CAAAA,CAAmB6d,CAAU,CAAA,EAE1C,CAAA,KAAQ,CAER,CAEA,GAAM,CAAE,MAAA,CAAQxe,CAAAA,CAAe,cAAAwT,CAAc,CAAA,CAC3C,MAAMnU,CAAAA,CAAyBwf,EAAOnhB,CAAAA,CAAQ,CAC5C,OAAQ,CAAA,CAAA,CACR,SAAA,CAAW,EACb,CAAC,CAAA,CACC8V,CAAAA,CAAc,MAAA,CAAS,IACzB9V,CAAAA,CAAO,UAAA,CAAasC,EAAc,UAAA,CAAA,CAIpCye,CAAAA,CAA+BI,EAAOnhB,CAAM,CAAA,CAE5C,IAAMuZ,GAAAA,CAAU,MAAMhW,CAAAA,CAAiB4d,CAAAA,CAAO,CAAE,MAAA,CAAAnhB,CAAO,CAAC,CAAA,CACxD,OAAA,CAAQ,GAAA,CAAI,KAAK,SAAA,CAAUuZ,GAAAA,CAAS,KAAM,CAAC,CAAC,EAC5C,OAAA,CAAQ,IAAA,CAAK,CAAC,EAChB,OAASlb,CAAAA,CAAO,CACdC,GAAAA,CAAYD,CAAK,EACnB,CAAA,OAAE,CACAqF,CAAAA,GACF,CACF,CAAC,CAAA,CC7EH,IAAA0d,EAAAA,CAAA,CAEE,OAAA,CAAW,QAsHb,ECvGA,OAAA,CAAQ,EAAA,CAAG,QAAA,CAAU,IAAM,QAAQ,IAAA,CAAK,CAAC,CAAC,CAAA,CAC1C,QAAQ,EAAA,CAAG,SAAA,CAAW,IAAM,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAC,CAAA,CAE3C,eAAeC,EAAAA,EAAO,CACpB,IAAMC,CAAAA,CAAU,IAAIxe,OAAAA,EAAQ,CACzB,KAAK,QAAQ,CAAA,CACb,WAAA,CAAY,2CAA2C,EACvD,OAAA,CACCse,EAAAA,CAAY,OAAW,CACvB,eAAA,CACA,4BACF,CAAA,CAEFE,CAAAA,CACG,UAAA,CAAWze,EAAI,EACf,UAAA,CAAWwU,EAAM,CAAA,CACjB,UAAA,CAAW9B,EAAG,CAAA,CACd,UAAA,CAAWwD,EAAI,CAAA,CACf,WAAWmI,EAAI,CAAA,CACf,WAAWP,EAAM,CAAA,CACjB,WAAWb,EAAO,CAAA,CAClB,UAAA,CAAW9F,EAAI,EACf,UAAA,CAAWnD,EAAK,EAChB,UAAA,CAAWuD,EAAG,EAEjBkH,CAAAA,CAAQ,UAAA,CAAWzK,EAAa,CAAA,CAAE,WAAWuD,EAAW,CAAA,CAExDkH,EAAQ,KAAA,GACV,CAEAD,EAAAA,EAAK","file":"index.js","sourcesContent":["import path from \"path\"\nimport { initOptionsSchema } from \"@/src/commands/init\"\nimport * as ERRORS from \"@/src/utils/errors\"\nimport { getProjectInfo } from \"@/src/utils/get-project-info\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport fs from \"fs-extra\"\nimport { z } from \"zod\"\n\nexport async function preFlightInit(\n options: z.infer<typeof initOptionsSchema>\n) {\n const errors: Record<string, boolean> = {}\n\n // Ensure target directory exists.\n // Check for empty project. We assume if no package.json exists, the project is empty.\n if (\n !fs.existsSync(options.cwd) ||\n !fs.existsSync(path.resolve(options.cwd, \"package.json\"))\n ) {\n errors[ERRORS.MISSING_DIR_OR_EMPTY_PROJECT] = true\n return {\n errors,\n projectInfo: null,\n }\n }\n\n const projectSpinner = spinner(`Preflight checks.`, {\n silent: options.silent,\n }).start()\n\n if (\n fs.existsSync(path.resolve(options.cwd, \"components.json\")) &&\n !options.force\n ) {\n projectSpinner?.fail()\n logger.break()\n logger.error(\n `A ${highlighter.info(\n \"components.json\"\n )} file already exists at ${highlighter.info(\n options.cwd\n )}.\\nTo start over, remove the ${highlighter.info(\n \"components.json\"\n )} file and run ${highlighter.info(\"init\")} again.`\n )\n logger.break()\n process.exit(1)\n }\n\n projectSpinner?.succeed()\n\n const frameworkSpinner = spinner(`Verifying framework.`, {\n silent: options.silent,\n }).start()\n const projectInfo = await getProjectInfo(options.cwd)\n if (!projectInfo || projectInfo?.framework.name === \"manual\") {\n errors[ERRORS.UNSUPPORTED_FRAMEWORK] = true\n frameworkSpinner?.fail()\n logger.break()\n if (projectInfo?.framework.links.installation) {\n logger.error(\n `We could not detect a supported framework at ${highlighter.info(\n options.cwd\n )}.\\n` +\n `Visit ${highlighter.info(\n projectInfo?.framework.links.installation\n )} to manually configure your project.\\nOnce configured, you can use the cli to add components.`\n )\n }\n logger.break()\n process.exit(1)\n }\n frameworkSpinner?.succeed(\n `Verifying framework. Found ${highlighter.info(\n projectInfo.framework.label\n )}.`\n )\n\n let tailwindSpinnerMessage = \"Validating Tailwind CSS.\"\n\n if (projectInfo.tailwindVersion === \"v4\") {\n tailwindSpinnerMessage = `Validating Tailwind CSS config. Found ${highlighter.info(\n \"v4\"\n )}.`\n }\n\n const tailwindSpinner = spinner(tailwindSpinnerMessage, {\n silent: options.silent,\n }).start()\n if (\n projectInfo.tailwindVersion === \"v3\" &&\n (!projectInfo?.tailwindConfigFile || !projectInfo?.tailwindCssFile)\n ) {\n errors[ERRORS.TAILWIND_NOT_CONFIGURED] = true\n tailwindSpinner?.fail()\n } else if (\n projectInfo.tailwindVersion === \"v4\" &&\n !projectInfo?.tailwindCssFile\n ) {\n errors[ERRORS.TAILWIND_NOT_CONFIGURED] = true\n tailwindSpinner?.fail()\n } else if (!projectInfo.tailwindVersion) {\n errors[ERRORS.TAILWIND_NOT_CONFIGURED] = true\n tailwindSpinner?.fail()\n } else {\n tailwindSpinner?.succeed()\n }\n\n const tsConfigSpinner = spinner(`Validating import alias.`, {\n silent: options.silent,\n }).start()\n if (!projectInfo?.aliasPrefix) {\n errors[ERRORS.IMPORT_ALIAS_MISSING] = true\n tsConfigSpinner?.fail()\n } else {\n tsConfigSpinner?.succeed()\n }\n\n if (Object.keys(errors).length > 0) {\n if (errors[ERRORS.TAILWIND_NOT_CONFIGURED]) {\n logger.break()\n logger.error(\n `No Tailwind CSS configuration found at ${highlighter.info(\n options.cwd\n )}.`\n )\n logger.error(\n `It is likely you do not have Tailwind CSS installed or have an invalid configuration.`\n )\n logger.error(`Install Tailwind CSS then try again.`)\n if (projectInfo?.framework.links.tailwind) {\n logger.error(\n `Visit ${highlighter.info(\n projectInfo?.framework.links.tailwind\n )} to get started.`\n )\n }\n }\n\n if (errors[ERRORS.IMPORT_ALIAS_MISSING]) {\n logger.break()\n logger.error(`No import alias found in your tsconfig.json file.`)\n if (projectInfo?.framework.links.installation) {\n logger.error(\n `Visit ${highlighter.info(\n projectInfo?.framework.links.installation\n )} to learn how to set an import alias.`\n )\n }\n }\n\n logger.break()\n process.exit(1)\n }\n\n return {\n errors,\n projectInfo,\n }\n}\n","import os from \"os\"\nimport path from \"path\"\nimport { initOptionsSchema } from \"@/src/commands/init\"\nimport { fetchRegistry } from \"@/src/registry/fetcher\"\nimport { getPackageManager } from \"@/src/utils/get-package-manager\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { execa } from \"execa\"\nimport fs from \"fs-extra\"\nimport prompts from \"prompts\"\nimport { z } from \"zod\"\n\nconst GITHUB_TEMPLATE_URL =\n \"https://codeload.github.com/shadcn-ui/ui/tar.gz/main\"\n\nexport const TEMPLATES = {\n next: \"next\",\n \"next-monorepo\": \"next-monorepo\",\n vite: \"vite\",\n start: \"start\",\n} as const\n\nexport async function createProject(\n options: Pick<\n z.infer<typeof initOptionsSchema>,\n \"cwd\" | \"name\" | \"force\" | \"srcDir\" | \"components\" | \"template\"\n >\n) {\n options = {\n srcDir: false,\n ...options,\n }\n\n let template: keyof typeof TEMPLATES =\n options.template && TEMPLATES[options.template as keyof typeof TEMPLATES]\n ? (options.template as keyof typeof TEMPLATES)\n : \"next\"\n let projectName: string =\n options.name ??\n (template === TEMPLATES.next ||\n template === TEMPLATES.vite ||\n template === TEMPLATES.start\n ? \"my-app\"\n : \"my-monorepo\")\n let nextVersion = \"latest\"\n\n const isRemoteComponent =\n options.components?.length === 1 &&\n !!options.components[0].match(/\\/chat\\/b\\//)\n\n if (options.components && isRemoteComponent) {\n try {\n const [result] = await fetchRegistry(options.components)\n const { meta } = z\n .object({\n meta: z.object({\n nextVersion: z.string(),\n }),\n })\n .parse(result)\n nextVersion = meta.nextVersion\n\n // Force template to next for remote components.\n template = TEMPLATES.next\n } catch (error) {\n logger.break()\n handleError(error)\n }\n }\n\n if (!options.force) {\n const { type, name } = await prompts([\n {\n type: options.template || isRemoteComponent ? null : \"select\",\n name: \"type\",\n message: `The path ${highlighter.info(\n options.cwd\n )} does not contain a package.json file.\\n Would you like to start a new project?`,\n choices: [\n { title: \"Next.js\", value: \"next\" },\n { title: \"Next.js (Monorepo)\", value: \"next-monorepo\" },\n { title: \"Vite\", value: \"vite\" },\n { title: \"TanStack Start\", value: \"start\" },\n ],\n initial: 0,\n },\n {\n type: options.name ? null : \"text\",\n name: \"name\",\n message: \"What is your project named?\",\n initial: projectName,\n format: (value: string) => value.trim(),\n validate: (value: string) =>\n value.length > 128\n ? `Name should be less than 128 characters.`\n : true,\n },\n ])\n\n template = type ?? template\n projectName = name ?? projectName\n }\n\n const packageManager = await getPackageManager(options.cwd, {\n withFallback: true,\n })\n\n const projectPath = `${options.cwd}/${projectName}`\n\n // Check if path is writable.\n try {\n await fs.access(options.cwd, fs.constants.W_OK)\n } catch (error) {\n logger.break()\n logger.error(`The path ${highlighter.info(options.cwd)} is not writable.`)\n logger.error(\n `It is likely you do not have write permissions for this folder or the path ${highlighter.info(\n options.cwd\n )} does not exist.`\n )\n logger.break()\n process.exit(1)\n }\n\n if (fs.existsSync(path.resolve(options.cwd, projectName, \"package.json\"))) {\n logger.break()\n logger.error(\n `A project with the name ${highlighter.info(projectName)} already exists.`\n )\n logger.error(`Please choose a different name and try again.`)\n logger.break()\n process.exit(1)\n }\n\n if (template === TEMPLATES.next) {\n await createNextProject(projectPath, {\n version: nextVersion,\n cwd: options.cwd,\n packageManager,\n srcDir: !!options.srcDir,\n })\n }\n\n if (template === TEMPLATES[\"next-monorepo\"]) {\n await createMonorepoProject(projectPath, {\n packageManager,\n })\n }\n\n if (template === TEMPLATES.vite) {\n await createViteProject(projectPath, {\n packageManager,\n })\n }\n\n if (template === TEMPLATES.start) {\n await createStartProject(projectPath, {\n packageManager,\n })\n }\n\n return {\n projectPath,\n projectName,\n template,\n }\n}\n\nasync function createNextProject(\n projectPath: string,\n options: {\n version: string\n cwd: string\n packageManager: string\n srcDir: boolean\n }\n) {\n const createSpinner = spinner(\n `Creating a new Next.js project. This may take a few minutes.`\n ).start()\n\n // Note: pnpm fails here. Fallback to npx with --use-PACKAGE-MANAGER.\n const args = [\n \"--tailwind\",\n \"--eslint\",\n \"--typescript\",\n \"--app\",\n options.srcDir ? \"--src-dir\" : \"--no-src-dir\",\n \"--no-import-alias\",\n `--use-${options.packageManager}`,\n ]\n\n if (\n options.version.startsWith(\"15\") ||\n options.version.startsWith(\"latest\") ||\n options.version.startsWith(\"canary\")\n ) {\n args.push(\"--turbopack\")\n }\n\n if (\n options.version.startsWith(\"latest\") ||\n options.version.startsWith(\"canary\")\n ) {\n args.push(\"--no-react-compiler\")\n }\n\n try {\n await execa(\n \"npx\",\n [`create-next-app@${options.version}`, projectPath, \"--silent\", ...args],\n {\n cwd: options.cwd,\n }\n )\n } catch (error) {\n logger.break()\n logger.error(\n `Something went wrong creating a new Next.js project. Please try again.`\n )\n process.exit(1)\n }\n\n createSpinner?.succeed(\"Creating a new Next.js project.\")\n}\n\nasync function createMonorepoProject(\n projectPath: string,\n options: {\n packageManager: string\n }\n) {\n const createSpinner = spinner(\n `Creating a new Next.js monorepo. This may take a few minutes.`\n ).start()\n\n try {\n // Get the template.\n const templatePath = path.join(os.tmpdir(), `shadcn-template-${Date.now()}`)\n await fs.ensureDir(templatePath)\n const response = await fetch(GITHUB_TEMPLATE_URL)\n if (!response.ok) {\n throw new Error(`Failed to download template: ${response.statusText}`)\n }\n\n // Write the tar file\n const tarPath = path.resolve(templatePath, \"template.tar.gz\")\n await fs.writeFile(tarPath, Buffer.from(await response.arrayBuffer()))\n await execa(\"tar\", [\n \"-xzf\",\n tarPath,\n \"-C\",\n templatePath,\n \"--strip-components=2\",\n \"ui-main/templates/monorepo-next\",\n ])\n const extractedPath = path.resolve(templatePath, \"monorepo-next\")\n await fs.move(extractedPath, projectPath)\n await fs.remove(templatePath)\n\n // Run install.\n await execa(options.packageManager, [\"install\"], {\n cwd: projectPath,\n })\n // await execa(\"cd\", [cwd])\n\n // Write project name to the package.json\n const packageJsonPath = path.join(projectPath, \"package.json\")\n if (fs.existsSync(packageJsonPath)) {\n const packageJsonContent = await fs.readFile(packageJsonPath, \"utf8\")\n const packageJson = JSON.parse(packageJsonContent)\n packageJson.name = projectPath.split(\"/\").pop()\n await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2))\n }\n\n // Try git init.\n const cwd = process.cwd()\n await execa(\"git\", [\"--version\"], { cwd: projectPath })\n await execa(\"git\", [\"init\"], { cwd: projectPath })\n await execa(\"git\", [\"add\", \"-A\"], { cwd: projectPath })\n await execa(\"git\", [\"commit\", \"-m\", \"Initial commit\"], {\n cwd: projectPath,\n })\n\n createSpinner?.succeed(\"Creating a new Next.js monorepo.\")\n } catch (error) {\n createSpinner?.fail(\"Something went wrong creating a new Next.js monorepo.\")\n handleError(error)\n }\n}\n\nasync function createViteProject(\n projectPath: string,\n options: {\n packageManager: string\n }\n) {\n const createSpinner = spinner(\n `Creating a new Vite project. This may take a few minutes.`\n ).start()\n\n try {\n // Get the template.\n const templatePath = path.join(os.tmpdir(), `shadcn-template-${Date.now()}`)\n await fs.ensureDir(templatePath)\n const response = await fetch(GITHUB_TEMPLATE_URL)\n if (!response.ok) {\n throw new Error(`Failed to download template: ${response.statusText}`)\n }\n\n // Write the tar file.\n const tarPath = path.resolve(templatePath, \"template.tar.gz\")\n await fs.writeFile(tarPath, Buffer.from(await response.arrayBuffer()))\n await execa(\"tar\", [\n \"-xzf\",\n tarPath,\n \"-C\",\n templatePath,\n \"--strip-components=2\",\n \"ui-main/templates/vite-app\",\n ])\n const extractedPath = path.resolve(templatePath, \"vite-app\")\n await fs.move(extractedPath, projectPath)\n await fs.remove(templatePath)\n\n // Remove pnpm-lock.yaml if using a different package manager.\n if (options.packageManager !== \"pnpm\") {\n const lockFilePath = path.join(projectPath, \"pnpm-lock.yaml\")\n if (fs.existsSync(lockFilePath)) {\n await fs.remove(lockFilePath)\n }\n }\n\n // Run install.\n await execa(options.packageManager, [\"install\"], {\n cwd: projectPath,\n })\n\n // Write project name to the package.json.\n const packageJsonPath = path.join(projectPath, \"package.json\")\n if (fs.existsSync(packageJsonPath)) {\n const packageJsonContent = await fs.readFile(packageJsonPath, \"utf8\")\n const packageJson = JSON.parse(packageJsonContent)\n packageJson.name = projectPath.split(\"/\").pop()\n await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2))\n }\n\n // Try git init.\n await execa(\"git\", [\"--version\"], { cwd: projectPath })\n await execa(\"git\", [\"init\"], { cwd: projectPath })\n await execa(\"git\", [\"add\", \"-A\"], { cwd: projectPath })\n await execa(\"git\", [\"commit\", \"-m\", \"Initial commit\"], {\n cwd: projectPath,\n })\n\n createSpinner?.succeed(\"Creating a new Vite project.\")\n } catch (error) {\n createSpinner?.fail(\"Something went wrong creating a new Vite project.\")\n handleError(error)\n }\n}\n\nasync function createStartProject(\n projectPath: string,\n options: {\n packageManager: string\n }\n) {\n const createSpinner = spinner(\n `Creating a new TanStack Start project. This may take a few minutes.`\n ).start()\n\n try {\n // Get the template.\n const templatePath = path.join(os.tmpdir(), `shadcn-template-${Date.now()}`)\n await fs.ensureDir(templatePath)\n const response = await fetch(GITHUB_TEMPLATE_URL)\n if (!response.ok) {\n throw new Error(`Failed to download template: ${response.statusText}`)\n }\n\n // Write the tar file.\n const tarPath = path.resolve(templatePath, \"template.tar.gz\")\n await fs.writeFile(tarPath, Buffer.from(await response.arrayBuffer()))\n await execa(\"tar\", [\n \"-xzf\",\n tarPath,\n \"-C\",\n templatePath,\n \"--strip-components=2\",\n \"ui-main/templates/start-app\",\n ])\n const extractedPath = path.resolve(templatePath, \"start-app\")\n await fs.move(extractedPath, projectPath)\n await fs.remove(templatePath)\n\n // Remove pnpm-lock.yaml if using a different package manager.\n if (options.packageManager !== \"pnpm\") {\n const lockFilePath = path.join(projectPath, \"pnpm-lock.yaml\")\n if (fs.existsSync(lockFilePath)) {\n await fs.remove(lockFilePath)\n }\n }\n\n // Run install.\n await execa(options.packageManager, [\"install\"], {\n cwd: projectPath,\n })\n\n // Write project name to the package.json.\n const packageJsonPath = path.join(projectPath, \"package.json\")\n if (fs.existsSync(packageJsonPath)) {\n const packageJsonContent = await fs.readFile(packageJsonPath, \"utf8\")\n const packageJson = JSON.parse(packageJsonContent)\n packageJson.name = projectPath.split(\"/\").pop()\n await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2))\n }\n\n // Try git init.\n await execa(\"git\", [\"--version\"], { cwd: projectPath })\n await execa(\"git\", [\"init\"], { cwd: projectPath })\n await execa(\"git\", [\"add\", \"-A\"], { cwd: projectPath })\n await execa(\"git\", [\"commit\", \"-m\", \"Initial commit\"], {\n cwd: projectPath,\n })\n\n createSpinner?.succeed(\"Creating a new TanStack Start project.\")\n } catch (error) {\n createSpinner?.fail(\n \"Something went wrong creating a new TanStack Start project.\"\n )\n handleError(error)\n }\n}\n","import { existsSync } from \"fs\"\nimport { join } from \"path\"\nimport { logger } from \"@/src/utils/logger\"\n\nexport async function loadEnvFiles(cwd: string = process.cwd()): Promise<void> {\n try {\n const { config } = await import(\"@dotenvx/dotenvx\")\n const envFiles = [\n \".env.local\",\n \".env.development.local\",\n \".env.development\",\n \".env\",\n ]\n\n for (const envFile of envFiles) {\n const envPath = join(cwd, envFile)\n if (existsSync(envPath)) {\n config({\n path: envPath,\n overload: false,\n quiet: true,\n })\n }\n }\n } catch (error) {\n logger.warn(\"Failed to load env files:\", error)\n }\n}\n","import fsExtra from \"fs-extra\"\n\nexport const FILE_BACKUP_SUFFIX = \".bak\"\n\nexport function createFileBackup(filePath: string): string | null {\n if (!fsExtra.existsSync(filePath)) {\n return null\n }\n\n const backupPath = `${filePath}${FILE_BACKUP_SUFFIX}`\n try {\n fsExtra.renameSync(filePath, backupPath)\n return backupPath\n } catch (error) {\n console.error(`Failed to create backup of ${filePath}: ${error}`)\n return null\n }\n}\n\nexport function restoreFileBackup(filePath: string): boolean {\n const backupPath = `${filePath}${FILE_BACKUP_SUFFIX}`\n\n if (!fsExtra.existsSync(backupPath)) {\n return false\n }\n\n try {\n fsExtra.renameSync(backupPath, filePath)\n return true\n } catch (error) {\n console.error(\n `Warning: Could not restore backup file ${backupPath}: ${error}`\n )\n return false\n }\n}\n\nexport function deleteFileBackup(filePath: string): boolean {\n const backupPath = `${filePath}${FILE_BACKUP_SUFFIX}`\n\n if (!fsExtra.existsSync(backupPath)) {\n return false\n }\n\n try {\n fsExtra.unlinkSync(backupPath)\n return true\n } catch (error) {\n // Best effort - don't log as this is just cleanup\n return false\n }\n}\n","import { BUILTIN_REGISTRIES } from \"@/src/registry/constants\"\nimport { RegistryNotConfiguredError } from \"@/src/registry/errors\"\nimport { parseRegistryAndItemFromString } from \"@/src/registry/parser\"\nimport { fetchRegistryItems } from \"@/src/registry/resolver\"\nimport { Config } from \"@/src/utils/get-config\"\n\n// Recursively discovers all registry namespaces including nested ones.\nexport async function resolveRegistryNamespaces(\n components: string[],\n config: Config\n) {\n const discoveredNamespaces = new Set<string>()\n const visitedItems = new Set<string>()\n const itemsToProcess = [...components]\n\n while (itemsToProcess.length > 0) {\n const currentItem = itemsToProcess.shift()!\n\n if (visitedItems.has(currentItem)) {\n continue\n }\n visitedItems.add(currentItem)\n\n const { registry } = parseRegistryAndItemFromString(currentItem)\n if (registry && !BUILTIN_REGISTRIES[registry]) {\n discoveredNamespaces.add(registry)\n }\n\n try {\n const [item] = await fetchRegistryItems([currentItem], config, {\n useCache: true,\n })\n\n if (item?.registryDependencies) {\n for (const dep of item.registryDependencies) {\n const { registry: depRegistry } = parseRegistryAndItemFromString(dep)\n if (depRegistry && !BUILTIN_REGISTRIES[depRegistry]) {\n discoveredNamespaces.add(depRegistry)\n }\n\n if (!visitedItems.has(dep)) {\n itemsToProcess.push(dep)\n }\n }\n }\n } catch (error) {\n // If a registry is not configured, we still track it.\n if (error instanceof RegistryNotConfiguredError) {\n const { registry } = parseRegistryAndItemFromString(currentItem)\n if (registry && !BUILTIN_REGISTRIES[registry]) {\n discoveredNamespaces.add(registry)\n }\n continue\n }\n\n // For other errors (network, parsing, etc.), we skip this item\n // but continue processing others to discover as many namespaces as possible.\n continue\n }\n }\n\n return Array.from(discoveredNamespaces)\n}\n","import path from \"path\"\nimport { getRegistriesIndex } from \"@/src/registry/api\"\nimport { BUILTIN_REGISTRIES } from \"@/src/registry/constants\"\nimport { resolveRegistryNamespaces } from \"@/src/registry/namespaces\"\nimport { rawConfigSchema } from \"@/src/registry/schema\"\nimport { Config } from \"@/src/utils/get-config\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport fs from \"fs-extra\"\n\nexport async function ensureRegistriesInConfig(\n components: string[],\n config: Config,\n options: {\n silent?: boolean\n writeFile?: boolean\n } = {}\n) {\n options = {\n silent: false,\n writeFile: true,\n ...options,\n }\n\n // Use resolveRegistryNamespaces to discover all namespaces including dependencies.\n const registryNames = await resolveRegistryNamespaces(components, config)\n\n const missingRegistries = registryNames.filter(\n (registry) =>\n !config.registries?.[registry] &&\n !Object.keys(BUILTIN_REGISTRIES).includes(registry)\n )\n\n if (missingRegistries.length === 0) {\n return {\n config,\n newRegistries: [],\n }\n }\n\n // We'll fail silently if we can't fetch the registry index.\n // The error handling by caller will guide user to add the missing registries.\n const registryIndex = await getRegistriesIndex({\n useCache: process.env.NODE_ENV !== \"development\",\n })\n\n if (!registryIndex) {\n return {\n config,\n newRegistries: [],\n }\n }\n\n const foundRegistries: Record<string, string> = {}\n for (const registry of missingRegistries) {\n if (registryIndex[registry]) {\n foundRegistries[registry] = registryIndex[registry]\n }\n }\n\n if (Object.keys(foundRegistries).length === 0) {\n return {\n config,\n newRegistries: [],\n }\n }\n\n // Filter out built-in registries from existing config before merging\n const existingRegistries = Object.fromEntries(\n Object.entries(config.registries || {}).filter(\n ([key]) => !Object.keys(BUILTIN_REGISTRIES).includes(key)\n )\n )\n\n const newConfigWithRegistries = {\n ...config,\n registries: {\n ...existingRegistries,\n ...foundRegistries,\n },\n }\n\n if (options.writeFile) {\n const { resolvedPaths, ...configWithoutResolvedPaths } =\n newConfigWithRegistries\n const configSpinner = spinner(\"Updating components.json.\", {\n silent: options.silent,\n }).start()\n const updatedConfig = rawConfigSchema.parse(configWithoutResolvedPaths)\n await fs.writeFile(\n path.resolve(config.resolvedPaths.cwd, \"components.json\"),\n JSON.stringify(updatedConfig, null, 2) + \"\\n\",\n \"utf-8\"\n )\n configSpinner.succeed()\n }\n\n return {\n config: newConfigWithRegistries,\n newRegistries: Object.keys(foundRegistries),\n }\n}\n","import { promises as fs } from \"fs\"\nimport path from \"path\"\nimport { preFlightInit } from \"@/src/preflights/preflight-init\"\nimport {\n getRegistryBaseColors,\n getRegistryItems,\n getRegistryStyles,\n} from \"@/src/registry/api\"\nimport { buildUrlAndHeadersForRegistryItem } from \"@/src/registry/builder\"\nimport { configWithDefaults } from \"@/src/registry/config\"\nimport { BASE_COLORS, BUILTIN_REGISTRIES } from \"@/src/registry/constants\"\nimport { clearRegistryContext } from \"@/src/registry/context\"\nimport { rawConfigSchema } from \"@/src/schema\"\nimport { addComponents } from \"@/src/utils/add-components\"\nimport { TEMPLATES, createProject } from \"@/src/utils/create-project\"\nimport { loadEnvFiles } from \"@/src/utils/env-loader\"\nimport * as ERRORS from \"@/src/utils/errors\"\nimport {\n FILE_BACKUP_SUFFIX,\n createFileBackup,\n deleteFileBackup,\n restoreFileBackup,\n} from \"@/src/utils/file-helper\"\nimport {\n DEFAULT_COMPONENTS,\n DEFAULT_TAILWIND_CONFIG,\n DEFAULT_TAILWIND_CSS,\n DEFAULT_UTILS,\n createConfig,\n getConfig,\n resolveConfigPaths,\n type Config,\n} from \"@/src/utils/get-config\"\nimport {\n getProjectConfig,\n getProjectInfo,\n getProjectTailwindVersionFromConfig,\n} from \"@/src/utils/get-project-info\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { ensureRegistriesInConfig } from \"@/src/utils/registries\"\nimport { resolveImport } from \"@/src/utils/resolve-import\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { updateTailwindContent } from \"@/src/utils/updaters/update-tailwind-content\"\nimport { Command } from \"commander\"\nimport deepmerge from \"deepmerge\"\nimport fsExtra from \"fs-extra\"\nimport prompts from \"prompts\"\nimport { z } from \"zod\"\n\nprocess.on(\"exit\", (code) => {\n const filePath = path.resolve(process.cwd(), \"components.json\")\n\n // Delete backup if successful.\n if (code === 0) {\n return deleteFileBackup(filePath)\n }\n\n // Restore backup if error.\n return restoreFileBackup(filePath)\n})\n\nexport const initOptionsSchema = z.object({\n cwd: z.string(),\n name: z.string().optional(),\n components: z.array(z.string()).optional(),\n yes: z.boolean(),\n defaults: z.boolean(),\n force: z.boolean(),\n silent: z.boolean(),\n isNewProject: z.boolean(),\n srcDir: z.boolean().optional(),\n cssVariables: z.boolean(),\n template: z\n .string()\n .optional()\n .refine(\n (val) => {\n if (val) {\n return TEMPLATES[val as keyof typeof TEMPLATES]\n }\n return true\n },\n {\n message:\n \"Invalid template. Please use 'next', 'vite', 'start' or 'next-monorepo'.\",\n }\n ),\n baseColor: z\n .string()\n .optional()\n .refine(\n (val) => {\n if (val) {\n return BASE_COLORS.find((color) => color.name === val)\n }\n\n return true\n },\n {\n message: `Invalid base color. Please use '${BASE_COLORS.map(\n (color) => color.name\n ).join(\"', '\")}'`,\n }\n ),\n baseStyle: z.boolean(),\n // Config from registry:base item to merge into components.json.\n registryBaseConfig: rawConfigSchema.deepPartial().optional(),\n})\n\nexport const init = new Command()\n .name(\"init\")\n .description(\"initialize your project and install dependencies\")\n .argument(\"[components...]\", \"names, url or local path to component\")\n .option(\n \"-t, --template <template>\",\n \"the template to use. (next, start, vite, next-monorepo)\"\n )\n .option(\n \"-b, --base-color <base-color>\",\n \"the base color to use. (neutral, gray, zinc, stone, slate)\",\n undefined\n )\n .option(\"-y, --yes\", \"skip confirmation prompt.\", true)\n .option(\"-d, --defaults,\", \"use default configuration.\", false)\n .option(\"-f, --force\", \"force overwrite of existing configuration.\", false)\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .option(\"-s, --silent\", \"mute output.\", false)\n .option(\n \"--src-dir\",\n \"use the src directory when creating a new project.\",\n false\n )\n .option(\n \"--no-src-dir\",\n \"do not use the src directory when creating a new project.\"\n )\n .option(\"--css-variables\", \"use css variables for theming.\", true)\n .option(\"--no-css-variables\", \"do not use css variables for theming.\")\n .option(\"--no-base-style\", \"do not install the base shadcn style.\")\n .action(async (components, opts) => {\n try {\n // Apply defaults when --defaults flag is set.\n if (opts.defaults) {\n opts.template = opts.template || \"next\"\n opts.baseColor = opts.baseColor || \"neutral\"\n }\n\n const options = initOptionsSchema.parse({\n cwd: path.resolve(opts.cwd),\n isNewProject: false,\n components,\n ...opts,\n })\n\n await loadEnvFiles(options.cwd)\n\n // We need to check if we're initializing with a new style.\n // This will allow us to determine if we need to install the base style.\n // And if we should prompt the user for a base color.\n if (components.length > 0) {\n // We don't know the full config at this point.\n // So we'll use a shadow config to fetch the first item.\n let shadowConfig = configWithDefaults(\n createConfig({\n resolvedPaths: {\n cwd: options.cwd,\n },\n })\n )\n\n // Check if there's a components.json file.\n // If so, we'll merge with our shadow config.\n const componentsJsonPath = path.resolve(options.cwd, \"components.json\")\n if (fsExtra.existsSync(componentsJsonPath)) {\n const existingConfig = await fsExtra.readJson(componentsJsonPath)\n const config = rawConfigSchema.partial().parse(existingConfig)\n const baseConfig = createConfig({\n resolvedPaths: {\n cwd: options.cwd,\n },\n })\n shadowConfig = configWithDefaults({\n ...config,\n resolvedPaths: {\n ...baseConfig.resolvedPaths,\n cwd: options.cwd,\n },\n })\n\n // Since components.json might not be valid at this point.\n // Temporarily rename components.json to allow preflight to run.\n // We'll rename it back after preflight.\n createFileBackup(componentsJsonPath)\n }\n\n // Ensure all registries used in components are configured.\n const { config: updatedConfig } = await ensureRegistriesInConfig(\n components,\n shadowConfig,\n {\n silent: true,\n writeFile: false,\n }\n )\n shadowConfig = updatedConfig\n\n // This forces a shadowConfig validation early in the process.\n buildUrlAndHeadersForRegistryItem(components[0], shadowConfig)\n\n const [item] = await getRegistryItems([components[0]], {\n config: shadowConfig,\n })\n\n // Set options from registry:base.\n if (item?.type === \"registry:base\") {\n if (item.config) {\n // Merge config values into shadowConfig.\n shadowConfig = configWithDefaults(\n deepmerge(shadowConfig, item.config)\n )\n // Store config to be merged into components.json later.\n options.registryBaseConfig = item.config\n }\n options.baseStyle =\n item.extends === \"none\" ? false : options.baseStyle\n }\n\n if (item?.type === \"registry:style\") {\n // Set a default base color so we're not prompted.\n // The style will extend or override it.\n options.baseColor = \"neutral\"\n\n // If the style extends none, we don't want to install the base style.\n options.baseStyle =\n item.extends === \"none\" ? false : options.baseStyle\n }\n }\n\n // If --no-base-style, we don't want to prompt for a base color either.\n // The style will extend or override it.\n if (!options.baseStyle) {\n options.baseColor = \"neutral\"\n }\n\n await runInit(options)\n\n logger.log(\n `${highlighter.success(\n \"Success!\"\n )} Project initialization completed.\\nYou may now add components.`\n )\n\n // We need when running with custom cwd.\n deleteFileBackup(path.resolve(options.cwd, \"components.json\"))\n logger.break()\n } catch (error) {\n logger.break()\n handleError(error)\n } finally {\n clearRegistryContext()\n }\n })\n\nexport async function runInit(\n options: z.infer<typeof initOptionsSchema> & {\n skipPreflight?: boolean\n }\n) {\n let projectInfo\n let newProjectTemplate\n if (!options.skipPreflight) {\n const preflight = await preFlightInit(options)\n if (preflight.errors[ERRORS.MISSING_DIR_OR_EMPTY_PROJECT]) {\n const { projectPath, template } = await createProject(options)\n if (!projectPath) {\n process.exit(1)\n }\n options.cwd = projectPath\n options.isNewProject = true\n newProjectTemplate = template\n // Re-get project info for the newly created project.\n projectInfo = await getProjectInfo(options.cwd)\n } else {\n projectInfo = preflight.projectInfo\n }\n } else {\n projectInfo = await getProjectInfo(options.cwd)\n }\n\n if (newProjectTemplate === \"next-monorepo\") {\n options.cwd = path.resolve(options.cwd, \"apps/web\")\n return await getConfig(options.cwd)\n }\n\n const projectConfig = await getProjectConfig(options.cwd, projectInfo)\n\n let config = projectConfig\n ? await promptForMinimalConfig(projectConfig, options)\n : await promptForConfig(await getConfig(options.cwd))\n\n // if (!options.yes) {\n // const { proceed } = await prompts({\n // type: \"confirm\",\n // name: \"proceed\",\n // message: `Write configuration to ${highlighter.info(\n // \"components.json\"\n // )}. Proceed?`,\n // initial: true,\n // })\n\n // if (!proceed) {\n // process.exit(0)\n // }\n // }\n\n console.log({\n config,\n options,\n })\n\n // Prepare the list of components to be added.\n const components = [\n // \"index\" is the default shadcn style.\n // Why index? Because when style is true, we read style from components.json and fetch that.\n // i.e new-york from components.json then fetch /styles/new-york/index.\n // TODO: Fix this so that we can extend any style i.e --style=new-york.\n ...(options.baseStyle ? [\"index\"] : []),\n ...(options.components ?? []),\n ]\n\n // // Ensure registries are configured for the components we're about to add.\n // const fullConfigForRegistry = await resolveConfigPaths(options.cwd, config)\n // const { config: configWithRegistries } = await ensureRegistriesInConfig(\n // components,\n // fullConfigForRegistry,\n // {\n // silent: true,\n // }\n // )\n\n // // Update config with any new registries found.\n // if (configWithRegistries.registries) {\n // config.registries = configWithRegistries.registries\n // }\n\n // const componentSpinner = spinner(`Writing components.json.`).start()\n // const targetPath = path.resolve(options.cwd, \"components.json\")\n // const backupPath = `${targetPath}${FILE_BACKUP_SUFFIX}`\n\n // // Merge and keep registries at the end.\n // const mergeConfig = (base: typeof config, override: object) => {\n // const { registries, ...merged } = deepmerge(base, override)\n // return { ...merged, registries } as typeof config\n // }\n\n // // Merge with backup config if it exists and not using --force.\n // if (!options.force && fsExtra.existsSync(backupPath)) {\n // const existingConfig = await fsExtra.readJson(backupPath)\n // config = mergeConfig(existingConfig, config)\n // }\n\n // // Merge config from registry:base item.\n // if (options.registryBaseConfig) {\n // config = mergeConfig(config, options.registryBaseConfig)\n // }\n\n // // Make sure to filter out built-in registries.\n // // TODO: fix this in ensureRegistriesInConfig.\n // config.registries = Object.fromEntries(\n // Object.entries(config.registries || {}).filter(\n // ([key]) => !Object.keys(BUILTIN_REGISTRIES).includes(key)\n // )\n // )\n\n // // Write components.json.\n // await fs.writeFile(targetPath, `${JSON.stringify(config, null, 2)}\\n`, \"utf8\")\n // componentSpinner.succeed()\n\n // Add components.\n // const fullConfig = await resolveConfigPaths(options.cwd, config as Config)\n // console.log({\n // fullConfig,\n // })\n // await addComponents(components, fullConfig, {\n // // Init will always overwrite files.\n // overwrite: true,\n // silent: options.silent,\n // baseStyle: options.baseStyle,\n // isNewProject: false,\n // })\n\n // If a new project is using src dir, let's update the tailwind content config.\n // TODO: Handle this per framework.\n // if (options.isNewProject && options.srcDir) {\n // await updateTailwindContent(\n // [\"./src/**/*.{js,ts,jsx,tsx,mdx}\"],\n // fullConfig,\n // {\n // silent: options.silent,\n // }\n // )\n // }\n\n // return fullConfig\n}\n\nasync function promptForConfig(defaultConfig: Config | null = null) {\n const [styles, baseColors] = await Promise.all([\n getRegistryStyles(),\n getRegistryBaseColors(),\n ])\n\n logger.info(\"\")\n const options = await prompts([\n {\n type: \"toggle\",\n name: \"typescript\",\n message: `Would you like to use ${highlighter.info(\n \"TypeScript\"\n )} (recommended)?`,\n initial: defaultConfig?.tsx ?? true,\n active: \"yes\",\n inactive: \"no\",\n },\n {\n type: \"select\",\n name: \"style\",\n message: `Which ${highlighter.info(\"style\")} would you like to use?`,\n choices: styles.map((style) => ({\n title: style.label,\n value: style.name,\n })),\n },\n {\n type: \"select\",\n name: \"tailwindBaseColor\",\n message: `Which color would you like to use as the ${highlighter.info(\n \"base color\"\n )}?`,\n choices: baseColors.map((color) => ({\n title: color.label,\n value: color.name,\n })),\n },\n {\n type: \"text\",\n name: \"tailwindCss\",\n message: `Where is your ${highlighter.info(\"global CSS\")} file?`,\n initial: defaultConfig?.tailwind.css ?? DEFAULT_TAILWIND_CSS,\n },\n {\n type: \"toggle\",\n name: \"tailwindCssVariables\",\n message: `Would you like to use ${highlighter.info(\n \"CSS variables\"\n )} for theming?`,\n initial: defaultConfig?.tailwind.cssVariables ?? true,\n active: \"yes\",\n inactive: \"no\",\n },\n {\n type: \"text\",\n name: \"tailwindPrefix\",\n message: `Are you using a custom ${highlighter.info(\n \"tailwind prefix eg. tw-\"\n )}? (Leave blank if not)`,\n initial: \"\",\n },\n {\n type: \"text\",\n name: \"tailwindConfig\",\n message: `Where is your ${highlighter.info(\n \"tailwind.config.js\"\n )} located?`,\n initial: defaultConfig?.tailwind.config ?? DEFAULT_TAILWIND_CONFIG,\n },\n {\n type: \"text\",\n name: \"components\",\n message: `Configure the import alias for ${highlighter.info(\n \"components\"\n )}:`,\n initial: defaultConfig?.aliases[\"components\"] ?? DEFAULT_COMPONENTS,\n },\n {\n type: \"text\",\n name: \"utils\",\n message: `Configure the import alias for ${highlighter.info(\"utils\")}:`,\n initial: defaultConfig?.aliases[\"utils\"] ?? DEFAULT_UTILS,\n },\n {\n type: \"toggle\",\n name: \"rsc\",\n message: `Are you using ${highlighter.info(\"React Server Components\")}?`,\n initial: defaultConfig?.rsc ?? true,\n active: \"yes\",\n inactive: \"no\",\n },\n ])\n\n return rawConfigSchema.parse({\n $schema: \"https://ui.shadcn.com/schema.json\",\n style: options.style,\n tailwind: {\n config: options.tailwindConfig,\n css: options.tailwindCss,\n baseColor: options.tailwindBaseColor,\n cssVariables: options.tailwindCssVariables,\n prefix: options.tailwindPrefix,\n },\n rsc: options.rsc,\n tsx: options.typescript,\n aliases: {\n utils: options.utils,\n components: options.components,\n // TODO: fix this.\n lib: options.components.replace(/\\/components$/, \"lib\"),\n hooks: options.components.replace(/\\/components$/, \"hooks\"),\n },\n })\n}\n\nasync function promptForMinimalConfig(\n defaultConfig: Config,\n opts: z.infer<typeof initOptionsSchema>\n) {\n let style = defaultConfig.style\n let baseColor = opts.baseColor\n let cssVariables = defaultConfig.tailwind.cssVariables\n let iconLibrary = defaultConfig.iconLibrary ?? \"lucide\"\n\n if (!opts.defaults) {\n const [styles, baseColors, tailwindVersion] = await Promise.all([\n getRegistryStyles(),\n getRegistryBaseColors(),\n getProjectTailwindVersionFromConfig(defaultConfig),\n ])\n\n const options = await prompts([\n {\n // Skip style prompt if using Tailwind v4 or style is already set in config.\n type: tailwindVersion === \"v4\" || style ? null : \"select\",\n name: \"style\",\n message: `Which ${highlighter.info(\"style\")} would you like to use?`,\n choices: styles.map((style) => ({\n title:\n style.name === \"new-york\" ? \"New York (Recommended)\" : style.label,\n value: style.name,\n })),\n initial: 0,\n },\n {\n type: opts.baseColor ? null : \"select\",\n name: \"tailwindBaseColor\",\n message: `Which color would you like to use as the ${highlighter.info(\n \"base color\"\n )}?`,\n choices: baseColors.map((color) => ({\n title: color.label,\n value: color.name,\n })),\n },\n ])\n\n style = options.style ?? style ?? \"new-york\"\n baseColor = options.tailwindBaseColor ?? baseColor\n cssVariables = opts.cssVariables\n }\n\n return rawConfigSchema.parse({\n $schema: defaultConfig?.$schema,\n style,\n tailwind: {\n ...defaultConfig?.tailwind,\n baseColor,\n cssVariables,\n },\n rsc: defaultConfig?.rsc,\n tsx: defaultConfig?.tsx,\n iconLibrary,\n aliases: defaultConfig?.aliases,\n })\n}\n","import path from \"path\"\n\nexport function isSafeTarget(targetPath: string, cwd: string): boolean {\n // Check for null bytes which can be used to bypass validations.\n if (targetPath.includes(\"\\0\")) {\n return false\n }\n\n // Decode URL-encoded sequences to catch encoded traversal attempts.\n let decodedPath: string\n try {\n // Decode multiple times to catch double-encoded sequences.\n decodedPath = targetPath\n let prevPath = \"\"\n while (decodedPath !== prevPath && decodedPath.includes(\"%\")) {\n prevPath = decodedPath\n decodedPath = decodeURIComponent(decodedPath)\n }\n } catch {\n // If decoding fails, treat as unsafe.\n return false\n }\n\n // Normalize both paths to handle different path separators.\n // Convert Windows backslashes to forward slashes for consistent handling.\n const normalizedTarget = path.normalize(decodedPath.replace(/\\\\/g, \"/\"))\n const normalizedRoot = path.normalize(cwd)\n\n // Check for explicit path traversal sequences in both encoded and decoded forms.\n // Allow [...] pattern which is common in framework routing (e.g., [...slug])\n const hasPathTraversal = (path: string) => {\n // Remove [...] patterns before checking for ..\n const withoutBrackets = path.replace(/\\[\\.\\.\\..*?\\]/g, \"\")\n return withoutBrackets.includes(\"..\")\n }\n\n if (\n hasPathTraversal(normalizedTarget) ||\n hasPathTraversal(decodedPath) ||\n hasPathTraversal(targetPath)\n ) {\n return false\n }\n\n // Check for current directory references that might be used in traversal.\n // First, remove [...] patterns to avoid false positives\n const cleanPath = (path: string) => path.replace(/\\[\\.\\.\\..*?\\]/g, \"\")\n const cleanTarget = cleanPath(targetPath)\n const cleanDecoded = cleanPath(decodedPath)\n\n const suspiciousPatterns = [\n /\\.\\.[\\/\\\\]/, // ../ or ..\\\n /[\\/\\\\]\\.\\./, // /.. or \\..\n /\\.\\./, // .. anywhere\n /\\.\\.%/, // URL encoded traversal\n /\\x00/, // null byte\n /[\\x01-\\x1f]/, // control characters\n ]\n\n if (\n suspiciousPatterns.some(\n (pattern) => pattern.test(cleanTarget) || pattern.test(cleanDecoded)\n )\n ) {\n return false\n }\n\n // Allow ~/ at the start (home directory expansion within project) but reject ~/../ patterns.\n if (\n (targetPath.includes(\"~\") || decodedPath.includes(\"~\")) &&\n (targetPath.includes(\"../\") || decodedPath.includes(\"../\"))\n ) {\n return false\n }\n\n // Check for Windows drive letters (even on non-Windows systems for safety).\n const driveLetterRegex = /^[a-zA-Z]:[\\/\\\\]/\n if (driveLetterRegex.test(decodedPath)) {\n // On Windows, check if it starts with the project root.\n if (process.platform === \"win32\") {\n return decodedPath.toLowerCase().startsWith(cwd.toLowerCase())\n }\n // On non-Windows systems, reject all Windows absolute paths.\n return false\n }\n\n // If it's an absolute path, ensure it's within the project root.\n if (path.isAbsolute(normalizedTarget)) {\n return normalizedTarget.startsWith(normalizedRoot + path.sep)\n }\n\n // For relative paths, resolve and check if within project bounds.\n const resolvedPath = path.resolve(normalizedRoot, normalizedTarget)\n return (\n resolvedPath.startsWith(normalizedRoot + path.sep) ||\n resolvedPath === normalizedRoot\n )\n}\n","import { promises as fs } from \"fs\"\nimport path from \"path\"\nimport { registryItemCssSchema } from \"@/src/schema\"\nimport { Config } from \"@/src/utils/get-config\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport postcss from \"postcss\"\nimport AtRule from \"postcss/lib/at-rule\"\nimport Declaration from \"postcss/lib/declaration\"\nimport Root from \"postcss/lib/root\"\nimport Rule from \"postcss/lib/rule\"\nimport { z } from \"zod\"\n\nexport async function updateCss(\n css: z.infer<typeof registryItemCssSchema> | undefined,\n config: Config,\n options: {\n silent?: boolean\n }\n) {\n if (\n !config.resolvedPaths.tailwindCss ||\n !css ||\n Object.keys(css).length === 0\n ) {\n return\n }\n\n options = {\n silent: false,\n ...options,\n }\n\n const cssFilepath = config.resolvedPaths.tailwindCss\n const cssFilepathRelative = path.relative(\n config.resolvedPaths.cwd,\n cssFilepath\n )\n const cssSpinner = spinner(\n `Updating ${highlighter.info(cssFilepathRelative)}`,\n {\n silent: options.silent,\n }\n ).start()\n\n const raw = await fs.readFile(cssFilepath, \"utf8\")\n let output = await transformCss(raw, css)\n await fs.writeFile(cssFilepath, output, \"utf8\")\n cssSpinner.succeed()\n}\n\nexport async function transformCss(\n input: string,\n css: z.infer<typeof registryItemCssSchema>\n) {\n const plugins = [updateCssPlugin(css)]\n\n const result = await postcss(plugins).process(input, {\n from: undefined,\n })\n\n let output = result.css\n\n // PostCSS doesn't add semicolons to at-rules without bodies when they're the last node.\n // We need to manually ensure they have semicolons.\n const root = result.root\n if (root.nodes && root.nodes.length > 0) {\n const lastNode = root.nodes[root.nodes.length - 1]\n if (\n lastNode.type === \"atrule\" &&\n !lastNode.nodes &&\n !output.trimEnd().endsWith(\";\")\n ) {\n output = output.trimEnd() + \";\"\n }\n }\n\n output = output.replace(/\\/\\* ---break--- \\*\\//g, \"\")\n output = output.replace(/(\\n\\s*\\n)+/g, \"\\n\\n\")\n output = output.trimEnd()\n\n return output\n}\n\nfunction updateCssPlugin(css: z.infer<typeof registryItemCssSchema>) {\n return {\n postcssPlugin: \"update-css\",\n Once(root: Root) {\n for (const [selector, properties] of Object.entries(css)) {\n if (selector.startsWith(\"@\")) {\n // Handle at-rules (@layer, @utility, etc.)\n const atRuleMatch = selector.match(/@([a-zA-Z-]+)\\s*(.*)/)\n if (!atRuleMatch) continue\n\n const [, name, params] = atRuleMatch\n\n // Special handling for imports - place them at the top.\n if (name === \"import\") {\n // Check if this import already exists.\n const existingImport = root.nodes?.find(\n (node): node is AtRule =>\n node.type === \"atrule\" &&\n node.name === \"import\" &&\n node.params === params\n )\n\n if (!existingImport) {\n const importRule = postcss.atRule({\n name: \"import\",\n params,\n raws: { semicolon: true },\n })\n\n // Find the last import to insert after, or insert at beginning.\n const importNodes = root.nodes?.filter(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === \"import\"\n )\n\n if (importNodes && importNodes.length > 0) {\n // Insert after the last existing import.\n const lastImport = importNodes[importNodes.length - 1]\n importRule.raws.before = \"\\n\"\n root.insertAfter(lastImport, importRule)\n } else {\n // No imports exist, insert at the very beginning.\n // Check if the file is empty.\n if (!root.nodes || root.nodes.length === 0) {\n importRule.raws.before = \"\"\n } else {\n importRule.raws.before = \"\"\n }\n root.prepend(importRule)\n }\n }\n }\n // Special handling for plugins - place them after imports.\n else if (name === \"plugin\") {\n // Ensure plugin name is quoted if not already.\n let quotedParams = params\n if (params && !params.startsWith('\"') && !params.startsWith(\"'\")) {\n quotedParams = `\"${params}\"`\n }\n\n // Normalize params for comparison (remove quotes).\n const normalizeParams = (p: string) => {\n if (p.startsWith('\"') && p.endsWith('\"')) {\n return p.slice(1, -1)\n }\n if (p.startsWith(\"'\") && p.endsWith(\"'\")) {\n return p.slice(1, -1)\n }\n return p\n }\n\n // Find existing plugin with same normalized params.\n const existingPlugin = root.nodes?.find((node): node is AtRule => {\n if (node.type !== \"atrule\" || node.name !== \"plugin\") {\n return false\n }\n return normalizeParams(node.params) === normalizeParams(params)\n })\n\n if (!existingPlugin) {\n const pluginRule = postcss.atRule({\n name: \"plugin\",\n params: quotedParams,\n raws: { semicolon: true, before: \"\\n\" },\n })\n\n // Find the last import or plugin node to insert after\n const importNodes = root.nodes?.filter(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === \"import\"\n )\n\n const pluginNodes = root.nodes?.filter(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === \"plugin\"\n )\n\n if (pluginNodes && pluginNodes.length > 0) {\n // Insert after the last existing plugin\n const lastPlugin = pluginNodes[pluginNodes.length - 1]\n root.insertAfter(lastPlugin, pluginRule)\n } else if (importNodes && importNodes.length > 0) {\n // Insert after the last import if no plugins exist\n const lastImport = importNodes[importNodes.length - 1]\n root.insertAfter(lastImport, pluginRule)\n // Add a break comment before the first plugin to create spacing\n root.insertBefore(\n pluginRule,\n postcss.comment({ text: \"---break---\" })\n )\n // Add a break comment after the plugin for spacing from other content\n root.insertAfter(\n pluginRule,\n postcss.comment({ text: \"---break---\" })\n )\n } else {\n // If no imports or plugins, insert at the beginning\n root.prepend(pluginRule)\n // Add a break comment before the first plugin for spacing\n root.insertBefore(\n pluginRule,\n postcss.comment({ text: \"---break---\" })\n )\n // Add a break comment after the plugin for spacing from other content\n root.insertAfter(\n pluginRule,\n postcss.comment({ text: \"---break---\" })\n )\n }\n }\n }\n // Check if this is any at-rule with no body (empty object).\n else if (\n typeof properties === \"object\" &&\n Object.keys(properties).length === 0\n ) {\n // Handle any at-rule with no body (e.g., @apply, @tailwind, etc.).\n const atRule = root.nodes?.find(\n (node): node is AtRule =>\n node.type === \"atrule\" &&\n node.name === name &&\n node.params === params\n ) as AtRule | undefined\n\n if (!atRule) {\n const newAtRule = postcss.atRule({\n name,\n params,\n raws: { semicolon: true },\n })\n\n root.append(newAtRule)\n root.insertBefore(\n newAtRule,\n postcss.comment({ text: \"---break---\" })\n )\n }\n }\n // Special handling for keyframes - place them under @theme inline.\n else if (name === \"keyframes\") {\n let themeInline = root.nodes?.find(\n (node): node is AtRule =>\n node.type === \"atrule\" &&\n node.name === \"theme\" &&\n node.params === \"inline\"\n ) as AtRule | undefined\n\n if (!themeInline) {\n themeInline = postcss.atRule({\n name: \"theme\",\n params: \"inline\",\n raws: { semicolon: true, between: \" \", before: \"\\n\" },\n })\n root.append(themeInline)\n root.insertBefore(\n themeInline,\n postcss.comment({ text: \"---break---\" })\n )\n }\n\n // Check if a keyframe with the same name already exists\n const existingKeyframesRule = themeInline.nodes?.find(\n (node): node is AtRule =>\n node.type === \"atrule\" &&\n node.name === \"keyframes\" &&\n node.params === params\n )\n\n let keyframesRule: AtRule\n if (existingKeyframesRule) {\n // Replace existing keyframe\n keyframesRule = postcss.atRule({\n name: \"keyframes\",\n params,\n raws: { semicolon: true, between: \" \", before: \"\\n \" },\n })\n existingKeyframesRule.replaceWith(keyframesRule)\n } else {\n // Create new keyframe\n keyframesRule = postcss.atRule({\n name: \"keyframes\",\n params,\n raws: { semicolon: true, between: \" \", before: \"\\n \" },\n })\n themeInline.append(keyframesRule)\n }\n\n if (typeof properties === \"object\") {\n for (const [step, stepProps] of Object.entries(properties)) {\n processRule(keyframesRule, step, stepProps)\n }\n }\n }\n // Special handling for utility classes to preserve property values\n else if (name === \"utility\") {\n const utilityAtRule = root.nodes?.find(\n (node): node is AtRule =>\n node.type === \"atrule\" &&\n node.name === name &&\n node.params === params\n ) as AtRule | undefined\n\n if (!utilityAtRule) {\n const atRule = postcss.atRule({\n name,\n params,\n raws: { semicolon: true, between: \" \", before: \"\\n\" },\n })\n\n root.append(atRule)\n root.insertBefore(\n atRule,\n postcss.comment({ text: \"---break---\" })\n )\n\n // Add declarations with their values preserved\n if (typeof properties === \"object\") {\n for (const [prop, value] of Object.entries(properties)) {\n if (typeof value === \"string\") {\n const decl = postcss.decl({\n prop,\n value: value,\n raws: { semicolon: true, before: \"\\n \" },\n })\n atRule.append(decl)\n } else if (typeof value === \"object\") {\n processRule(atRule, prop, value)\n }\n }\n }\n } else {\n // Update existing utility class\n if (typeof properties === \"object\") {\n for (const [prop, value] of Object.entries(properties)) {\n if (typeof value === \"string\") {\n const existingDecl = utilityAtRule.nodes?.find(\n (node): node is Declaration =>\n node.type === \"decl\" && node.prop === prop\n )\n\n const decl = postcss.decl({\n prop,\n value: value,\n raws: { semicolon: true, before: \"\\n \" },\n })\n\n existingDecl\n ? existingDecl.replaceWith(decl)\n : utilityAtRule.append(decl)\n } else if (typeof value === \"object\") {\n processRule(utilityAtRule, prop, value)\n }\n }\n }\n }\n }\n // Handle at-property as regular CSS rules\n else if (name === \"property\") {\n processRule(root, selector, properties)\n } else {\n // Handle other at-rules normally\n processAtRule(root, name, params, properties)\n }\n } else {\n // Handle regular CSS rules\n processRule(root, selector, properties)\n }\n }\n },\n }\n}\n\nfunction processAtRule(\n root: Root | AtRule,\n name: string,\n params: string,\n properties: any\n) {\n // Find or create the at-rule\n let atRule = root.nodes?.find(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === name && node.params === params\n ) as AtRule | undefined\n\n if (!atRule) {\n atRule = postcss.atRule({\n name,\n params,\n raws: { semicolon: true, between: \" \", before: \"\\n\" },\n })\n root.append(atRule)\n root.insertBefore(atRule, postcss.comment({ text: \"---break---\" }))\n }\n\n // Process children of this at-rule\n if (typeof properties === \"object\") {\n for (const [childSelector, childProps] of Object.entries(properties)) {\n if (childSelector.startsWith(\"@\")) {\n // Nested at-rule\n const nestedMatch = childSelector.match(/@([a-zA-Z-]+)\\s*(.*)/)\n if (nestedMatch) {\n const [, nestedName, nestedParams] = nestedMatch\n processAtRule(atRule, nestedName, nestedParams, childProps)\n }\n } else {\n // CSS rule within at-rule\n processRule(atRule, childSelector, childProps)\n }\n }\n } else if (typeof properties === \"string\") {\n // Direct string content for the at-rule\n try {\n // Parse the CSS string with PostCSS\n const parsed = postcss.parse(`.temp{${properties}}`)\n const tempRule = parsed.first as Rule\n\n if (tempRule && tempRule.nodes) {\n // Create a rule for the at-rule if needed\n const rule = postcss.rule({\n selector: \"temp\",\n raws: { semicolon: true, between: \" \", before: \"\\n \" },\n })\n\n // Copy all declarations from the temp rule to our actual rule\n tempRule.nodes.forEach((node) => {\n if (node.type === \"decl\") {\n const clone = node.clone()\n clone.raws.before = \"\\n \"\n rule.append(clone)\n }\n })\n\n // Only add the rule if it has declarations\n if (rule.nodes?.length) {\n atRule.append(rule)\n }\n }\n } catch (error) {\n console.error(\"Error parsing at-rule content:\", properties, error)\n throw error\n }\n }\n}\n\nfunction processRule(parent: Root | AtRule, selector: string, properties: any) {\n let rule = parent.nodes?.find(\n (node): node is Rule => node.type === \"rule\" && node.selector === selector\n ) as Rule | undefined\n\n if (!rule) {\n rule = postcss.rule({\n selector,\n raws: { semicolon: true, between: \" \", before: \"\\n \" },\n })\n parent.append(rule)\n }\n\n if (typeof properties === \"object\") {\n for (const [prop, value] of Object.entries(properties)) {\n // Check if this is any at-rule with empty object (no body).\n if (\n prop.startsWith(\"@\") &&\n typeof value === \"object\" &&\n value !== null &&\n Object.keys(value).length === 0\n ) {\n // Parse the at-rule.\n const atRuleMatch = prop.match(/@([a-zA-Z-]+)\\s*(.*)/)\n if (atRuleMatch) {\n const [, atRuleName, atRuleParams] = atRuleMatch\n const atRule = postcss.atRule({\n name: atRuleName,\n params: atRuleParams,\n raws: { semicolon: true, before: \"\\n \" },\n })\n rule.append(atRule)\n }\n } else if (typeof value === \"string\") {\n const decl = postcss.decl({\n prop,\n value: value,\n raws: { semicolon: true, before: \"\\n \" },\n })\n\n // Replace existing property or add new one.\n const existingDecl = rule.nodes?.find(\n (node): node is Declaration =>\n node.type === \"decl\" && node.prop === prop\n )\n\n existingDecl ? existingDecl.replaceWith(decl) : rule.append(decl)\n } else if (typeof value === \"object\") {\n // Nested selector (including & selectors).\n const nestedSelector = prop.startsWith(\"&\")\n ? selector.replace(/^([^:]+)/, `$1${prop.substring(1)}`)\n : prop // Use the original selector for other nested elements.\n processRule(parent, nestedSelector, value)\n }\n }\n } else if (typeof properties === \"string\") {\n // Direct string content for the rule\n try {\n // Parse the CSS string with PostCSS\n const parsed = postcss.parse(`.temp{${properties}}`)\n const tempRule = parsed.first as Rule\n\n if (tempRule && tempRule.nodes) {\n // Copy all declarations from the temp rule to our actual rule\n tempRule.nodes.forEach((node) => {\n if (node.type === \"decl\") {\n const clone = node.clone()\n clone.raws.before = \"\\n \"\n rule?.append(clone)\n }\n })\n }\n } catch (error) {\n console.error(\"Error parsing rule content:\", selector, properties, error)\n throw error\n }\n }\n}\n","import { promises as fs } from \"fs\"\nimport path from \"path\"\nimport {\n registryItemCssVarsSchema,\n registryItemTailwindSchema,\n} from \"@/src/schema\"\nimport { Config } from \"@/src/utils/get-config\"\nimport { getPackageInfo } from \"@/src/utils/get-package-info\"\nimport { TailwindVersion } from \"@/src/utils/get-project-info\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport postcss from \"postcss\"\nimport AtRule from \"postcss/lib/at-rule\"\nimport Root from \"postcss/lib/root\"\nimport Rule from \"postcss/lib/rule\"\nimport { z } from \"zod\"\n\nexport async function updateCssVars(\n cssVars: z.infer<typeof registryItemCssVarsSchema> | undefined,\n config: Config,\n options: {\n cleanupDefaultNextStyles?: boolean\n overwriteCssVars?: boolean\n initIndex?: boolean\n silent?: boolean\n tailwindVersion?: TailwindVersion\n tailwindConfig?: z.infer<typeof registryItemTailwindSchema>[\"config\"]\n }\n) {\n if (!config.resolvedPaths.tailwindCss || !Object.keys(cssVars ?? {}).length) {\n return\n }\n\n options = {\n cleanupDefaultNextStyles: false,\n silent: false,\n tailwindVersion: \"v3\",\n overwriteCssVars: false,\n initIndex: true,\n ...options,\n }\n const cssFilepath = config.resolvedPaths.tailwindCss\n const cssFilepathRelative = path.relative(\n config.resolvedPaths.cwd,\n cssFilepath\n )\n const cssVarsSpinner = spinner(\n `Updating CSS variables in ${highlighter.info(cssFilepathRelative)}`,\n {\n silent: options.silent,\n }\n ).start()\n const raw = await fs.readFile(cssFilepath, \"utf8\")\n let output = await transformCssVars(raw, cssVars ?? {}, config, {\n cleanupDefaultNextStyles: options.cleanupDefaultNextStyles,\n tailwindVersion: options.tailwindVersion,\n tailwindConfig: options.tailwindConfig,\n overwriteCssVars: options.overwriteCssVars,\n initIndex: options.initIndex,\n })\n await fs.writeFile(cssFilepath, output, \"utf8\")\n cssVarsSpinner.succeed()\n}\n\nexport async function transformCssVars(\n input: string,\n cssVars: z.infer<typeof registryItemCssVarsSchema>,\n config: Config,\n options: {\n cleanupDefaultNextStyles?: boolean\n tailwindVersion?: TailwindVersion\n tailwindConfig?: z.infer<typeof registryItemTailwindSchema>[\"config\"]\n overwriteCssVars?: boolean\n initIndex?: boolean\n } = {\n cleanupDefaultNextStyles: false,\n tailwindVersion: \"v3\",\n tailwindConfig: undefined,\n overwriteCssVars: false,\n initIndex: false,\n }\n) {\n options = {\n cleanupDefaultNextStyles: false,\n tailwindVersion: \"v3\",\n tailwindConfig: undefined,\n overwriteCssVars: false,\n initIndex: false,\n ...options,\n }\n\n let plugins = [updateCssVarsPlugin(cssVars)]\n\n if (options.cleanupDefaultNextStyles) {\n plugins.push(cleanupDefaultNextStylesPlugin())\n }\n\n if (options.tailwindVersion === \"v4\") {\n plugins = []\n\n // Only add tw-animate-css if project does not have tailwindcss-animate\n if (config.resolvedPaths?.cwd) {\n const packageInfo = getPackageInfo(config.resolvedPaths.cwd)\n if (\n !packageInfo?.dependencies?.[\"tailwindcss-animate\"] &&\n !packageInfo?.devDependencies?.[\"tailwindcss-animate\"] &&\n options.initIndex\n ) {\n plugins.push(addCustomImport({ params: \"tw-animate-css\" }))\n }\n }\n\n plugins.push(addCustomVariant({ params: \"dark (&:is(.dark *))\" }))\n\n if (options.cleanupDefaultNextStyles) {\n plugins.push(cleanupDefaultNextStylesPlugin())\n }\n\n plugins.push(\n updateCssVarsPluginV4(cssVars, {\n overwriteCssVars: options.overwriteCssVars,\n })\n )\n plugins.push(updateThemePlugin(cssVars))\n\n if (options.tailwindConfig) {\n plugins.push(updateTailwindConfigPlugin(options.tailwindConfig))\n plugins.push(updateTailwindConfigAnimationPlugin(options.tailwindConfig))\n plugins.push(updateTailwindConfigKeyframesPlugin(options.tailwindConfig))\n }\n }\n\n if (config.tailwind.cssVariables && options.initIndex) {\n plugins.push(\n updateBaseLayerPlugin({ tailwindVersion: options.tailwindVersion })\n )\n }\n\n const result = await postcss(plugins).process(input, {\n from: undefined,\n })\n\n let output = result.css\n\n output = output.replace(/\\/\\* ---break--- \\*\\//g, \"\")\n\n if (options.tailwindVersion === \"v4\") {\n output = output.replace(/(\\n\\s*\\n)+/g, \"\\n\\n\")\n }\n\n return output\n}\n\nfunction updateBaseLayerPlugin({\n tailwindVersion,\n}: {\n tailwindVersion?: TailwindVersion\n}) {\n return {\n postcssPlugin: \"update-base-layer\",\n Once(root: Root) {\n const requiredRules = [\n {\n selector: \"*\",\n apply:\n tailwindVersion === \"v4\"\n ? \"border-border outline-ring/50\"\n : \"border-border\",\n },\n { selector: \"body\", apply: \"bg-background text-foreground\" },\n ]\n\n let baseLayer = root.nodes.find(\n (node): node is AtRule =>\n node.type === \"atrule\" &&\n node.name === \"layer\" &&\n node.params === \"base\" &&\n requiredRules.every(({ selector, apply }) =>\n node.nodes?.some(\n (rule): rule is Rule =>\n rule.type === \"rule\" &&\n rule.selector === selector &&\n rule.nodes.some(\n (applyRule): applyRule is AtRule =>\n applyRule.type === \"atrule\" &&\n applyRule.name === \"apply\" &&\n applyRule.params === apply\n )\n )\n )\n ) as AtRule | undefined\n\n if (!baseLayer) {\n baseLayer = postcss.atRule({\n name: \"layer\",\n params: \"base\",\n raws: { semicolon: true, between: \" \", before: \"\\n\" },\n })\n root.append(baseLayer)\n root.insertBefore(baseLayer, postcss.comment({ text: \"---break---\" }))\n }\n\n requiredRules.forEach(({ selector, apply }) => {\n const existingRule = baseLayer?.nodes?.find(\n (node): node is Rule =>\n node.type === \"rule\" && node.selector === selector\n )\n\n if (!existingRule) {\n baseLayer?.append(\n postcss.rule({\n selector,\n nodes: [\n postcss.atRule({\n name: \"apply\",\n params: apply,\n raws: { semicolon: true, before: \"\\n \" },\n }),\n ],\n raws: { semicolon: true, between: \" \", before: \"\\n \" },\n })\n )\n }\n })\n },\n }\n}\n\nfunction updateCssVarsPlugin(\n cssVars: z.infer<typeof registryItemCssVarsSchema>\n) {\n return {\n postcssPlugin: \"update-css-vars\",\n Once(root: Root) {\n let baseLayer = root.nodes.find(\n (node) =>\n node.type === \"atrule\" &&\n node.name === \"layer\" &&\n node.params === \"base\"\n ) as AtRule | undefined\n\n if (!(baseLayer instanceof AtRule)) {\n baseLayer = postcss.atRule({\n name: \"layer\",\n params: \"base\",\n nodes: [],\n raws: {\n semicolon: true,\n before: \"\\n\",\n between: \" \",\n },\n })\n root.append(baseLayer)\n root.insertBefore(baseLayer, postcss.comment({ text: \"---break---\" }))\n }\n\n if (baseLayer !== undefined) {\n // Add variables for each key in cssVars\n Object.entries(cssVars).forEach(([key, vars]) => {\n const selector = key === \"light\" ? \":root\" : `.${key}`\n // TODO: Fix typecheck.\n addOrUpdateVars(baseLayer as AtRule, selector, vars)\n })\n }\n },\n }\n}\n\nfunction removeConflictVars(root: Rule | Root) {\n const rootRule = root.nodes.find(\n (node): node is Rule => node.type === \"rule\" && node.selector === \":root\"\n )\n\n if (rootRule) {\n const propsToRemove = [\"--background\", \"--foreground\"]\n\n rootRule.nodes\n .filter(\n (node): node is postcss.Declaration =>\n node.type === \"decl\" && propsToRemove.includes(node.prop)\n )\n .forEach((node) => node.remove())\n\n if (rootRule.nodes.length === 0) {\n rootRule.remove()\n }\n }\n}\n\nfunction cleanupDefaultNextStylesPlugin() {\n return {\n postcssPlugin: \"cleanup-default-next-styles\",\n Once(root: Root) {\n const bodyRule = root.nodes.find(\n (node): node is Rule => node.type === \"rule\" && node.selector === \"body\"\n )\n if (bodyRule) {\n // Remove color from the body node.\n bodyRule.nodes\n .find(\n (node): node is postcss.Declaration =>\n node.type === \"decl\" &&\n node.prop === \"color\" &&\n [\"rgb(var(--foreground-rgb))\", \"var(--foreground)\"].includes(\n node.value\n )\n )\n ?.remove()\n\n // Remove background: linear-gradient.\n bodyRule.nodes\n .find((node): node is postcss.Declaration => {\n return (\n node.type === \"decl\" &&\n node.prop === \"background\" &&\n // This is only going to run on create project, so all good.\n (node.value.startsWith(\"linear-gradient\") ||\n node.value === \"var(--background)\")\n )\n })\n ?.remove()\n\n // Remove font-family: Arial, Helvetica, sans-serif;\n bodyRule.nodes\n .find(\n (node): node is postcss.Declaration =>\n node.type === \"decl\" &&\n node.prop === \"font-family\" &&\n node.value === \"Arial, Helvetica, sans-serif\"\n )\n ?.remove()\n\n // If the body rule is empty, remove it.\n if (bodyRule.nodes.length === 0) {\n bodyRule.remove()\n }\n }\n\n removeConflictVars(root)\n\n const darkRootRule = root.nodes.find(\n (node): node is Rule =>\n node.type === \"atrule\" &&\n node.params === \"(prefers-color-scheme: dark)\"\n )\n\n if (darkRootRule) {\n removeConflictVars(darkRootRule)\n if (darkRootRule.nodes.length === 0) {\n darkRootRule.remove()\n }\n }\n },\n }\n}\n\nfunction addOrUpdateVars(\n baseLayer: AtRule,\n selector: string,\n vars: Record<string, string>\n) {\n let ruleNode = baseLayer.nodes?.find(\n (node): node is Rule => node.type === \"rule\" && node.selector === selector\n )\n\n if (!ruleNode) {\n if (Object.keys(vars).length > 0) {\n ruleNode = postcss.rule({\n selector,\n raws: { between: \" \", before: \"\\n \" },\n })\n baseLayer.append(ruleNode)\n }\n }\n\n Object.entries(vars).forEach(([key, value]) => {\n const prop = `--${key.replace(/^--/, \"\")}`\n const newDecl = postcss.decl({\n prop,\n value,\n raws: { semicolon: true },\n })\n\n const existingDecl = ruleNode?.nodes.find(\n (node): node is postcss.Declaration =>\n node.type === \"decl\" && node.prop === prop\n )\n\n existingDecl ? existingDecl.replaceWith(newDecl) : ruleNode?.append(newDecl)\n })\n}\n\nfunction updateCssVarsPluginV4(\n cssVars: z.infer<typeof registryItemCssVarsSchema>,\n options: {\n overwriteCssVars?: boolean\n }\n) {\n return {\n postcssPlugin: \"update-css-vars-v4\",\n Once(root: Root) {\n Object.entries(cssVars).forEach(([key, vars]) => {\n let selector = key === \"light\" ? \":root\" : `.${key}`\n\n if (key === \"theme\") {\n selector = \"@theme\"\n const themeNode = upsertThemeNode(root)\n Object.entries(vars).forEach(([key, value]) => {\n const prop = `--${key.replace(/^--/, \"\")}`\n const newDecl = postcss.decl({\n prop,\n value,\n raws: { semicolon: true },\n })\n\n const existingDecl = themeNode?.nodes?.find(\n (node): node is postcss.Declaration =>\n node.type === \"decl\" && node.prop === prop\n )\n\n // Only overwrite if overwriteCssVars is true\n // i.e for registry:theme and registry:style\n // We do not want new components to overwrite existing vars.\n // Keep user defined vars.\n if (options.overwriteCssVars) {\n if (existingDecl) {\n existingDecl.replaceWith(newDecl)\n } else {\n themeNode?.append(newDecl)\n }\n } else {\n if (!existingDecl) {\n themeNode?.append(newDecl)\n }\n }\n })\n return\n }\n\n let ruleNode = root.nodes?.find(\n (node): node is Rule =>\n node.type === \"rule\" && node.selector === selector\n )\n\n if (!ruleNode && Object.keys(vars).length > 0) {\n ruleNode = postcss.rule({\n selector,\n nodes: [],\n raws: { semicolon: true, between: \" \", before: \"\\n\" },\n })\n root.append(ruleNode)\n root.insertBefore(ruleNode, postcss.comment({ text: \"---break---\" }))\n }\n\n Object.entries(vars).forEach(([key, value]) => {\n let prop = `--${key.replace(/^--/, \"\")}`\n\n // Special case for sidebar-background.\n if (prop === \"--sidebar-background\") {\n prop = \"--sidebar\"\n }\n\n if (isLocalHSLValue(value)) {\n value = `hsl(${value})`\n }\n\n const newDecl = postcss.decl({\n prop,\n value,\n raws: { semicolon: true },\n })\n const existingDecl = ruleNode?.nodes.find(\n (node): node is postcss.Declaration =>\n node.type === \"decl\" && node.prop === prop\n )\n\n // Only overwrite if overwriteCssVars is true\n // i.e for registry:theme and registry:style\n // We do not want new components to overwrite existing vars.\n // Keep user defined vars.\n if (options.overwriteCssVars) {\n if (existingDecl) {\n existingDecl.replaceWith(newDecl)\n } else {\n ruleNode?.append(newDecl)\n }\n } else {\n if (!existingDecl) {\n ruleNode?.append(newDecl)\n }\n }\n })\n })\n },\n }\n}\n\nfunction updateThemePlugin(cssVars: z.infer<typeof registryItemCssVarsSchema>) {\n return {\n postcssPlugin: \"update-theme\",\n Once(root: Root) {\n // Find unique color names from light and dark.\n const variables = Array.from(\n new Set(\n Object.keys(cssVars).flatMap((key) =>\n Object.keys(cssVars[key as keyof typeof cssVars] || {})\n )\n )\n )\n\n if (!variables.length) {\n return\n }\n\n const themeNode = upsertThemeNode(root)\n\n const themeVarNodes = themeNode.nodes?.filter(\n (node): node is postcss.Declaration =>\n node.type === \"decl\" && node.prop.startsWith(\"--\")\n )\n\n for (const variable of variables) {\n const value = Object.values(cssVars).find((vars) => vars[variable])?.[\n variable\n ]\n\n if (!value) {\n continue\n }\n\n if (variable === \"radius\") {\n const radiusVariables = {\n sm: \"calc(var(--radius) - 4px)\",\n md: \"calc(var(--radius) - 2px)\",\n lg: \"var(--radius)\",\n xl: \"calc(var(--radius) + 4px)\",\n \"2xl\": \"calc(var(--radius) + 8px)\",\n \"3xl\": \"calc(var(--radius) + 12px)\",\n \"4xl\": \"calc(var(--radius) + 16px)\",\n }\n for (const [key, value] of Object.entries(radiusVariables)) {\n const cssVarNode = postcss.decl({\n prop: `--radius-${key}`,\n value,\n raws: { semicolon: true },\n })\n if (\n themeNode?.nodes?.find(\n (node): node is postcss.Declaration =>\n node.type === \"decl\" && node.prop === cssVarNode.prop\n )\n ) {\n continue\n }\n themeNode?.append(cssVarNode)\n }\n continue\n }\n\n let prop =\n isLocalHSLValue(value) || isColorValue(value)\n ? `--color-${variable.replace(/^--/, \"\")}`\n : `--${variable.replace(/^--/, \"\")}`\n if (prop === \"--color-sidebar-background\") {\n prop = \"--color-sidebar\"\n }\n\n let propValue = `var(--${variable})`\n if (prop === \"--color-sidebar\") {\n propValue = \"var(--sidebar)\"\n }\n\n const cssVarNode = postcss.decl({\n prop,\n value: propValue,\n raws: { semicolon: true },\n })\n const existingDecl = themeNode?.nodes?.find(\n (node): node is postcss.Declaration =>\n node.type === \"decl\" && node.prop === cssVarNode.prop\n )\n if (!existingDecl) {\n if (themeVarNodes?.length) {\n themeNode?.insertAfter(\n themeVarNodes[themeVarNodes.length - 1],\n cssVarNode\n )\n } else {\n themeNode?.append(cssVarNode)\n }\n }\n }\n },\n }\n}\n\nfunction upsertThemeNode(root: Root): AtRule {\n let themeNode = root.nodes.find(\n (node): node is AtRule =>\n node.type === \"atrule\" &&\n node.name === \"theme\" &&\n node.params === \"inline\"\n )\n\n if (!themeNode) {\n themeNode = postcss.atRule({\n name: \"theme\",\n params: \"inline\",\n nodes: [],\n raws: { semicolon: true, between: \" \", before: \"\\n\" },\n })\n root.append(themeNode)\n root.insertBefore(themeNode, postcss.comment({ text: \"---break---\" }))\n }\n\n return themeNode\n}\n\nfunction addCustomVariant({ params }: { params: string }) {\n return {\n postcssPlugin: \"add-custom-variant\",\n Once(root: Root) {\n const customVariant = root.nodes.find(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === \"custom-variant\"\n )\n\n if (!customVariant) {\n // Find all import nodes\n const importNodes = root.nodes.filter(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === \"import\"\n )\n\n const variantNode = postcss.atRule({\n name: \"custom-variant\",\n params,\n raws: { semicolon: true, before: \"\\n\" },\n })\n\n if (importNodes.length > 0) {\n // Insert after the last import\n const lastImport = importNodes[importNodes.length - 1]\n root.insertAfter(lastImport, variantNode)\n } else {\n // If no imports, insert after the first node\n root.insertAfter(root.nodes[0], variantNode)\n }\n\n root.insertBefore(variantNode, postcss.comment({ text: \"---break---\" }))\n }\n },\n }\n}\n\nfunction addCustomImport({ params }: { params: string }) {\n return {\n postcssPlugin: \"add-custom-import\",\n Once(root: Root) {\n const importNodes = root.nodes.filter(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === \"import\"\n )\n\n // Find custom variant node (to ensure we insert before it)\n const customVariantNode = root.nodes.find(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === \"custom-variant\"\n )\n\n // Check if our specific import already exists\n const hasImport = importNodes.some(\n (node) => node.params.replace(/[\"']/g, \"\") === params\n )\n\n if (!hasImport) {\n const importNode = postcss.atRule({\n name: \"import\",\n params: `\"${params}\"`,\n raws: { semicolon: true, before: \"\\n\" },\n })\n\n if (importNodes.length > 0) {\n // If there are existing imports, add after the last import\n const lastImport = importNodes[importNodes.length - 1]\n root.insertAfter(lastImport, importNode)\n } else if (customVariantNode) {\n // If no imports but has custom-variant, insert before it\n root.insertBefore(customVariantNode, importNode)\n root.insertBefore(\n customVariantNode,\n postcss.comment({ text: \"---break---\" })\n )\n } else {\n // If no imports and no custom-variant, insert at the start\n root.prepend(importNode)\n root.insertAfter(importNode, postcss.comment({ text: \"---break---\" }))\n }\n }\n },\n }\n}\n\nfunction updateTailwindConfigPlugin(\n tailwindConfig: z.infer<typeof registryItemTailwindSchema>[\"config\"]\n) {\n return {\n postcssPlugin: \"update-tailwind-config\",\n Once(root: Root) {\n if (!tailwindConfig?.plugins) {\n return\n }\n\n const quoteType = getQuoteType(root)\n const quote = quoteType === \"single\" ? \"'\" : '\"'\n\n const pluginNodes = root.nodes.filter(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === \"plugin\"\n )\n\n const lastPluginNode =\n pluginNodes[pluginNodes.length - 1] || root.nodes[0]\n\n for (const plugin of tailwindConfig.plugins) {\n const pluginName = plugin.replace(/^require\\([\"']|[\"']\\)$/g, \"\")\n\n // Check if the plugin is already present.\n if (\n pluginNodes.some((node) => {\n return node.params.replace(/[\"']/g, \"\") === pluginName\n })\n ) {\n continue\n }\n\n const pluginNode = postcss.atRule({\n name: \"plugin\",\n params: `${quote}${pluginName}${quote}`,\n raws: { semicolon: true, before: \"\\n\" },\n })\n root.insertAfter(lastPluginNode, pluginNode)\n root.insertBefore(pluginNode, postcss.comment({ text: \"---break---\" }))\n }\n },\n }\n}\n\nfunction updateTailwindConfigKeyframesPlugin(\n tailwindConfig: z.infer<typeof registryItemTailwindSchema>[\"config\"]\n) {\n return {\n postcssPlugin: \"update-tailwind-config-keyframes\",\n Once(root: Root) {\n if (!tailwindConfig?.theme?.extend?.keyframes) {\n return\n }\n\n const themeNode = upsertThemeNode(root)\n const existingKeyFrameNodes = themeNode.nodes?.filter(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === \"keyframes\"\n )\n\n const keyframeValueSchema = z.record(\n z.string(),\n z.record(z.string(), z.string())\n )\n\n for (const [keyframeName, keyframeValue] of Object.entries(\n tailwindConfig.theme.extend.keyframes\n )) {\n if (typeof keyframeName !== \"string\") {\n continue\n }\n\n const parsedKeyframeValue = keyframeValueSchema.safeParse(keyframeValue)\n\n if (!parsedKeyframeValue.success) {\n continue\n }\n\n if (\n existingKeyFrameNodes?.find(\n (node): node is postcss.AtRule =>\n node.type === \"atrule\" &&\n node.name === \"keyframes\" &&\n node.params === keyframeName\n )\n ) {\n continue\n }\n\n const keyframeNode = postcss.atRule({\n name: \"keyframes\",\n params: keyframeName,\n nodes: [],\n raws: { semicolon: true, between: \" \", before: \"\\n \" },\n })\n\n for (const [key, values] of Object.entries(parsedKeyframeValue.data)) {\n const rule = postcss.rule({\n selector: key,\n nodes: Object.entries(values).map(([key, value]) =>\n postcss.decl({\n prop: key,\n value,\n raws: { semicolon: true, before: \"\\n \", between: \": \" },\n })\n ),\n raws: { semicolon: true, between: \" \", before: \"\\n \" },\n })\n keyframeNode.append(rule)\n }\n\n themeNode.append(keyframeNode)\n themeNode.insertBefore(\n keyframeNode,\n postcss.comment({ text: \"---break---\" })\n )\n }\n },\n }\n}\n\nfunction updateTailwindConfigAnimationPlugin(\n tailwindConfig: z.infer<typeof registryItemTailwindSchema>[\"config\"]\n) {\n return {\n postcssPlugin: \"update-tailwind-config-animation\",\n Once(root: Root) {\n if (!tailwindConfig?.theme?.extend?.animation) {\n return\n }\n\n const themeNode = upsertThemeNode(root)\n const existingAnimationNodes = themeNode.nodes?.filter(\n (node): node is postcss.Declaration =>\n node.type === \"decl\" && node.prop.startsWith(\"--animate-\")\n )\n\n const parsedAnimationValue = z\n .record(z.string(), z.string())\n .safeParse(tailwindConfig.theme.extend.animation)\n if (!parsedAnimationValue.success) {\n return\n }\n\n for (const [key, value] of Object.entries(parsedAnimationValue.data)) {\n const prop = `--animate-${key}`\n if (\n existingAnimationNodes?.find(\n (node): node is postcss.Declaration => node.prop === prop\n )\n ) {\n continue\n }\n\n const animationNode = postcss.decl({\n prop,\n value,\n raws: { semicolon: true, between: \": \", before: \"\\n \" },\n })\n themeNode.append(animationNode)\n }\n },\n }\n}\n\nfunction getQuoteType(root: Root): \"single\" | \"double\" {\n const firstNode = root.nodes[0]\n const raw = firstNode.toString()\n\n if (raw.includes(\"'\")) {\n return \"single\"\n }\n return \"double\"\n}\n\nexport function isLocalHSLValue(value: string) {\n if (\n value.startsWith(\"hsl\") ||\n value.startsWith(\"rgb\") ||\n value.startsWith(\"#\") ||\n value.startsWith(\"oklch\")\n ) {\n return false\n }\n\n const chunks = value.split(\" \")\n\n return (\n chunks.length === 3 &&\n chunks.slice(1, 3).every((chunk) => chunk.includes(\"%\"))\n )\n}\n\nexport function isColorValue(value: string) {\n return (\n value.startsWith(\"hsl\") ||\n value.startsWith(\"rgb\") ||\n value.startsWith(\"#\") ||\n value.startsWith(\"oklch\") ||\n value.includes(\"--color-\")\n )\n}\n","import { RegistryItem } from \"@/src/schema\"\nimport { Config } from \"@/src/utils/get-config\"\nimport { getPackageInfo } from \"@/src/utils/get-package-info\"\nimport { getPackageManager } from \"@/src/utils/get-package-manager\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { execa } from \"execa\"\nimport prompts from \"prompts\"\n\nexport async function updateDependencies(\n dependencies: RegistryItem[\"dependencies\"],\n devDependencies: RegistryItem[\"devDependencies\"],\n config: Config,\n options: {\n silent?: boolean\n }\n) {\n dependencies = Array.from(new Set(dependencies))\n devDependencies = Array.from(new Set(devDependencies))\n\n if (!dependencies?.length && !devDependencies?.length) {\n return\n }\n\n options = {\n silent: false,\n ...options,\n }\n\n const dependenciesSpinner = spinner(`Installing dependencies.`, {\n silent: options.silent,\n })?.start()\n const packageManager = await getUpdateDependenciesPackageManager(config)\n\n // Offer to use --force or --legacy-peer-deps if using React 19 with npm.\n let flag = \"\"\n if (shouldPromptForNpmFlag(config) && packageManager === \"npm\") {\n if (options.silent) {\n flag = \"force\"\n } else {\n dependenciesSpinner.stopAndPersist()\n logger.warn(\n \"\\nIt looks like you are using React 19. \\nSome packages may fail to install due to peer dependency issues in npm (see https://ui.shadcn.com/react-19).\\n\"\n )\n const confirmation = await prompts([\n {\n type: \"select\",\n name: \"flag\",\n message: \"How would you like to proceed?\",\n choices: [\n { title: \"Use --force\", value: \"force\" },\n { title: \"Use --legacy-peer-deps\", value: \"legacy-peer-deps\" },\n ],\n },\n ])\n\n if (confirmation) {\n flag = confirmation.flag\n }\n }\n }\n\n dependenciesSpinner?.start()\n\n await installWithPackageManager(\n packageManager,\n dependencies,\n devDependencies,\n config.resolvedPaths.cwd,\n flag\n )\n\n dependenciesSpinner?.succeed()\n}\n\nfunction shouldPromptForNpmFlag(config: Config) {\n const packageInfo = getPackageInfo(config.resolvedPaths.cwd, false)\n\n if (!packageInfo?.dependencies?.react) {\n return false\n }\n\n const hasReact19 = /^(?:\\^|~)?19(?:\\.\\d+)*(?:-.*)?$/.test(\n packageInfo.dependencies.react\n )\n const hasReactDayPicker8 =\n packageInfo.dependencies[\"react-day-picker\"]?.startsWith(\"8\")\n\n return hasReact19 && hasReactDayPicker8\n}\n\nasync function getUpdateDependenciesPackageManager(config: Config) {\n const expoVersion = getPackageInfo(config.resolvedPaths.cwd, false)\n ?.dependencies?.expo\n\n if (expoVersion) {\n // Ensures package versions match the React Native version.\n // https://docs.expo.dev/more/expo-cli/#install\n return \"expo\"\n }\n\n return getPackageManager(config.resolvedPaths.cwd)\n}\n\nasync function installWithPackageManager(\n packageManager: Awaited<\n ReturnType<typeof getUpdateDependenciesPackageManager>\n >,\n dependencies: string[],\n devDependencies: string[],\n cwd: string,\n flag?: string\n) {\n if (packageManager === \"npm\") {\n return installWithNpm(dependencies, devDependencies, cwd, flag)\n }\n\n if (packageManager === \"deno\") {\n return installWithDeno(dependencies, devDependencies, cwd)\n }\n\n if (packageManager === \"expo\") {\n return installWithExpo(dependencies, devDependencies, cwd)\n }\n\n if (dependencies?.length) {\n await execa(packageManager, [\"add\", ...dependencies], {\n cwd,\n })\n }\n\n if (devDependencies?.length) {\n await execa(packageManager, [\"add\", \"-D\", ...devDependencies], { cwd })\n }\n}\n\nasync function installWithNpm(\n dependencies: string[],\n devDependencies: string[],\n cwd: string,\n flag?: string\n) {\n if (dependencies.length) {\n await execa(\n \"npm\",\n [\"install\", ...(flag ? [`--${flag}`] : []), ...dependencies],\n { cwd }\n )\n }\n\n if (devDependencies.length) {\n await execa(\n \"npm\",\n [\"install\", ...(flag ? [`--${flag}`] : []), \"-D\", ...devDependencies],\n { cwd }\n )\n }\n}\n\nasync function installWithDeno(\n dependencies: string[],\n devDependencies: string[],\n cwd: string\n) {\n if (dependencies?.length) {\n await execa(\"deno\", [\"add\", ...dependencies.map((dep) => `npm:${dep}`)], {\n cwd,\n })\n }\n\n if (devDependencies?.length) {\n await execa(\n \"deno\",\n [\"add\", \"-D\", ...devDependencies.map((dep) => `npm:${dep}`)],\n { cwd }\n )\n }\n}\n\nasync function installWithExpo(\n dependencies: string[],\n devDependencies: string[],\n cwd: string\n) {\n if (dependencies.length) {\n await execa(\"npx\", [\"expo\", \"install\", ...dependencies], { cwd })\n }\n\n if (devDependencies.length) {\n await execa(\"npx\", [\"expo\", \"install\", \"-- -D\", ...devDependencies], {\n cwd,\n })\n }\n}\n","import { existsSync, promises as fs } from \"fs\"\nimport path from \"path\"\nimport { registryItemEnvVarsSchema } from \"@/src/schema\"\nimport {\n findExistingEnvFile,\n getNewEnvKeys,\n mergeEnvContent,\n} from \"@/src/utils/env-helpers\"\nimport { Config } from \"@/src/utils/get-config\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { z } from \"zod\"\n\nexport async function updateEnvVars(\n envVars: z.infer<typeof registryItemEnvVarsSchema> | undefined,\n config: Config,\n options: {\n silent?: boolean\n }\n) {\n if (!envVars || Object.keys(envVars).length === 0) {\n return {\n envVarsAdded: [],\n envFileUpdated: null,\n envFileCreated: null,\n }\n }\n\n options = {\n silent: false,\n ...options,\n }\n\n const envSpinner = spinner(`Adding environment variables.`, {\n silent: options.silent,\n })?.start()\n\n const projectRoot = config.resolvedPaths.cwd\n\n // Find existing env file or use .env.local as default.\n let envFilePath = path.join(projectRoot, \".env.local\")\n const existingEnvFile = findExistingEnvFile(projectRoot)\n\n if (existingEnvFile) {\n envFilePath = existingEnvFile\n }\n\n const envFileExists = existsSync(envFilePath)\n const envFileName = path.basename(envFilePath)\n\n // Convert envVars object to env file format\n const newEnvContent = Object.entries(envVars)\n .map(([key, value]) => `${key}=${value}`)\n .join(\"\\n\")\n\n let envVarsAdded: string[] = []\n let envFileUpdated: string | null = null\n let envFileCreated: string | null = null\n\n if (envFileExists) {\n const existingContent = await fs.readFile(envFilePath, \"utf-8\")\n const mergedContent = mergeEnvContent(existingContent, newEnvContent)\n envVarsAdded = getNewEnvKeys(existingContent, newEnvContent)\n\n if (envVarsAdded.length > 0) {\n await fs.writeFile(envFilePath, mergedContent, \"utf-8\")\n envFileUpdated = path.relative(projectRoot, envFilePath)\n\n envSpinner?.succeed(\n `Added the following variables to ${highlighter.info(envFileName)}:`\n )\n\n if (!options.silent) {\n for (const key of envVarsAdded) {\n logger.log(` ${highlighter.success(\"+\")} ${key}`)\n }\n }\n } else {\n envSpinner?.stop()\n }\n } else {\n // Create new env file\n await fs.writeFile(envFilePath, newEnvContent + \"\\n\", \"utf-8\")\n envFileCreated = path.relative(projectRoot, envFilePath)\n envVarsAdded = Object.keys(envVars)\n\n envSpinner?.succeed(\n `Added the following variables to ${highlighter.info(envFileName)}:`\n )\n\n if (!options.silent) {\n for (const key of envVarsAdded) {\n logger.log(` ${highlighter.success(\"+\")} ${key}`)\n }\n }\n }\n\n if (!options.silent && envVarsAdded.length > 0) {\n logger.break()\n }\n\n return {\n envVarsAdded,\n envFileUpdated,\n envFileCreated,\n }\n}\n","import { existsSync, promises as fs } from \"fs\"\nimport path from \"path\"\nimport { RegistryFontItem, registryResolvedItemsTreeSchema } from \"@/src/schema\"\nimport { Config } from \"@/src/utils/get-config\"\nimport { ProjectInfo, getProjectInfo } from \"@/src/utils/get-project-info\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport {\n CallExpression,\n Project,\n ScriptKind,\n SyntaxKind,\n VariableDeclarationKind,\n} from \"ts-morph\"\nimport z from \"zod\"\n\nexport async function massageTreeForFonts(\n tree: z.infer<typeof registryResolvedItemsTreeSchema>,\n config: Config\n) {\n if (!tree.fonts?.length) {\n return tree\n }\n\n const projectInfo = await getProjectInfo(config.resolvedPaths.cwd)\n\n if (!projectInfo) {\n return tree\n }\n\n const [fontSans] = tree.fonts\n tree.cssVars ??= {}\n tree.cssVars.theme ??= {}\n\n if (\n projectInfo.framework.name === \"next-app\" ||\n projectInfo.framework.name === \"next-pages\"\n ) {\n tree.cssVars.theme[\n fontSans.font.variable\n ] = `var(${fontSans.font.variable})`\n return tree\n }\n\n // Other frameworks will use fontsource for now.\n const fontName = fontSans.name.replace(\"font-\", \"\")\n const fontSourceDependency = `@fontsource-variable/${fontName}`\n tree.dependencies ??= []\n tree.dependencies.push(fontSourceDependency)\n tree.css ??= {}\n tree.css[`@import \"${fontSourceDependency}\"`] = {}\n tree.css[\"@layer base\"] ??= {}\n tree.css[\"@layer base\"].html = {\n \"@apply font-sans\": {},\n }\n tree.css[\"@layer base\"].body = {\n \"@apply font-sans bg-background text-foreground\": {},\n }\n tree.cssVars.theme[fontSans.font.variable] = fontSans.font.family\n\n // tree.docs += `## Fonts\n // The ${highlighter.info(\n // fontSans.title ?? \"\"\n // )} font has been added to your project.\n\n // If you have existing font-family declarations, you may need to update them to use the new ${highlighter.info(\n // fontSans.font.variable\n // )} variable.\n\n // @theme inline {\n // ${fontSans.font.variable}: ${fontSans.font.family};\n // }\n // `\n\n return tree\n}\n\nexport async function updateFonts(\n fonts: RegistryFontItem[] | undefined,\n config: Config,\n options: {\n silent?: boolean\n }\n) {\n if (!fonts?.length) {\n return\n }\n\n const projectInfo = await getProjectInfo(config.resolvedPaths.cwd)\n\n if (!projectInfo) {\n return\n }\n\n if (\n projectInfo.framework.name !== \"next-app\" &&\n projectInfo.framework.name !== \"next-pages\"\n ) {\n return\n }\n\n const fontsSpinner = spinner(\"Updating fonts.\", {\n silent: options.silent,\n })?.start()\n\n try {\n await updateNextFonts(fonts, config, projectInfo)\n fontsSpinner?.succeed(\"Updating fonts.\")\n } catch (error) {\n fontsSpinner?.fail(`Failed to update fonts.`)\n throw error\n }\n}\n\nasync function updateNextFonts(\n fonts: RegistryFontItem[],\n config: Config,\n projectInfo: ProjectInfo\n) {\n // Find layout file.\n const layoutPath = await findLayoutFile(config, projectInfo)\n\n if (!layoutPath) {\n return\n }\n\n const layoutContent = await fs.readFile(layoutPath, \"utf-8\")\n const updatedContent = await transformLayoutFonts(\n layoutContent,\n fonts,\n config\n )\n\n if (updatedContent !== layoutContent) {\n await fs.writeFile(layoutPath, updatedContent, \"utf-8\")\n }\n}\n\nasync function findLayoutFile(\n config: Config,\n projectInfo: ProjectInfo\n): Promise<string | null> {\n const cwd = config.resolvedPaths.cwd\n const isSrcDir = projectInfo.isSrcDir\n const isTsx = projectInfo.isTsx\n const ext = isTsx ? \"tsx\" : \"jsx\"\n\n const possiblePaths = isSrcDir\n ? [`src/app/layout.${ext}`, `app/layout.${ext}`]\n : [`app/layout.${ext}`]\n\n for (const relativePath of possiblePaths) {\n const fullPath = path.join(cwd, relativePath)\n if (existsSync(fullPath)) {\n return fullPath\n }\n }\n\n return null\n}\n\nexport async function transformLayoutFonts(\n input: string,\n fonts: RegistryFontItem[],\n _config: Config\n) {\n const project = new Project({\n compilerOptions: {},\n })\n\n const sourceFile = project.createSourceFile(\"layout.tsx\", input, {\n scriptKind: ScriptKind.TSX,\n })\n\n // Only process Google fonts for now.\n const googleFonts = fonts.filter((f) => f.font.provider === \"google\")\n\n // Track which font variables we're adding.\n const fontVariableNames: string[] = []\n\n // Process Google fonts.\n for (const font of googleFonts) {\n const importName = font.font.import\n if (!importName) {\n continue\n }\n\n // Generate a variable name from the import (e.g., \"Inter\" -> \"inter\", \"Geist_Mono\" -> \"geistMono\").\n const varName = toCamelCase(importName)\n\n // Check if import already exists.\n const existingImport = sourceFile.getImportDeclaration((decl) => {\n const moduleSpecifier = decl.getModuleSpecifierValue()\n return moduleSpecifier === \"next/font/google\"\n })\n\n // Build font options.\n const fontOptions = buildFontOptions(font)\n\n if (existingImport) {\n // Check if this specific font is already imported.\n const namedImports = existingImport.getNamedImports()\n const hasImport = namedImports.some((imp) => imp.getName() === importName)\n\n if (!hasImport) {\n existingImport.addNamedImport(importName)\n }\n } else {\n // Add new import.\n sourceFile.addImportDeclaration({\n moduleSpecifier: \"next/font/google\",\n namedImports: [importName],\n })\n }\n\n // Check if variable declaration already exists with same variable CSS property.\n const existingVarDecl = findFontVariableDeclaration(\n sourceFile,\n font.font.variable\n )\n\n if (existingVarDecl) {\n // Replace the initializer of the existing declaration.\n existingVarDecl.setInitializer(`${importName}(${fontOptions})`)\n // Update the variable name if different.\n if (existingVarDecl.getName() !== varName) {\n existingVarDecl.rename(varName)\n }\n } else {\n // Find the last import or existing font declaration to insert after.\n const insertPosition = findInsertPosition(sourceFile)\n\n // Add variable declaration.\n const statement = sourceFile.insertVariableStatement(insertPosition, {\n declarationKind: VariableDeclarationKind.Const,\n declarations: [\n {\n name: varName,\n initializer: `${importName}(${fontOptions})`,\n },\n ],\n })\n\n // Add a blank line after the declaration.\n statement.appendWhitespace(\"\\n\")\n }\n\n fontVariableNames.push(varName)\n }\n\n // Update html className to include font variables.\n if (fontVariableNames.length > 0) {\n updateHtmlClassName(sourceFile, fontVariableNames)\n }\n\n return sourceFile.getFullText()\n}\n\nfunction buildFontOptions(font: RegistryFontItem) {\n const options: Record<string, unknown> = {}\n\n if (font.font.subsets?.length) {\n options.subsets = font.font.subsets\n }\n\n if (font.font.weight?.length) {\n options.weight = font.font.weight\n }\n\n options.variable = font.font.variable\n\n return JSON.stringify(options)\n .replace(/\"([^\"]+)\":/g, \"$1:\") // Remove quotes from keys.\n .replace(/\"/g, \"'\") // Use single quotes for strings.\n}\n\nfunction toCamelCase(str: string) {\n // Convert \"Geist_Mono\" -> \"geistMono\", \"Inter\" -> \"inter\".\n return str\n .split(\"_\")\n .map((part, index) =>\n index === 0\n ? part.toLowerCase()\n : part.charAt(0).toUpperCase() + part.slice(1).toLowerCase()\n )\n .join(\"\")\n}\n\nfunction findFontVariableDeclaration(\n sourceFile: ReturnType<Project[\"createSourceFile\"]>,\n variable: string\n) {\n // Find variable declarations that call a font function with matching variable.\n const variableStatements = sourceFile.getVariableStatements()\n\n for (const statement of variableStatements) {\n for (const declaration of statement.getDeclarations()) {\n const initializer = declaration.getInitializer()\n if (!initializer) continue\n\n // Check if it's a call expression.\n if (initializer.getKind() !== SyntaxKind.CallExpression) continue\n\n const callExpr = initializer as CallExpression\n\n // Get the arguments.\n const args = callExpr.getArguments()\n if (args.length === 0) continue\n\n // Check if any argument contains our variable.\n const argText = args[0].getText()\n if (argText.includes(`variable:`) && argText.includes(variable)) {\n return declaration\n }\n }\n }\n\n return null\n}\n\nfunction findInsertPosition(\n sourceFile: ReturnType<Project[\"createSourceFile\"]>\n) {\n const imports = sourceFile.getImportDeclarations()\n if (imports.length > 0) {\n const lastImport = imports[imports.length - 1]\n return lastImport.getChildIndex() + 1\n }\n return 0\n}\n\nfunction updateHtmlClassName(\n sourceFile: ReturnType<Project[\"createSourceFile\"]>,\n fontVariableNames: string[]\n) {\n // Find the <html> JSX element.\n const jsxElements = sourceFile.getDescendantsOfKind(\n SyntaxKind.JsxOpeningElement\n )\n\n for (const element of jsxElements) {\n const tagName = element.getTagNameNode().getText()\n if (tagName !== \"html\") continue\n\n const classNameAttr = element.getAttribute(\"className\")\n if (!classNameAttr) {\n // Add className attribute with font variables.\n const variableExpressions = fontVariableNames\n .map((name) => `${name}.variable`)\n .join(\", \")\n\n if (fontVariableNames.length === 1) {\n element.addAttribute({\n name: \"className\",\n initializer: `{${variableExpressions}}`,\n })\n } else {\n // Need to use cn() for multiple fonts.\n ensureCnImport(sourceFile)\n element.addAttribute({\n name: \"className\",\n initializer: `{cn(${variableExpressions})}`,\n })\n }\n return\n }\n\n // Handle existing className.\n if (classNameAttr.getKind() !== SyntaxKind.JsxAttribute) {\n return\n }\n\n const jsxAttr = classNameAttr.asKindOrThrow(SyntaxKind.JsxAttribute)\n const initializer = jsxAttr.getInitializer()\n\n if (!initializer) return\n\n // Build the new variable expressions.\n const newVarExpressions = fontVariableNames.map(\n (name) => `${name}.variable`\n )\n\n if (initializer.getKind() === SyntaxKind.StringLiteral) {\n // className=\"some-class\" -> className={cn(\"some-class\", font.variable)}\n const currentValue = initializer.getText().slice(1, -1) // Remove quotes.\n ensureCnImport(sourceFile)\n jsxAttr.setInitializer(\n `{cn(\"${currentValue}\", ${newVarExpressions.join(\", \")})}`\n )\n } else if (initializer.getKind() === SyntaxKind.JsxExpression) {\n // className={...} - need to analyze the expression.\n const jsxExpr = initializer.asKindOrThrow(SyntaxKind.JsxExpression)\n const expr = jsxExpr.getExpression()\n if (!expr) return\n\n const exprText = expr.getText()\n\n // Check if it's already using cn().\n if (exprText.startsWith(\"cn(\")) {\n // Check if cn() already has exactly our font variables.\n const hasAllFontVars = newVarExpressions.every((v) =>\n exprText.includes(v)\n )\n if (hasAllFontVars) {\n // Already has our font variables, skip.\n continue\n }\n\n // Remove existing font variables and add new ones.\n const cleanedExpr = removeFontVariablesFromCn(exprText)\n const newExpr = insertFontVariablesIntoCn(\n cleanedExpr,\n newVarExpressions\n )\n jsxExpr.replaceWithText(`{${newExpr}}`)\n } else if (/^\\w+\\.variable$/.test(exprText)) {\n // Single font variable like {inter.variable}.\n // Check if it's already one of our font variables.\n if (newVarExpressions.includes(exprText)) {\n // Already using our font variable, skip.\n continue\n }\n // Replace with our font variables.\n if (newVarExpressions.length === 1) {\n jsxExpr.replaceWithText(`{${newVarExpressions[0]}}`)\n } else {\n ensureCnImport(sourceFile)\n jsxExpr.replaceWithText(`{cn(${newVarExpressions.join(\", \")})}`)\n }\n } else if (exprText.startsWith(\"`\") && exprText.endsWith(\"`\")) {\n // Template literal - parse and convert to cn() arguments.\n const cnArgs = parseTemplateLiteralToCnArgs(exprText)\n ensureCnImport(sourceFile)\n jsxExpr.replaceWithText(\n `{cn(${[...cnArgs, ...newVarExpressions].join(\", \")})}`\n )\n } else {\n // Some other expression (variable, etc.), wrap with cn().\n ensureCnImport(sourceFile)\n jsxExpr.replaceWithText(\n `{cn(${exprText}, ${newVarExpressions.join(\", \")})}`\n )\n }\n }\n }\n}\n\nfunction ensureCnImport(sourceFile: ReturnType<Project[\"createSourceFile\"]>) {\n const existingImport = sourceFile.getImportDeclaration((decl) => {\n const namedImports = decl.getNamedImports()\n return namedImports.some((imp) => imp.getName() === \"cn\")\n })\n\n if (!existingImport) {\n // Try to find the lib/utils import pattern.\n const utilsImport = sourceFile.getImportDeclaration((decl) => {\n const moduleSpecifier = decl.getModuleSpecifierValue()\n return moduleSpecifier.includes(\"/lib/utils\")\n })\n\n if (utilsImport) {\n const namedImports = utilsImport.getNamedImports()\n if (!namedImports.some((imp) => imp.getName() === \"cn\")) {\n utilsImport.addNamedImport(\"cn\")\n }\n } else {\n // Add a new import for cn.\n sourceFile.addImportDeclaration({\n moduleSpecifier: \"@/lib/utils\",\n namedImports: [\"cn\"],\n })\n }\n }\n}\n\nfunction parseTemplateLiteralToCnArgs(templateLiteral: string) {\n // Parse template literal like `${geistSans.variable} ${geistMono.variable} antialiased`\n // into cn() arguments with static strings first, then variables:\n // [\"antialiased\", geistSans.variable, geistMono.variable]\n const staticArgs: string[] = []\n const variableArgs: string[] = []\n\n // Remove the backticks.\n const content = templateLiteral.slice(1, -1)\n\n // Split by ${...} expressions and static parts.\n const parts = content.split(/(\\$\\{[^}]+\\})/)\n\n for (const part of parts) {\n if (!part) continue\n\n if (part.startsWith(\"${\") && part.endsWith(\"}\")) {\n // Expression like ${geistSans.variable}.\n const expr = part.slice(2, -1).trim()\n if (expr) {\n variableArgs.push(expr)\n }\n } else {\n // Static string - split by whitespace and add non-empty parts as quoted strings.\n const staticParts = part.trim().split(/\\s+/).filter(Boolean)\n for (const staticPart of staticParts) {\n staticArgs.push(`\"${staticPart}\"`)\n }\n }\n }\n\n // Return static strings first, then variables.\n return [...staticArgs, ...variableArgs]\n}\n\nfunction removeFontVariablesFromCn(cnExpr: string) {\n // Remove patterns like \"fontName.variable\" from cn() call.\n // This is a simple regex-based approach.\n return cnExpr.replace(/,?\\s*\\w+\\.variable/g, \"\").replace(/cn\\(\\s*,/, \"cn(\")\n}\n\nfunction insertFontVariablesIntoCn(cnExpr: string, fontVars: string[]) {\n // Insert font variables at the end of cn() arguments.\n const varsStr = fontVars.join(\", \")\n return cnExpr.replace(/\\)$/, `, ${varsStr})`)\n}\n","import path from \"path\"\nimport { getRegistryItems } from \"@/src/registry/api\"\nimport { configWithDefaults } from \"@/src/registry/config\"\nimport { resolveRegistryTree } from \"@/src/registry/resolver\"\nimport {\n configSchema,\n registryItemFileSchema,\n registryItemSchema,\n workspaceConfigSchema,\n} from \"@/src/schema\"\nimport {\n findCommonRoot,\n findPackageRoot,\n getWorkspaceConfig,\n type Config,\n} from \"@/src/utils/get-config\"\nimport { getProjectTailwindVersionFromConfig } from \"@/src/utils/get-project-info\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { isSafeTarget } from \"@/src/utils/is-safe-target\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { updateCss } from \"@/src/utils/updaters/update-css\"\nimport { updateCssVars } from \"@/src/utils/updaters/update-css-vars\"\nimport { updateDependencies } from \"@/src/utils/updaters/update-dependencies\"\nimport { updateEnvVars } from \"@/src/utils/updaters/update-env-vars\"\nimport { updateFiles } from \"@/src/utils/updaters/update-files\"\nimport {\n massageTreeForFonts,\n updateFonts,\n} from \"@/src/utils/updaters/update-fonts\"\nimport { updateTailwindConfig } from \"@/src/utils/updaters/update-tailwind-config\"\nimport { z } from \"zod\"\n\nexport async function addComponents(\n components: string[],\n config: Config,\n options: {\n overwrite?: boolean\n silent?: boolean\n isNewProject?: boolean\n baseStyle?: boolean\n registryHeaders?: Record<string, Record<string, string>>\n path?: string\n }\n) {\n options = {\n overwrite: false,\n silent: false,\n isNewProject: false,\n baseStyle: true,\n ...options,\n }\n\n const workspaceConfig = await getWorkspaceConfig(config)\n if (\n workspaceConfig &&\n workspaceConfig.ui &&\n workspaceConfig.ui.resolvedPaths.cwd !== config.resolvedPaths.cwd\n ) {\n return await addWorkspaceComponents(components, config, workspaceConfig, {\n ...options,\n isRemote:\n components?.length === 1 && !!components[0].match(/\\/chat\\/b\\//),\n })\n }\n\n return await addProjectComponents(components, config, options)\n}\n\nasync function addProjectComponents(\n components: string[],\n config: z.infer<typeof configSchema>,\n options: {\n overwrite?: boolean\n silent?: boolean\n isNewProject?: boolean\n baseStyle?: boolean\n path?: string\n }\n) {\n if (!options.baseStyle && !components.length) {\n return\n }\n\n const registrySpinner = spinner(`Checking registry.`, {\n silent: options.silent,\n })?.start()\n let tree = await resolveRegistryTree(components, configWithDefaults(config))\n\n if (!tree) {\n registrySpinner?.fail()\n return handleError(new Error(\"Failed to fetch components from registry.\"))\n }\n\n try {\n validateFilesTarget(tree.files ?? [], config.resolvedPaths.cwd)\n } catch (error) {\n registrySpinner?.fail()\n return handleError(error)\n }\n\n registrySpinner?.succeed()\n\n // const tailwindVersion = await getProjectTailwindVersionFromConfig(config)\n\n // tree = await massageTreeForFonts(tree, config)\n\n // await updateTailwindConfig(tree.tailwind?.config, config, {\n // silent: options.silent,\n // tailwindVersion,\n // })\n\n // const overwriteCssVars = await shouldOverwriteCssVars(components, config)\n // await updateCssVars(tree.cssVars, config, {\n // cleanupDefaultNextStyles: options.isNewProject,\n // silent: options.silent,\n // tailwindVersion,\n // tailwindConfig: tree.tailwind?.config,\n // overwriteCssVars,\n // initIndex: options.baseStyle,\n // })\n\n // // Add CSS updater\n // await updateCss(tree.css, config, {\n // silent: options.silent,\n // })\n\n // await updateEnvVars(tree.envVars, config, {\n // silent: options.silent,\n // })\n\n await updateDependencies(tree.dependencies, tree.devDependencies, config, {\n silent: options.silent,\n })\n\n // await updateFonts(tree.fonts, config, {\n // silent: options.silent,\n // })\n\n await updateFiles(tree.files, config, {\n overwrite: options.overwrite,\n silent: options.silent,\n path: options.path,\n })\n\n if (tree.docs) {\n logger.info(tree.docs)\n }\n}\n\nasync function addWorkspaceComponents(\n components: string[],\n config: z.infer<typeof configSchema>,\n workspaceConfig: z.infer<typeof workspaceConfigSchema>,\n options: {\n overwrite?: boolean\n silent?: boolean\n isNewProject?: boolean\n isRemote?: boolean\n baseStyle?: boolean\n path?: string\n }\n) {\n if (!options.baseStyle && !components.length) {\n return\n }\n\n const registrySpinner = spinner(`Checking registry.`, {\n silent: options.silent,\n })?.start()\n const tree = await resolveRegistryTree(components, configWithDefaults(config))\n\n if (!tree) {\n registrySpinner?.fail()\n return handleError(new Error(\"Failed to fetch components from registry.\"))\n }\n\n try {\n validateFilesTarget(tree.files ?? [], config.resolvedPaths.cwd)\n } catch (error) {\n registrySpinner?.fail()\n return handleError(error)\n }\n\n registrySpinner?.succeed()\n\n const filesCreated: string[] = []\n const filesUpdated: string[] = []\n const filesSkipped: string[] = []\n\n const rootSpinner = spinner(`Installing components.`)?.start()\n\n // Process global updates (tailwind, css vars, dependencies) first for the main target.\n // These should typically go to the UI package in a workspace.\n const mainTargetConfig = workspaceConfig.ui\n const tailwindVersion = await getProjectTailwindVersionFromConfig(\n mainTargetConfig\n )\n const workspaceRoot = findCommonRoot(\n config.resolvedPaths.cwd,\n mainTargetConfig.resolvedPaths.ui\n )\n\n // 1. Update tailwind config.\n if (tree.tailwind?.config) {\n await updateTailwindConfig(tree.tailwind?.config, mainTargetConfig, {\n silent: true,\n tailwindVersion,\n })\n filesUpdated.push(\n path.relative(\n workspaceRoot,\n mainTargetConfig.resolvedPaths.tailwindConfig\n )\n )\n }\n\n // 2. Update css vars.\n if (tree.cssVars) {\n const overwriteCssVars = await shouldOverwriteCssVars(components, config)\n await updateCssVars(tree.cssVars, mainTargetConfig, {\n silent: true,\n tailwindVersion,\n tailwindConfig: tree.tailwind?.config,\n overwriteCssVars,\n })\n filesUpdated.push(\n path.relative(workspaceRoot, mainTargetConfig.resolvedPaths.tailwindCss)\n )\n }\n\n // 3. Update CSS\n if (tree.css) {\n await updateCss(tree.css, mainTargetConfig, {\n silent: true,\n })\n filesUpdated.push(\n path.relative(workspaceRoot, mainTargetConfig.resolvedPaths.tailwindCss)\n )\n }\n\n // 4. Update environment variables\n if (tree.envVars) {\n await updateEnvVars(tree.envVars, mainTargetConfig, {\n silent: true,\n })\n }\n\n // 5. Update dependencies.\n await updateDependencies(\n tree.dependencies,\n tree.devDependencies,\n mainTargetConfig,\n {\n silent: true,\n }\n )\n\n // 6. Update fonts.\n await updateFonts(tree.fonts, mainTargetConfig, {\n silent: true,\n })\n\n // 7. Group files by their type to determine target config and update files.\n const filesByType = new Map<string, typeof tree.files>()\n\n for (const file of tree.files ?? []) {\n const type = file.type || \"registry:ui\"\n if (!filesByType.has(type)) {\n filesByType.set(type, [])\n }\n filesByType.get(type)!.push(file)\n }\n\n // Process each type of component with its appropriate target config.\n for (const type of Array.from(filesByType.keys())) {\n const typeFiles = filesByType.get(type)!\n\n let targetConfig = type === \"registry:ui\" ? workspaceConfig.ui : config\n\n const typeWorkspaceRoot = findCommonRoot(\n config.resolvedPaths.cwd,\n targetConfig.resolvedPaths.ui || targetConfig.resolvedPaths.cwd\n )\n const packageRoot =\n (await findPackageRoot(\n typeWorkspaceRoot,\n targetConfig.resolvedPaths.cwd\n )) ?? targetConfig.resolvedPaths.cwd\n\n // Update files for this type.\n const files = await updateFiles(typeFiles, targetConfig, {\n overwrite: options.overwrite,\n silent: true,\n rootSpinner,\n isRemote: options.isRemote,\n isWorkspace: true,\n path: options.path,\n })\n\n filesCreated.push(\n ...files.filesCreated.map((file) =>\n path.relative(typeWorkspaceRoot, path.join(packageRoot, file))\n )\n )\n filesUpdated.push(\n ...files.filesUpdated.map((file) =>\n path.relative(typeWorkspaceRoot, path.join(packageRoot, file))\n )\n )\n filesSkipped.push(\n ...files.filesSkipped.map((file) =>\n path.relative(typeWorkspaceRoot, path.join(packageRoot, file))\n )\n )\n }\n\n rootSpinner?.succeed()\n\n // Sort files.\n filesCreated.sort()\n filesUpdated.sort()\n filesSkipped.sort()\n\n const hasUpdatedFiles = filesCreated.length || filesUpdated.length\n if (!hasUpdatedFiles && !filesSkipped.length) {\n spinner(`No files updated.`, {\n silent: options.silent,\n })?.info()\n }\n\n if (filesCreated.length) {\n spinner(\n `Created ${filesCreated.length} ${\n filesCreated.length === 1 ? \"file\" : \"files\"\n }:`,\n {\n silent: options.silent,\n }\n )?.succeed()\n for (const file of filesCreated) {\n logger.log(` - ${file}`)\n }\n }\n\n if (filesUpdated.length) {\n spinner(\n `Updated ${filesUpdated.length} ${\n filesUpdated.length === 1 ? \"file\" : \"files\"\n }:`,\n {\n silent: options.silent,\n }\n )?.info()\n for (const file of filesUpdated) {\n logger.log(` - ${file}`)\n }\n }\n\n if (filesSkipped.length) {\n spinner(\n `Skipped ${filesSkipped.length} ${\n filesUpdated.length === 1 ? \"file\" : \"files\"\n }: (use --overwrite to overwrite)`,\n {\n silent: options.silent,\n }\n )?.info()\n for (const file of filesSkipped) {\n logger.log(` - ${file}`)\n }\n }\n\n if (tree.docs) {\n logger.info(tree.docs)\n }\n}\n\nasync function shouldOverwriteCssVars(\n components: z.infer<typeof registryItemSchema>[\"name\"][],\n config: z.infer<typeof configSchema>\n) {\n const result = await getRegistryItems(components, { config })\n const payload = z.array(registryItemSchema).parse(result)\n\n return payload.some(\n (component) =>\n component.type === \"registry:theme\" ||\n component.type === \"registry:style\" ||\n component.type === \"registry:font\" ||\n component.type === \"registry:base\"\n )\n}\n\nfunction validateFilesTarget(\n files: z.infer<typeof registryItemFileSchema>[],\n cwd: string\n) {\n for (const file of files) {\n if (!file?.target) {\n continue\n }\n\n if (!isSafeTarget(file.target, cwd)) {\n throw new Error(\n `We found an unsafe file path \"${file.target} in the registry item. Installation aborted.`\n )\n }\n }\n}\n","import path from \"path\"\nimport { runInit } from \"@/src/commands/init\"\nimport { preFlightAdd } from \"@/src/preflights/preflight-add\"\nimport { getRegistryItems, getShadcnRegistryIndex } from \"@/src/registry/api\"\nimport { DEPRECATED_COMPONENTS } from \"@/src/registry/constants\"\nimport { clearRegistryContext } from \"@/src/registry/context\"\nimport { registryItemTypeSchema } from \"@/src/registry/schema\"\nimport { isUniversalRegistryItem } from \"@/src/registry/utils\"\nimport { addComponents } from \"@/src/utils/add-components\"\nimport { createProject } from \"@/src/utils/create-project\"\nimport { loadEnvFiles } from \"@/src/utils/env-loader\"\nimport * as ERRORS from \"@/src/utils/errors\"\nimport { createConfig, getConfig } from \"@/src/utils/get-config\"\nimport { getProjectInfo } from \"@/src/utils/get-project-info\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { ensureRegistriesInConfig } from \"@/src/utils/registries\"\nimport { updateAppIndex } from \"@/src/utils/update-app-index\"\nimport { Command } from \"commander\"\nimport prompts from \"prompts\"\nimport { z } from \"zod\"\n\nexport const addOptionsSchema = z.object({\n components: z.array(z.string()).optional(),\n yes: z.boolean(),\n overwrite: z.boolean(),\n cwd: z.string(),\n all: z.boolean(),\n path: z.string().optional(),\n silent: z.boolean(),\n srcDir: z.boolean().optional(),\n cssVariables: z.boolean(),\n})\n\nexport const add = new Command()\n .name(\"add\")\n .description(\"add a component to your project\")\n .argument(\"[components...]\", \"names, url or local path to component\")\n .option(\"-y, --yes\", \"skip confirmation prompt.\", false)\n .option(\"-o, --overwrite\", \"overwrite existing files.\", false)\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .option(\"-a, --all\", \"add all available components\", false)\n .option(\"-p, --path <path>\", \"the path to add the component to.\")\n .option(\"-s, --silent\", \"mute output.\", false)\n .option(\n \"--src-dir\",\n \"use the src directory when creating a new project.\",\n false\n )\n .option(\n \"--no-src-dir\",\n \"do not use the src directory when creating a new project.\"\n )\n .option(\"--css-variables\", \"use css variables for theming.\", true)\n .option(\"--no-css-variables\", \"do not use css variables for theming.\")\n .action(async (components, opts) => {\n try {\n const options = addOptionsSchema.parse({\n components,\n cwd: path.resolve(opts.cwd),\n ...opts,\n })\n\n await loadEnvFiles(options.cwd)\n\n let initialConfig = await getConfig(options.cwd)\n if (!initialConfig) {\n initialConfig = createConfig({\n style: \"new-york\",\n resolvedPaths: {\n cwd: options.cwd,\n },\n })\n }\n\n // Check for restricted component prefixes with base- or radix- styles.\n const restrictedComponentPrefixes = [\n \"sidebar-\",\n \"login-\",\n \"signup-\",\n \"otp-\",\n \"calendar-\",\n ]\n const restrictedStylePrefixes = [\"base-\", \"radix-\"]\n\n if (components.length > 0) {\n if (initialConfig?.style) {\n const isRestrictedStyle = restrictedStylePrefixes.some((prefix) =>\n initialConfig?.style.startsWith(prefix)\n )\n\n if (isRestrictedStyle) {\n const restrictedComponents = components.filter(\n (component: string) =>\n restrictedComponentPrefixes.some((prefix) =>\n component.startsWith(prefix)\n )\n )\n\n if (restrictedComponents.length) {\n logger.warn(\n `The ${highlighter.info(\n restrictedComponents\n .map((component: string) => component)\n .join(\", \")\n )} component(s) are not available for the ${highlighter.info(\n initialConfig.style\n )} style yet. They are coming soon.`\n )\n logger.warn(\n \"In the meantime, you can visit the blocks page on https://ui.shadcn.com/blocks and copy the code.\"\n )\n logger.break()\n process.exit(1)\n }\n }\n }\n }\n\n let hasNewRegistries = false\n if (components.length > 0) {\n const { config: updatedConfig, newRegistries } =\n await ensureRegistriesInConfig(components, initialConfig, {\n silent: options.silent,\n writeFile: false,\n })\n initialConfig = updatedConfig\n hasNewRegistries = newRegistries.length > 0\n }\n\n let itemType: z.infer<typeof registryItemTypeSchema> | undefined\n let shouldInstallBaseStyle = true\n if (components.length > 0) {\n const [registryItem] = await getRegistryItems([components[0]], {\n config: initialConfig,\n })\n itemType = registryItem?.type\n shouldInstallBaseStyle =\n itemType !== \"registry:theme\" && itemType !== \"registry:style\"\n\n if (isUniversalRegistryItem(registryItem)) {\n await addComponents(components, initialConfig, {\n ...options,\n baseStyle: shouldInstallBaseStyle,\n })\n return\n }\n\n if (\n !options.yes &&\n (itemType === \"registry:style\" || itemType === \"registry:theme\")\n ) {\n logger.break()\n const { confirm } = await prompts({\n type: \"confirm\",\n name: \"confirm\",\n message: highlighter.warn(\n `You are about to install a new ${itemType.replace(\n \"registry:\",\n \"\"\n )}. \\nExisting CSS variables and components will be overwritten. Continue?`\n ),\n })\n if (!confirm) {\n logger.break()\n logger.log(`Installation cancelled.`)\n logger.break()\n process.exit(1)\n }\n }\n }\n\n if (!options.components?.length) {\n options.components = await promptForRegistryComponents(options)\n }\n\n const projectInfo = await getProjectInfo(options.cwd)\n if (projectInfo?.tailwindVersion === \"v4\") {\n const deprecatedComponents = DEPRECATED_COMPONENTS.filter((component) =>\n options.components?.includes(component.name)\n )\n\n if (deprecatedComponents?.length) {\n logger.break()\n deprecatedComponents.forEach((component) => {\n logger.warn(highlighter.warn(component.message))\n })\n logger.break()\n process.exit(1)\n }\n }\n console.log({\n options,\n })\n\n await runInit({\n cwd: options.cwd,\n yes: true,\n force: true,\n defaults: false,\n skipPreflight: false,\n silent: options.silent && !hasNewRegistries,\n isNewProject: false,\n srcDir: options.srcDir,\n cssVariables: options.cssVariables,\n baseStyle: shouldInstallBaseStyle,\n baseColor: shouldInstallBaseStyle ? undefined : \"neutral\",\n components: options.components,\n })\n\n // let { errors, config } = await preFlightAdd(options)\n // console.log({\n // errors,\n // config,\n // })\n\n // // No components.json file. Prompt the user to run init.\n // let initHasRun = false\n // if (errors[ERRORS.MISSING_CONFIG]) {\n // // const { proceed } = await prompts({\n // // type: \"confirm\",\n // // name: \"proceed\",\n // // message: `You need to create a ${highlighter.info(\n // // \"components.json\"\n // // )} file to add components. Proceed?`,\n // // initial: true,\n // // })\n\n // // if (!proceed) {\n // // logger.break()\n // // process.exit(1)\n // // }\n\n // config = await runInit({\n // cwd: options.cwd,\n // yes: true,\n // force: true,\n // defaults: false,\n // skipPreflight: false,\n // silent: options.silent && !hasNewRegistries,\n // isNewProject: false,\n // srcDir: options.srcDir,\n // cssVariables: options.cssVariables,\n // baseStyle: shouldInstallBaseStyle,\n // baseColor: shouldInstallBaseStyle ? undefined : \"neutral\",\n // components: options.components,\n // })\n // initHasRun = true\n // }\n\n // let shouldUpdateAppIndex = false\n\n // if (errors[ERRORS.MISSING_DIR_OR_EMPTY_PROJECT]) {\n // const { projectPath, template } = await createProject({\n // cwd: options.cwd,\n // force: options.overwrite,\n // srcDir: options.srcDir,\n // components: options.components,\n // })\n // if (!projectPath) {\n // logger.break()\n // process.exit(1)\n // }\n // options.cwd = projectPath\n\n // if (template === \"next-monorepo\") {\n // options.cwd = path.resolve(options.cwd, \"apps/web\")\n // config = await getConfig(options.cwd)\n // } else {\n // config = await runInit({\n // cwd: options.cwd,\n // yes: true,\n // force: true,\n // defaults: false,\n // skipPreflight: true,\n // silent: !hasNewRegistries && options.silent,\n // isNewProject: true,\n // srcDir: options.srcDir,\n // cssVariables: options.cssVariables,\n // baseStyle: shouldInstallBaseStyle,\n // baseColor: shouldInstallBaseStyle ? undefined : \"neutral\",\n // components: options.components,\n // })\n // initHasRun = true\n\n // shouldUpdateAppIndex =\n // options.components?.length === 1 &&\n // !!options.components[0].match(/\\/chat\\/b\\//)\n // }\n // }\n\n // if (!config) {\n // throw new Error(\n // `Failed to read config at ${highlighter.info(options.cwd)}.`\n // )\n // }\n\n // const { config: updatedConfig } = await ensureRegistriesInConfig(\n // options.components,\n // config,\n // {\n // silent: options.silent || hasNewRegistries,\n // }\n // )\n // config = updatedConfig\n // console.log({\n // config,\n // })\n // if (!initHasRun) {\n // await addComponents(options.components, config, {\n // ...options,\n // baseStyle: shouldInstallBaseStyle,\n // })\n // }\n\n // If we're adding a single component and it's from the v0 registry,\n // let's update the app/page.tsx file to import the component.\n // if (shouldUpdateAppIndex) {\n // await updateAppIndex(options.components[0], config)\n // }\n } catch (error) {\n console.log(\"add error\")\n\n logger.break()\n handleError(error)\n } finally {\n clearRegistryContext()\n }\n })\n\nasync function promptForRegistryComponents(\n options: z.infer<typeof addOptionsSchema>\n) {\n const registryIndex = await getShadcnRegistryIndex()\n if (!registryIndex) {\n logger.break()\n handleError(new Error(\"Failed to fetch registry index.\"))\n return []\n }\n\n if (options.all) {\n return registryIndex\n .map((entry) => entry.name)\n .filter(\n (component) => !DEPRECATED_COMPONENTS.some((c) => c.name === component)\n )\n }\n\n if (options.components?.length) {\n return options.components\n }\n\n const { components } = await prompts({\n type: \"multiselect\",\n name: \"components\",\n message: \"Which components would you like to add?\",\n hint: \"Space to select. A to toggle all. Enter to submit.\",\n instructions: false,\n choices: registryIndex\n .filter(\n (entry) =>\n entry.type === \"registry:ui\" &&\n !DEPRECATED_COMPONENTS.some(\n (component) => component.name === entry.name\n )\n )\n .map((entry) => ({\n title: entry.name,\n value: entry.name,\n selected: options.all ? true : options.components?.includes(entry.name),\n })),\n })\n\n if (!components?.length) {\n logger.warn(\"No components selected. Exiting.\")\n logger.info(\"\")\n process.exit(1)\n }\n\n const result = z.array(z.string()).safeParse(components)\n if (!result.success) {\n logger.error(\"\")\n handleError(new Error(\"Something went wrong. Please try again.\"))\n return []\n }\n return result.data\n}\n","import path from \"path\"\nimport { buildOptionsSchema } from \"@/src/commands/build\"\nimport * as ERRORS from \"@/src/utils/errors\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport fs from \"fs-extra\"\nimport { z } from \"zod\"\n\nexport async function preFlightBuild(\n options: z.infer<typeof buildOptionsSchema>\n) {\n const errors: Record<string, boolean> = {}\n\n const resolvePaths = {\n cwd: options.cwd,\n registryFile: path.resolve(options.cwd, options.registryFile),\n outputDir: path.resolve(options.cwd, options.outputDir),\n }\n\n // Ensure registry file exists.\n if (!fs.existsSync(resolvePaths.registryFile)) {\n errors[ERRORS.BUILD_MISSING_REGISTRY_FILE] = true\n }\n\n // Create output directory if it doesn't exist.\n await fs.mkdir(resolvePaths.outputDir, { recursive: true })\n\n if (Object.keys(errors).length > 0) {\n if (errors[ERRORS.BUILD_MISSING_REGISTRY_FILE]) {\n logger.break()\n logger.error(\n `The path ${highlighter.info(\n resolvePaths.registryFile\n )} does not exist.`\n )\n }\n\n logger.break()\n process.exit(1)\n }\n\n return {\n errors,\n resolvePaths,\n }\n}\n","import * as fs from \"fs/promises\"\nimport * as path from \"path\"\nimport { preFlightBuild } from \"@/src/preflights/preflight-build\"\nimport { registryItemSchema, registrySchema } from \"@/src/schema\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { Command } from \"commander\"\nimport { z } from \"zod\"\n\nexport const buildOptionsSchema = z.object({\n cwd: z.string(),\n registryFile: z.string(),\n outputDir: z.string(),\n})\n\nexport const build = new Command()\n .name(\"build\")\n .description(\"build components for a shadcn registry\")\n .argument(\"[registry]\", \"path to registry.json file\", \"./registry.json\")\n .option(\n \"-o, --output <path>\",\n \"destination directory for json files\",\n \"./public/r\"\n )\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .action(async (registry: string, opts) => {\n try {\n const options = buildOptionsSchema.parse({\n cwd: path.resolve(opts.cwd),\n registryFile: registry,\n outputDir: opts.output,\n })\n\n const { resolvePaths } = await preFlightBuild(options)\n const content = await fs.readFile(resolvePaths.registryFile, \"utf-8\")\n\n const result = registrySchema.safeParse(JSON.parse(content))\n\n if (!result.success) {\n logger.error(\n `Invalid registry file found at ${highlighter.info(\n resolvePaths.registryFile\n )}.`\n )\n process.exit(1)\n }\n\n const buildSpinner = spinner(\"Building registry...\")\n for (const registryItem of result.data.items) {\n buildSpinner.start(`Building ${registryItem.name}...`)\n\n // Add the schema to the registry item.\n registryItem[\"$schema\"] =\n \"https://ui.shadcn.com/schema/registry-item.json\"\n\n // Loop through each file in the files array.\n for (const file of registryItem.files ?? []) {\n file[\"content\"] = await fs.readFile(\n path.resolve(resolvePaths.cwd, file.path),\n \"utf-8\"\n )\n }\n\n // Validate the registry item.\n const result = registryItemSchema.safeParse(registryItem)\n if (!result.success) {\n logger.error(\n `Invalid registry item found for ${highlighter.info(\n registryItem.name\n )}.`\n )\n continue\n }\n\n // Write the registry item to the output directory.\n await fs.writeFile(\n path.resolve(resolvePaths.outputDir, `${result.data.name}.json`),\n JSON.stringify(result.data, null, 2)\n )\n }\n\n // Copy registry.json to the output directory.\n await fs.copyFile(\n resolvePaths.registryFile,\n path.resolve(resolvePaths.outputDir, \"registry.json\")\n )\n\n buildSpinner.succeed(\"Building registry.\")\n } catch (error) {\n logger.break()\n handleError(error)\n }\n })\n","import path from \"path\"\nimport { getPreset, getPresets, getRegistryItems } from \"@/src/registry/api\"\nimport { configWithDefaults } from \"@/src/registry/config\"\nimport { clearRegistryContext } from \"@/src/registry/context\"\nimport { isUrl } from \"@/src/registry/utils\"\nimport { Preset } from \"@/src/schema\"\nimport { addComponents } from \"@/src/utils/add-components\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { ensureRegistriesInConfig } from \"@/src/utils/registries\"\nimport { updateFiles } from \"@/src/utils/updaters/update-files\"\nimport { Command } from \"commander\"\nimport dedent from \"dedent\"\nimport open from \"open\"\nimport prompts from \"prompts\"\n\nimport { initOptionsSchema, runInit } from \"./init\"\n\nconst SHADCN_URL = \"https://ui.shadcn.com\"\n\nconst CREATE_TEMPLATES = {\n next: \"Next.js\",\n vite: \"Vite\",\n start: \"TanStack Start\",\n} as const\n\ntype Template = keyof typeof CREATE_TEMPLATES\n\nexport const create = new Command()\n .name(\"create\")\n .description(\"create a new project with shadcn/ui\")\n .argument(\"[name]\", \"the name of your project\")\n .option(\n \"-t, --template <template>\",\n \"the template to use. e.g. next, start or vite\"\n )\n .option(\"-p, --preset [name]\", \"use a preset configuration\")\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .option(\n \"--src-dir\",\n \"use the src directory when creating a new project.\",\n false\n )\n .option(\n \"--no-src-dir\",\n \"do not use the src directory when creating a new project.\"\n )\n .option(\"-y, --yes\", \"skip confirmation prompt.\", true)\n .action(async (name, opts) => {\n try {\n // If no arguments or options provided, show initial prompt.\n const hasNoArgs = !name && !opts.template && !opts.preset\n if (hasNoArgs) {\n const createUrl = getShadcnCreateUrl()\n logger.log(\"Build your own shadcn/ui.\")\n logger.log(\n `You will be taken to ${highlighter.info(\n createUrl\n )} to build your custom design system.`\n )\n logger.break()\n\n const { proceed } = await prompts({\n type: \"confirm\",\n name: \"proceed\",\n message: \"Open in browser?\",\n initial: true,\n })\n\n if (proceed) {\n await open(createUrl)\n }\n\n process.exit(0)\n }\n\n // Prompt for project name if not provided.\n let projectName = name\n if (!projectName) {\n const { enteredName } = await prompts({\n type: \"text\",\n name: \"enteredName\",\n message: \"What is your project named?\",\n initial: opts.template ? `${opts.template}-app` : \"my-app\",\n format: (value: string) => value.trim(),\n validate: (value: string) =>\n value.length > 128\n ? `Name should be less than 128 characters.`\n : true,\n })\n\n if (!enteredName) {\n process.exit(0)\n }\n\n projectName = enteredName\n }\n\n // Prompt for template if not provided.\n let template = opts.template\n if (!template) {\n const { selectedTemplate } = await prompts({\n type: \"select\",\n name: \"selectedTemplate\",\n message: `Which ${highlighter.info(\n \"template\"\n )} would you like to use?`,\n choices: Object.entries(CREATE_TEMPLATES).map(([key, value]) => ({\n title: value,\n value: key,\n })),\n })\n\n if (!selectedTemplate) {\n process.exit(0)\n }\n\n template = selectedTemplate\n }\n\n // Handle preset selection.\n const presetResult = await handlePresetOption(opts.preset ?? true)\n\n if (!presetResult) {\n process.exit(0)\n }\n\n // Determine initUrl and baseColor based on preset type.\n let initUrl: string\n let baseColor: string\n\n if (\"_isUrl\" in presetResult) {\n // User provided a URL directly.\n initUrl = presetResult.url\n const url = new URL(presetResult.url)\n baseColor = url.searchParams.get(\"baseColor\") ?? \"neutral\"\n } else {\n // User selected a preset by name.\n initUrl = buildInitUrl(presetResult)\n baseColor = presetResult.baseColor\n }\n\n // Fetch the registry:base item to get its config.\n let shadowConfig = configWithDefaults({})\n const { config: updatedConfig } = await ensureRegistriesInConfig(\n [initUrl],\n shadowConfig,\n { silent: true }\n )\n shadowConfig = updatedConfig\n\n const [item] = await getRegistryItems([initUrl], {\n config: shadowConfig,\n })\n\n // Extract config from registry:base item.\n let registryBaseConfig = undefined\n if (item?.type === \"registry:base\" && item.config) {\n registryBaseConfig = item.config\n }\n\n const options = initOptionsSchema.parse({\n cwd: path.resolve(opts.cwd),\n name: projectName,\n components: [initUrl],\n yes: opts.yes,\n defaults: false,\n force: false,\n silent: false,\n isNewProject: true,\n srcDir: opts.srcDir,\n cssVariables: true,\n template,\n baseColor,\n baseStyle: false,\n registryBaseConfig,\n skipPreflight: false,\n })\n\n const config = await runInit(options)\n\n // Add component example.\n if (config) {\n await addComponents([\"component-example\"], config, {\n baseStyle: false,\n silent: true,\n overwrite: true,\n })\n\n const templateFiles = getTemplateFiles(template as Template)\n if (templateFiles.length > 0) {\n await updateFiles(templateFiles, config, {\n overwrite: true,\n silent: true,\n })\n }\n }\n\n logger.log(\n `${highlighter.success(\n \"Success!\"\n )} Project initialization completed.\\nYou may now add components.`\n )\n logger.break()\n } catch (error) {\n logger.break()\n handleError(error)\n } finally {\n clearRegistryContext()\n }\n })\n\nfunction buildInitUrl(preset: Preset) {\n const params = new URLSearchParams({\n base: preset.base,\n style: preset.style,\n baseColor: preset.baseColor,\n theme: preset.theme,\n iconLibrary: preset.iconLibrary,\n font: preset.font,\n menuAccent: preset.menuAccent,\n menuColor: preset.menuColor,\n radius: preset.radius,\n })\n\n return `${getShadcnInitUrl()}?${params.toString()}`\n}\n\nasync function handlePresetOption(presetArg: string | boolean) {\n // If --preset is used without a name, show interactive list.\n if (presetArg === true) {\n const presets = await getPresets()\n\n const { selectedPreset } = await prompts({\n type: \"select\",\n name: \"selectedPreset\",\n message: `Which ${highlighter.info(\"preset\")} would you like to use?`,\n choices: [\n ...presets.map((preset) => ({\n title: preset.title,\n description: preset.description,\n value: preset.name,\n })),\n {\n title: \"Custom\",\n description: \"Build your own on https://ui.shadcn.com\",\n value: \"custom\",\n },\n ],\n })\n\n if (!selectedPreset) {\n return null\n }\n\n if (selectedPreset === \"custom\") {\n const url = getShadcnCreateUrl()\n logger.info(`\\nOpening ${highlighter.info(url)} in your browser...\\n`)\n await open(url)\n return null\n }\n\n return presets.find((p) => p.name === selectedPreset) ?? null\n }\n\n // If --preset NAME or URL is provided.\n if (typeof presetArg === \"string\") {\n // Check if it's a URL.\n if (isUrl(presetArg)) {\n return { _isUrl: true, url: presetArg } as const\n }\n\n // Otherwise, fetch that preset by name.\n const preset = await getPreset(presetArg)\n\n if (!preset) {\n const presets = await getPresets()\n const presetNames = presets.map((p) => p.name).join(\", \")\n logger.error(\n `Preset \"${presetArg}\" not found. Available presets: ${presetNames}`\n )\n process.exit(1)\n }\n\n return preset\n }\n\n return null\n}\n\nfunction getTemplateFiles(template: Template) {\n switch (template) {\n case \"vite\":\n return [\n {\n type: \"registry:file\" as const,\n path: \"src/App.tsx\",\n target: \"src/App.tsx\",\n content: dedent`import { ComponentExample } from \"@/components/component-example\";\n\nexport function App() {\n return <ComponentExample />;\n}\n\nexport default App;\n`,\n },\n ]\n case \"next\":\n return [\n {\n type: \"registry:page\" as const,\n path: \"app/page.tsx\",\n target: \"app/page.tsx\",\n content: dedent`import { ComponentExample } from \"@/components/component-example\";\n\nexport default function Page() {\n return <ComponentExample />;\n}\n`,\n },\n ]\n case \"start\":\n return [\n {\n type: \"registry:file\" as const,\n path: \"src/routes/index.tsx\",\n target: \"src/routes/index.tsx\",\n content: dedent`import { createFileRoute } from \"@tanstack/react-router\";\nimport { ComponentExample } from \"@/components/component-example\";\n\nexport const Route = createFileRoute(\"/\")({ component: App });\n\nfunction App() {\n return (\n <ComponentExample />\n );\n}\n`,\n },\n ]\n default:\n return []\n }\n}\n\nfunction getShadcnCreateUrl() {\n return `${SHADCN_URL}/create`\n}\n\nfunction getShadcnInitUrl() {\n return `${SHADCN_URL}/init`\n}\n","import { existsSync, promises as fs } from \"fs\"\nimport path from \"path\"\nimport {\n fetchTree,\n getItemTargetPath,\n getRegistryBaseColor,\n getShadcnRegistryIndex,\n} from \"@/src/registry/api\"\nimport { registryIndexSchema } from \"@/src/schema\"\nimport { Config, getConfig } from \"@/src/utils/get-config\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { transform } from \"@/src/utils/transformers\"\nimport { Command } from \"commander\"\nimport { diffLines, type Change } from \"diff\"\nimport { z } from \"zod\"\n\nconst updateOptionsSchema = z.object({\n component: z.string().optional(),\n yes: z.boolean(),\n cwd: z.string(),\n path: z.string().optional(),\n})\n\nexport const diff = new Command()\n .name(\"diff\")\n .description(\"check for updates against the registry\")\n .argument(\"[component]\", \"the component name\")\n .option(\"-y, --yes\", \"skip confirmation prompt.\", false)\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .action(async (name, opts) => {\n try {\n const options = updateOptionsSchema.parse({\n component: name,\n ...opts,\n })\n\n const cwd = path.resolve(options.cwd)\n\n if (!existsSync(cwd)) {\n logger.error(`The path ${cwd} does not exist. Please try again.`)\n process.exit(1)\n }\n\n const config = await getConfig(cwd)\n if (!config) {\n logger.warn(\n `Configuration is missing. Please run ${highlighter.success(\n `init`\n )} to create a components.json file.`\n )\n process.exit(1)\n }\n\n const registryIndex = await getShadcnRegistryIndex()\n\n if (!registryIndex) {\n handleError(new Error(\"Failed to fetch registry index.\"))\n process.exit(1)\n }\n\n if (!options.component) {\n const targetDir = config.resolvedPaths.components\n\n // Find all components that exist in the project.\n const projectComponents = registryIndex.filter((item) => {\n for (const file of item.files ?? []) {\n const filePath = path.resolve(\n targetDir,\n typeof file === \"string\" ? file : file.path\n )\n if (existsSync(filePath)) {\n return true\n }\n }\n\n return false\n })\n\n // Check for updates.\n const componentsWithUpdates = []\n for (const component of projectComponents) {\n const changes = await diffComponent(component, config)\n if (changes.length) {\n componentsWithUpdates.push({\n name: component.name,\n changes,\n })\n }\n }\n\n if (!componentsWithUpdates.length) {\n logger.info(\"No updates found.\")\n process.exit(0)\n }\n\n logger.info(\"The following components have updates available:\")\n for (const component of componentsWithUpdates) {\n logger.info(`- ${component.name}`)\n for (const change of component.changes) {\n logger.info(` - ${change.filePath}`)\n }\n }\n logger.break()\n logger.info(\n `Run ${highlighter.success(`diff <component>`)} to see the changes.`\n )\n process.exit(0)\n }\n\n // Show diff for a single component.\n const component = registryIndex.find(\n (item) => item.name === options.component\n )\n\n if (!component) {\n logger.error(\n `The component ${highlighter.success(\n options.component\n )} does not exist.`\n )\n process.exit(1)\n }\n\n const changes = await diffComponent(component, config)\n\n if (!changes.length) {\n logger.info(`No updates found for ${options.component}.`)\n process.exit(0)\n }\n\n for (const change of changes) {\n logger.info(`- ${change.filePath}`)\n await printDiff(change.patch)\n logger.info(\"\")\n }\n } catch (error) {\n handleError(error)\n }\n })\n\nasync function diffComponent(\n component: z.infer<typeof registryIndexSchema>[number],\n config: Config\n) {\n const payload = await fetchTree(config.style, [component])\n const baseColor = await getRegistryBaseColor(config.tailwind.baseColor)\n\n if (!payload) {\n return []\n }\n\n const changes = []\n\n for (const item of payload) {\n const targetDir = await getItemTargetPath(config, item)\n\n if (!targetDir) {\n continue\n }\n\n for (const file of item.files ?? []) {\n const filePath = path.resolve(\n targetDir,\n typeof file === \"string\" ? file : file.path\n )\n\n if (!existsSync(filePath)) {\n continue\n }\n\n const fileContent = await fs.readFile(filePath, \"utf8\")\n\n if (typeof file === \"string\" || !file.content) {\n continue\n }\n\n const registryContent = await transform({\n filename: file.path,\n raw: file.content,\n config,\n baseColor,\n })\n\n const patch = diffLines(registryContent as string, fileContent)\n if (patch.length > 1) {\n changes.push({\n filePath,\n patch,\n })\n }\n }\n }\n\n return changes\n}\n\nasync function printDiff(diff: Change[]) {\n diff.forEach((part) => {\n if (part) {\n if (part.added) {\n return process.stdout.write(highlighter.success(part.value))\n }\n if (part.removed) {\n return process.stdout.write(highlighter.error(part.value))\n }\n\n return process.stdout.write(part.value)\n }\n })\n}\n","import { getConfig } from \"@/src/utils/get-config\"\nimport { getProjectInfo } from \"@/src/utils/get-project-info\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { logger } from \"@/src/utils/logger\"\nimport { Command } from \"commander\"\n\nexport const info = new Command()\n .name(\"info\")\n .description(\"get information about your project\")\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .action(async (opts) => {\n try {\n logger.info(\"> project info\")\n console.log(await getProjectInfo(opts.cwd))\n logger.break()\n logger.info(\"> components.json\")\n console.log(await getConfig(opts.cwd))\n } catch (error) {\n handleError(error)\n }\n })\n","import { promises as fs } from \"fs\"\nimport path from \"path\"\nimport { server } from \"@/src/mcp\"\nimport { loadEnvFiles } from \"@/src/utils/env-loader\"\nimport { getConfig } from \"@/src/utils/get-config\"\nimport { getPackageManager } from \"@/src/utils/get-package-manager\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { updateDependencies } from \"@/src/utils/updaters/update-dependencies\"\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\"\nimport { Command } from \"commander\"\nimport deepmerge from \"deepmerge\"\nimport { execa } from \"execa\"\nimport fsExtra from \"fs-extra\"\nimport prompts from \"prompts\"\nimport z from \"zod\"\n\nconst SHADCN_MCP_VERSION = \"latest\"\n\nconst CLIENTS = [\n {\n name: \"claude\",\n label: \"Claude Code\",\n configPath: \".mcp.json\",\n config: {\n mcpServers: {\n shadcn: {\n command: \"npx\",\n args: [`shadcn@${SHADCN_MCP_VERSION}`, \"mcp\"],\n },\n },\n },\n },\n {\n name: \"cursor\",\n label: \"Cursor\",\n configPath: \".cursor/mcp.json\",\n config: {\n mcpServers: {\n shadcn: {\n command: \"npx\",\n args: [`shadcn@${SHADCN_MCP_VERSION}`, \"mcp\"],\n },\n },\n },\n },\n {\n name: \"vscode\",\n label: \"VS Code\",\n configPath: \".vscode/mcp.json\",\n config: {\n servers: {\n shadcn: {\n command: \"npx\",\n args: [`shadcn@${SHADCN_MCP_VERSION}`, \"mcp\"],\n },\n },\n },\n },\n {\n name: \"codex\",\n label: \"Codex\",\n configPath: \".codex/config.toml\",\n config: `[mcp_servers.shadcn]\ncommand = \"npx\"\nargs = [\"shadcn@${SHADCN_MCP_VERSION}\", \"mcp\"]\n`,\n },\n] as const\n\nconst DEPENDENCIES = [`shadcn@${SHADCN_MCP_VERSION}`]\n\nexport const mcp = new Command()\n .name(\"mcp\")\n .description(\"MCP server and configuration commands\")\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .action(async (options) => {\n try {\n await loadEnvFiles(options.cwd)\n const transport = new StdioServerTransport()\n await server.connect(transport)\n } catch (error) {\n logger.break()\n handleError(error)\n }\n })\n\nconst mcpInitOptionsSchema = z.object({\n client: z.enum([\"claude\", \"cursor\", \"vscode\", \"codex\"]),\n cwd: z.string(),\n})\n\nmcp\n .command(\"init\")\n .description(\"Initialize MCP configuration for your client\")\n .option(\n \"--client <client>\",\n `MCP client (${CLIENTS.map((c) => c.name).join(\", \")})`\n )\n .action(async (opts, command) => {\n try {\n // Get the cwd from parent command.\n const parentOpts = command.parent?.opts() || {}\n const cwd = parentOpts.cwd || process.cwd()\n\n let client = opts.client\n\n if (!client) {\n const response = await prompts({\n type: \"select\",\n name: \"client\",\n message: \"Which MCP client are you using?\",\n choices: CLIENTS.map((c) => ({\n title: c.label,\n value: c.name,\n })),\n })\n\n if (!response.client) {\n logger.break()\n process.exit(1)\n }\n\n client = response.client\n }\n\n const options = mcpInitOptionsSchema.parse({\n client,\n cwd,\n })\n\n const config = await getConfig(options.cwd)\n\n if (options.client === \"codex\") {\n if (config) {\n await updateDependencies([], DEPENDENCIES, config, {\n silent: false,\n })\n } else {\n const packageManager = await getPackageManager(options.cwd)\n const installCommand = packageManager === \"npm\" ? \"install\" : \"add\"\n const devFlag = packageManager === \"npm\" ? \"--save-dev\" : \"-D\"\n\n const installSpinner = spinner(\"Installing dependencies...\").start()\n await execa(\n packageManager,\n [installCommand, devFlag, ...DEPENDENCIES],\n {\n cwd: options.cwd,\n }\n )\n installSpinner.succeed(\"Installing dependencies.\")\n }\n\n logger.break()\n logger.log(\"To configure the shadcn MCP server in Codex:\")\n logger.break()\n logger.log(\n `1. Open or create the file ${highlighter.info(\n \"~/.codex/config.toml\"\n )}`\n )\n logger.log(\"2. Add the following configuration:\")\n logger.log()\n logger.info(`[mcp_servers.shadcn]\ncommand = \"npx\"\nargs = [\"shadcn@${SHADCN_MCP_VERSION}\", \"mcp\"]`)\n logger.break()\n logger.info(\"3. Restart Codex to load the MCP server\")\n logger.break()\n process.exit(0)\n }\n\n const configSpinner = spinner(\"Configuring MCP server...\").start()\n const configPath = await runMcpInit(options)\n configSpinner.succeed(\"Configuring MCP server.\")\n\n if (config) {\n await updateDependencies([], DEPENDENCIES, config, {\n silent: false,\n })\n } else {\n const packageManager = await getPackageManager(options.cwd)\n const installCommand = packageManager === \"npm\" ? \"install\" : \"add\"\n const devFlag = packageManager === \"npm\" ? \"--save-dev\" : \"-D\"\n\n const installSpinner = spinner(\"Installing dependencies...\").start()\n await execa(\n packageManager,\n [installCommand, devFlag, ...DEPENDENCIES],\n {\n cwd: options.cwd,\n }\n )\n installSpinner.succeed(\"Installing dependencies.\")\n }\n\n logger.break()\n logger.success(`Configuration saved to ${configPath}.`)\n logger.break()\n } catch (error) {\n handleError(error)\n }\n })\n\nconst overwriteMerge = (_: any[], sourceArray: any[]) => sourceArray\n\nasync function runMcpInit(options: z.infer<typeof mcpInitOptionsSchema>) {\n const { client, cwd } = options\n\n const clientInfo = CLIENTS.find((c) => c.name === client)\n if (!clientInfo) {\n throw new Error(\n `Unknown client: ${client}. Available clients: ${CLIENTS.map(\n (c) => c.name\n ).join(\", \")}`\n )\n }\n\n const configPath = path.join(cwd, clientInfo.configPath)\n const dir = path.dirname(configPath)\n await fsExtra.ensureDir(dir)\n\n // Handle JSON format.\n let existingConfig = {}\n try {\n const content = await fs.readFile(configPath, \"utf-8\")\n existingConfig = JSON.parse(content)\n } catch {}\n\n const mergedConfig = deepmerge(\n existingConfig,\n clientInfo.config as Record<string, unknown>,\n { arrayMerge: overwriteMerge }\n )\n\n await fs.writeFile(\n configPath,\n JSON.stringify(mergedConfig, null, 2) + \"\\n\",\n \"utf-8\"\n )\n\n return clientInfo.configPath\n}\n","export const LEGACY_ICON_LIBRARIES = {\n lucide: {\n name: \"lucide-react\",\n package: \"lucide-react\",\n import: \"lucide-react\",\n },\n radix: {\n name: \"@radix-ui/react-icons\",\n package: \"@radix-ui/react-icons\",\n import: \"@radix-ui/react-icons\",\n },\n}\n","import { randomBytes } from \"crypto\"\nimport { promises as fs } from \"fs\"\nimport { tmpdir } from \"os\"\nimport path from \"path\"\nimport { getRegistryIcons } from \"@/src/registry/api\"\nimport { iconsSchema } from \"@/src/schema\"\nimport { Config } from \"@/src/utils/get-config\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { LEGACY_ICON_LIBRARIES } from \"@/src/utils/legacy-icon-libraries\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { updateDependencies } from \"@/src/utils/updaters/update-dependencies\"\nimport fg from \"fast-glob\"\nimport prompts from \"prompts\"\nimport { Project, ScriptKind, SyntaxKind } from \"ts-morph\"\nimport { z } from \"zod\"\n\nexport async function migrateIcons(config: Config) {\n if (!config.resolvedPaths.ui) {\n throw new Error(\n \"We could not find a valid `ui` path in your `components.json` file. Please ensure you have a valid `ui` path in your `components.json` file.\"\n )\n }\n\n const uiPath = config.resolvedPaths.ui\n const [files, registryIcons] = await Promise.all([\n fg(\"**/*.{js,ts,jsx,tsx}\", {\n cwd: uiPath,\n }),\n getRegistryIcons(),\n ])\n\n if (Object.keys(registryIcons).length === 0) {\n throw new Error(\"Something went wrong fetching the registry icons.\")\n }\n\n const libraryChoices = Object.entries(LEGACY_ICON_LIBRARIES).map(\n ([name, iconLibrary]) => ({\n title: iconLibrary.name,\n value: name,\n })\n )\n\n const migrateOptions = await prompts([\n {\n type: \"select\",\n name: \"sourceLibrary\",\n message: `Which icon library would you like to ${highlighter.info(\n \"migrate from\"\n )}?`,\n choices: libraryChoices,\n },\n {\n type: \"select\",\n name: \"targetLibrary\",\n message: `Which icon library would you like to ${highlighter.info(\n \"migrate to\"\n )}?`,\n choices: libraryChoices,\n },\n ])\n\n if (migrateOptions.sourceLibrary === migrateOptions.targetLibrary) {\n throw new Error(\n \"You cannot migrate to the same icon library. Please choose a different icon library.\"\n )\n }\n\n if (\n !(\n migrateOptions.sourceLibrary in LEGACY_ICON_LIBRARIES &&\n migrateOptions.targetLibrary in LEGACY_ICON_LIBRARIES\n )\n ) {\n throw new Error(\"Invalid icon library. Please choose a valid icon library.\")\n }\n\n const sourceLibrary =\n LEGACY_ICON_LIBRARIES[\n migrateOptions.sourceLibrary as keyof typeof LEGACY_ICON_LIBRARIES\n ]\n const targetLibrary =\n LEGACY_ICON_LIBRARIES[\n migrateOptions.targetLibrary as keyof typeof LEGACY_ICON_LIBRARIES\n ]\n const { confirm } = await prompts({\n type: \"confirm\",\n name: \"confirm\",\n initial: true,\n message: `We will migrate ${highlighter.info(\n files.length\n )} files in ${highlighter.info(\n `./${path.relative(config.resolvedPaths.cwd, uiPath)}`\n )} from ${highlighter.info(sourceLibrary.name)} to ${highlighter.info(\n targetLibrary.name\n )}. Continue?`,\n })\n\n if (!confirm) {\n logger.info(\"Migration cancelled.\")\n process.exit(0)\n }\n\n if (targetLibrary.package) {\n await updateDependencies([targetLibrary.package], [], config, {\n silent: false,\n })\n }\n\n const migrationSpinner = spinner(`Migrating icons...`)?.start()\n\n await Promise.all(\n files.map(async (file) => {\n migrationSpinner.text = `Migrating ${file}...`\n\n const filePath = path.join(uiPath, file)\n const fileContent = await fs.readFile(filePath, \"utf-8\")\n\n const content = await migrateIconsFile(\n fileContent,\n migrateOptions.sourceLibrary,\n migrateOptions.targetLibrary,\n registryIcons\n )\n\n await fs.writeFile(filePath, content)\n })\n )\n\n migrationSpinner.succeed(\"Migration complete.\")\n}\n\nexport async function migrateIconsFile(\n content: string,\n sourceLibrary: keyof typeof LEGACY_ICON_LIBRARIES,\n targetLibrary: keyof typeof LEGACY_ICON_LIBRARIES,\n iconsMapping: z.infer<typeof iconsSchema>\n) {\n const sourceLibraryImport = LEGACY_ICON_LIBRARIES[sourceLibrary]?.import\n const targetLibraryImport = LEGACY_ICON_LIBRARIES[targetLibrary]?.import\n\n const dir = await fs.mkdtemp(path.join(tmpdir(), \"shadcn-\"))\n const project = new Project({\n compilerOptions: {},\n })\n\n const tempFile = path.join(\n dir,\n `shadcn-icons-${randomBytes(4).toString(\"hex\")}.tsx`\n )\n const sourceFile = project.createSourceFile(tempFile, content, {\n scriptKind: ScriptKind.TSX,\n })\n\n // Find all sourceLibrary imports.\n let targetedIcons: string[] = []\n for (const importDeclaration of sourceFile.getImportDeclarations() ?? []) {\n if (\n importDeclaration.getModuleSpecifier()?.getText() !==\n `\"${sourceLibraryImport}\"`\n ) {\n continue\n }\n\n for (const specifier of importDeclaration.getNamedImports() ?? []) {\n const iconName = specifier.getName()\n\n // TODO: this is O(n^2) but okay for now.\n const targetedIcon = Object.values(iconsMapping).find(\n (icon) => icon[sourceLibrary] === iconName\n )?.[targetLibrary]\n\n if (!targetedIcon || targetedIcons.includes(targetedIcon)) {\n continue\n }\n\n targetedIcons.push(targetedIcon)\n\n // Remove the named import.\n specifier.remove()\n\n // Replace with the targeted icon.\n sourceFile\n .getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement)\n .filter((node) => node.getTagNameNode()?.getText() === iconName)\n .forEach((node) => node.getTagNameNode()?.replaceWithText(targetedIcon))\n }\n\n // If the named import is empty, remove the import declaration.\n if (importDeclaration.getNamedImports()?.length === 0) {\n importDeclaration.remove()\n }\n }\n\n if (targetedIcons.length > 0) {\n sourceFile.addImportDeclaration({\n moduleSpecifier: targetLibraryImport,\n namedImports: targetedIcons.map((icon) => ({\n name: icon,\n })),\n })\n }\n\n return await sourceFile.getText()\n}\n","import { promises as fs } from \"fs\"\nimport path from \"path\"\nimport { Config } from \"@/src/utils/get-config\"\nimport { getPackageInfo } from \"@/src/utils/get-package-info\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { updateDependencies } from \"@/src/utils/updaters/update-dependencies\"\nimport fg from \"fast-glob\"\nimport prompts from \"prompts\"\n\nfunction toPascalCase(str: string): string {\n return str\n .split(\"-\")\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\"\")\n}\n\nfunction processNamedImports(\n namedImports: string,\n isTypeOnly: boolean,\n imports: Array<{ name: string; alias?: string; isType?: boolean }>,\n packageName: string\n) {\n // Clean up multi-line imports.\n // Remove comments and whitespace.\n const cleanedImports = namedImports\n .replace(/\\/\\/.*$/gm, \"\")\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, \"\")\n .replace(/\\s+/g, \" \")\n .trim()\n\n const namedImportList = cleanedImports\n .split(\",\")\n .map((importItem) => importItem.trim())\n .filter(Boolean)\n\n for (const importItem of namedImportList) {\n const inlineTypeMatch = importItem.match(/^type\\s+(\\w+)(?:\\s+as\\s+(\\w+))?$/)\n const aliasMatch = importItem.match(/^(\\w+)\\s+as\\s+(\\w+)$/)\n\n if (inlineTypeMatch) {\n // Inline type: \"type DialogProps\" or \"type DialogProps as Props\"\n const importName = inlineTypeMatch[1]\n const importAlias = inlineTypeMatch[2]\n\n if (packageName === \"slot\" && importName === \"Slot\" && !importAlias) {\n imports.push({\n name: \"Slot\",\n alias: \"SlotPrimitive\",\n isType: true,\n })\n } else {\n imports.push({\n name: importName,\n alias: importAlias,\n isType: true,\n })\n }\n } else if (aliasMatch) {\n // Regular import with alias: \"Root as DialogRoot\"\n const importName = aliasMatch[1]\n const importAlias = aliasMatch[2]\n\n if (\n packageName === \"slot\" &&\n importName === \"Slot\" &&\n importAlias === \"Slot\"\n ) {\n imports.push({\n name: \"Slot\",\n alias: \"SlotPrimitive\",\n isType: isTypeOnly,\n })\n } else {\n imports.push({\n name: importName,\n alias: importAlias,\n isType: isTypeOnly,\n })\n }\n } else {\n // Simple import: \"Root\"\n // Special handling for Slot: always alias it as SlotPrimitive\n if (packageName === \"slot\" && importItem === \"Slot\") {\n imports.push({\n name: \"Slot\",\n alias: \"SlotPrimitive\",\n isType: isTypeOnly,\n })\n } else {\n imports.push({\n name: importItem,\n isType: isTypeOnly,\n })\n }\n }\n }\n}\n\nexport async function migrateRadix(\n config: Config,\n options: { yes?: boolean } = {}\n) {\n if (!config.resolvedPaths.ui) {\n throw new Error(\n \"We could not find a valid `ui` path in your `components.json` file. Please ensure you have a valid `ui` path in your `components.json` file.\"\n )\n }\n\n const uiPath = config.resolvedPaths.ui\n const files = await fg(\"**/*.{js,ts,jsx,tsx}\", {\n cwd: uiPath,\n })\n\n if (!options.yes) {\n const { confirm } = await prompts({\n type: \"confirm\",\n name: \"confirm\",\n initial: true,\n message: `We will migrate ${highlighter.info(\n files.length\n )} files in ${highlighter.info(\n `./${path.relative(config.resolvedPaths.cwd, uiPath)}`\n )} to ${highlighter.info(\"radix-ui\")}. Continue?`,\n })\n\n if (!confirm) {\n logger.info(\"Migration cancelled.\")\n process.exit(0)\n }\n }\n\n const migrationSpinner = spinner(`Migrating imports...`)?.start()\n const foundPackages = new Set<string>()\n\n await Promise.all(\n files.map(async (file) => {\n migrationSpinner.text = `Migrating ${file}...`\n\n const filePath = path.join(uiPath, file)\n const fileContent = await fs.readFile(filePath, \"utf-8\")\n\n const { content, replacedPackages } = await migrateRadixFile(fileContent)\n\n // Track which packages we found\n replacedPackages.forEach((pkg) => foundPackages.add(pkg))\n\n await fs.writeFile(filePath, content)\n })\n )\n\n migrationSpinner.succeed(\"Migrating imports.\")\n\n // Update package.json dependencies\n const packageSpinner = spinner(`Updating package.json...`)?.start()\n\n try {\n const packageJson = getPackageInfo(config.resolvedPaths.cwd, false)\n\n if (!packageJson) {\n packageSpinner.fail(\"Could not read package.json\")\n logger.warn(\n \"Could not update package.json. You may need to manually replace @radix-ui/react-* packages with radix-ui\"\n )\n return\n }\n\n const foundPackagesArray = Array.from(foundPackages)\n\n // Remove packages from both dependencies and devDependencies if found in source files\n const dependencyTypes = [\"dependencies\", \"devDependencies\"] as const\n for (const depType of dependencyTypes) {\n if (packageJson[depType]) {\n for (const pkg of foundPackagesArray) {\n if (packageJson[depType]![pkg]) {\n delete packageJson[depType]![pkg]\n }\n }\n }\n }\n\n // Add radix-ui if we found any Radix packages.\n if (foundPackagesArray.length > 0) {\n if (!packageJson.dependencies) {\n packageJson.dependencies = {}\n }\n packageJson.dependencies[\"radix-ui\"] = \"latest\"\n\n const packageJsonPath = path.join(\n config.resolvedPaths.cwd,\n \"package.json\"\n )\n await fs.writeFile(\n packageJsonPath,\n JSON.stringify(packageJson, null, 2) + \"\\n\"\n )\n\n packageSpinner.succeed(`Updated package.json.`)\n\n // Install radix-ui dependency.\n await updateDependencies([\"radix-ui\"], [], config, { silent: false })\n } else {\n packageSpinner.succeed(\"No packages found in source files.\")\n }\n } catch (error) {\n packageSpinner.fail(\"Failed to update package.json\")\n logger.warn(\n \"You may need to manually replace @radix-ui/react-* packages with radix-ui\"\n )\n }\n}\n\nexport async function migrateRadixFile(\n content: string\n): Promise<{ content: string; replacedPackages: string[] }> {\n // Enhanced regex to handle type-only imports, but exclude react-icons\n // Also capture optional semicolon at the end\n const radixImportPattern =\n /import\\s+(?:(type)\\s+)?(?:\\*\\s+as\\s+(\\w+)|{([^}]+)})\\s+from\\s+([\"'])@radix-ui\\/react-([^\"']+)\\4(;?)/g\n\n const imports: Array<{ name: string; alias?: string; isType?: boolean }> = []\n const linesToRemove: string[] = []\n const replacedPackages: string[] = []\n let quoteStyle = '\"' // Default to double quotes\n let hasSemicolon = false // Track if any import had a semicolon\n\n let result = content\n let match\n\n // Find all Radix imports\n while ((match = radixImportPattern.exec(content)) !== null) {\n const [\n fullMatch,\n typeKeyword,\n namespaceAlias,\n namedImports,\n quote,\n packageName,\n semicolon,\n ] = match\n\n // Skip react-icons package and any sub-paths (like react-icons/dist/types)\n if (packageName === \"icons\" || packageName.startsWith(\"icons/\")) {\n continue\n }\n\n linesToRemove.push(fullMatch)\n\n // Use the quote style and semicolon style from the first import\n if (linesToRemove.length === 1) {\n quoteStyle = quote\n hasSemicolon = semicolon === \";\"\n }\n\n // Track which package we're replacing\n replacedPackages.push(`@radix-ui/react-${packageName}`)\n\n const isTypeOnly = Boolean(typeKeyword)\n\n if (namespaceAlias) {\n // Handle namespace imports: import * as DialogPrimitive from \"@radix-ui/react-dialog\"\n const componentName = toPascalCase(packageName)\n imports.push({\n name: componentName,\n alias: namespaceAlias,\n isType: isTypeOnly,\n })\n } else if (namedImports) {\n // Handle named imports: import { Root, Trigger } from \"@radix-ui/react-dialog\"\n // or import type { DialogProps } from \"@radix-ui/react-dialog\"\n // or import { type DialogProps, Root } from \"@radix-ui/react-dialog\"\n\n processNamedImports(namedImports, isTypeOnly, imports, packageName)\n }\n }\n\n if (imports.length === 0) {\n return {\n content,\n replacedPackages: [],\n }\n }\n\n // Remove duplicates.\n // Considering name, alias, and type status.\n const uniqueImports = imports.filter(\n (importName, index, self) =>\n index ===\n self.findIndex(\n (i) =>\n i.name === importName.name &&\n i.alias === importName.alias &&\n i.isType === importName.isType\n )\n )\n\n // Create the unified import with preserved quote style and type annotations\n const importList = uniqueImports\n .map((imp) => {\n const typePrefix = imp.isType ? \"type \" : \"\"\n return imp.alias\n ? `${typePrefix}${imp.name} as ${imp.alias}`\n : `${typePrefix}${imp.name}`\n })\n .join(\", \")\n\n const unifiedImport = `import { ${importList} } from ${quoteStyle}radix-ui${quoteStyle}${\n hasSemicolon ? \";\" : \"\"\n }`\n\n // Replace first import with unified import, remove the rest\n result = linesToRemove.reduce((acc, line, index) => {\n return acc.replace(line, index === 0 ? unifiedImport : \"\")\n }, result)\n\n // Clean up extra blank lines\n result = result.replace(/\\n\\s*\\n\\s*\\n/g, \"\\n\\n\")\n\n // Handle special case for Slot usage transformation\n // Now that we import { Slot as SlotPrimitive }, we need to:\n // 1. Transform: const Comp = asChild ? Slot : [ANYTHING] -> const Comp = asChild ? SlotPrimitive.Slot : [ANYTHING]\n // 2. Transform: React.ComponentProps<typeof Slot> -> React.ComponentProps<typeof SlotPrimitive.Slot>\n const hasSlotImport = uniqueImports.some(\n (imp) => imp.name === \"Slot\" && imp.alias === \"SlotPrimitive\"\n )\n\n if (hasSlotImport) {\n // Find all lines that are NOT import lines to avoid transforming the import statement itself\n const lines = result.split(\"\\n\")\n const transformedLines = lines.map((line) => {\n // Skip import lines\n if (line.trim().startsWith(\"import \")) {\n return line\n }\n\n let transformedLine = line\n\n // Handle all Slot references in one comprehensive pass\n // Use placeholders to avoid double replacements\n\n // First, mark specific patterns with placeholders\n transformedLine = transformedLine.replace(\n /\\b(asChild\\s*\\?\\s*)Slot(\\s*:)/g,\n \"$1__SLOT_PLACEHOLDER__$2\"\n )\n\n transformedLine = transformedLine.replace(\n /\\bReact\\.ComponentProps<typeof\\s+Slot>/g,\n \"React.ComponentProps<typeof __SLOT_PLACEHOLDER__>\"\n )\n\n transformedLine = transformedLine.replace(\n /\\bComponentProps<typeof\\s+Slot>/g,\n \"ComponentProps<typeof __SLOT_PLACEHOLDER__>\"\n )\n\n transformedLine = transformedLine.replace(\n /(<\\/?)Slot(\\s*\\/?>)/g,\n \"$1__SLOT_PLACEHOLDER__$2\"\n )\n\n // Handle any other standalone Slot usage\n transformedLine = transformedLine.replace(\n /\\bSlot\\b/g,\n (match, offset, string) => {\n // Don't transform if it's inside quotes\n const beforeMatch = string.substring(0, offset)\n const openQuotes = (beforeMatch.match(/\"/g) || []).length\n const openSingleQuotes = (beforeMatch.match(/'/g) || []).length\n\n // If we're inside quotes, don't transform\n if (openQuotes % 2 !== 0 || openSingleQuotes % 2 !== 0) {\n return match\n }\n\n return \"__SLOT_PLACEHOLDER__\"\n }\n )\n\n // Finally, replace all placeholders with SlotPrimitive.Slot\n transformedLine = transformedLine.replace(\n /__SLOT_PLACEHOLDER__/g,\n \"SlotPrimitive.Slot\"\n )\n\n return transformedLine\n })\n\n result = transformedLines.join(\"\\n\")\n }\n\n // Remove duplicate packages\n const uniqueReplacedPackages = Array.from(new Set(replacedPackages))\n\n return {\n content: result,\n replacedPackages: uniqueReplacedPackages,\n }\n}\n","import path from \"path\"\nimport { addOptionsSchema } from \"@/src/commands/add\"\nimport { migrateOptionsSchema } from \"@/src/commands/migrate\"\nimport * as ERRORS from \"@/src/utils/errors\"\nimport { getConfig } from \"@/src/utils/get-config\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport fs from \"fs-extra\"\nimport { z } from \"zod\"\n\nexport async function preFlightMigrate(\n options: z.infer<typeof migrateOptionsSchema>\n) {\n const errors: Record<string, boolean> = {}\n\n // Ensure target directory exists.\n // Check for empty project. We assume if no package.json exists, the project is empty.\n if (\n !fs.existsSync(options.cwd) ||\n !fs.existsSync(path.resolve(options.cwd, \"package.json\"))\n ) {\n errors[ERRORS.MISSING_DIR_OR_EMPTY_PROJECT] = true\n return {\n errors,\n config: null,\n }\n }\n\n // Check for existing components.json file.\n if (!fs.existsSync(path.resolve(options.cwd, \"components.json\"))) {\n errors[ERRORS.MISSING_CONFIG] = true\n return {\n errors,\n config: null,\n }\n }\n\n try {\n const config = await getConfig(options.cwd)\n\n return {\n errors,\n config: config!,\n }\n } catch (error) {\n logger.break()\n logger.error(\n `An invalid ${highlighter.info(\n \"components.json\"\n )} file was found at ${highlighter.info(\n options.cwd\n )}.\\nBefore you can run a migration, you must create a valid ${highlighter.info(\n \"components.json\"\n )} file by running the ${highlighter.info(\"init\")} command.`\n )\n logger.error(\n `Learn more at ${highlighter.info(\n \"https://ui.shadcn.com/docs/components-json\"\n )}.`\n )\n logger.break()\n process.exit(1)\n }\n}\n","import path from \"path\"\nimport { migrateIcons } from \"@/src/migrations/migrate-icons\"\nimport { migrateRadix } from \"@/src/migrations/migrate-radix\"\nimport { preFlightMigrate } from \"@/src/preflights/preflight-migrate\"\nimport * as ERRORS from \"@/src/utils/errors\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { logger } from \"@/src/utils/logger\"\nimport { Command } from \"commander\"\nimport { z } from \"zod\"\n\nexport const migrations = [\n {\n name: \"icons\",\n description: \"migrate your ui components to a different icon library.\",\n },\n {\n name: \"radix\",\n description: \"migrate to radix-ui.\",\n },\n] as const\n\nexport const migrateOptionsSchema = z.object({\n cwd: z.string(),\n list: z.boolean(),\n yes: z.boolean(),\n migration: z\n .string()\n .refine(\n (value) =>\n value && migrations.some((migration) => migration.name === value),\n {\n message:\n \"You must specify a valid migration. Run `shadcn migrate --list` to see available migrations.\",\n }\n )\n .optional(),\n})\n\nexport const migrate = new Command()\n .name(\"migrate\")\n .description(\"run a migration.\")\n .argument(\"[migration]\", \"the migration to run.\")\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .option(\"-l, --list\", \"list all migrations.\", false)\n .option(\"-y, --yes\", \"skip confirmation prompt.\", false)\n .action(async (migration, opts) => {\n try {\n const options = migrateOptionsSchema.parse({\n cwd: path.resolve(opts.cwd),\n migration,\n list: opts.list,\n yes: opts.yes,\n })\n\n if (options.list || !options.migration) {\n logger.info(\"Available migrations:\")\n for (const migration of migrations) {\n logger.info(`- ${migration.name}: ${migration.description}`)\n }\n return\n }\n\n if (!options.migration) {\n throw new Error(\n \"You must specify a migration. Run `shadcn migrate --list` to see available migrations.\"\n )\n }\n\n let { errors, config } = await preFlightMigrate(options)\n\n if (\n errors[ERRORS.MISSING_DIR_OR_EMPTY_PROJECT] ||\n errors[ERRORS.MISSING_CONFIG]\n ) {\n throw new Error(\n \"No `components.json` file found. Ensure you are at the root of your project.\"\n )\n }\n\n if (!config) {\n throw new Error(\n \"Something went wrong reading your `components.json` file. Please ensure you have a valid `components.json` file.\"\n )\n }\n\n if (options.migration === \"icons\") {\n await migrateIcons(config)\n }\n\n if (options.migration === \"radix\") {\n await migrateRadix(config, { yes: options.yes })\n }\n } catch (error) {\n logger.break()\n handleError(error)\n }\n })\n","import path from \"path\"\nimport { buildOptionsSchema } from \"@/src/commands/build\"\nimport * as ERRORS from \"@/src/utils/errors\"\nimport { getConfig } from \"@/src/utils/get-config\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport fs from \"fs-extra\"\nimport { z } from \"zod\"\n\nexport async function preFlightRegistryBuild(\n options: z.infer<typeof buildOptionsSchema>\n) {\n const errors: Record<string, boolean> = {}\n\n const resolvePaths = {\n cwd: options.cwd,\n registryFile: path.resolve(options.cwd, options.registryFile),\n outputDir: path.resolve(options.cwd, options.outputDir),\n }\n\n // Ensure registry file exists.\n if (!fs.existsSync(resolvePaths.registryFile)) {\n errors[ERRORS.BUILD_MISSING_REGISTRY_FILE] = true\n return {\n errors,\n resolvePaths: null,\n config: null,\n }\n }\n\n // Check for existing components.json file.\n if (!fs.existsSync(path.resolve(options.cwd, \"components.json\"))) {\n errors[ERRORS.MISSING_CONFIG] = true\n return {\n errors,\n resolvePaths: null,\n config: null,\n }\n }\n\n // Create output directory if it doesn't exist.\n await fs.mkdir(resolvePaths.outputDir, { recursive: true })\n\n try {\n const config = await getConfig(options.cwd)\n\n return {\n errors,\n config: config!,\n resolvePaths,\n }\n } catch (error) {\n logger.break()\n logger.error(\n `An invalid ${highlighter.info(\n \"components.json\"\n )} file was found at ${highlighter.info(\n options.cwd\n )}.\\nBefore you can build the registry, you must create a valid ${highlighter.info(\n \"components.json\"\n )} file by running the ${highlighter.info(\"init\")} command.`\n )\n logger.break()\n process.exit(1)\n }\n}\n","import * as fs from \"fs/promises\"\nimport * as path from \"path\"\nimport { preFlightRegistryBuild } from \"@/src/preflights/preflight-registry\"\nimport { recursivelyResolveFileImports } from \"@/src/registry/utils\"\nimport { configSchema, registryItemSchema, registrySchema } from \"@/src/schema\"\nimport * as ERRORS from \"@/src/utils/errors\"\nimport { ProjectInfo, getProjectInfo } from \"@/src/utils/get-project-info\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { Command } from \"commander\"\nimport { z } from \"zod\"\n\nexport const buildOptionsSchema = z.object({\n cwd: z.string(),\n registryFile: z.string(),\n outputDir: z.string(),\n verbose: z.boolean().optional().default(false),\n})\n\nexport const build = new Command()\n .name(\"registry:build\")\n .description(\"builds the registry [EXPERIMENTAL]\")\n .argument(\"[registry]\", \"path to registry.json file\", \"./registry.json\")\n .option(\n \"-o, --output <path>\",\n \"destination directory for json files\",\n \"./public/r\"\n )\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .option(\"-v, --verbose\", \"verbose output\")\n .action(async (registry: string, opts) => {\n await buildRegistry({\n cwd: path.resolve(opts.cwd),\n registryFile: registry,\n outputDir: opts.output,\n verbose: opts.verbose,\n })\n })\n\nasync function buildRegistry(opts: z.infer<typeof buildOptionsSchema>) {\n try {\n const options = buildOptionsSchema.parse(opts)\n\n const [{ errors, resolvePaths, config }, projectInfo] = await Promise.all([\n preFlightRegistryBuild(options),\n getProjectInfo(options.cwd),\n ])\n\n if (errors[ERRORS.MISSING_CONFIG] || !config || !projectInfo) {\n logger.error(\n `A ${highlighter.info(\n \"components.json\"\n )} file is required to build the registry. Run ${highlighter.info(\n \"shadcn init\"\n )} to create one.`\n )\n logger.break()\n process.exit(1)\n }\n\n if (errors[ERRORS.BUILD_MISSING_REGISTRY_FILE] || !resolvePaths) {\n logger.error(\n `We could not find a registry file at ${highlighter.info(\n path.resolve(options.cwd, options.registryFile)\n )}.`\n )\n logger.break()\n process.exit(1)\n }\n\n const content = await fs.readFile(resolvePaths.registryFile, \"utf-8\")\n const result = registrySchema.safeParse(JSON.parse(content))\n\n if (!result.success) {\n logger.error(\n `Invalid registry file found at ${highlighter.info(\n resolvePaths.registryFile\n )}.`\n )\n logger.break()\n process.exit(1)\n }\n\n const buildSpinner = spinner(\"Building registry...\")\n\n // Recursively resolve the registry items.\n const resolvedRegistry = await resolveRegistryItems(\n result.data,\n config,\n projectInfo\n )\n\n // Loop through the registry items and remove duplicates files i.e same path.\n for (const registryItem of resolvedRegistry.items) {\n // Deduplicate files\n registryItem.files = registryItem.files?.filter(\n (file, index, self) =>\n index === self.findIndex((t) => t.path === file.path)\n )\n\n // Deduplicate dependencies\n if (registryItem.dependencies) {\n registryItem.dependencies = registryItem.dependencies.filter(\n (dep, index, self) => index === self.findIndex((d) => d === dep)\n )\n }\n }\n\n for (const registryItem of resolvedRegistry.items) {\n if (!registryItem.files) {\n continue\n }\n\n buildSpinner.start(`Building ${registryItem.name}...`)\n\n // Add the schema to the registry item.\n registryItem[\"$schema\"] =\n \"https://ui.shadcn.com/schema/registry-item.json\"\n\n for (const file of registryItem.files) {\n const absPath = path.resolve(resolvePaths.cwd, file.path)\n try {\n const stat = await fs.stat(absPath)\n if (!stat.isFile()) {\n continue\n }\n file[\"content\"] = await fs.readFile(absPath, \"utf-8\")\n } catch (err) {\n console.error(\"Error reading file in registry build:\", absPath, err)\n continue\n }\n }\n\n const result = registryItemSchema.safeParse(registryItem)\n if (!result.success) {\n logger.error(\n `Invalid registry item found for ${highlighter.info(\n registryItem.name\n )}.`\n )\n continue\n }\n\n // Write the registry item to the output directory.\n await fs.writeFile(\n path.resolve(resolvePaths.outputDir, `${result.data.name}.json`),\n JSON.stringify(result.data, null, 2)\n )\n }\n\n // Copy registry.json to the output directory.\n await fs.copyFile(\n resolvePaths.registryFile,\n path.resolve(resolvePaths.outputDir, \"registry.json\")\n )\n\n buildSpinner.succeed(\"Building registry.\")\n\n if (options.verbose) {\n spinner(\n `The registry has ${highlighter.info(\n resolvedRegistry.items.length.toString()\n )} items:`\n ).succeed()\n for (const item of resolvedRegistry.items) {\n logger.log(` - ${item.name} (${highlighter.info(item.type)})`)\n for (const file of item.files ?? []) {\n logger.log(` - ${file.path}`)\n }\n }\n }\n } catch (error) {\n logger.break()\n handleError(error)\n }\n}\n\n// This reads the registry and recursively resolves the file imports.\nasync function resolveRegistryItems(\n registry: z.infer<typeof registrySchema>,\n config: z.infer<typeof configSchema>,\n projectInfo: ProjectInfo\n): Promise<z.infer<typeof registrySchema>> {\n for (const item of registry.items) {\n if (!item.files?.length) {\n continue\n }\n\n // Process all files in the array instead of just the first one\n for (const file of item.files) {\n const results = await recursivelyResolveFileImports(\n file.path,\n config,\n projectInfo\n )\n\n // Remove file from results.files\n results.files = results.files?.filter((f) => f.path !== file.path)\n\n if (results.files) {\n item.files.push(...results.files)\n }\n\n if (results.dependencies) {\n item.dependencies = item.dependencies\n ? item.dependencies.concat(results.dependencies)\n : results.dependencies\n }\n }\n }\n\n return registry\n}\n","import { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { Command } from \"commander\"\n\nexport const mcp = new Command()\n .name(\"registry:mcp\")\n .description(\"starts the registry MCP server [DEPRECATED]\")\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .action(async () => {\n logger.warn(\n `The ${highlighter.info(\n \"shadcn registry:mcp\"\n )} command is deprecated. Use the ${highlighter.info(\n \"shadcn mcp\"\n )} command instead.`\n )\n logger.break()\n })\n","import path from \"path\"\nimport { configWithDefaults } from \"@/src/registry/config\"\nimport { clearRegistryContext } from \"@/src/registry/context\"\nimport { searchRegistries } from \"@/src/registry/search\"\nimport { validateRegistryConfigForItems } from \"@/src/registry/validator\"\nimport { rawConfigSchema } from \"@/src/schema\"\nimport { loadEnvFiles } from \"@/src/utils/env-loader\"\nimport { createConfig, getConfig } from \"@/src/utils/get-config\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { ensureRegistriesInConfig } from \"@/src/utils/registries\"\nimport { Command } from \"commander\"\nimport fsExtra from \"fs-extra\"\nimport { z } from \"zod\"\n\nconst searchOptionsSchema = z.object({\n cwd: z.string(),\n query: z.string().optional(),\n limit: z.number().optional(),\n offset: z.number().optional(),\n})\n\n// TODO: We're duplicating logic for shadowConfig here.\n// Revisit and properly abstract this.\n\nexport const search = new Command()\n .name(\"search\")\n .alias(\"list\")\n .description(\"search items from registries\")\n .argument(\n \"<registries...>\",\n \"the registry names or urls to search items from. Names must be prefixed with @.\"\n )\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .option(\"-q, --query <query>\", \"query string\")\n .option(\n \"-l, --limit <number>\",\n \"maximum number of items to display per registry\",\n \"100\"\n )\n .option(\"-o, --offset <number>\", \"number of items to skip\", \"0\")\n .action(async (registries: string[], opts) => {\n try {\n const options = searchOptionsSchema.parse({\n cwd: path.resolve(opts.cwd),\n query: opts.query,\n limit: opts.limit ? parseInt(opts.limit, 10) : undefined,\n offset: opts.offset ? parseInt(opts.offset, 10) : undefined,\n })\n\n await loadEnvFiles(options.cwd)\n\n // Start with a shadow config to support partial components.json.\n // Use createConfig to get proper default paths\n const defaultConfig = createConfig({\n style: \"new-york\",\n resolvedPaths: {\n cwd: options.cwd,\n },\n })\n let shadowConfig = configWithDefaults(defaultConfig)\n\n // Check if there's a components.json file (partial or complete).\n const componentsJsonPath = path.resolve(options.cwd, \"components.json\")\n if (fsExtra.existsSync(componentsJsonPath)) {\n const existingConfig = await fsExtra.readJson(componentsJsonPath)\n const partialConfig = rawConfigSchema.partial().parse(existingConfig)\n shadowConfig = configWithDefaults({\n ...defaultConfig,\n ...partialConfig,\n })\n }\n\n // Try to get the full config, but fall back to shadow config if it fails.\n let config = shadowConfig\n try {\n const fullConfig = await getConfig(options.cwd)\n if (fullConfig) {\n config = configWithDefaults(fullConfig)\n }\n } catch {\n // Use shadow config if getConfig fails (partial components.json).\n }\n\n const { config: updatedConfig, newRegistries } =\n await ensureRegistriesInConfig(\n registries.map((registry) => `${registry}/registry`),\n config,\n {\n silent: true,\n writeFile: false,\n }\n )\n if (newRegistries.length > 0) {\n config.registries = updatedConfig.registries\n }\n\n // Validate registries early for better error messages.\n validateRegistryConfigForItems(registries, config)\n\n // Use searchRegistries for both search and non-search cases\n const results = await searchRegistries(registries as `@${string}`[], {\n query: options.query,\n limit: options.limit,\n offset: options.offset,\n config,\n })\n\n console.log(JSON.stringify(results, null, 2))\n process.exit(0)\n } catch (error) {\n handleError(error)\n } finally {\n clearRegistryContext()\n }\n })\n","import path from \"path\"\nimport { getRegistryItems } from \"@/src/registry/api\"\nimport { configWithDefaults } from \"@/src/registry/config\"\nimport { clearRegistryContext } from \"@/src/registry/context\"\nimport { validateRegistryConfigForItems } from \"@/src/registry/validator\"\nimport { rawConfigSchema } from \"@/src/schema\"\nimport { loadEnvFiles } from \"@/src/utils/env-loader\"\nimport { getConfig } from \"@/src/utils/get-config\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { ensureRegistriesInConfig } from \"@/src/utils/registries\"\nimport { Command } from \"commander\"\nimport fsExtra from \"fs-extra\"\nimport { z } from \"zod\"\n\nconst viewOptionsSchema = z.object({\n cwd: z.string(),\n})\n\nexport const view = new Command()\n .name(\"view\")\n .description(\"view items from the registry\")\n .argument(\"<items...>\", \"the item names or URLs to view\")\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .action(async (items: string[], opts) => {\n try {\n const options = viewOptionsSchema.parse({\n cwd: path.resolve(opts.cwd),\n })\n\n await loadEnvFiles(options.cwd)\n\n // Start with a shadow config to support partial components.json.\n let shadowConfig = configWithDefaults({})\n\n // Check if there's a components.json file (partial or complete).\n const componentsJsonPath = path.resolve(options.cwd, \"components.json\")\n if (fsExtra.existsSync(componentsJsonPath)) {\n const existingConfig = await fsExtra.readJson(componentsJsonPath)\n const partialConfig = rawConfigSchema.partial().parse(existingConfig)\n shadowConfig = configWithDefaults(partialConfig)\n }\n\n // Try to get the full config, but fall back to shadow config if it fails.\n let config = shadowConfig\n try {\n const fullConfig = await getConfig(options.cwd)\n if (fullConfig) {\n config = configWithDefaults(fullConfig)\n }\n } catch {\n // Use shadow config if getConfig fails (partial components.json).\n }\n\n const { config: updatedConfig, newRegistries } =\n await ensureRegistriesInConfig(items, config, {\n silent: true,\n writeFile: false,\n })\n if (newRegistries.length > 0) {\n config.registries = updatedConfig.registries\n }\n\n // Validate registries early for better error messages.\n validateRegistryConfigForItems(items, config)\n\n const payload = await getRegistryItems(items, { config })\n console.log(JSON.stringify(payload, null, 2))\n process.exit(0)\n } catch (error) {\n handleError(error)\n } finally {\n clearRegistryContext()\n }\n })\n","{\n \"name\": \"hghcn\",\n \"version\": \"3.6.22\",\n \"description\": \"Add components to your apps.\",\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"license\": \"MIT\",\n \"author\": {\n \"name\": \"shadcn\",\n \"url\": \"https://twitter.com/shadcn\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/shadcn-ui/ui.git\",\n \"directory\": \"packages/shadcn\"\n },\n \"files\": [\n \"dist\"\n ],\n \"keywords\": [\n \"components\",\n \"ui\",\n \"tailwind\",\n \"radix-ui\",\n \"shadcn\"\n ],\n \"type\": \"module\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n },\n \"./registry\": {\n \"types\": \"./dist/registry/index.d.ts\",\n \"default\": \"./dist/registry/index.js\"\n },\n \"./schema\": {\n \"types\": \"./dist/schema/index.d.ts\",\n \"default\": \"./dist/schema/index.js\"\n },\n \"./mcp\": {\n \"types\": \"./dist/mcp/index.d.ts\",\n \"default\": \"./dist/mcp/index.js\"\n },\n \"./utils\": {\n \"types\": \"./dist/utils/index.d.ts\",\n \"default\": \"./dist/utils/index.js\"\n },\n \"./icons\": {\n \"types\": \"./dist/icons/index.d.ts\",\n \"default\": \"./dist/icons/index.js\"\n },\n \"./tailwind.css\": {\n \"style\": \"./dist/tailwind.css\"\n }\n },\n \"bin\": \"./dist/index.js\",\n \"scripts\": {\n \"dev\": \"tsup --watch\",\n \"build\": \"tsup\",\n \"typecheck\": \"tsc --noEmit\",\n \"clean\": \"rimraf dist && rimraf components\",\n \"start:dev\": \"cross-env REGISTRY_URL=http://localhost:4000/r node dist/index.js\",\n \"start:prod\": \"cross-env REGISTRY_URL=https://ui.shadcn.com/r node dist/index.js\",\n \"start\": \"node dist/index.js\",\n \"format:write\": \"prettier --write \\\"**/*.{ts,tsx,mdx}\\\" --cache\",\n \"format:check\": \"prettier --check \\\"**/*.{ts,tsx,mdx}\\\" --cache\",\n \"release\": \"changeset version\",\n \"pub:beta\": \"pnpm build && pnpm publish --no-git-checks --access public --tag beta\",\n \"pub:next\": \"pnpm build && pnpm publish --no-git-checks --access public --tag next\",\n \"pub:release\": \"pnpm build && pnpm publish --access public\",\n \"test\": \"vitest run\",\n \"test:dev\": \"REGISTRY_URL=http://localhost:4000/r vitest run\",\n \"mcp:inspect\": \"pnpm dlx @modelcontextprotocol/inspector node dist/index.js mcp\"\n },\n \"dependencies\": {\n \"@antfu/ni\": \"^25.0.0\",\n \"@babel/core\": \"^7.28.0\",\n \"@babel/parser\": \"^7.28.0\",\n \"@babel/plugin-transform-typescript\": \"^7.28.0\",\n \"@babel/preset-typescript\": \"^7.27.1\",\n \"@dotenvx/dotenvx\": \"^1.48.4\",\n \"@modelcontextprotocol/sdk\": \"^1.17.2\",\n \"browserslist\": \"^4.26.2\",\n \"commander\": \"^14.0.0\",\n \"cosmiconfig\": \"^9.0.0\",\n \"dedent\": \"^1.6.0\",\n \"deepmerge\": \"^4.3.1\",\n \"diff\": \"^8.0.2\",\n \"execa\": \"^9.6.0\",\n \"fast-glob\": \"^3.3.3\",\n \"fs-extra\": \"^11.3.1\",\n \"fuzzysort\": \"^3.1.0\",\n \"https-proxy-agent\": \"^7.0.6\",\n \"kleur\": \"^4.1.5\",\n \"msw\": \"^2.10.4\",\n \"node-fetch\": \"^3.3.2\",\n \"open\": \"^11.0.0\",\n \"ora\": \"^8.2.0\",\n \"postcss\": \"^8.5.6\",\n \"postcss-selector-parser\": \"^7.1.0\",\n \"prompts\": \"^2.4.2\",\n \"recast\": \"^0.23.11\",\n \"stringify-object\": \"^5.0.0\",\n \"ts-morph\": \"^26.0.0\",\n \"tsconfig-paths\": \"^4.2.0\",\n \"zod\": \"^3.24.1\",\n \"zod-to-json-schema\": \"^3.24.6\"\n },\n \"devDependencies\": {\n \"@types/babel__core\": \"^7.20.5\",\n \"@types/fs-extra\": \"^11.0.4\",\n \"@types/prompts\": \"^2.4.9\",\n \"@types/stringify-object\": \"^4.0.5\",\n \"rimraf\": \"^6.0.1\",\n \"tsup\": \"^8.5.0\",\n \"type-fest\": \"^4.41.0\",\n \"typescript\": \"^5.9.2\"\n }\n}\n","#!/usr/bin/env node\nimport { add } from \"@/src/commands/add\"\nimport { build } from \"@/src/commands/build\"\nimport { create } from \"@/src/commands/create\"\nimport { diff } from \"@/src/commands/diff\"\nimport { info } from \"@/src/commands/info\"\nimport { init } from \"@/src/commands/init\"\nimport { mcp } from \"@/src/commands/mcp\"\nimport { migrate } from \"@/src/commands/migrate\"\nimport { build as registryBuild } from \"@/src/commands/registry/build\"\nimport { mcp as registryMcp } from \"@/src/commands/registry/mcp\"\nimport { search } from \"@/src/commands/search\"\nimport { view } from \"@/src/commands/view\"\nimport { Command } from \"commander\"\n\nimport packageJson from \"../package.json\"\n\nprocess.on(\"SIGINT\", () => process.exit(0))\nprocess.on(\"SIGTERM\", () => process.exit(0))\n\nasync function main() {\n const program = new Command()\n .name(\"shadcn\")\n .description(\"add items from registries to your project\")\n .version(\n packageJson.version || \"1.0.0\",\n \"-v, --version\",\n \"display the version number\"\n )\n\n program\n .addCommand(init)\n .addCommand(create)\n .addCommand(add)\n .addCommand(diff)\n .addCommand(view)\n .addCommand(search)\n .addCommand(migrate)\n .addCommand(info)\n .addCommand(build)\n .addCommand(mcp)\n // Registry commands\n program.addCommand(registryBuild).addCommand(registryMcp)\n\n program.parse()\n}\n\nmain()\n\nexport * from \"./registry/api\"\n"]}
1
+ {"version":3,"sources":["../src/preflights/preflight-init.ts","../src/utils/create-project.ts","../src/utils/env-loader.ts","../src/utils/file-helper.ts","../src/registry/namespaces.ts","../src/utils/registries.ts","../src/commands/init.ts","../src/utils/is-safe-target.ts","../src/utils/updaters/update-css.ts","../src/utils/updaters/update-css-vars.ts","../src/utils/updaters/update-dependencies.ts","../src/utils/updaters/update-env-vars.ts","../src/utils/updaters/update-fonts.ts","../src/utils/add-components.ts","../src/commands/add.ts","../src/preflights/preflight-build.ts","../src/commands/build.ts","../src/commands/create.ts","../src/commands/diff.ts","../src/commands/info.ts","../src/commands/mcp.ts","../src/utils/legacy-icon-libraries.ts","../src/migrations/migrate-icons.ts","../src/migrations/migrate-radix.ts","../src/preflights/preflight-migrate.ts","../src/commands/migrate.ts","../src/preflights/preflight-registry.ts","../src/commands/registry/build.ts","../src/commands/registry/mcp.ts","../src/commands/search.ts","../src/commands/view.ts","../package.json","../src/index.ts"],"names":["preFlightInit","options","errors","fs","path","projectSpinner","spinner","logger","highlighter","frameworkSpinner","projectInfo","getProjectInfo","tailwindSpinnerMessage","tailwindSpinner","tsConfigSpinner","GITHUB_TEMPLATE_URL","TEMPLATES","createProject","template","projectName","nextVersion","isRemoteComponent","result","fetchRegistry","meta","z","error","handleError","type","name","prompts","value","packageManager","getPackageManager","projectPath","createNextProject","createMonorepoProject","createViteProject","createStartProject","createSpinner","args","execa","templatePath","os","response","tarPath","extractedPath","packageJsonPath","packageJsonContent","packageJson","cwd","lockFilePath","loadEnvFiles","config","envFiles","envFile","envPath","join","existsSync","FILE_BACKUP_SUFFIX","createFileBackup","filePath","fsExtra","backupPath","restoreFileBackup","deleteFileBackup","resolveRegistryNamespaces","components","discoveredNamespaces","visitedItems","itemsToProcess","currentItem","registry","parseRegistryAndItemFromString","BUILTIN_REGISTRIES","item","fetchRegistryItems","dep","depRegistry","RegistryNotConfiguredError","ensureRegistriesInConfig","missingRegistries","registryIndex","getRegistriesIndex","foundRegistries","existingRegistries","key","newConfigWithRegistries","resolvedPaths","configWithoutResolvedPaths","configSpinner","updatedConfig","rawConfigSchema","code","initOptionsSchema","val","BASE_COLORS","color","init","Command","opts","shadowConfig","configWithDefaults","createConfig","componentsJsonPath","existingConfig","baseConfig","buildUrlAndHeadersForRegistryItem","getRegistryItems","deepmerge","runInit","clearRegistryContext","newProjectTemplate","preflight","getConfig","projectConfig","getProjectConfig","promptForMinimalConfig","promptForConfig","defaultConfig","styles","baseColors","getRegistryStyles","getRegistryBaseColors","style","DEFAULT_TAILWIND_CSS","DEFAULT_TAILWIND_CONFIG","DEFAULT_COMPONENTS","DEFAULT_UTILS","baseColor","cssVariables","iconLibrary","tailwindVersion","getProjectTailwindVersionFromConfig","isSafeTarget","targetPath","decodedPath","prevPath","normalizedTarget","normalizedRoot","hasPathTraversal","cleanPath","cleanTarget","cleanDecoded","pattern","resolvedPath","updateCss","css","cssFilepath","cssFilepathRelative","cssSpinner","raw","output","transformCss","input","plugins","updateCssPlugin","postcss","root","lastNode","selector","properties","atRuleMatch","params","node","importRule","importNodes","lastImport","quotedParams","normalizeParams","p","pluginRule","pluginNodes","lastPlugin","newAtRule","themeInline","existingKeyframesRule","keyframesRule","step","stepProps","processRule","utilityAtRule","prop","existingDecl","decl","atRule","processAtRule","childSelector","childProps","nestedMatch","nestedName","nestedParams","tempRule","rule","clone","parent","atRuleName","atRuleParams","nestedSelector","updateCssVars","cssVars","cssVarsSpinner","transformCssVars","updateCssVarsPlugin","cleanupDefaultNextStylesPlugin","packageInfo","getPackageInfo","addCustomImport","addCustomVariant","updateCssVarsPluginV4","updateThemePlugin","updateTailwindConfigPlugin","updateTailwindConfigAnimationPlugin","updateTailwindConfigKeyframesPlugin","updateBaseLayerPlugin","requiredRules","baseLayer","apply","applyRule","AtRule","vars","addOrUpdateVars","removeConflictVars","rootRule","propsToRemove","bodyRule","darkRootRule","ruleNode","newDecl","themeNode","upsertThemeNode","isLocalHSLValue","variables","themeVarNodes","variable","radiusVariables","cssVarNode","isColorValue","propValue","variantNode","customVariantNode","importNode","tailwindConfig","quote","getQuoteType","lastPluginNode","plugin","pluginName","pluginNode","existingKeyFrameNodes","keyframeValueSchema","keyframeName","keyframeValue","parsedKeyframeValue","keyframeNode","values","existingAnimationNodes","parsedAnimationValue","animationNode","chunks","chunk","updateDependencies","dependencies","devDependencies","dependenciesSpinner","getUpdateDependenciesPackageManager","flag","shouldPromptForNpmFlag","confirmation","installWithPackageManager","hasReact19","hasReactDayPicker8","installWithNpm","installWithDeno","installWithExpo","updateEnvVars","envVars","envSpinner","projectRoot","envFilePath","existingEnvFile","findExistingEnvFile","envFileExists","envFileName","newEnvContent","envVarsAdded","envFileUpdated","envFileCreated","existingContent","mergedContent","mergeEnvContent","getNewEnvKeys","updateFonts","fonts","fontsSpinner","updateNextFonts","layoutPath","findLayoutFile","layoutContent","updatedContent","transformLayoutFonts","isSrcDir","ext","possiblePaths","relativePath","fullPath","_config","sourceFile","Project","ScriptKind","googleFonts","f","fontVariableNames","font","importName","varName","toCamelCase","existingImport","fontOptions","buildFontOptions","imp","existingVarDecl","findFontVariableDeclaration","insertPosition","findInsertPosition","VariableDeclarationKind","updateHtmlClassName","str","part","index","variableStatements","statement","declaration","initializer","SyntaxKind","argText","imports","jsxElements","element","classNameAttr","variableExpressions","ensureCnImport","jsxAttr","newVarExpressions","currentValue","jsxExpr","expr","exprText","v","cleanedExpr","removeFontVariablesFromCn","newExpr","insertFontVariablesIntoCn","cnArgs","parseTemplateLiteralToCnArgs","utilsImport","templateLiteral","staticArgs","variableArgs","parts","staticParts","staticPart","cnExpr","fontVars","varsStr","addComponents","workspaceConfig","getWorkspaceConfig","addWorkspaceComponents","addProjectComponents","registrySpinner","tree","resolveRegistryTree","validateFilesTarget","updateFiles","filesCreated","filesUpdated","filesSkipped","rootSpinner","mainTargetConfig","workspaceRoot","findCommonRoot","updateTailwindConfig","overwriteCssVars","shouldOverwriteCssVars","filesByType","file","typeFiles","targetConfig","typeWorkspaceRoot","packageRoot","findPackageRoot","files","registryItemSchema","component","addOptionsSchema","add","initialConfig","restrictedComponentPrefixes","restrictedStylePrefixes","prefix","restrictedComponents","hasNewRegistries","newRegistries","itemType","shouldInstallBaseStyle","registryItem","isUniversalRegistryItem","confirm","promptForRegistryComponents","deprecatedComponents","DEPRECATED_COMPONENTS","getShadcnRegistryIndex","entry","c","preFlightBuild","resolvePaths","buildOptionsSchema","build","ue","content","re","registrySchema","buildSpinner","SHADCN_URL","CREATE_TEMPLATES","create","createUrl","getShadcnCreateUrl","proceed","open","enteredName","selectedTemplate","presetResult","handlePresetOption","initUrl","buildInitUrl","registryBaseConfig","templateFiles","getTemplateFiles","preset","getShadcnInitUrl","presetArg","presets","getPresets","selectedPreset","url","isUrl","getPreset","presetNames","dedent","updateOptionsSchema","diff","targetDir","projectComponents","componentsWithUpdates","changes","diffComponent","change","printDiff","payload","fetchTree","getRegistryBaseColor","getItemTargetPath","fileContent","registryContent","transform","patch","diffLines","info","SHADCN_MCP_VERSION","CLIENTS","DEPENDENCIES","mcp","transport","StdioServerTransport","server","mcpInitOptionsSchema","command","client","installCommand","devFlag","installSpinner","configPath","runMcpInit","overwriteMerge","_","sourceArray","clientInfo","dir","mergedConfig","LEGACY_ICON_LIBRARIES","migrateIcons","uiPath","registryIcons","fg","getRegistryIcons","libraryChoices","migrateOptions","sourceLibrary","targetLibrary","migrationSpinner","migrateIconsFile","iconsMapping","sourceLibraryImport","targetLibraryImport","tmpdir","project","tempFile","randomBytes","targetedIcons","importDeclaration","specifier","iconName","targetedIcon","icon","toPascalCase","processNamedImports","namedImports","isTypeOnly","packageName","namedImportList","importItem","inlineTypeMatch","aliasMatch","importAlias","migrateRadix","foundPackages","replacedPackages","migrateRadixFile","pkg","packageSpinner","foundPackagesArray","dependencyTypes","depType","radixImportPattern","linesToRemove","quoteStyle","hasSemicolon","match","fullMatch","typeKeyword","namespaceAlias","semicolon","componentName","uniqueImports","self","i","unifiedImport","typePrefix","acc","line","transformedLine","offset","string","beforeMatch","openQuotes","openSingleQuotes","uniqueReplacedPackages","preFlightMigrate","migrations","migrateOptionsSchema","migration","migrate","preFlightRegistryBuild","buildRegistry","le","resolvedRegistry","resolveRegistryItems","t","d","absPath","err","results","recursivelyResolveFileImports","searchOptionsSchema","search","registries","partialConfig","fullConfig","validateRegistryConfigForItems","searchRegistries","viewOptionsSchema","view","items","package_default","main","program"],"mappings":"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","file":"index.js","sourcesContent":["import path from \"path\"\nimport { initOptionsSchema } from \"@/src/commands/init\"\nimport * as ERRORS from \"@/src/utils/errors\"\nimport { getProjectInfo } from \"@/src/utils/get-project-info\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport fs from \"fs-extra\"\nimport { z } from \"zod\"\n\nexport async function preFlightInit(\n options: z.infer<typeof initOptionsSchema>\n) {\n const errors: Record<string, boolean> = {}\n\n // Ensure target directory exists.\n // Check for empty project. We assume if no package.json exists, the project is empty.\n if (\n !fs.existsSync(options.cwd) ||\n !fs.existsSync(path.resolve(options.cwd, \"package.json\"))\n ) {\n errors[ERRORS.MISSING_DIR_OR_EMPTY_PROJECT] = true\n return {\n errors,\n projectInfo: null,\n }\n }\n\n const projectSpinner = spinner(`Preflight checks.`, {\n silent: options.silent,\n }).start()\n\n if (\n fs.existsSync(path.resolve(options.cwd, \"components.json\")) &&\n !options.force\n ) {\n projectSpinner?.fail()\n logger.break()\n logger.error(\n `A ${highlighter.info(\n \"components.json\"\n )} file already exists at ${highlighter.info(\n options.cwd\n )}.\\nTo start over, remove the ${highlighter.info(\n \"components.json\"\n )} file and run ${highlighter.info(\"init\")} again.`\n )\n logger.break()\n process.exit(1)\n }\n\n projectSpinner?.succeed()\n\n const frameworkSpinner = spinner(`Verifying framework.`, {\n silent: options.silent,\n }).start()\n const projectInfo = await getProjectInfo(options.cwd)\n if (!projectInfo || projectInfo?.framework.name === \"manual\") {\n errors[ERRORS.UNSUPPORTED_FRAMEWORK] = true\n frameworkSpinner?.fail()\n logger.break()\n if (projectInfo?.framework.links.installation) {\n logger.error(\n `We could not detect a supported framework at ${highlighter.info(\n options.cwd\n )}.\\n` +\n `Visit ${highlighter.info(\n projectInfo?.framework.links.installation\n )} to manually configure your project.\\nOnce configured, you can use the cli to add components.`\n )\n }\n logger.break()\n process.exit(1)\n }\n frameworkSpinner?.succeed(\n `Verifying framework. Found ${highlighter.info(\n projectInfo.framework.label\n )}.`\n )\n\n let tailwindSpinnerMessage = \"Validating Tailwind CSS.\"\n\n if (projectInfo.tailwindVersion === \"v4\") {\n tailwindSpinnerMessage = `Validating Tailwind CSS config. Found ${highlighter.info(\n \"v4\"\n )}.`\n }\n\n const tailwindSpinner = spinner(tailwindSpinnerMessage, {\n silent: options.silent,\n }).start()\n if (\n projectInfo.tailwindVersion === \"v3\" &&\n (!projectInfo?.tailwindConfigFile || !projectInfo?.tailwindCssFile)\n ) {\n errors[ERRORS.TAILWIND_NOT_CONFIGURED] = true\n tailwindSpinner?.fail()\n } else if (\n projectInfo.tailwindVersion === \"v4\" &&\n !projectInfo?.tailwindCssFile\n ) {\n errors[ERRORS.TAILWIND_NOT_CONFIGURED] = true\n tailwindSpinner?.fail()\n } else if (!projectInfo.tailwindVersion) {\n errors[ERRORS.TAILWIND_NOT_CONFIGURED] = true\n tailwindSpinner?.fail()\n } else {\n tailwindSpinner?.succeed()\n }\n\n const tsConfigSpinner = spinner(`Validating import alias.`, {\n silent: options.silent,\n }).start()\n if (!projectInfo?.aliasPrefix) {\n errors[ERRORS.IMPORT_ALIAS_MISSING] = true\n tsConfigSpinner?.fail()\n } else {\n tsConfigSpinner?.succeed()\n }\n\n if (Object.keys(errors).length > 0) {\n if (errors[ERRORS.TAILWIND_NOT_CONFIGURED]) {\n logger.break()\n logger.error(\n `No Tailwind CSS configuration found at ${highlighter.info(\n options.cwd\n )}.`\n )\n logger.error(\n `It is likely you do not have Tailwind CSS installed or have an invalid configuration.`\n )\n logger.error(`Install Tailwind CSS then try again.`)\n if (projectInfo?.framework.links.tailwind) {\n logger.error(\n `Visit ${highlighter.info(\n projectInfo?.framework.links.tailwind\n )} to get started.`\n )\n }\n }\n\n if (errors[ERRORS.IMPORT_ALIAS_MISSING]) {\n logger.break()\n logger.error(`No import alias found in your tsconfig.json file.`)\n if (projectInfo?.framework.links.installation) {\n logger.error(\n `Visit ${highlighter.info(\n projectInfo?.framework.links.installation\n )} to learn how to set an import alias.`\n )\n }\n }\n\n logger.break()\n process.exit(1)\n }\n\n return {\n errors,\n projectInfo,\n }\n}\n","import os from \"os\"\nimport path from \"path\"\nimport { initOptionsSchema } from \"@/src/commands/init\"\nimport { fetchRegistry } from \"@/src/registry/fetcher\"\nimport { getPackageManager } from \"@/src/utils/get-package-manager\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { execa } from \"execa\"\nimport fs from \"fs-extra\"\nimport prompts from \"prompts\"\nimport { z } from \"zod\"\n\nconst GITHUB_TEMPLATE_URL =\n \"https://codeload.github.com/shadcn-ui/ui/tar.gz/main\"\n\nexport const TEMPLATES = {\n next: \"next\",\n \"next-monorepo\": \"next-monorepo\",\n vite: \"vite\",\n start: \"start\",\n} as const\n\nexport async function createProject(\n options: Pick<\n z.infer<typeof initOptionsSchema>,\n \"cwd\" | \"name\" | \"force\" | \"srcDir\" | \"components\" | \"template\"\n >\n) {\n options = {\n srcDir: false,\n ...options,\n }\n\n let template: keyof typeof TEMPLATES =\n options.template && TEMPLATES[options.template as keyof typeof TEMPLATES]\n ? (options.template as keyof typeof TEMPLATES)\n : \"next\"\n let projectName: string =\n options.name ??\n (template === TEMPLATES.next ||\n template === TEMPLATES.vite ||\n template === TEMPLATES.start\n ? \"my-app\"\n : \"my-monorepo\")\n let nextVersion = \"latest\"\n\n const isRemoteComponent =\n options.components?.length === 1 &&\n !!options.components[0].match(/\\/chat\\/b\\//)\n\n if (options.components && isRemoteComponent) {\n try {\n const [result] = await fetchRegistry(options.components)\n const { meta } = z\n .object({\n meta: z.object({\n nextVersion: z.string(),\n }),\n })\n .parse(result)\n nextVersion = meta.nextVersion\n\n // Force template to next for remote components.\n template = TEMPLATES.next\n } catch (error) {\n logger.break()\n handleError(error)\n }\n }\n\n if (!options.force) {\n const { type, name } = await prompts([\n {\n type: options.template || isRemoteComponent ? null : \"select\",\n name: \"type\",\n message: `The path ${highlighter.info(\n options.cwd\n )} does not contain a package.json file.\\n Would you like to start a new project?`,\n choices: [\n { title: \"Next.js\", value: \"next\" },\n { title: \"Next.js (Monorepo)\", value: \"next-monorepo\" },\n { title: \"Vite\", value: \"vite\" },\n { title: \"TanStack Start\", value: \"start\" },\n ],\n initial: 0,\n },\n {\n type: options.name ? null : \"text\",\n name: \"name\",\n message: \"What is your project named?\",\n initial: projectName,\n format: (value: string) => value.trim(),\n validate: (value: string) =>\n value.length > 128\n ? `Name should be less than 128 characters.`\n : true,\n },\n ])\n\n template = type ?? template\n projectName = name ?? projectName\n }\n\n const packageManager = await getPackageManager(options.cwd, {\n withFallback: true,\n })\n\n const projectPath = `${options.cwd}/${projectName}`\n\n // Check if path is writable.\n try {\n await fs.access(options.cwd, fs.constants.W_OK)\n } catch (error) {\n logger.break()\n logger.error(`The path ${highlighter.info(options.cwd)} is not writable.`)\n logger.error(\n `It is likely you do not have write permissions for this folder or the path ${highlighter.info(\n options.cwd\n )} does not exist.`\n )\n logger.break()\n process.exit(1)\n }\n\n if (fs.existsSync(path.resolve(options.cwd, projectName, \"package.json\"))) {\n logger.break()\n logger.error(\n `A project with the name ${highlighter.info(projectName)} already exists.`\n )\n logger.error(`Please choose a different name and try again.`)\n logger.break()\n process.exit(1)\n }\n\n if (template === TEMPLATES.next) {\n await createNextProject(projectPath, {\n version: nextVersion,\n cwd: options.cwd,\n packageManager,\n srcDir: !!options.srcDir,\n })\n }\n\n if (template === TEMPLATES[\"next-monorepo\"]) {\n await createMonorepoProject(projectPath, {\n packageManager,\n })\n }\n\n if (template === TEMPLATES.vite) {\n await createViteProject(projectPath, {\n packageManager,\n })\n }\n\n if (template === TEMPLATES.start) {\n await createStartProject(projectPath, {\n packageManager,\n })\n }\n\n return {\n projectPath,\n projectName,\n template,\n }\n}\n\nasync function createNextProject(\n projectPath: string,\n options: {\n version: string\n cwd: string\n packageManager: string\n srcDir: boolean\n }\n) {\n const createSpinner = spinner(\n `Creating a new Next.js project. This may take a few minutes.`\n ).start()\n\n // Note: pnpm fails here. Fallback to npx with --use-PACKAGE-MANAGER.\n const args = [\n \"--tailwind\",\n \"--eslint\",\n \"--typescript\",\n \"--app\",\n options.srcDir ? \"--src-dir\" : \"--no-src-dir\",\n \"--no-import-alias\",\n `--use-${options.packageManager}`,\n ]\n\n if (\n options.version.startsWith(\"15\") ||\n options.version.startsWith(\"latest\") ||\n options.version.startsWith(\"canary\")\n ) {\n args.push(\"--turbopack\")\n }\n\n if (\n options.version.startsWith(\"latest\") ||\n options.version.startsWith(\"canary\")\n ) {\n args.push(\"--no-react-compiler\")\n }\n\n try {\n await execa(\n \"npx\",\n [`create-next-app@${options.version}`, projectPath, \"--silent\", ...args],\n {\n cwd: options.cwd,\n }\n )\n } catch (error) {\n logger.break()\n logger.error(\n `Something went wrong creating a new Next.js project. Please try again.`\n )\n process.exit(1)\n }\n\n createSpinner?.succeed(\"Creating a new Next.js project.\")\n}\n\nasync function createMonorepoProject(\n projectPath: string,\n options: {\n packageManager: string\n }\n) {\n const createSpinner = spinner(\n `Creating a new Next.js monorepo. This may take a few minutes.`\n ).start()\n\n try {\n // Get the template.\n const templatePath = path.join(os.tmpdir(), `shadcn-template-${Date.now()}`)\n await fs.ensureDir(templatePath)\n const response = await fetch(GITHUB_TEMPLATE_URL)\n if (!response.ok) {\n throw new Error(`Failed to download template: ${response.statusText}`)\n }\n\n // Write the tar file\n const tarPath = path.resolve(templatePath, \"template.tar.gz\")\n await fs.writeFile(tarPath, Buffer.from(await response.arrayBuffer()))\n await execa(\"tar\", [\n \"-xzf\",\n tarPath,\n \"-C\",\n templatePath,\n \"--strip-components=2\",\n \"ui-main/templates/monorepo-next\",\n ])\n const extractedPath = path.resolve(templatePath, \"monorepo-next\")\n await fs.move(extractedPath, projectPath)\n await fs.remove(templatePath)\n\n // Run install.\n await execa(options.packageManager, [\"install\"], {\n cwd: projectPath,\n })\n // await execa(\"cd\", [cwd])\n\n // Write project name to the package.json\n const packageJsonPath = path.join(projectPath, \"package.json\")\n if (fs.existsSync(packageJsonPath)) {\n const packageJsonContent = await fs.readFile(packageJsonPath, \"utf8\")\n const packageJson = JSON.parse(packageJsonContent)\n packageJson.name = projectPath.split(\"/\").pop()\n await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2))\n }\n\n // Try git init.\n const cwd = process.cwd()\n await execa(\"git\", [\"--version\"], { cwd: projectPath })\n await execa(\"git\", [\"init\"], { cwd: projectPath })\n await execa(\"git\", [\"add\", \"-A\"], { cwd: projectPath })\n await execa(\"git\", [\"commit\", \"-m\", \"Initial commit\"], {\n cwd: projectPath,\n })\n\n createSpinner?.succeed(\"Creating a new Next.js monorepo.\")\n } catch (error) {\n createSpinner?.fail(\"Something went wrong creating a new Next.js monorepo.\")\n handleError(error)\n }\n}\n\nasync function createViteProject(\n projectPath: string,\n options: {\n packageManager: string\n }\n) {\n const createSpinner = spinner(\n `Creating a new Vite project. This may take a few minutes.`\n ).start()\n\n try {\n // Get the template.\n const templatePath = path.join(os.tmpdir(), `shadcn-template-${Date.now()}`)\n await fs.ensureDir(templatePath)\n const response = await fetch(GITHUB_TEMPLATE_URL)\n if (!response.ok) {\n throw new Error(`Failed to download template: ${response.statusText}`)\n }\n\n // Write the tar file.\n const tarPath = path.resolve(templatePath, \"template.tar.gz\")\n await fs.writeFile(tarPath, Buffer.from(await response.arrayBuffer()))\n await execa(\"tar\", [\n \"-xzf\",\n tarPath,\n \"-C\",\n templatePath,\n \"--strip-components=2\",\n \"ui-main/templates/vite-app\",\n ])\n const extractedPath = path.resolve(templatePath, \"vite-app\")\n await fs.move(extractedPath, projectPath)\n await fs.remove(templatePath)\n\n // Remove pnpm-lock.yaml if using a different package manager.\n if (options.packageManager !== \"pnpm\") {\n const lockFilePath = path.join(projectPath, \"pnpm-lock.yaml\")\n if (fs.existsSync(lockFilePath)) {\n await fs.remove(lockFilePath)\n }\n }\n\n // Run install.\n await execa(options.packageManager, [\"install\"], {\n cwd: projectPath,\n })\n\n // Write project name to the package.json.\n const packageJsonPath = path.join(projectPath, \"package.json\")\n if (fs.existsSync(packageJsonPath)) {\n const packageJsonContent = await fs.readFile(packageJsonPath, \"utf8\")\n const packageJson = JSON.parse(packageJsonContent)\n packageJson.name = projectPath.split(\"/\").pop()\n await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2))\n }\n\n // Try git init.\n await execa(\"git\", [\"--version\"], { cwd: projectPath })\n await execa(\"git\", [\"init\"], { cwd: projectPath })\n await execa(\"git\", [\"add\", \"-A\"], { cwd: projectPath })\n await execa(\"git\", [\"commit\", \"-m\", \"Initial commit\"], {\n cwd: projectPath,\n })\n\n createSpinner?.succeed(\"Creating a new Vite project.\")\n } catch (error) {\n createSpinner?.fail(\"Something went wrong creating a new Vite project.\")\n handleError(error)\n }\n}\n\nasync function createStartProject(\n projectPath: string,\n options: {\n packageManager: string\n }\n) {\n const createSpinner = spinner(\n `Creating a new TanStack Start project. This may take a few minutes.`\n ).start()\n\n try {\n // Get the template.\n const templatePath = path.join(os.tmpdir(), `shadcn-template-${Date.now()}`)\n await fs.ensureDir(templatePath)\n const response = await fetch(GITHUB_TEMPLATE_URL)\n if (!response.ok) {\n throw new Error(`Failed to download template: ${response.statusText}`)\n }\n\n // Write the tar file.\n const tarPath = path.resolve(templatePath, \"template.tar.gz\")\n await fs.writeFile(tarPath, Buffer.from(await response.arrayBuffer()))\n await execa(\"tar\", [\n \"-xzf\",\n tarPath,\n \"-C\",\n templatePath,\n \"--strip-components=2\",\n \"ui-main/templates/start-app\",\n ])\n const extractedPath = path.resolve(templatePath, \"start-app\")\n await fs.move(extractedPath, projectPath)\n await fs.remove(templatePath)\n\n // Remove pnpm-lock.yaml if using a different package manager.\n if (options.packageManager !== \"pnpm\") {\n const lockFilePath = path.join(projectPath, \"pnpm-lock.yaml\")\n if (fs.existsSync(lockFilePath)) {\n await fs.remove(lockFilePath)\n }\n }\n\n // Run install.\n await execa(options.packageManager, [\"install\"], {\n cwd: projectPath,\n })\n\n // Write project name to the package.json.\n const packageJsonPath = path.join(projectPath, \"package.json\")\n if (fs.existsSync(packageJsonPath)) {\n const packageJsonContent = await fs.readFile(packageJsonPath, \"utf8\")\n const packageJson = JSON.parse(packageJsonContent)\n packageJson.name = projectPath.split(\"/\").pop()\n await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2))\n }\n\n // Try git init.\n await execa(\"git\", [\"--version\"], { cwd: projectPath })\n await execa(\"git\", [\"init\"], { cwd: projectPath })\n await execa(\"git\", [\"add\", \"-A\"], { cwd: projectPath })\n await execa(\"git\", [\"commit\", \"-m\", \"Initial commit\"], {\n cwd: projectPath,\n })\n\n createSpinner?.succeed(\"Creating a new TanStack Start project.\")\n } catch (error) {\n createSpinner?.fail(\n \"Something went wrong creating a new TanStack Start project.\"\n )\n handleError(error)\n }\n}\n","import { existsSync } from \"fs\"\nimport { join } from \"path\"\nimport { logger } from \"@/src/utils/logger\"\n\nexport async function loadEnvFiles(cwd: string = process.cwd()): Promise<void> {\n try {\n const { config } = await import(\"@dotenvx/dotenvx\")\n const envFiles = [\n \".env.local\",\n \".env.development.local\",\n \".env.development\",\n \".env\",\n ]\n\n for (const envFile of envFiles) {\n const envPath = join(cwd, envFile)\n if (existsSync(envPath)) {\n config({\n path: envPath,\n overload: false,\n quiet: true,\n })\n }\n }\n } catch (error) {\n logger.warn(\"Failed to load env files:\", error)\n }\n}\n","import fsExtra from \"fs-extra\"\n\nexport const FILE_BACKUP_SUFFIX = \".bak\"\n\nexport function createFileBackup(filePath: string): string | null {\n if (!fsExtra.existsSync(filePath)) {\n return null\n }\n\n const backupPath = `${filePath}${FILE_BACKUP_SUFFIX}`\n try {\n fsExtra.renameSync(filePath, backupPath)\n return backupPath\n } catch (error) {\n console.error(`Failed to create backup of ${filePath}: ${error}`)\n return null\n }\n}\n\nexport function restoreFileBackup(filePath: string): boolean {\n const backupPath = `${filePath}${FILE_BACKUP_SUFFIX}`\n\n if (!fsExtra.existsSync(backupPath)) {\n return false\n }\n\n try {\n fsExtra.renameSync(backupPath, filePath)\n return true\n } catch (error) {\n console.error(\n `Warning: Could not restore backup file ${backupPath}: ${error}`\n )\n return false\n }\n}\n\nexport function deleteFileBackup(filePath: string): boolean {\n const backupPath = `${filePath}${FILE_BACKUP_SUFFIX}`\n\n if (!fsExtra.existsSync(backupPath)) {\n return false\n }\n\n try {\n fsExtra.unlinkSync(backupPath)\n return true\n } catch (error) {\n // Best effort - don't log as this is just cleanup\n return false\n }\n}\n","import { BUILTIN_REGISTRIES } from \"@/src/registry/constants\"\nimport { RegistryNotConfiguredError } from \"@/src/registry/errors\"\nimport { parseRegistryAndItemFromString } from \"@/src/registry/parser\"\nimport { fetchRegistryItems } from \"@/src/registry/resolver\"\nimport { Config } from \"@/src/utils/get-config\"\n\n// Recursively discovers all registry namespaces including nested ones.\nexport async function resolveRegistryNamespaces(\n components: string[],\n config: Config\n) {\n const discoveredNamespaces = new Set<string>()\n const visitedItems = new Set<string>()\n const itemsToProcess = [...components]\n\n while (itemsToProcess.length > 0) {\n const currentItem = itemsToProcess.shift()!\n\n if (visitedItems.has(currentItem)) {\n continue\n }\n visitedItems.add(currentItem)\n\n const { registry } = parseRegistryAndItemFromString(currentItem)\n if (registry && !BUILTIN_REGISTRIES[registry]) {\n discoveredNamespaces.add(registry)\n }\n\n try {\n const [item] = await fetchRegistryItems([currentItem], config, {\n useCache: true,\n })\n\n if (item?.registryDependencies) {\n for (const dep of item.registryDependencies) {\n const { registry: depRegistry } = parseRegistryAndItemFromString(dep)\n if (depRegistry && !BUILTIN_REGISTRIES[depRegistry]) {\n discoveredNamespaces.add(depRegistry)\n }\n\n if (!visitedItems.has(dep)) {\n itemsToProcess.push(dep)\n }\n }\n }\n } catch (error) {\n // If a registry is not configured, we still track it.\n if (error instanceof RegistryNotConfiguredError) {\n const { registry } = parseRegistryAndItemFromString(currentItem)\n if (registry && !BUILTIN_REGISTRIES[registry]) {\n discoveredNamespaces.add(registry)\n }\n continue\n }\n\n // For other errors (network, parsing, etc.), we skip this item\n // but continue processing others to discover as many namespaces as possible.\n continue\n }\n }\n\n return Array.from(discoveredNamespaces)\n}\n","import path from \"path\"\nimport { getRegistriesIndex } from \"@/src/registry/api\"\nimport { BUILTIN_REGISTRIES } from \"@/src/registry/constants\"\nimport { resolveRegistryNamespaces } from \"@/src/registry/namespaces\"\nimport { rawConfigSchema } from \"@/src/registry/schema\"\nimport { Config } from \"@/src/utils/get-config\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport fs from \"fs-extra\"\n\nexport async function ensureRegistriesInConfig(\n components: string[],\n config: Config,\n options: {\n silent?: boolean\n writeFile?: boolean\n } = {}\n) {\n options = {\n silent: false,\n writeFile: true,\n ...options,\n }\n\n // Use resolveRegistryNamespaces to discover all namespaces including dependencies.\n const registryNames = await resolveRegistryNamespaces(components, config)\n\n const missingRegistries = registryNames.filter(\n (registry) =>\n !config.registries?.[registry] &&\n !Object.keys(BUILTIN_REGISTRIES).includes(registry)\n )\n\n if (missingRegistries.length === 0) {\n return {\n config,\n newRegistries: [],\n }\n }\n\n // We'll fail silently if we can't fetch the registry index.\n // The error handling by caller will guide user to add the missing registries.\n const registryIndex = await getRegistriesIndex({\n useCache: process.env.NODE_ENV !== \"development\",\n })\n\n if (!registryIndex) {\n return {\n config,\n newRegistries: [],\n }\n }\n\n const foundRegistries: Record<string, string> = {}\n for (const registry of missingRegistries) {\n if (registryIndex[registry]) {\n foundRegistries[registry] = registryIndex[registry]\n }\n }\n\n if (Object.keys(foundRegistries).length === 0) {\n return {\n config,\n newRegistries: [],\n }\n }\n\n // Filter out built-in registries from existing config before merging\n const existingRegistries = Object.fromEntries(\n Object.entries(config.registries || {}).filter(\n ([key]) => !Object.keys(BUILTIN_REGISTRIES).includes(key)\n )\n )\n\n const newConfigWithRegistries = {\n ...config,\n registries: {\n ...existingRegistries,\n ...foundRegistries,\n },\n }\n\n if (options.writeFile) {\n const { resolvedPaths, ...configWithoutResolvedPaths } =\n newConfigWithRegistries\n const configSpinner = spinner(\"Updating components.json.\", {\n silent: options.silent,\n }).start()\n const updatedConfig = rawConfigSchema.parse(configWithoutResolvedPaths)\n await fs.writeFile(\n path.resolve(config.resolvedPaths.cwd, \"components.json\"),\n JSON.stringify(updatedConfig, null, 2) + \"\\n\",\n \"utf-8\"\n )\n configSpinner.succeed()\n }\n\n return {\n config: newConfigWithRegistries,\n newRegistries: Object.keys(foundRegistries),\n }\n}\n","import { promises as fs } from \"fs\"\nimport path from \"path\"\nimport { preFlightInit } from \"@/src/preflights/preflight-init\"\nimport {\n getRegistryBaseColors,\n getRegistryItems,\n getRegistryStyles,\n} from \"@/src/registry/api\"\nimport { buildUrlAndHeadersForRegistryItem } from \"@/src/registry/builder\"\nimport { configWithDefaults } from \"@/src/registry/config\"\nimport { BASE_COLORS, BUILTIN_REGISTRIES } from \"@/src/registry/constants\"\nimport { clearRegistryContext } from \"@/src/registry/context\"\nimport { rawConfigSchema } from \"@/src/schema\"\nimport { addComponents } from \"@/src/utils/add-components\"\nimport { TEMPLATES, createProject } from \"@/src/utils/create-project\"\nimport { loadEnvFiles } from \"@/src/utils/env-loader\"\nimport * as ERRORS from \"@/src/utils/errors\"\nimport {\n FILE_BACKUP_SUFFIX,\n createFileBackup,\n deleteFileBackup,\n restoreFileBackup,\n} from \"@/src/utils/file-helper\"\nimport {\n DEFAULT_COMPONENTS,\n DEFAULT_TAILWIND_CONFIG,\n DEFAULT_TAILWIND_CSS,\n DEFAULT_UTILS,\n createConfig,\n getConfig,\n resolveConfigPaths,\n type Config,\n} from \"@/src/utils/get-config\"\nimport {\n getProjectConfig,\n getProjectInfo,\n getProjectTailwindVersionFromConfig,\n} from \"@/src/utils/get-project-info\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { ensureRegistriesInConfig } from \"@/src/utils/registries\"\nimport { resolveImport } from \"@/src/utils/resolve-import\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { updateTailwindContent } from \"@/src/utils/updaters/update-tailwind-content\"\nimport { Command } from \"commander\"\nimport deepmerge from \"deepmerge\"\nimport fsExtra from \"fs-extra\"\nimport prompts from \"prompts\"\nimport { z } from \"zod\"\n\nprocess.on(\"exit\", (code) => {\n const filePath = path.resolve(process.cwd(), \"components.json\")\n\n // Delete backup if successful.\n if (code === 0) {\n return deleteFileBackup(filePath)\n }\n\n // Restore backup if error.\n return restoreFileBackup(filePath)\n})\n\nexport const initOptionsSchema = z.object({\n cwd: z.string(),\n name: z.string().optional(),\n components: z.array(z.string()).optional(),\n yes: z.boolean(),\n defaults: z.boolean(),\n force: z.boolean(),\n silent: z.boolean(),\n isNewProject: z.boolean(),\n srcDir: z.boolean().optional(),\n cssVariables: z.boolean(),\n template: z\n .string()\n .optional()\n .refine(\n (val) => {\n if (val) {\n return TEMPLATES[val as keyof typeof TEMPLATES]\n }\n return true\n },\n {\n message:\n \"Invalid template. Please use 'next', 'vite', 'start' or 'next-monorepo'.\",\n }\n ),\n baseColor: z\n .string()\n .optional()\n .refine(\n (val) => {\n if (val) {\n return BASE_COLORS.find((color) => color.name === val)\n }\n\n return true\n },\n {\n message: `Invalid base color. Please use '${BASE_COLORS.map(\n (color) => color.name\n ).join(\"', '\")}'`,\n }\n ),\n baseStyle: z.boolean(),\n // Config from registry:base item to merge into components.json.\n registryBaseConfig: rawConfigSchema.deepPartial().optional(),\n})\n\nexport const init = new Command()\n .name(\"init\")\n .description(\"initialize your project and install dependencies\")\n .argument(\"[components...]\", \"names, url or local path to component\")\n .option(\n \"-t, --template <template>\",\n \"the template to use. (next, start, vite, next-monorepo)\"\n )\n .option(\n \"-b, --base-color <base-color>\",\n \"the base color to use. (neutral, gray, zinc, stone, slate)\",\n undefined\n )\n .option(\"-y, --yes\", \"skip confirmation prompt.\", true)\n .option(\"-d, --defaults,\", \"use default configuration.\", false)\n .option(\"-f, --force\", \"force overwrite of existing configuration.\", false)\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .option(\"-s, --silent\", \"mute output.\", false)\n .option(\n \"--src-dir\",\n \"use the src directory when creating a new project.\",\n false\n )\n .option(\n \"--no-src-dir\",\n \"do not use the src directory when creating a new project.\"\n )\n .option(\"--css-variables\", \"use css variables for theming.\", true)\n .option(\"--no-css-variables\", \"do not use css variables for theming.\")\n .option(\"--no-base-style\", \"do not install the base shadcn style.\")\n .action(async (components, opts) => {\n try {\n // Apply defaults when --defaults flag is set.\n if (opts.defaults) {\n opts.template = opts.template || \"next\"\n opts.baseColor = opts.baseColor || \"neutral\"\n }\n\n const options = initOptionsSchema.parse({\n cwd: path.resolve(opts.cwd),\n isNewProject: false,\n components,\n ...opts,\n })\n\n await loadEnvFiles(options.cwd)\n\n // We need to check if we're initializing with a new style.\n // This will allow us to determine if we need to install the base style.\n // And if we should prompt the user for a base color.\n if (components.length > 0) {\n // We don't know the full config at this point.\n // So we'll use a shadow config to fetch the first item.\n let shadowConfig = configWithDefaults(\n createConfig({\n resolvedPaths: {\n cwd: options.cwd,\n },\n })\n )\n\n // Check if there's a components.json file.\n // If so, we'll merge with our shadow config.\n const componentsJsonPath = path.resolve(options.cwd, \"components.json\")\n if (fsExtra.existsSync(componentsJsonPath)) {\n const existingConfig = await fsExtra.readJson(componentsJsonPath)\n const config = rawConfigSchema.partial().parse(existingConfig)\n const baseConfig = createConfig({\n resolvedPaths: {\n cwd: options.cwd,\n },\n })\n shadowConfig = configWithDefaults({\n ...config,\n resolvedPaths: {\n ...baseConfig.resolvedPaths,\n cwd: options.cwd,\n },\n })\n\n // Since components.json might not be valid at this point.\n // Temporarily rename components.json to allow preflight to run.\n // We'll rename it back after preflight.\n createFileBackup(componentsJsonPath)\n }\n\n // Ensure all registries used in components are configured.\n const { config: updatedConfig } = await ensureRegistriesInConfig(\n components,\n shadowConfig,\n {\n silent: true,\n writeFile: false,\n }\n )\n shadowConfig = updatedConfig\n\n // This forces a shadowConfig validation early in the process.\n buildUrlAndHeadersForRegistryItem(components[0], shadowConfig)\n\n const [item] = await getRegistryItems([components[0]], {\n config: shadowConfig,\n })\n\n // Set options from registry:base.\n if (item?.type === \"registry:base\") {\n if (item.config) {\n // Merge config values into shadowConfig.\n shadowConfig = configWithDefaults(\n deepmerge(shadowConfig, item.config)\n )\n // Store config to be merged into components.json later.\n options.registryBaseConfig = item.config\n }\n options.baseStyle =\n item.extends === \"none\" ? false : options.baseStyle\n }\n\n if (item?.type === \"registry:style\") {\n // Set a default base color so we're not prompted.\n // The style will extend or override it.\n options.baseColor = \"neutral\"\n\n // If the style extends none, we don't want to install the base style.\n options.baseStyle =\n item.extends === \"none\" ? false : options.baseStyle\n }\n }\n\n // If --no-base-style, we don't want to prompt for a base color either.\n // The style will extend or override it.\n if (!options.baseStyle) {\n options.baseColor = \"neutral\"\n }\n\n await runInit(options)\n\n logger.log(\n `${highlighter.success(\n \"Success!\"\n )} Project initialization completed.\\nYou may now add components.`\n )\n\n // We need when running with custom cwd.\n deleteFileBackup(path.resolve(options.cwd, \"components.json\"))\n logger.break()\n } catch (error) {\n logger.break()\n handleError(error)\n } finally {\n clearRegistryContext()\n }\n })\n\nexport async function runInit(\n options: z.infer<typeof initOptionsSchema> & {\n skipPreflight?: boolean\n }\n) {\n let projectInfo\n let newProjectTemplate\n if (!options.skipPreflight) {\n const preflight = await preFlightInit(options)\n if (preflight.errors[ERRORS.MISSING_DIR_OR_EMPTY_PROJECT]) {\n const { projectPath, template } = await createProject(options)\n if (!projectPath) {\n process.exit(1)\n }\n options.cwd = projectPath\n options.isNewProject = true\n newProjectTemplate = template\n // Re-get project info for the newly created project.\n projectInfo = await getProjectInfo(options.cwd)\n } else {\n projectInfo = preflight.projectInfo\n }\n } else {\n projectInfo = await getProjectInfo(options.cwd)\n }\n\n if (newProjectTemplate === \"next-monorepo\") {\n options.cwd = path.resolve(options.cwd, \"apps/web\")\n return await getConfig(options.cwd)\n }\n\n const projectConfig = await getProjectConfig(options.cwd, projectInfo)\n\n let config = projectConfig\n ? await promptForMinimalConfig(projectConfig, options)\n : await promptForConfig(await getConfig(options.cwd))\n\n // if (!options.yes) {\n // const { proceed } = await prompts({\n // type: \"confirm\",\n // name: \"proceed\",\n // message: `Write configuration to ${highlighter.info(\n // \"components.json\"\n // )}. Proceed?`,\n // initial: true,\n // })\n\n // if (!proceed) {\n // process.exit(0)\n // }\n // }\n\n console.log({\n config,\n options,\n })\n\n // Prepare the list of components to be added.\n const components = [\n // \"index\" is the default shadcn style.\n // Why index? Because when style is true, we read style from components.json and fetch that.\n // i.e new-york from components.json then fetch /styles/new-york/index.\n // TODO: Fix this so that we can extend any style i.e --style=new-york.\n ...(options.baseStyle ? [\"index\"] : []),\n ...(options.components ?? []),\n ]\n\n // // Ensure registries are configured for the components we're about to add.\n // const fullConfigForRegistry = await resolveConfigPaths(options.cwd, config)\n // const { config: configWithRegistries } = await ensureRegistriesInConfig(\n // components,\n // fullConfigForRegistry,\n // {\n // silent: true,\n // }\n // )\n\n // // Update config with any new registries found.\n // if (configWithRegistries.registries) {\n // config.registries = configWithRegistries.registries\n // }\n\n // const componentSpinner = spinner(`Writing components.json.`).start()\n // const targetPath = path.resolve(options.cwd, \"components.json\")\n // const backupPath = `${targetPath}${FILE_BACKUP_SUFFIX}`\n\n // // Merge and keep registries at the end.\n // const mergeConfig = (base: typeof config, override: object) => {\n // const { registries, ...merged } = deepmerge(base, override)\n // return { ...merged, registries } as typeof config\n // }\n\n // // Merge with backup config if it exists and not using --force.\n // if (!options.force && fsExtra.existsSync(backupPath)) {\n // const existingConfig = await fsExtra.readJson(backupPath)\n // config = mergeConfig(existingConfig, config)\n // }\n\n // // Merge config from registry:base item.\n // if (options.registryBaseConfig) {\n // config = mergeConfig(config, options.registryBaseConfig)\n // }\n\n // // Make sure to filter out built-in registries.\n // // TODO: fix this in ensureRegistriesInConfig.\n // config.registries = Object.fromEntries(\n // Object.entries(config.registries || {}).filter(\n // ([key]) => !Object.keys(BUILTIN_REGISTRIES).includes(key)\n // )\n // )\n\n // // Write components.json.\n // await fs.writeFile(targetPath, `${JSON.stringify(config, null, 2)}\\n`, \"utf8\")\n // componentSpinner.succeed()\n\n // Add components.\n // const fullConfig = await resolveConfigPaths(options.cwd, config as Config)\n // console.log({\n // fullConfig,\n // })\n // await addComponents(components, fullConfig, {\n // // Init will always overwrite files.\n // overwrite: true,\n // silent: options.silent,\n // baseStyle: options.baseStyle,\n // isNewProject: false,\n // })\n\n // If a new project is using src dir, let's update the tailwind content config.\n // TODO: Handle this per framework.\n // if (options.isNewProject && options.srcDir) {\n // await updateTailwindContent(\n // [\"./src/**/*.{js,ts,jsx,tsx,mdx}\"],\n // fullConfig,\n // {\n // silent: options.silent,\n // }\n // )\n // }\n\n // return fullConfig\n}\n\nasync function promptForConfig(defaultConfig: Config | null = null) {\n const [styles, baseColors] = await Promise.all([\n getRegistryStyles(),\n getRegistryBaseColors(),\n ])\n\n logger.info(\"\")\n const options = await prompts([\n {\n type: \"toggle\",\n name: \"typescript\",\n message: `Would you like to use ${highlighter.info(\n \"TypeScript\"\n )} (recommended)?`,\n initial: defaultConfig?.tsx ?? true,\n active: \"yes\",\n inactive: \"no\",\n },\n {\n type: \"select\",\n name: \"style\",\n message: `Which ${highlighter.info(\"style\")} would you like to use?`,\n choices: styles.map((style) => ({\n title: style.label,\n value: style.name,\n })),\n },\n {\n type: \"select\",\n name: \"tailwindBaseColor\",\n message: `Which color would you like to use as the ${highlighter.info(\n \"base color\"\n )}?`,\n choices: baseColors.map((color) => ({\n title: color.label,\n value: color.name,\n })),\n },\n {\n type: \"text\",\n name: \"tailwindCss\",\n message: `Where is your ${highlighter.info(\"global CSS\")} file?`,\n initial: defaultConfig?.tailwind.css ?? DEFAULT_TAILWIND_CSS,\n },\n {\n type: \"toggle\",\n name: \"tailwindCssVariables\",\n message: `Would you like to use ${highlighter.info(\n \"CSS variables\"\n )} for theming?`,\n initial: defaultConfig?.tailwind.cssVariables ?? true,\n active: \"yes\",\n inactive: \"no\",\n },\n {\n type: \"text\",\n name: \"tailwindPrefix\",\n message: `Are you using a custom ${highlighter.info(\n \"tailwind prefix eg. tw-\"\n )}? (Leave blank if not)`,\n initial: \"\",\n },\n {\n type: \"text\",\n name: \"tailwindConfig\",\n message: `Where is your ${highlighter.info(\n \"tailwind.config.js\"\n )} located?`,\n initial: defaultConfig?.tailwind.config ?? DEFAULT_TAILWIND_CONFIG,\n },\n {\n type: \"text\",\n name: \"components\",\n message: `Configure the import alias for ${highlighter.info(\n \"components\"\n )}:`,\n initial: defaultConfig?.aliases[\"components\"] ?? DEFAULT_COMPONENTS,\n },\n {\n type: \"text\",\n name: \"utils\",\n message: `Configure the import alias for ${highlighter.info(\"utils\")}:`,\n initial: defaultConfig?.aliases[\"utils\"] ?? DEFAULT_UTILS,\n },\n {\n type: \"toggle\",\n name: \"rsc\",\n message: `Are you using ${highlighter.info(\"React Server Components\")}?`,\n initial: defaultConfig?.rsc ?? true,\n active: \"yes\",\n inactive: \"no\",\n },\n ])\n\n return rawConfigSchema.parse({\n $schema: \"https://ui.shadcn.com/schema.json\",\n style: options.style,\n tailwind: {\n config: options.tailwindConfig,\n css: options.tailwindCss,\n baseColor: options.tailwindBaseColor,\n cssVariables: options.tailwindCssVariables,\n prefix: options.tailwindPrefix,\n },\n rsc: options.rsc,\n tsx: options.typescript,\n aliases: {\n utils: options.utils,\n components: options.components,\n // TODO: fix this.\n lib: options.components.replace(/\\/components$/, \"lib\"),\n hooks: options.components.replace(/\\/components$/, \"hooks\"),\n },\n })\n}\n\nasync function promptForMinimalConfig(\n defaultConfig: Config,\n opts: z.infer<typeof initOptionsSchema>\n) {\n let style = defaultConfig.style\n let baseColor = opts.baseColor\n let cssVariables = defaultConfig.tailwind.cssVariables\n let iconLibrary = defaultConfig.iconLibrary ?? \"lucide\"\n\n if (!opts.defaults) {\n const [styles, baseColors, tailwindVersion] = await Promise.all([\n getRegistryStyles(),\n getRegistryBaseColors(),\n getProjectTailwindVersionFromConfig(defaultConfig),\n ])\n\n const options = await prompts([\n {\n // Skip style prompt if using Tailwind v4 or style is already set in config.\n type: tailwindVersion === \"v4\" || style ? null : \"select\",\n name: \"style\",\n message: `Which ${highlighter.info(\"style\")} would you like to use?`,\n choices: styles.map((style) => ({\n title:\n style.name === \"new-york\" ? \"New York (Recommended)\" : style.label,\n value: style.name,\n })),\n initial: 0,\n },\n {\n type: opts.baseColor ? null : \"select\",\n name: \"tailwindBaseColor\",\n message: `Which color would you like to use as the ${highlighter.info(\n \"base color\"\n )}?`,\n choices: baseColors.map((color) => ({\n title: color.label,\n value: color.name,\n })),\n },\n ])\n\n style = options.style ?? style ?? \"new-york\"\n baseColor = options.tailwindBaseColor ?? baseColor\n cssVariables = opts.cssVariables\n }\n\n return rawConfigSchema.parse({\n $schema: defaultConfig?.$schema,\n style,\n tailwind: {\n ...defaultConfig?.tailwind,\n baseColor,\n cssVariables,\n },\n rsc: defaultConfig?.rsc,\n tsx: defaultConfig?.tsx,\n iconLibrary,\n aliases: defaultConfig?.aliases,\n })\n}\n","import path from \"path\"\n\nexport function isSafeTarget(targetPath: string, cwd: string): boolean {\n // Check for null bytes which can be used to bypass validations.\n if (targetPath.includes(\"\\0\")) {\n return false\n }\n\n // Decode URL-encoded sequences to catch encoded traversal attempts.\n let decodedPath: string\n try {\n // Decode multiple times to catch double-encoded sequences.\n decodedPath = targetPath\n let prevPath = \"\"\n while (decodedPath !== prevPath && decodedPath.includes(\"%\")) {\n prevPath = decodedPath\n decodedPath = decodeURIComponent(decodedPath)\n }\n } catch {\n // If decoding fails, treat as unsafe.\n return false\n }\n\n // Normalize both paths to handle different path separators.\n // Convert Windows backslashes to forward slashes for consistent handling.\n const normalizedTarget = path.normalize(decodedPath.replace(/\\\\/g, \"/\"))\n const normalizedRoot = path.normalize(cwd)\n\n // Check for explicit path traversal sequences in both encoded and decoded forms.\n // Allow [...] pattern which is common in framework routing (e.g., [...slug])\n const hasPathTraversal = (path: string) => {\n // Remove [...] patterns before checking for ..\n const withoutBrackets = path.replace(/\\[\\.\\.\\..*?\\]/g, \"\")\n return withoutBrackets.includes(\"..\")\n }\n\n if (\n hasPathTraversal(normalizedTarget) ||\n hasPathTraversal(decodedPath) ||\n hasPathTraversal(targetPath)\n ) {\n return false\n }\n\n // Check for current directory references that might be used in traversal.\n // First, remove [...] patterns to avoid false positives\n const cleanPath = (path: string) => path.replace(/\\[\\.\\.\\..*?\\]/g, \"\")\n const cleanTarget = cleanPath(targetPath)\n const cleanDecoded = cleanPath(decodedPath)\n\n const suspiciousPatterns = [\n /\\.\\.[\\/\\\\]/, // ../ or ..\\\n /[\\/\\\\]\\.\\./, // /.. or \\..\n /\\.\\./, // .. anywhere\n /\\.\\.%/, // URL encoded traversal\n /\\x00/, // null byte\n /[\\x01-\\x1f]/, // control characters\n ]\n\n if (\n suspiciousPatterns.some(\n (pattern) => pattern.test(cleanTarget) || pattern.test(cleanDecoded)\n )\n ) {\n return false\n }\n\n // Allow ~/ at the start (home directory expansion within project) but reject ~/../ patterns.\n if (\n (targetPath.includes(\"~\") || decodedPath.includes(\"~\")) &&\n (targetPath.includes(\"../\") || decodedPath.includes(\"../\"))\n ) {\n return false\n }\n\n // Check for Windows drive letters (even on non-Windows systems for safety).\n const driveLetterRegex = /^[a-zA-Z]:[\\/\\\\]/\n if (driveLetterRegex.test(decodedPath)) {\n // On Windows, check if it starts with the project root.\n if (process.platform === \"win32\") {\n return decodedPath.toLowerCase().startsWith(cwd.toLowerCase())\n }\n // On non-Windows systems, reject all Windows absolute paths.\n return false\n }\n\n // If it's an absolute path, ensure it's within the project root.\n if (path.isAbsolute(normalizedTarget)) {\n return normalizedTarget.startsWith(normalizedRoot + path.sep)\n }\n\n // For relative paths, resolve and check if within project bounds.\n const resolvedPath = path.resolve(normalizedRoot, normalizedTarget)\n return (\n resolvedPath.startsWith(normalizedRoot + path.sep) ||\n resolvedPath === normalizedRoot\n )\n}\n","import { promises as fs } from \"fs\"\nimport path from \"path\"\nimport { registryItemCssSchema } from \"@/src/schema\"\nimport { Config } from \"@/src/utils/get-config\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport postcss from \"postcss\"\nimport AtRule from \"postcss/lib/at-rule\"\nimport Declaration from \"postcss/lib/declaration\"\nimport Root from \"postcss/lib/root\"\nimport Rule from \"postcss/lib/rule\"\nimport { z } from \"zod\"\n\nexport async function updateCss(\n css: z.infer<typeof registryItemCssSchema> | undefined,\n config: Config,\n options: {\n silent?: boolean\n }\n) {\n if (\n !config.resolvedPaths.tailwindCss ||\n !css ||\n Object.keys(css).length === 0\n ) {\n return\n }\n\n options = {\n silent: false,\n ...options,\n }\n\n const cssFilepath = config.resolvedPaths.tailwindCss\n const cssFilepathRelative = path.relative(\n config.resolvedPaths.cwd,\n cssFilepath\n )\n const cssSpinner = spinner(\n `Updating ${highlighter.info(cssFilepathRelative)}`,\n {\n silent: options.silent,\n }\n ).start()\n\n const raw = await fs.readFile(cssFilepath, \"utf8\")\n let output = await transformCss(raw, css)\n await fs.writeFile(cssFilepath, output, \"utf8\")\n cssSpinner.succeed()\n}\n\nexport async function transformCss(\n input: string,\n css: z.infer<typeof registryItemCssSchema>\n) {\n const plugins = [updateCssPlugin(css)]\n\n const result = await postcss(plugins).process(input, {\n from: undefined,\n })\n\n let output = result.css\n\n // PostCSS doesn't add semicolons to at-rules without bodies when they're the last node.\n // We need to manually ensure they have semicolons.\n const root = result.root\n if (root.nodes && root.nodes.length > 0) {\n const lastNode = root.nodes[root.nodes.length - 1]\n if (\n lastNode.type === \"atrule\" &&\n !lastNode.nodes &&\n !output.trimEnd().endsWith(\";\")\n ) {\n output = output.trimEnd() + \";\"\n }\n }\n\n output = output.replace(/\\/\\* ---break--- \\*\\//g, \"\")\n output = output.replace(/(\\n\\s*\\n)+/g, \"\\n\\n\")\n output = output.trimEnd()\n\n return output\n}\n\nfunction updateCssPlugin(css: z.infer<typeof registryItemCssSchema>) {\n return {\n postcssPlugin: \"update-css\",\n Once(root: Root) {\n for (const [selector, properties] of Object.entries(css)) {\n if (selector.startsWith(\"@\")) {\n // Handle at-rules (@layer, @utility, etc.)\n const atRuleMatch = selector.match(/@([a-zA-Z-]+)\\s*(.*)/)\n if (!atRuleMatch) continue\n\n const [, name, params] = atRuleMatch\n\n // Special handling for imports - place them at the top.\n if (name === \"import\") {\n // Check if this import already exists.\n const existingImport = root.nodes?.find(\n (node): node is AtRule =>\n node.type === \"atrule\" &&\n node.name === \"import\" &&\n node.params === params\n )\n\n if (!existingImport) {\n const importRule = postcss.atRule({\n name: \"import\",\n params,\n raws: { semicolon: true },\n })\n\n // Find the last import to insert after, or insert at beginning.\n const importNodes = root.nodes?.filter(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === \"import\"\n )\n\n if (importNodes && importNodes.length > 0) {\n // Insert after the last existing import.\n const lastImport = importNodes[importNodes.length - 1]\n importRule.raws.before = \"\\n\"\n root.insertAfter(lastImport, importRule)\n } else {\n // No imports exist, insert at the very beginning.\n // Check if the file is empty.\n if (!root.nodes || root.nodes.length === 0) {\n importRule.raws.before = \"\"\n } else {\n importRule.raws.before = \"\"\n }\n root.prepend(importRule)\n }\n }\n }\n // Special handling for plugins - place them after imports.\n else if (name === \"plugin\") {\n // Ensure plugin name is quoted if not already.\n let quotedParams = params\n if (params && !params.startsWith('\"') && !params.startsWith(\"'\")) {\n quotedParams = `\"${params}\"`\n }\n\n // Normalize params for comparison (remove quotes).\n const normalizeParams = (p: string) => {\n if (p.startsWith('\"') && p.endsWith('\"')) {\n return p.slice(1, -1)\n }\n if (p.startsWith(\"'\") && p.endsWith(\"'\")) {\n return p.slice(1, -1)\n }\n return p\n }\n\n // Find existing plugin with same normalized params.\n const existingPlugin = root.nodes?.find((node): node is AtRule => {\n if (node.type !== \"atrule\" || node.name !== \"plugin\") {\n return false\n }\n return normalizeParams(node.params) === normalizeParams(params)\n })\n\n if (!existingPlugin) {\n const pluginRule = postcss.atRule({\n name: \"plugin\",\n params: quotedParams,\n raws: { semicolon: true, before: \"\\n\" },\n })\n\n // Find the last import or plugin node to insert after\n const importNodes = root.nodes?.filter(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === \"import\"\n )\n\n const pluginNodes = root.nodes?.filter(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === \"plugin\"\n )\n\n if (pluginNodes && pluginNodes.length > 0) {\n // Insert after the last existing plugin\n const lastPlugin = pluginNodes[pluginNodes.length - 1]\n root.insertAfter(lastPlugin, pluginRule)\n } else if (importNodes && importNodes.length > 0) {\n // Insert after the last import if no plugins exist\n const lastImport = importNodes[importNodes.length - 1]\n root.insertAfter(lastImport, pluginRule)\n // Add a break comment before the first plugin to create spacing\n root.insertBefore(\n pluginRule,\n postcss.comment({ text: \"---break---\" })\n )\n // Add a break comment after the plugin for spacing from other content\n root.insertAfter(\n pluginRule,\n postcss.comment({ text: \"---break---\" })\n )\n } else {\n // If no imports or plugins, insert at the beginning\n root.prepend(pluginRule)\n // Add a break comment before the first plugin for spacing\n root.insertBefore(\n pluginRule,\n postcss.comment({ text: \"---break---\" })\n )\n // Add a break comment after the plugin for spacing from other content\n root.insertAfter(\n pluginRule,\n postcss.comment({ text: \"---break---\" })\n )\n }\n }\n }\n // Check if this is any at-rule with no body (empty object).\n else if (\n typeof properties === \"object\" &&\n Object.keys(properties).length === 0\n ) {\n // Handle any at-rule with no body (e.g., @apply, @tailwind, etc.).\n const atRule = root.nodes?.find(\n (node): node is AtRule =>\n node.type === \"atrule\" &&\n node.name === name &&\n node.params === params\n ) as AtRule | undefined\n\n if (!atRule) {\n const newAtRule = postcss.atRule({\n name,\n params,\n raws: { semicolon: true },\n })\n\n root.append(newAtRule)\n root.insertBefore(\n newAtRule,\n postcss.comment({ text: \"---break---\" })\n )\n }\n }\n // Special handling for keyframes - place them under @theme inline.\n else if (name === \"keyframes\") {\n let themeInline = root.nodes?.find(\n (node): node is AtRule =>\n node.type === \"atrule\" &&\n node.name === \"theme\" &&\n node.params === \"inline\"\n ) as AtRule | undefined\n\n if (!themeInline) {\n themeInline = postcss.atRule({\n name: \"theme\",\n params: \"inline\",\n raws: { semicolon: true, between: \" \", before: \"\\n\" },\n })\n root.append(themeInline)\n root.insertBefore(\n themeInline,\n postcss.comment({ text: \"---break---\" })\n )\n }\n\n // Check if a keyframe with the same name already exists\n const existingKeyframesRule = themeInline.nodes?.find(\n (node): node is AtRule =>\n node.type === \"atrule\" &&\n node.name === \"keyframes\" &&\n node.params === params\n )\n\n let keyframesRule: AtRule\n if (existingKeyframesRule) {\n // Replace existing keyframe\n keyframesRule = postcss.atRule({\n name: \"keyframes\",\n params,\n raws: { semicolon: true, between: \" \", before: \"\\n \" },\n })\n existingKeyframesRule.replaceWith(keyframesRule)\n } else {\n // Create new keyframe\n keyframesRule = postcss.atRule({\n name: \"keyframes\",\n params,\n raws: { semicolon: true, between: \" \", before: \"\\n \" },\n })\n themeInline.append(keyframesRule)\n }\n\n if (typeof properties === \"object\") {\n for (const [step, stepProps] of Object.entries(properties)) {\n processRule(keyframesRule, step, stepProps)\n }\n }\n }\n // Special handling for utility classes to preserve property values\n else if (name === \"utility\") {\n const utilityAtRule = root.nodes?.find(\n (node): node is AtRule =>\n node.type === \"atrule\" &&\n node.name === name &&\n node.params === params\n ) as AtRule | undefined\n\n if (!utilityAtRule) {\n const atRule = postcss.atRule({\n name,\n params,\n raws: { semicolon: true, between: \" \", before: \"\\n\" },\n })\n\n root.append(atRule)\n root.insertBefore(\n atRule,\n postcss.comment({ text: \"---break---\" })\n )\n\n // Add declarations with their values preserved\n if (typeof properties === \"object\") {\n for (const [prop, value] of Object.entries(properties)) {\n if (typeof value === \"string\") {\n const decl = postcss.decl({\n prop,\n value: value,\n raws: { semicolon: true, before: \"\\n \" },\n })\n atRule.append(decl)\n } else if (typeof value === \"object\") {\n processRule(atRule, prop, value)\n }\n }\n }\n } else {\n // Update existing utility class\n if (typeof properties === \"object\") {\n for (const [prop, value] of Object.entries(properties)) {\n if (typeof value === \"string\") {\n const existingDecl = utilityAtRule.nodes?.find(\n (node): node is Declaration =>\n node.type === \"decl\" && node.prop === prop\n )\n\n const decl = postcss.decl({\n prop,\n value: value,\n raws: { semicolon: true, before: \"\\n \" },\n })\n\n existingDecl\n ? existingDecl.replaceWith(decl)\n : utilityAtRule.append(decl)\n } else if (typeof value === \"object\") {\n processRule(utilityAtRule, prop, value)\n }\n }\n }\n }\n }\n // Handle at-property as regular CSS rules\n else if (name === \"property\") {\n processRule(root, selector, properties)\n } else {\n // Handle other at-rules normally\n processAtRule(root, name, params, properties)\n }\n } else {\n // Handle regular CSS rules\n processRule(root, selector, properties)\n }\n }\n },\n }\n}\n\nfunction processAtRule(\n root: Root | AtRule,\n name: string,\n params: string,\n properties: any\n) {\n // Find or create the at-rule\n let atRule = root.nodes?.find(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === name && node.params === params\n ) as AtRule | undefined\n\n if (!atRule) {\n atRule = postcss.atRule({\n name,\n params,\n raws: { semicolon: true, between: \" \", before: \"\\n\" },\n })\n root.append(atRule)\n root.insertBefore(atRule, postcss.comment({ text: \"---break---\" }))\n }\n\n // Process children of this at-rule\n if (typeof properties === \"object\") {\n for (const [childSelector, childProps] of Object.entries(properties)) {\n if (childSelector.startsWith(\"@\")) {\n // Nested at-rule\n const nestedMatch = childSelector.match(/@([a-zA-Z-]+)\\s*(.*)/)\n if (nestedMatch) {\n const [, nestedName, nestedParams] = nestedMatch\n processAtRule(atRule, nestedName, nestedParams, childProps)\n }\n } else {\n // CSS rule within at-rule\n processRule(atRule, childSelector, childProps)\n }\n }\n } else if (typeof properties === \"string\") {\n // Direct string content for the at-rule\n try {\n // Parse the CSS string with PostCSS\n const parsed = postcss.parse(`.temp{${properties}}`)\n const tempRule = parsed.first as Rule\n\n if (tempRule && tempRule.nodes) {\n // Create a rule for the at-rule if needed\n const rule = postcss.rule({\n selector: \"temp\",\n raws: { semicolon: true, between: \" \", before: \"\\n \" },\n })\n\n // Copy all declarations from the temp rule to our actual rule\n tempRule.nodes.forEach((node) => {\n if (node.type === \"decl\") {\n const clone = node.clone()\n clone.raws.before = \"\\n \"\n rule.append(clone)\n }\n })\n\n // Only add the rule if it has declarations\n if (rule.nodes?.length) {\n atRule.append(rule)\n }\n }\n } catch (error) {\n console.error(\"Error parsing at-rule content:\", properties, error)\n throw error\n }\n }\n}\n\nfunction processRule(parent: Root | AtRule, selector: string, properties: any) {\n let rule = parent.nodes?.find(\n (node): node is Rule => node.type === \"rule\" && node.selector === selector\n ) as Rule | undefined\n\n if (!rule) {\n rule = postcss.rule({\n selector,\n raws: { semicolon: true, between: \" \", before: \"\\n \" },\n })\n parent.append(rule)\n }\n\n if (typeof properties === \"object\") {\n for (const [prop, value] of Object.entries(properties)) {\n // Check if this is any at-rule with empty object (no body).\n if (\n prop.startsWith(\"@\") &&\n typeof value === \"object\" &&\n value !== null &&\n Object.keys(value).length === 0\n ) {\n // Parse the at-rule.\n const atRuleMatch = prop.match(/@([a-zA-Z-]+)\\s*(.*)/)\n if (atRuleMatch) {\n const [, atRuleName, atRuleParams] = atRuleMatch\n const atRule = postcss.atRule({\n name: atRuleName,\n params: atRuleParams,\n raws: { semicolon: true, before: \"\\n \" },\n })\n rule.append(atRule)\n }\n } else if (typeof value === \"string\") {\n const decl = postcss.decl({\n prop,\n value: value,\n raws: { semicolon: true, before: \"\\n \" },\n })\n\n // Replace existing property or add new one.\n const existingDecl = rule.nodes?.find(\n (node): node is Declaration =>\n node.type === \"decl\" && node.prop === prop\n )\n\n existingDecl ? existingDecl.replaceWith(decl) : rule.append(decl)\n } else if (typeof value === \"object\") {\n // Nested selector (including & selectors).\n const nestedSelector = prop.startsWith(\"&\")\n ? selector.replace(/^([^:]+)/, `$1${prop.substring(1)}`)\n : prop // Use the original selector for other nested elements.\n processRule(parent, nestedSelector, value)\n }\n }\n } else if (typeof properties === \"string\") {\n // Direct string content for the rule\n try {\n // Parse the CSS string with PostCSS\n const parsed = postcss.parse(`.temp{${properties}}`)\n const tempRule = parsed.first as Rule\n\n if (tempRule && tempRule.nodes) {\n // Copy all declarations from the temp rule to our actual rule\n tempRule.nodes.forEach((node) => {\n if (node.type === \"decl\") {\n const clone = node.clone()\n clone.raws.before = \"\\n \"\n rule?.append(clone)\n }\n })\n }\n } catch (error) {\n console.error(\"Error parsing rule content:\", selector, properties, error)\n throw error\n }\n }\n}\n","import { promises as fs } from \"fs\"\nimport path from \"path\"\nimport {\n registryItemCssVarsSchema,\n registryItemTailwindSchema,\n} from \"@/src/schema\"\nimport { Config } from \"@/src/utils/get-config\"\nimport { getPackageInfo } from \"@/src/utils/get-package-info\"\nimport { TailwindVersion } from \"@/src/utils/get-project-info\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport postcss from \"postcss\"\nimport AtRule from \"postcss/lib/at-rule\"\nimport Root from \"postcss/lib/root\"\nimport Rule from \"postcss/lib/rule\"\nimport { z } from \"zod\"\n\nexport async function updateCssVars(\n cssVars: z.infer<typeof registryItemCssVarsSchema> | undefined,\n config: Config,\n options: {\n cleanupDefaultNextStyles?: boolean\n overwriteCssVars?: boolean\n initIndex?: boolean\n silent?: boolean\n tailwindVersion?: TailwindVersion\n tailwindConfig?: z.infer<typeof registryItemTailwindSchema>[\"config\"]\n }\n) {\n if (!config.resolvedPaths.tailwindCss || !Object.keys(cssVars ?? {}).length) {\n return\n }\n\n options = {\n cleanupDefaultNextStyles: false,\n silent: false,\n tailwindVersion: \"v3\",\n overwriteCssVars: false,\n initIndex: true,\n ...options,\n }\n const cssFilepath = config.resolvedPaths.tailwindCss\n const cssFilepathRelative = path.relative(\n config.resolvedPaths.cwd,\n cssFilepath\n )\n const cssVarsSpinner = spinner(\n `Updating CSS variables in ${highlighter.info(cssFilepathRelative)}`,\n {\n silent: options.silent,\n }\n ).start()\n const raw = await fs.readFile(cssFilepath, \"utf8\")\n let output = await transformCssVars(raw, cssVars ?? {}, config, {\n cleanupDefaultNextStyles: options.cleanupDefaultNextStyles,\n tailwindVersion: options.tailwindVersion,\n tailwindConfig: options.tailwindConfig,\n overwriteCssVars: options.overwriteCssVars,\n initIndex: options.initIndex,\n })\n await fs.writeFile(cssFilepath, output, \"utf8\")\n cssVarsSpinner.succeed()\n}\n\nexport async function transformCssVars(\n input: string,\n cssVars: z.infer<typeof registryItemCssVarsSchema>,\n config: Config,\n options: {\n cleanupDefaultNextStyles?: boolean\n tailwindVersion?: TailwindVersion\n tailwindConfig?: z.infer<typeof registryItemTailwindSchema>[\"config\"]\n overwriteCssVars?: boolean\n initIndex?: boolean\n } = {\n cleanupDefaultNextStyles: false,\n tailwindVersion: \"v3\",\n tailwindConfig: undefined,\n overwriteCssVars: false,\n initIndex: false,\n }\n) {\n options = {\n cleanupDefaultNextStyles: false,\n tailwindVersion: \"v3\",\n tailwindConfig: undefined,\n overwriteCssVars: false,\n initIndex: false,\n ...options,\n }\n\n let plugins = [updateCssVarsPlugin(cssVars)]\n\n if (options.cleanupDefaultNextStyles) {\n plugins.push(cleanupDefaultNextStylesPlugin())\n }\n\n if (options.tailwindVersion === \"v4\") {\n plugins = []\n\n // Only add tw-animate-css if project does not have tailwindcss-animate\n if (config.resolvedPaths?.cwd) {\n const packageInfo = getPackageInfo(config.resolvedPaths.cwd)\n if (\n !packageInfo?.dependencies?.[\"tailwindcss-animate\"] &&\n !packageInfo?.devDependencies?.[\"tailwindcss-animate\"] &&\n options.initIndex\n ) {\n plugins.push(addCustomImport({ params: \"tw-animate-css\" }))\n }\n }\n\n plugins.push(addCustomVariant({ params: \"dark (&:is(.dark *))\" }))\n\n if (options.cleanupDefaultNextStyles) {\n plugins.push(cleanupDefaultNextStylesPlugin())\n }\n\n plugins.push(\n updateCssVarsPluginV4(cssVars, {\n overwriteCssVars: options.overwriteCssVars,\n })\n )\n plugins.push(updateThemePlugin(cssVars))\n\n if (options.tailwindConfig) {\n plugins.push(updateTailwindConfigPlugin(options.tailwindConfig))\n plugins.push(updateTailwindConfigAnimationPlugin(options.tailwindConfig))\n plugins.push(updateTailwindConfigKeyframesPlugin(options.tailwindConfig))\n }\n }\n\n if (config.tailwind.cssVariables && options.initIndex) {\n plugins.push(\n updateBaseLayerPlugin({ tailwindVersion: options.tailwindVersion })\n )\n }\n\n const result = await postcss(plugins).process(input, {\n from: undefined,\n })\n\n let output = result.css\n\n output = output.replace(/\\/\\* ---break--- \\*\\//g, \"\")\n\n if (options.tailwindVersion === \"v4\") {\n output = output.replace(/(\\n\\s*\\n)+/g, \"\\n\\n\")\n }\n\n return output\n}\n\nfunction updateBaseLayerPlugin({\n tailwindVersion,\n}: {\n tailwindVersion?: TailwindVersion\n}) {\n return {\n postcssPlugin: \"update-base-layer\",\n Once(root: Root) {\n const requiredRules = [\n {\n selector: \"*\",\n apply:\n tailwindVersion === \"v4\"\n ? \"border-border outline-ring/50\"\n : \"border-border\",\n },\n { selector: \"body\", apply: \"bg-background text-foreground\" },\n ]\n\n let baseLayer = root.nodes.find(\n (node): node is AtRule =>\n node.type === \"atrule\" &&\n node.name === \"layer\" &&\n node.params === \"base\" &&\n requiredRules.every(({ selector, apply }) =>\n node.nodes?.some(\n (rule): rule is Rule =>\n rule.type === \"rule\" &&\n rule.selector === selector &&\n rule.nodes.some(\n (applyRule): applyRule is AtRule =>\n applyRule.type === \"atrule\" &&\n applyRule.name === \"apply\" &&\n applyRule.params === apply\n )\n )\n )\n ) as AtRule | undefined\n\n if (!baseLayer) {\n baseLayer = postcss.atRule({\n name: \"layer\",\n params: \"base\",\n raws: { semicolon: true, between: \" \", before: \"\\n\" },\n })\n root.append(baseLayer)\n root.insertBefore(baseLayer, postcss.comment({ text: \"---break---\" }))\n }\n\n requiredRules.forEach(({ selector, apply }) => {\n const existingRule = baseLayer?.nodes?.find(\n (node): node is Rule =>\n node.type === \"rule\" && node.selector === selector\n )\n\n if (!existingRule) {\n baseLayer?.append(\n postcss.rule({\n selector,\n nodes: [\n postcss.atRule({\n name: \"apply\",\n params: apply,\n raws: { semicolon: true, before: \"\\n \" },\n }),\n ],\n raws: { semicolon: true, between: \" \", before: \"\\n \" },\n })\n )\n }\n })\n },\n }\n}\n\nfunction updateCssVarsPlugin(\n cssVars: z.infer<typeof registryItemCssVarsSchema>\n) {\n return {\n postcssPlugin: \"update-css-vars\",\n Once(root: Root) {\n let baseLayer = root.nodes.find(\n (node) =>\n node.type === \"atrule\" &&\n node.name === \"layer\" &&\n node.params === \"base\"\n ) as AtRule | undefined\n\n if (!(baseLayer instanceof AtRule)) {\n baseLayer = postcss.atRule({\n name: \"layer\",\n params: \"base\",\n nodes: [],\n raws: {\n semicolon: true,\n before: \"\\n\",\n between: \" \",\n },\n })\n root.append(baseLayer)\n root.insertBefore(baseLayer, postcss.comment({ text: \"---break---\" }))\n }\n\n if (baseLayer !== undefined) {\n // Add variables for each key in cssVars\n Object.entries(cssVars).forEach(([key, vars]) => {\n const selector = key === \"light\" ? \":root\" : `.${key}`\n // TODO: Fix typecheck.\n addOrUpdateVars(baseLayer as AtRule, selector, vars)\n })\n }\n },\n }\n}\n\nfunction removeConflictVars(root: Rule | Root) {\n const rootRule = root.nodes.find(\n (node): node is Rule => node.type === \"rule\" && node.selector === \":root\"\n )\n\n if (rootRule) {\n const propsToRemove = [\"--background\", \"--foreground\"]\n\n rootRule.nodes\n .filter(\n (node): node is postcss.Declaration =>\n node.type === \"decl\" && propsToRemove.includes(node.prop)\n )\n .forEach((node) => node.remove())\n\n if (rootRule.nodes.length === 0) {\n rootRule.remove()\n }\n }\n}\n\nfunction cleanupDefaultNextStylesPlugin() {\n return {\n postcssPlugin: \"cleanup-default-next-styles\",\n Once(root: Root) {\n const bodyRule = root.nodes.find(\n (node): node is Rule => node.type === \"rule\" && node.selector === \"body\"\n )\n if (bodyRule) {\n // Remove color from the body node.\n bodyRule.nodes\n .find(\n (node): node is postcss.Declaration =>\n node.type === \"decl\" &&\n node.prop === \"color\" &&\n [\"rgb(var(--foreground-rgb))\", \"var(--foreground)\"].includes(\n node.value\n )\n )\n ?.remove()\n\n // Remove background: linear-gradient.\n bodyRule.nodes\n .find((node): node is postcss.Declaration => {\n return (\n node.type === \"decl\" &&\n node.prop === \"background\" &&\n // This is only going to run on create project, so all good.\n (node.value.startsWith(\"linear-gradient\") ||\n node.value === \"var(--background)\")\n )\n })\n ?.remove()\n\n // Remove font-family: Arial, Helvetica, sans-serif;\n bodyRule.nodes\n .find(\n (node): node is postcss.Declaration =>\n node.type === \"decl\" &&\n node.prop === \"font-family\" &&\n node.value === \"Arial, Helvetica, sans-serif\"\n )\n ?.remove()\n\n // If the body rule is empty, remove it.\n if (bodyRule.nodes.length === 0) {\n bodyRule.remove()\n }\n }\n\n removeConflictVars(root)\n\n const darkRootRule = root.nodes.find(\n (node): node is Rule =>\n node.type === \"atrule\" &&\n node.params === \"(prefers-color-scheme: dark)\"\n )\n\n if (darkRootRule) {\n removeConflictVars(darkRootRule)\n if (darkRootRule.nodes.length === 0) {\n darkRootRule.remove()\n }\n }\n },\n }\n}\n\nfunction addOrUpdateVars(\n baseLayer: AtRule,\n selector: string,\n vars: Record<string, string>\n) {\n let ruleNode = baseLayer.nodes?.find(\n (node): node is Rule => node.type === \"rule\" && node.selector === selector\n )\n\n if (!ruleNode) {\n if (Object.keys(vars).length > 0) {\n ruleNode = postcss.rule({\n selector,\n raws: { between: \" \", before: \"\\n \" },\n })\n baseLayer.append(ruleNode)\n }\n }\n\n Object.entries(vars).forEach(([key, value]) => {\n const prop = `--${key.replace(/^--/, \"\")}`\n const newDecl = postcss.decl({\n prop,\n value,\n raws: { semicolon: true },\n })\n\n const existingDecl = ruleNode?.nodes.find(\n (node): node is postcss.Declaration =>\n node.type === \"decl\" && node.prop === prop\n )\n\n existingDecl ? existingDecl.replaceWith(newDecl) : ruleNode?.append(newDecl)\n })\n}\n\nfunction updateCssVarsPluginV4(\n cssVars: z.infer<typeof registryItemCssVarsSchema>,\n options: {\n overwriteCssVars?: boolean\n }\n) {\n return {\n postcssPlugin: \"update-css-vars-v4\",\n Once(root: Root) {\n Object.entries(cssVars).forEach(([key, vars]) => {\n let selector = key === \"light\" ? \":root\" : `.${key}`\n\n if (key === \"theme\") {\n selector = \"@theme\"\n const themeNode = upsertThemeNode(root)\n Object.entries(vars).forEach(([key, value]) => {\n const prop = `--${key.replace(/^--/, \"\")}`\n const newDecl = postcss.decl({\n prop,\n value,\n raws: { semicolon: true },\n })\n\n const existingDecl = themeNode?.nodes?.find(\n (node): node is postcss.Declaration =>\n node.type === \"decl\" && node.prop === prop\n )\n\n // Only overwrite if overwriteCssVars is true\n // i.e for registry:theme and registry:style\n // We do not want new components to overwrite existing vars.\n // Keep user defined vars.\n if (options.overwriteCssVars) {\n if (existingDecl) {\n existingDecl.replaceWith(newDecl)\n } else {\n themeNode?.append(newDecl)\n }\n } else {\n if (!existingDecl) {\n themeNode?.append(newDecl)\n }\n }\n })\n return\n }\n\n let ruleNode = root.nodes?.find(\n (node): node is Rule =>\n node.type === \"rule\" && node.selector === selector\n )\n\n if (!ruleNode && Object.keys(vars).length > 0) {\n ruleNode = postcss.rule({\n selector,\n nodes: [],\n raws: { semicolon: true, between: \" \", before: \"\\n\" },\n })\n root.append(ruleNode)\n root.insertBefore(ruleNode, postcss.comment({ text: \"---break---\" }))\n }\n\n Object.entries(vars).forEach(([key, value]) => {\n let prop = `--${key.replace(/^--/, \"\")}`\n\n // Special case for sidebar-background.\n if (prop === \"--sidebar-background\") {\n prop = \"--sidebar\"\n }\n\n if (isLocalHSLValue(value)) {\n value = `hsl(${value})`\n }\n\n const newDecl = postcss.decl({\n prop,\n value,\n raws: { semicolon: true },\n })\n const existingDecl = ruleNode?.nodes.find(\n (node): node is postcss.Declaration =>\n node.type === \"decl\" && node.prop === prop\n )\n\n // Only overwrite if overwriteCssVars is true\n // i.e for registry:theme and registry:style\n // We do not want new components to overwrite existing vars.\n // Keep user defined vars.\n if (options.overwriteCssVars) {\n if (existingDecl) {\n existingDecl.replaceWith(newDecl)\n } else {\n ruleNode?.append(newDecl)\n }\n } else {\n if (!existingDecl) {\n ruleNode?.append(newDecl)\n }\n }\n })\n })\n },\n }\n}\n\nfunction updateThemePlugin(cssVars: z.infer<typeof registryItemCssVarsSchema>) {\n return {\n postcssPlugin: \"update-theme\",\n Once(root: Root) {\n // Find unique color names from light and dark.\n const variables = Array.from(\n new Set(\n Object.keys(cssVars).flatMap((key) =>\n Object.keys(cssVars[key as keyof typeof cssVars] || {})\n )\n )\n )\n\n if (!variables.length) {\n return\n }\n\n const themeNode = upsertThemeNode(root)\n\n const themeVarNodes = themeNode.nodes?.filter(\n (node): node is postcss.Declaration =>\n node.type === \"decl\" && node.prop.startsWith(\"--\")\n )\n\n for (const variable of variables) {\n const value = Object.values(cssVars).find((vars) => vars[variable])?.[\n variable\n ]\n\n if (!value) {\n continue\n }\n\n if (variable === \"radius\") {\n const radiusVariables = {\n sm: \"calc(var(--radius) - 4px)\",\n md: \"calc(var(--radius) - 2px)\",\n lg: \"var(--radius)\",\n xl: \"calc(var(--radius) + 4px)\",\n \"2xl\": \"calc(var(--radius) + 8px)\",\n \"3xl\": \"calc(var(--radius) + 12px)\",\n \"4xl\": \"calc(var(--radius) + 16px)\",\n }\n for (const [key, value] of Object.entries(radiusVariables)) {\n const cssVarNode = postcss.decl({\n prop: `--radius-${key}`,\n value,\n raws: { semicolon: true },\n })\n if (\n themeNode?.nodes?.find(\n (node): node is postcss.Declaration =>\n node.type === \"decl\" && node.prop === cssVarNode.prop\n )\n ) {\n continue\n }\n themeNode?.append(cssVarNode)\n }\n continue\n }\n\n let prop =\n isLocalHSLValue(value) || isColorValue(value)\n ? `--color-${variable.replace(/^--/, \"\")}`\n : `--${variable.replace(/^--/, \"\")}`\n if (prop === \"--color-sidebar-background\") {\n prop = \"--color-sidebar\"\n }\n\n let propValue = `var(--${variable})`\n if (prop === \"--color-sidebar\") {\n propValue = \"var(--sidebar)\"\n }\n\n const cssVarNode = postcss.decl({\n prop,\n value: propValue,\n raws: { semicolon: true },\n })\n const existingDecl = themeNode?.nodes?.find(\n (node): node is postcss.Declaration =>\n node.type === \"decl\" && node.prop === cssVarNode.prop\n )\n if (!existingDecl) {\n if (themeVarNodes?.length) {\n themeNode?.insertAfter(\n themeVarNodes[themeVarNodes.length - 1],\n cssVarNode\n )\n } else {\n themeNode?.append(cssVarNode)\n }\n }\n }\n },\n }\n}\n\nfunction upsertThemeNode(root: Root): AtRule {\n let themeNode = root.nodes.find(\n (node): node is AtRule =>\n node.type === \"atrule\" &&\n node.name === \"theme\" &&\n node.params === \"inline\"\n )\n\n if (!themeNode) {\n themeNode = postcss.atRule({\n name: \"theme\",\n params: \"inline\",\n nodes: [],\n raws: { semicolon: true, between: \" \", before: \"\\n\" },\n })\n root.append(themeNode)\n root.insertBefore(themeNode, postcss.comment({ text: \"---break---\" }))\n }\n\n return themeNode\n}\n\nfunction addCustomVariant({ params }: { params: string }) {\n return {\n postcssPlugin: \"add-custom-variant\",\n Once(root: Root) {\n const customVariant = root.nodes.find(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === \"custom-variant\"\n )\n\n if (!customVariant) {\n // Find all import nodes\n const importNodes = root.nodes.filter(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === \"import\"\n )\n\n const variantNode = postcss.atRule({\n name: \"custom-variant\",\n params,\n raws: { semicolon: true, before: \"\\n\" },\n })\n\n if (importNodes.length > 0) {\n // Insert after the last import\n const lastImport = importNodes[importNodes.length - 1]\n root.insertAfter(lastImport, variantNode)\n } else {\n // If no imports, insert after the first node\n root.insertAfter(root.nodes[0], variantNode)\n }\n\n root.insertBefore(variantNode, postcss.comment({ text: \"---break---\" }))\n }\n },\n }\n}\n\nfunction addCustomImport({ params }: { params: string }) {\n return {\n postcssPlugin: \"add-custom-import\",\n Once(root: Root) {\n const importNodes = root.nodes.filter(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === \"import\"\n )\n\n // Find custom variant node (to ensure we insert before it)\n const customVariantNode = root.nodes.find(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === \"custom-variant\"\n )\n\n // Check if our specific import already exists\n const hasImport = importNodes.some(\n (node) => node.params.replace(/[\"']/g, \"\") === params\n )\n\n if (!hasImport) {\n const importNode = postcss.atRule({\n name: \"import\",\n params: `\"${params}\"`,\n raws: { semicolon: true, before: \"\\n\" },\n })\n\n if (importNodes.length > 0) {\n // If there are existing imports, add after the last import\n const lastImport = importNodes[importNodes.length - 1]\n root.insertAfter(lastImport, importNode)\n } else if (customVariantNode) {\n // If no imports but has custom-variant, insert before it\n root.insertBefore(customVariantNode, importNode)\n root.insertBefore(\n customVariantNode,\n postcss.comment({ text: \"---break---\" })\n )\n } else {\n // If no imports and no custom-variant, insert at the start\n root.prepend(importNode)\n root.insertAfter(importNode, postcss.comment({ text: \"---break---\" }))\n }\n }\n },\n }\n}\n\nfunction updateTailwindConfigPlugin(\n tailwindConfig: z.infer<typeof registryItemTailwindSchema>[\"config\"]\n) {\n return {\n postcssPlugin: \"update-tailwind-config\",\n Once(root: Root) {\n if (!tailwindConfig?.plugins) {\n return\n }\n\n const quoteType = getQuoteType(root)\n const quote = quoteType === \"single\" ? \"'\" : '\"'\n\n const pluginNodes = root.nodes.filter(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === \"plugin\"\n )\n\n const lastPluginNode =\n pluginNodes[pluginNodes.length - 1] || root.nodes[0]\n\n for (const plugin of tailwindConfig.plugins) {\n const pluginName = plugin.replace(/^require\\([\"']|[\"']\\)$/g, \"\")\n\n // Check if the plugin is already present.\n if (\n pluginNodes.some((node) => {\n return node.params.replace(/[\"']/g, \"\") === pluginName\n })\n ) {\n continue\n }\n\n const pluginNode = postcss.atRule({\n name: \"plugin\",\n params: `${quote}${pluginName}${quote}`,\n raws: { semicolon: true, before: \"\\n\" },\n })\n root.insertAfter(lastPluginNode, pluginNode)\n root.insertBefore(pluginNode, postcss.comment({ text: \"---break---\" }))\n }\n },\n }\n}\n\nfunction updateTailwindConfigKeyframesPlugin(\n tailwindConfig: z.infer<typeof registryItemTailwindSchema>[\"config\"]\n) {\n return {\n postcssPlugin: \"update-tailwind-config-keyframes\",\n Once(root: Root) {\n if (!tailwindConfig?.theme?.extend?.keyframes) {\n return\n }\n\n const themeNode = upsertThemeNode(root)\n const existingKeyFrameNodes = themeNode.nodes?.filter(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === \"keyframes\"\n )\n\n const keyframeValueSchema = z.record(\n z.string(),\n z.record(z.string(), z.string())\n )\n\n for (const [keyframeName, keyframeValue] of Object.entries(\n tailwindConfig.theme.extend.keyframes\n )) {\n if (typeof keyframeName !== \"string\") {\n continue\n }\n\n const parsedKeyframeValue = keyframeValueSchema.safeParse(keyframeValue)\n\n if (!parsedKeyframeValue.success) {\n continue\n }\n\n if (\n existingKeyFrameNodes?.find(\n (node): node is postcss.AtRule =>\n node.type === \"atrule\" &&\n node.name === \"keyframes\" &&\n node.params === keyframeName\n )\n ) {\n continue\n }\n\n const keyframeNode = postcss.atRule({\n name: \"keyframes\",\n params: keyframeName,\n nodes: [],\n raws: { semicolon: true, between: \" \", before: \"\\n \" },\n })\n\n for (const [key, values] of Object.entries(parsedKeyframeValue.data)) {\n const rule = postcss.rule({\n selector: key,\n nodes: Object.entries(values).map(([key, value]) =>\n postcss.decl({\n prop: key,\n value,\n raws: { semicolon: true, before: \"\\n \", between: \": \" },\n })\n ),\n raws: { semicolon: true, between: \" \", before: \"\\n \" },\n })\n keyframeNode.append(rule)\n }\n\n themeNode.append(keyframeNode)\n themeNode.insertBefore(\n keyframeNode,\n postcss.comment({ text: \"---break---\" })\n )\n }\n },\n }\n}\n\nfunction updateTailwindConfigAnimationPlugin(\n tailwindConfig: z.infer<typeof registryItemTailwindSchema>[\"config\"]\n) {\n return {\n postcssPlugin: \"update-tailwind-config-animation\",\n Once(root: Root) {\n if (!tailwindConfig?.theme?.extend?.animation) {\n return\n }\n\n const themeNode = upsertThemeNode(root)\n const existingAnimationNodes = themeNode.nodes?.filter(\n (node): node is postcss.Declaration =>\n node.type === \"decl\" && node.prop.startsWith(\"--animate-\")\n )\n\n const parsedAnimationValue = z\n .record(z.string(), z.string())\n .safeParse(tailwindConfig.theme.extend.animation)\n if (!parsedAnimationValue.success) {\n return\n }\n\n for (const [key, value] of Object.entries(parsedAnimationValue.data)) {\n const prop = `--animate-${key}`\n if (\n existingAnimationNodes?.find(\n (node): node is postcss.Declaration => node.prop === prop\n )\n ) {\n continue\n }\n\n const animationNode = postcss.decl({\n prop,\n value,\n raws: { semicolon: true, between: \": \", before: \"\\n \" },\n })\n themeNode.append(animationNode)\n }\n },\n }\n}\n\nfunction getQuoteType(root: Root): \"single\" | \"double\" {\n const firstNode = root.nodes[0]\n const raw = firstNode.toString()\n\n if (raw.includes(\"'\")) {\n return \"single\"\n }\n return \"double\"\n}\n\nexport function isLocalHSLValue(value: string) {\n if (\n value.startsWith(\"hsl\") ||\n value.startsWith(\"rgb\") ||\n value.startsWith(\"#\") ||\n value.startsWith(\"oklch\")\n ) {\n return false\n }\n\n const chunks = value.split(\" \")\n\n return (\n chunks.length === 3 &&\n chunks.slice(1, 3).every((chunk) => chunk.includes(\"%\"))\n )\n}\n\nexport function isColorValue(value: string) {\n return (\n value.startsWith(\"hsl\") ||\n value.startsWith(\"rgb\") ||\n value.startsWith(\"#\") ||\n value.startsWith(\"oklch\") ||\n value.includes(\"--color-\")\n )\n}\n","import { RegistryItem } from \"@/src/schema\"\nimport { Config } from \"@/src/utils/get-config\"\nimport { getPackageInfo } from \"@/src/utils/get-package-info\"\nimport { getPackageManager } from \"@/src/utils/get-package-manager\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { execa } from \"execa\"\nimport prompts from \"prompts\"\n\nexport async function updateDependencies(\n dependencies: RegistryItem[\"dependencies\"],\n devDependencies: RegistryItem[\"devDependencies\"],\n config: Config,\n options: {\n silent?: boolean\n }\n) {\n dependencies = Array.from(new Set(dependencies))\n devDependencies = Array.from(new Set(devDependencies))\n\n if (!dependencies?.length && !devDependencies?.length) {\n return\n }\n\n options = {\n silent: false,\n ...options,\n }\n\n const dependenciesSpinner = spinner(`Installing dependencies.`, {\n silent: options.silent,\n })?.start()\n const packageManager = await getUpdateDependenciesPackageManager(config)\n\n // Offer to use --force or --legacy-peer-deps if using React 19 with npm.\n let flag = \"\"\n if (shouldPromptForNpmFlag(config) && packageManager === \"npm\") {\n if (options.silent) {\n flag = \"force\"\n } else {\n dependenciesSpinner.stopAndPersist()\n logger.warn(\n \"\\nIt looks like you are using React 19. \\nSome packages may fail to install due to peer dependency issues in npm (see https://ui.shadcn.com/react-19).\\n\"\n )\n const confirmation = await prompts([\n {\n type: \"select\",\n name: \"flag\",\n message: \"How would you like to proceed?\",\n choices: [\n { title: \"Use --force\", value: \"force\" },\n { title: \"Use --legacy-peer-deps\", value: \"legacy-peer-deps\" },\n ],\n },\n ])\n\n if (confirmation) {\n flag = confirmation.flag\n }\n }\n }\n\n dependenciesSpinner?.start()\n\n await installWithPackageManager(\n packageManager,\n dependencies,\n devDependencies,\n config.resolvedPaths.cwd,\n flag\n )\n\n dependenciesSpinner?.succeed()\n}\n\nfunction shouldPromptForNpmFlag(config: Config) {\n const packageInfo = getPackageInfo(config.resolvedPaths.cwd, false)\n\n if (!packageInfo?.dependencies?.react) {\n return false\n }\n\n const hasReact19 = /^(?:\\^|~)?19(?:\\.\\d+)*(?:-.*)?$/.test(\n packageInfo.dependencies.react\n )\n const hasReactDayPicker8 =\n packageInfo.dependencies[\"react-day-picker\"]?.startsWith(\"8\")\n\n return hasReact19 && hasReactDayPicker8\n}\n\nasync function getUpdateDependenciesPackageManager(config: Config) {\n const expoVersion = getPackageInfo(config.resolvedPaths.cwd, false)\n ?.dependencies?.expo\n\n if (expoVersion) {\n // Ensures package versions match the React Native version.\n // https://docs.expo.dev/more/expo-cli/#install\n return \"expo\"\n }\n\n return getPackageManager(config.resolvedPaths.cwd)\n}\n\nasync function installWithPackageManager(\n packageManager: Awaited<\n ReturnType<typeof getUpdateDependenciesPackageManager>\n >,\n dependencies: string[],\n devDependencies: string[],\n cwd: string,\n flag?: string\n) {\n if (packageManager === \"npm\") {\n return installWithNpm(dependencies, devDependencies, cwd, flag)\n }\n\n if (packageManager === \"deno\") {\n return installWithDeno(dependencies, devDependencies, cwd)\n }\n\n if (packageManager === \"expo\") {\n return installWithExpo(dependencies, devDependencies, cwd)\n }\n\n if (dependencies?.length) {\n await execa(packageManager, [\"add\", ...dependencies], {\n cwd,\n })\n }\n\n if (devDependencies?.length) {\n await execa(packageManager, [\"add\", \"-D\", ...devDependencies], { cwd })\n }\n}\n\nasync function installWithNpm(\n dependencies: string[],\n devDependencies: string[],\n cwd: string,\n flag?: string\n) {\n if (dependencies.length) {\n await execa(\n \"npm\",\n [\"install\", ...(flag ? [`--${flag}`] : []), ...dependencies],\n { cwd }\n )\n }\n\n if (devDependencies.length) {\n await execa(\n \"npm\",\n [\"install\", ...(flag ? [`--${flag}`] : []), \"-D\", ...devDependencies],\n { cwd }\n )\n }\n}\n\nasync function installWithDeno(\n dependencies: string[],\n devDependencies: string[],\n cwd: string\n) {\n if (dependencies?.length) {\n await execa(\"deno\", [\"add\", ...dependencies.map((dep) => `npm:${dep}`)], {\n cwd,\n })\n }\n\n if (devDependencies?.length) {\n await execa(\n \"deno\",\n [\"add\", \"-D\", ...devDependencies.map((dep) => `npm:${dep}`)],\n { cwd }\n )\n }\n}\n\nasync function installWithExpo(\n dependencies: string[],\n devDependencies: string[],\n cwd: string\n) {\n if (dependencies.length) {\n await execa(\"npx\", [\"expo\", \"install\", ...dependencies], { cwd })\n }\n\n if (devDependencies.length) {\n await execa(\"npx\", [\"expo\", \"install\", \"-- -D\", ...devDependencies], {\n cwd,\n })\n }\n}\n","import { existsSync, promises as fs } from \"fs\"\nimport path from \"path\"\nimport { registryItemEnvVarsSchema } from \"@/src/schema\"\nimport {\n findExistingEnvFile,\n getNewEnvKeys,\n mergeEnvContent,\n} from \"@/src/utils/env-helpers\"\nimport { Config } from \"@/src/utils/get-config\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { z } from \"zod\"\n\nexport async function updateEnvVars(\n envVars: z.infer<typeof registryItemEnvVarsSchema> | undefined,\n config: Config,\n options: {\n silent?: boolean\n }\n) {\n if (!envVars || Object.keys(envVars).length === 0) {\n return {\n envVarsAdded: [],\n envFileUpdated: null,\n envFileCreated: null,\n }\n }\n\n options = {\n silent: false,\n ...options,\n }\n\n const envSpinner = spinner(`Adding environment variables.`, {\n silent: options.silent,\n })?.start()\n\n const projectRoot = config.resolvedPaths.cwd\n\n // Find existing env file or use .env.local as default.\n let envFilePath = path.join(projectRoot, \".env.local\")\n const existingEnvFile = findExistingEnvFile(projectRoot)\n\n if (existingEnvFile) {\n envFilePath = existingEnvFile\n }\n\n const envFileExists = existsSync(envFilePath)\n const envFileName = path.basename(envFilePath)\n\n // Convert envVars object to env file format\n const newEnvContent = Object.entries(envVars)\n .map(([key, value]) => `${key}=${value}`)\n .join(\"\\n\")\n\n let envVarsAdded: string[] = []\n let envFileUpdated: string | null = null\n let envFileCreated: string | null = null\n\n if (envFileExists) {\n const existingContent = await fs.readFile(envFilePath, \"utf-8\")\n const mergedContent = mergeEnvContent(existingContent, newEnvContent)\n envVarsAdded = getNewEnvKeys(existingContent, newEnvContent)\n\n if (envVarsAdded.length > 0) {\n await fs.writeFile(envFilePath, mergedContent, \"utf-8\")\n envFileUpdated = path.relative(projectRoot, envFilePath)\n\n envSpinner?.succeed(\n `Added the following variables to ${highlighter.info(envFileName)}:`\n )\n\n if (!options.silent) {\n for (const key of envVarsAdded) {\n logger.log(` ${highlighter.success(\"+\")} ${key}`)\n }\n }\n } else {\n envSpinner?.stop()\n }\n } else {\n // Create new env file\n await fs.writeFile(envFilePath, newEnvContent + \"\\n\", \"utf-8\")\n envFileCreated = path.relative(projectRoot, envFilePath)\n envVarsAdded = Object.keys(envVars)\n\n envSpinner?.succeed(\n `Added the following variables to ${highlighter.info(envFileName)}:`\n )\n\n if (!options.silent) {\n for (const key of envVarsAdded) {\n logger.log(` ${highlighter.success(\"+\")} ${key}`)\n }\n }\n }\n\n if (!options.silent && envVarsAdded.length > 0) {\n logger.break()\n }\n\n return {\n envVarsAdded,\n envFileUpdated,\n envFileCreated,\n }\n}\n","import { existsSync, promises as fs } from \"fs\"\nimport path from \"path\"\nimport { RegistryFontItem, registryResolvedItemsTreeSchema } from \"@/src/schema\"\nimport { Config } from \"@/src/utils/get-config\"\nimport { ProjectInfo, getProjectInfo } from \"@/src/utils/get-project-info\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport {\n CallExpression,\n Project,\n ScriptKind,\n SyntaxKind,\n VariableDeclarationKind,\n} from \"ts-morph\"\nimport z from \"zod\"\n\nexport async function massageTreeForFonts(\n tree: z.infer<typeof registryResolvedItemsTreeSchema>,\n config: Config\n) {\n if (!tree.fonts?.length) {\n return tree\n }\n\n const projectInfo = await getProjectInfo(config.resolvedPaths.cwd)\n\n if (!projectInfo) {\n return tree\n }\n\n const [fontSans] = tree.fonts\n tree.cssVars ??= {}\n tree.cssVars.theme ??= {}\n\n if (\n projectInfo.framework.name === \"next-app\" ||\n projectInfo.framework.name === \"next-pages\"\n ) {\n tree.cssVars.theme[\n fontSans.font.variable\n ] = `var(${fontSans.font.variable})`\n return tree\n }\n\n // Other frameworks will use fontsource for now.\n const fontName = fontSans.name.replace(\"font-\", \"\")\n const fontSourceDependency = `@fontsource-variable/${fontName}`\n tree.dependencies ??= []\n tree.dependencies.push(fontSourceDependency)\n tree.css ??= {}\n tree.css[`@import \"${fontSourceDependency}\"`] = {}\n tree.css[\"@layer base\"] ??= {}\n tree.css[\"@layer base\"].html = {\n \"@apply font-sans\": {},\n }\n tree.css[\"@layer base\"].body = {\n \"@apply font-sans bg-background text-foreground\": {},\n }\n tree.cssVars.theme[fontSans.font.variable] = fontSans.font.family\n\n // tree.docs += `## Fonts\n // The ${highlighter.info(\n // fontSans.title ?? \"\"\n // )} font has been added to your project.\n\n // If you have existing font-family declarations, you may need to update them to use the new ${highlighter.info(\n // fontSans.font.variable\n // )} variable.\n\n // @theme inline {\n // ${fontSans.font.variable}: ${fontSans.font.family};\n // }\n // `\n\n return tree\n}\n\nexport async function updateFonts(\n fonts: RegistryFontItem[] | undefined,\n config: Config,\n options: {\n silent?: boolean\n }\n) {\n if (!fonts?.length) {\n return\n }\n\n const projectInfo = await getProjectInfo(config.resolvedPaths.cwd)\n\n if (!projectInfo) {\n return\n }\n\n if (\n projectInfo.framework.name !== \"next-app\" &&\n projectInfo.framework.name !== \"next-pages\"\n ) {\n return\n }\n\n const fontsSpinner = spinner(\"Updating fonts.\", {\n silent: options.silent,\n })?.start()\n\n try {\n await updateNextFonts(fonts, config, projectInfo)\n fontsSpinner?.succeed(\"Updating fonts.\")\n } catch (error) {\n fontsSpinner?.fail(`Failed to update fonts.`)\n throw error\n }\n}\n\nasync function updateNextFonts(\n fonts: RegistryFontItem[],\n config: Config,\n projectInfo: ProjectInfo\n) {\n // Find layout file.\n const layoutPath = await findLayoutFile(config, projectInfo)\n\n if (!layoutPath) {\n return\n }\n\n const layoutContent = await fs.readFile(layoutPath, \"utf-8\")\n const updatedContent = await transformLayoutFonts(\n layoutContent,\n fonts,\n config\n )\n\n if (updatedContent !== layoutContent) {\n await fs.writeFile(layoutPath, updatedContent, \"utf-8\")\n }\n}\n\nasync function findLayoutFile(\n config: Config,\n projectInfo: ProjectInfo\n): Promise<string | null> {\n const cwd = config.resolvedPaths.cwd\n const isSrcDir = projectInfo.isSrcDir\n const isTsx = projectInfo.isTsx\n const ext = isTsx ? \"tsx\" : \"jsx\"\n\n const possiblePaths = isSrcDir\n ? [`src/app/layout.${ext}`, `app/layout.${ext}`]\n : [`app/layout.${ext}`]\n\n for (const relativePath of possiblePaths) {\n const fullPath = path.join(cwd, relativePath)\n if (existsSync(fullPath)) {\n return fullPath\n }\n }\n\n return null\n}\n\nexport async function transformLayoutFonts(\n input: string,\n fonts: RegistryFontItem[],\n _config: Config\n) {\n const project = new Project({\n compilerOptions: {},\n })\n\n const sourceFile = project.createSourceFile(\"layout.tsx\", input, {\n scriptKind: ScriptKind.TSX,\n })\n\n // Only process Google fonts for now.\n const googleFonts = fonts.filter((f) => f.font.provider === \"google\")\n\n // Track which font variables we're adding.\n const fontVariableNames: string[] = []\n\n // Process Google fonts.\n for (const font of googleFonts) {\n const importName = font.font.import\n if (!importName) {\n continue\n }\n\n // Generate a variable name from the import (e.g., \"Inter\" -> \"inter\", \"Geist_Mono\" -> \"geistMono\").\n const varName = toCamelCase(importName)\n\n // Check if import already exists.\n const existingImport = sourceFile.getImportDeclaration((decl) => {\n const moduleSpecifier = decl.getModuleSpecifierValue()\n return moduleSpecifier === \"next/font/google\"\n })\n\n // Build font options.\n const fontOptions = buildFontOptions(font)\n\n if (existingImport) {\n // Check if this specific font is already imported.\n const namedImports = existingImport.getNamedImports()\n const hasImport = namedImports.some((imp) => imp.getName() === importName)\n\n if (!hasImport) {\n existingImport.addNamedImport(importName)\n }\n } else {\n // Add new import.\n sourceFile.addImportDeclaration({\n moduleSpecifier: \"next/font/google\",\n namedImports: [importName],\n })\n }\n\n // Check if variable declaration already exists with same variable CSS property.\n const existingVarDecl = findFontVariableDeclaration(\n sourceFile,\n font.font.variable\n )\n\n if (existingVarDecl) {\n // Replace the initializer of the existing declaration.\n existingVarDecl.setInitializer(`${importName}(${fontOptions})`)\n // Update the variable name if different.\n if (existingVarDecl.getName() !== varName) {\n existingVarDecl.rename(varName)\n }\n } else {\n // Find the last import or existing font declaration to insert after.\n const insertPosition = findInsertPosition(sourceFile)\n\n // Add variable declaration.\n const statement = sourceFile.insertVariableStatement(insertPosition, {\n declarationKind: VariableDeclarationKind.Const,\n declarations: [\n {\n name: varName,\n initializer: `${importName}(${fontOptions})`,\n },\n ],\n })\n\n // Add a blank line after the declaration.\n statement.appendWhitespace(\"\\n\")\n }\n\n fontVariableNames.push(varName)\n }\n\n // Update html className to include font variables.\n if (fontVariableNames.length > 0) {\n updateHtmlClassName(sourceFile, fontVariableNames)\n }\n\n return sourceFile.getFullText()\n}\n\nfunction buildFontOptions(font: RegistryFontItem) {\n const options: Record<string, unknown> = {}\n\n if (font.font.subsets?.length) {\n options.subsets = font.font.subsets\n }\n\n if (font.font.weight?.length) {\n options.weight = font.font.weight\n }\n\n options.variable = font.font.variable\n\n return JSON.stringify(options)\n .replace(/\"([^\"]+)\":/g, \"$1:\") // Remove quotes from keys.\n .replace(/\"/g, \"'\") // Use single quotes for strings.\n}\n\nfunction toCamelCase(str: string) {\n // Convert \"Geist_Mono\" -> \"geistMono\", \"Inter\" -> \"inter\".\n return str\n .split(\"_\")\n .map((part, index) =>\n index === 0\n ? part.toLowerCase()\n : part.charAt(0).toUpperCase() + part.slice(1).toLowerCase()\n )\n .join(\"\")\n}\n\nfunction findFontVariableDeclaration(\n sourceFile: ReturnType<Project[\"createSourceFile\"]>,\n variable: string\n) {\n // Find variable declarations that call a font function with matching variable.\n const variableStatements = sourceFile.getVariableStatements()\n\n for (const statement of variableStatements) {\n for (const declaration of statement.getDeclarations()) {\n const initializer = declaration.getInitializer()\n if (!initializer) continue\n\n // Check if it's a call expression.\n if (initializer.getKind() !== SyntaxKind.CallExpression) continue\n\n const callExpr = initializer as CallExpression\n\n // Get the arguments.\n const args = callExpr.getArguments()\n if (args.length === 0) continue\n\n // Check if any argument contains our variable.\n const argText = args[0].getText()\n if (argText.includes(`variable:`) && argText.includes(variable)) {\n return declaration\n }\n }\n }\n\n return null\n}\n\nfunction findInsertPosition(\n sourceFile: ReturnType<Project[\"createSourceFile\"]>\n) {\n const imports = sourceFile.getImportDeclarations()\n if (imports.length > 0) {\n const lastImport = imports[imports.length - 1]\n return lastImport.getChildIndex() + 1\n }\n return 0\n}\n\nfunction updateHtmlClassName(\n sourceFile: ReturnType<Project[\"createSourceFile\"]>,\n fontVariableNames: string[]\n) {\n // Find the <html> JSX element.\n const jsxElements = sourceFile.getDescendantsOfKind(\n SyntaxKind.JsxOpeningElement\n )\n\n for (const element of jsxElements) {\n const tagName = element.getTagNameNode().getText()\n if (tagName !== \"html\") continue\n\n const classNameAttr = element.getAttribute(\"className\")\n if (!classNameAttr) {\n // Add className attribute with font variables.\n const variableExpressions = fontVariableNames\n .map((name) => `${name}.variable`)\n .join(\", \")\n\n if (fontVariableNames.length === 1) {\n element.addAttribute({\n name: \"className\",\n initializer: `{${variableExpressions}}`,\n })\n } else {\n // Need to use cn() for multiple fonts.\n ensureCnImport(sourceFile)\n element.addAttribute({\n name: \"className\",\n initializer: `{cn(${variableExpressions})}`,\n })\n }\n return\n }\n\n // Handle existing className.\n if (classNameAttr.getKind() !== SyntaxKind.JsxAttribute) {\n return\n }\n\n const jsxAttr = classNameAttr.asKindOrThrow(SyntaxKind.JsxAttribute)\n const initializer = jsxAttr.getInitializer()\n\n if (!initializer) return\n\n // Build the new variable expressions.\n const newVarExpressions = fontVariableNames.map(\n (name) => `${name}.variable`\n )\n\n if (initializer.getKind() === SyntaxKind.StringLiteral) {\n // className=\"some-class\" -> className={cn(\"some-class\", font.variable)}\n const currentValue = initializer.getText().slice(1, -1) // Remove quotes.\n ensureCnImport(sourceFile)\n jsxAttr.setInitializer(\n `{cn(\"${currentValue}\", ${newVarExpressions.join(\", \")})}`\n )\n } else if (initializer.getKind() === SyntaxKind.JsxExpression) {\n // className={...} - need to analyze the expression.\n const jsxExpr = initializer.asKindOrThrow(SyntaxKind.JsxExpression)\n const expr = jsxExpr.getExpression()\n if (!expr) return\n\n const exprText = expr.getText()\n\n // Check if it's already using cn().\n if (exprText.startsWith(\"cn(\")) {\n // Check if cn() already has exactly our font variables.\n const hasAllFontVars = newVarExpressions.every((v) =>\n exprText.includes(v)\n )\n if (hasAllFontVars) {\n // Already has our font variables, skip.\n continue\n }\n\n // Remove existing font variables and add new ones.\n const cleanedExpr = removeFontVariablesFromCn(exprText)\n const newExpr = insertFontVariablesIntoCn(\n cleanedExpr,\n newVarExpressions\n )\n jsxExpr.replaceWithText(`{${newExpr}}`)\n } else if (/^\\w+\\.variable$/.test(exprText)) {\n // Single font variable like {inter.variable}.\n // Check if it's already one of our font variables.\n if (newVarExpressions.includes(exprText)) {\n // Already using our font variable, skip.\n continue\n }\n // Replace with our font variables.\n if (newVarExpressions.length === 1) {\n jsxExpr.replaceWithText(`{${newVarExpressions[0]}}`)\n } else {\n ensureCnImport(sourceFile)\n jsxExpr.replaceWithText(`{cn(${newVarExpressions.join(\", \")})}`)\n }\n } else if (exprText.startsWith(\"`\") && exprText.endsWith(\"`\")) {\n // Template literal - parse and convert to cn() arguments.\n const cnArgs = parseTemplateLiteralToCnArgs(exprText)\n ensureCnImport(sourceFile)\n jsxExpr.replaceWithText(\n `{cn(${[...cnArgs, ...newVarExpressions].join(\", \")})}`\n )\n } else {\n // Some other expression (variable, etc.), wrap with cn().\n ensureCnImport(sourceFile)\n jsxExpr.replaceWithText(\n `{cn(${exprText}, ${newVarExpressions.join(\", \")})}`\n )\n }\n }\n }\n}\n\nfunction ensureCnImport(sourceFile: ReturnType<Project[\"createSourceFile\"]>) {\n const existingImport = sourceFile.getImportDeclaration((decl) => {\n const namedImports = decl.getNamedImports()\n return namedImports.some((imp) => imp.getName() === \"cn\")\n })\n\n if (!existingImport) {\n // Try to find the lib/utils import pattern.\n const utilsImport = sourceFile.getImportDeclaration((decl) => {\n const moduleSpecifier = decl.getModuleSpecifierValue()\n return moduleSpecifier.includes(\"/lib/utils\")\n })\n\n if (utilsImport) {\n const namedImports = utilsImport.getNamedImports()\n if (!namedImports.some((imp) => imp.getName() === \"cn\")) {\n utilsImport.addNamedImport(\"cn\")\n }\n } else {\n // Add a new import for cn.\n sourceFile.addImportDeclaration({\n moduleSpecifier: \"@/lib/utils\",\n namedImports: [\"cn\"],\n })\n }\n }\n}\n\nfunction parseTemplateLiteralToCnArgs(templateLiteral: string) {\n // Parse template literal like `${geistSans.variable} ${geistMono.variable} antialiased`\n // into cn() arguments with static strings first, then variables:\n // [\"antialiased\", geistSans.variable, geistMono.variable]\n const staticArgs: string[] = []\n const variableArgs: string[] = []\n\n // Remove the backticks.\n const content = templateLiteral.slice(1, -1)\n\n // Split by ${...} expressions and static parts.\n const parts = content.split(/(\\$\\{[^}]+\\})/)\n\n for (const part of parts) {\n if (!part) continue\n\n if (part.startsWith(\"${\") && part.endsWith(\"}\")) {\n // Expression like ${geistSans.variable}.\n const expr = part.slice(2, -1).trim()\n if (expr) {\n variableArgs.push(expr)\n }\n } else {\n // Static string - split by whitespace and add non-empty parts as quoted strings.\n const staticParts = part.trim().split(/\\s+/).filter(Boolean)\n for (const staticPart of staticParts) {\n staticArgs.push(`\"${staticPart}\"`)\n }\n }\n }\n\n // Return static strings first, then variables.\n return [...staticArgs, ...variableArgs]\n}\n\nfunction removeFontVariablesFromCn(cnExpr: string) {\n // Remove patterns like \"fontName.variable\" from cn() call.\n // This is a simple regex-based approach.\n return cnExpr.replace(/,?\\s*\\w+\\.variable/g, \"\").replace(/cn\\(\\s*,/, \"cn(\")\n}\n\nfunction insertFontVariablesIntoCn(cnExpr: string, fontVars: string[]) {\n // Insert font variables at the end of cn() arguments.\n const varsStr = fontVars.join(\", \")\n return cnExpr.replace(/\\)$/, `, ${varsStr})`)\n}\n","import path from \"path\"\nimport { getRegistryItems } from \"@/src/registry/api\"\nimport { configWithDefaults } from \"@/src/registry/config\"\nimport { resolveRegistryTree } from \"@/src/registry/resolver\"\nimport {\n configSchema,\n registryItemFileSchema,\n registryItemSchema,\n workspaceConfigSchema,\n} from \"@/src/schema\"\nimport {\n findCommonRoot,\n findPackageRoot,\n getWorkspaceConfig,\n type Config,\n} from \"@/src/utils/get-config\"\nimport { getProjectTailwindVersionFromConfig } from \"@/src/utils/get-project-info\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { isSafeTarget } from \"@/src/utils/is-safe-target\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { updateCss } from \"@/src/utils/updaters/update-css\"\nimport { updateCssVars } from \"@/src/utils/updaters/update-css-vars\"\nimport { updateDependencies } from \"@/src/utils/updaters/update-dependencies\"\nimport { updateEnvVars } from \"@/src/utils/updaters/update-env-vars\"\nimport { updateFiles } from \"@/src/utils/updaters/update-files\"\nimport {\n massageTreeForFonts,\n updateFonts,\n} from \"@/src/utils/updaters/update-fonts\"\nimport { updateTailwindConfig } from \"@/src/utils/updaters/update-tailwind-config\"\nimport { z } from \"zod\"\n\nexport async function addComponents(\n components: string[],\n config: Config,\n options: {\n overwrite?: boolean\n silent?: boolean\n isNewProject?: boolean\n baseStyle?: boolean\n registryHeaders?: Record<string, Record<string, string>>\n path?: string\n }\n) {\n options = {\n overwrite: false,\n silent: false,\n isNewProject: false,\n baseStyle: true,\n ...options,\n }\n\n const workspaceConfig = await getWorkspaceConfig(config)\n if (\n workspaceConfig &&\n workspaceConfig.ui &&\n workspaceConfig.ui.resolvedPaths.cwd !== config.resolvedPaths.cwd\n ) {\n return await addWorkspaceComponents(components, config, workspaceConfig, {\n ...options,\n isRemote:\n components?.length === 1 && !!components[0].match(/\\/chat\\/b\\//),\n })\n }\n\n return await addProjectComponents(components, config, options)\n}\n\nasync function addProjectComponents(\n components: string[],\n config: z.infer<typeof configSchema>,\n options: {\n overwrite?: boolean\n silent?: boolean\n isNewProject?: boolean\n baseStyle?: boolean\n path?: string\n }\n) {\n if (!options.baseStyle && !components.length) {\n return\n }\n\n const registrySpinner = spinner(`Checking registry.`, {\n silent: options.silent,\n })?.start()\n let tree = await resolveRegistryTree(components, configWithDefaults(config))\n\n if (!tree) {\n registrySpinner?.fail()\n return handleError(new Error(\"Failed to fetch components from registry.\"))\n }\n\n try {\n validateFilesTarget(tree.files ?? [], config.resolvedPaths.cwd)\n } catch (error) {\n registrySpinner?.fail()\n return handleError(error)\n }\n\n registrySpinner?.succeed()\n\n // const tailwindVersion = await getProjectTailwindVersionFromConfig(config)\n\n // tree = await massageTreeForFonts(tree, config)\n\n // await updateTailwindConfig(tree.tailwind?.config, config, {\n // silent: options.silent,\n // tailwindVersion,\n // })\n\n // const overwriteCssVars = await shouldOverwriteCssVars(components, config)\n // await updateCssVars(tree.cssVars, config, {\n // cleanupDefaultNextStyles: options.isNewProject,\n // silent: options.silent,\n // tailwindVersion,\n // tailwindConfig: tree.tailwind?.config,\n // overwriteCssVars,\n // initIndex: options.baseStyle,\n // })\n\n // // Add CSS updater\n // await updateCss(tree.css, config, {\n // silent: options.silent,\n // })\n\n // await updateEnvVars(tree.envVars, config, {\n // silent: options.silent,\n // })\n\n await updateDependencies(tree.dependencies, tree.devDependencies, config, {\n silent: options.silent,\n })\n\n // await updateFonts(tree.fonts, config, {\n // silent: options.silent,\n // })\n\n await updateFiles(tree.files, config, {\n overwrite: options.overwrite,\n silent: options.silent,\n path: options.path,\n })\n\n if (tree.docs) {\n logger.info(tree.docs)\n }\n}\n\nasync function addWorkspaceComponents(\n components: string[],\n config: z.infer<typeof configSchema>,\n workspaceConfig: z.infer<typeof workspaceConfigSchema>,\n options: {\n overwrite?: boolean\n silent?: boolean\n isNewProject?: boolean\n isRemote?: boolean\n baseStyle?: boolean\n path?: string\n }\n) {\n if (!options.baseStyle && !components.length) {\n return\n }\n\n const registrySpinner = spinner(`Checking registry.`, {\n silent: options.silent,\n })?.start()\n const tree = await resolveRegistryTree(components, configWithDefaults(config))\n\n if (!tree) {\n registrySpinner?.fail()\n return handleError(new Error(\"Failed to fetch components from registry.\"))\n }\n\n try {\n validateFilesTarget(tree.files ?? [], config.resolvedPaths.cwd)\n } catch (error) {\n registrySpinner?.fail()\n return handleError(error)\n }\n\n registrySpinner?.succeed()\n\n const filesCreated: string[] = []\n const filesUpdated: string[] = []\n const filesSkipped: string[] = []\n\n const rootSpinner = spinner(`Installing components.`)?.start()\n\n // Process global updates (tailwind, css vars, dependencies) first for the main target.\n // These should typically go to the UI package in a workspace.\n const mainTargetConfig = workspaceConfig.ui\n const tailwindVersion = await getProjectTailwindVersionFromConfig(\n mainTargetConfig\n )\n const workspaceRoot = findCommonRoot(\n config.resolvedPaths.cwd,\n mainTargetConfig.resolvedPaths.ui\n )\n\n // 1. Update tailwind config.\n if (tree.tailwind?.config) {\n await updateTailwindConfig(tree.tailwind?.config, mainTargetConfig, {\n silent: true,\n tailwindVersion,\n })\n filesUpdated.push(\n path.relative(\n workspaceRoot,\n mainTargetConfig.resolvedPaths.tailwindConfig\n )\n )\n }\n\n // 2. Update css vars.\n if (tree.cssVars) {\n const overwriteCssVars = await shouldOverwriteCssVars(components, config)\n await updateCssVars(tree.cssVars, mainTargetConfig, {\n silent: true,\n tailwindVersion,\n tailwindConfig: tree.tailwind?.config,\n overwriteCssVars,\n })\n filesUpdated.push(\n path.relative(workspaceRoot, mainTargetConfig.resolvedPaths.tailwindCss)\n )\n }\n\n // 3. Update CSS\n if (tree.css) {\n await updateCss(tree.css, mainTargetConfig, {\n silent: true,\n })\n filesUpdated.push(\n path.relative(workspaceRoot, mainTargetConfig.resolvedPaths.tailwindCss)\n )\n }\n\n // 4. Update environment variables\n if (tree.envVars) {\n await updateEnvVars(tree.envVars, mainTargetConfig, {\n silent: true,\n })\n }\n\n // 5. Update dependencies.\n await updateDependencies(\n tree.dependencies,\n tree.devDependencies,\n mainTargetConfig,\n {\n silent: true,\n }\n )\n\n // 6. Update fonts.\n await updateFonts(tree.fonts, mainTargetConfig, {\n silent: true,\n })\n\n // 7. Group files by their type to determine target config and update files.\n const filesByType = new Map<string, typeof tree.files>()\n\n for (const file of tree.files ?? []) {\n const type = file.type || \"registry:ui\"\n if (!filesByType.has(type)) {\n filesByType.set(type, [])\n }\n filesByType.get(type)!.push(file)\n }\n\n // Process each type of component with its appropriate target config.\n for (const type of Array.from(filesByType.keys())) {\n const typeFiles = filesByType.get(type)!\n\n let targetConfig = type === \"registry:ui\" ? workspaceConfig.ui : config\n\n const typeWorkspaceRoot = findCommonRoot(\n config.resolvedPaths.cwd,\n targetConfig.resolvedPaths.ui || targetConfig.resolvedPaths.cwd\n )\n const packageRoot =\n (await findPackageRoot(\n typeWorkspaceRoot,\n targetConfig.resolvedPaths.cwd\n )) ?? targetConfig.resolvedPaths.cwd\n\n // Update files for this type.\n const files = await updateFiles(typeFiles, targetConfig, {\n overwrite: options.overwrite,\n silent: true,\n rootSpinner,\n isRemote: options.isRemote,\n isWorkspace: true,\n path: options.path,\n })\n\n filesCreated.push(\n ...files.filesCreated.map((file) =>\n path.relative(typeWorkspaceRoot, path.join(packageRoot, file))\n )\n )\n filesUpdated.push(\n ...files.filesUpdated.map((file) =>\n path.relative(typeWorkspaceRoot, path.join(packageRoot, file))\n )\n )\n filesSkipped.push(\n ...files.filesSkipped.map((file) =>\n path.relative(typeWorkspaceRoot, path.join(packageRoot, file))\n )\n )\n }\n\n rootSpinner?.succeed()\n\n // Sort files.\n filesCreated.sort()\n filesUpdated.sort()\n filesSkipped.sort()\n\n const hasUpdatedFiles = filesCreated.length || filesUpdated.length\n if (!hasUpdatedFiles && !filesSkipped.length) {\n spinner(`No files updated.`, {\n silent: options.silent,\n })?.info()\n }\n\n if (filesCreated.length) {\n spinner(\n `Created ${filesCreated.length} ${\n filesCreated.length === 1 ? \"file\" : \"files\"\n }:`,\n {\n silent: options.silent,\n }\n )?.succeed()\n for (const file of filesCreated) {\n logger.log(` - ${file}`)\n }\n }\n\n if (filesUpdated.length) {\n spinner(\n `Updated ${filesUpdated.length} ${\n filesUpdated.length === 1 ? \"file\" : \"files\"\n }:`,\n {\n silent: options.silent,\n }\n )?.info()\n for (const file of filesUpdated) {\n logger.log(` - ${file}`)\n }\n }\n\n if (filesSkipped.length) {\n spinner(\n `Skipped ${filesSkipped.length} ${\n filesUpdated.length === 1 ? \"file\" : \"files\"\n }: (use --overwrite to overwrite)`,\n {\n silent: options.silent,\n }\n )?.info()\n for (const file of filesSkipped) {\n logger.log(` - ${file}`)\n }\n }\n\n if (tree.docs) {\n logger.info(tree.docs)\n }\n}\n\nasync function shouldOverwriteCssVars(\n components: z.infer<typeof registryItemSchema>[\"name\"][],\n config: z.infer<typeof configSchema>\n) {\n const result = await getRegistryItems(components, { config })\n const payload = z.array(registryItemSchema).parse(result)\n\n return payload.some(\n (component) =>\n component.type === \"registry:theme\" ||\n component.type === \"registry:style\" ||\n component.type === \"registry:font\" ||\n component.type === \"registry:base\"\n )\n}\n\nfunction validateFilesTarget(\n files: z.infer<typeof registryItemFileSchema>[],\n cwd: string\n) {\n for (const file of files) {\n if (!file?.target) {\n continue\n }\n\n if (!isSafeTarget(file.target, cwd)) {\n throw new Error(\n `We found an unsafe file path \"${file.target} in the registry item. Installation aborted.`\n )\n }\n }\n}\n","import path from \"path\"\nimport { runInit } from \"@/src/commands/init\"\nimport { preFlightAdd } from \"@/src/preflights/preflight-add\"\nimport { getRegistryItems, getShadcnRegistryIndex } from \"@/src/registry/api\"\nimport { DEPRECATED_COMPONENTS } from \"@/src/registry/constants\"\nimport { clearRegistryContext } from \"@/src/registry/context\"\nimport { registryItemTypeSchema } from \"@/src/registry/schema\"\nimport { isUniversalRegistryItem } from \"@/src/registry/utils\"\nimport { addComponents } from \"@/src/utils/add-components\"\nimport { createProject } from \"@/src/utils/create-project\"\nimport { loadEnvFiles } from \"@/src/utils/env-loader\"\nimport * as ERRORS from \"@/src/utils/errors\"\nimport { createConfig, getConfig } from \"@/src/utils/get-config\"\nimport { getProjectInfo } from \"@/src/utils/get-project-info\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { ensureRegistriesInConfig } from \"@/src/utils/registries\"\nimport { updateAppIndex } from \"@/src/utils/update-app-index\"\nimport { Command } from \"commander\"\nimport prompts from \"prompts\"\nimport { z } from \"zod\"\n\nexport const addOptionsSchema = z.object({\n components: z.array(z.string()).optional(),\n yes: z.boolean(),\n overwrite: z.boolean(),\n cwd: z.string(),\n all: z.boolean(),\n path: z.string().optional(),\n silent: z.boolean(),\n srcDir: z.boolean().optional(),\n cssVariables: z.boolean(),\n})\n\nexport const add = new Command()\n .name(\"add\")\n .description(\"add a component to your project\")\n .argument(\"[components...]\", \"names, url or local path to component\")\n .option(\"-y, --yes\", \"skip confirmation prompt.\", false)\n .option(\"-o, --overwrite\", \"overwrite existing files.\", false)\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .option(\"-a, --all\", \"add all available components\", false)\n .option(\"-p, --path <path>\", \"the path to add the component to.\")\n .option(\"-s, --silent\", \"mute output.\", false)\n .option(\n \"--src-dir\",\n \"use the src directory when creating a new project.\",\n false\n )\n .option(\n \"--no-src-dir\",\n \"do not use the src directory when creating a new project.\"\n )\n .option(\"--css-variables\", \"use css variables for theming.\", true)\n .option(\"--no-css-variables\", \"do not use css variables for theming.\")\n .action(async (components, opts) => {\n try {\n const options = addOptionsSchema.parse({\n components,\n cwd: path.resolve(opts.cwd),\n ...opts,\n })\n\n await loadEnvFiles(options.cwd)\n\n let initialConfig = await getConfig(options.cwd)\n if (!initialConfig) {\n initialConfig = createConfig({\n style: \"new-york\",\n resolvedPaths: {\n cwd: options.cwd,\n },\n })\n }\n\n // Check for restricted component prefixes with base- or radix- styles.\n const restrictedComponentPrefixes = [\n \"sidebar-\",\n \"login-\",\n \"signup-\",\n \"otp-\",\n \"calendar-\",\n ]\n const restrictedStylePrefixes = [\"base-\", \"radix-\"]\n\n if (components.length > 0) {\n if (initialConfig?.style) {\n const isRestrictedStyle = restrictedStylePrefixes.some((prefix) =>\n initialConfig?.style.startsWith(prefix)\n )\n\n if (isRestrictedStyle) {\n const restrictedComponents = components.filter(\n (component: string) =>\n restrictedComponentPrefixes.some((prefix) =>\n component.startsWith(prefix)\n )\n )\n\n if (restrictedComponents.length) {\n logger.warn(\n `The ${highlighter.info(\n restrictedComponents\n .map((component: string) => component)\n .join(\", \")\n )} component(s) are not available for the ${highlighter.info(\n initialConfig.style\n )} style yet. They are coming soon.`\n )\n logger.warn(\n \"In the meantime, you can visit the blocks page on https://ui.shadcn.com/blocks and copy the code.\"\n )\n logger.break()\n process.exit(1)\n }\n }\n }\n }\n\n let hasNewRegistries = false\n if (components.length > 0) {\n const { config: updatedConfig, newRegistries } =\n await ensureRegistriesInConfig(components, initialConfig, {\n silent: options.silent,\n writeFile: false,\n })\n initialConfig = updatedConfig\n hasNewRegistries = newRegistries.length > 0\n }\n\n let itemType: z.infer<typeof registryItemTypeSchema> | undefined\n let shouldInstallBaseStyle = true\n if (components.length > 0) {\n const [registryItem] = await getRegistryItems([components[0]], {\n config: initialConfig,\n })\n itemType = registryItem?.type\n shouldInstallBaseStyle =\n itemType !== \"registry:theme\" && itemType !== \"registry:style\"\n\n if (isUniversalRegistryItem(registryItem)) {\n await addComponents(components, initialConfig, {\n ...options,\n baseStyle: shouldInstallBaseStyle,\n })\n return\n }\n\n if (\n !options.yes &&\n (itemType === \"registry:style\" || itemType === \"registry:theme\")\n ) {\n logger.break()\n const { confirm } = await prompts({\n type: \"confirm\",\n name: \"confirm\",\n message: highlighter.warn(\n `You are about to install a new ${itemType.replace(\n \"registry:\",\n \"\"\n )}. \\nExisting CSS variables and components will be overwritten. Continue?`\n ),\n })\n if (!confirm) {\n logger.break()\n logger.log(`Installation cancelled.`)\n logger.break()\n process.exit(1)\n }\n }\n }\n\n if (!options.components?.length) {\n options.components = await promptForRegistryComponents(options)\n }\n\n const projectInfo = await getProjectInfo(options.cwd)\n if (projectInfo?.tailwindVersion === \"v4\") {\n const deprecatedComponents = DEPRECATED_COMPONENTS.filter((component) =>\n options.components?.includes(component.name)\n )\n\n if (deprecatedComponents?.length) {\n logger.break()\n deprecatedComponents.forEach((component) => {\n logger.warn(highlighter.warn(component.message))\n })\n logger.break()\n process.exit(1)\n }\n }\n console.log({\n options,\n })\n\n await runInit({\n cwd: options.cwd,\n yes: true,\n force: true,\n defaults: false,\n skipPreflight: false,\n silent: options.silent && !hasNewRegistries,\n isNewProject: false,\n srcDir: options.srcDir,\n cssVariables: options.cssVariables,\n baseStyle: shouldInstallBaseStyle,\n baseColor: shouldInstallBaseStyle ? undefined : \"neutral\",\n components: options.components,\n })\n\n // let { errors, config } = await preFlightAdd(options)\n // console.log({\n // errors,\n // config,\n // })\n\n // // No components.json file. Prompt the user to run init.\n // let initHasRun = false\n // if (errors[ERRORS.MISSING_CONFIG]) {\n // // const { proceed } = await prompts({\n // // type: \"confirm\",\n // // name: \"proceed\",\n // // message: `You need to create a ${highlighter.info(\n // // \"components.json\"\n // // )} file to add components. Proceed?`,\n // // initial: true,\n // // })\n\n // // if (!proceed) {\n // // logger.break()\n // // process.exit(1)\n // // }\n\n // config = await runInit({\n // cwd: options.cwd,\n // yes: true,\n // force: true,\n // defaults: false,\n // skipPreflight: false,\n // silent: options.silent && !hasNewRegistries,\n // isNewProject: false,\n // srcDir: options.srcDir,\n // cssVariables: options.cssVariables,\n // baseStyle: shouldInstallBaseStyle,\n // baseColor: shouldInstallBaseStyle ? undefined : \"neutral\",\n // components: options.components,\n // })\n // initHasRun = true\n // }\n\n // let shouldUpdateAppIndex = false\n\n // if (errors[ERRORS.MISSING_DIR_OR_EMPTY_PROJECT]) {\n // const { projectPath, template } = await createProject({\n // cwd: options.cwd,\n // force: options.overwrite,\n // srcDir: options.srcDir,\n // components: options.components,\n // })\n // if (!projectPath) {\n // logger.break()\n // process.exit(1)\n // }\n // options.cwd = projectPath\n\n // if (template === \"next-monorepo\") {\n // options.cwd = path.resolve(options.cwd, \"apps/web\")\n // config = await getConfig(options.cwd)\n // } else {\n // config = await runInit({\n // cwd: options.cwd,\n // yes: true,\n // force: true,\n // defaults: false,\n // skipPreflight: true,\n // silent: !hasNewRegistries && options.silent,\n // isNewProject: true,\n // srcDir: options.srcDir,\n // cssVariables: options.cssVariables,\n // baseStyle: shouldInstallBaseStyle,\n // baseColor: shouldInstallBaseStyle ? undefined : \"neutral\",\n // components: options.components,\n // })\n // initHasRun = true\n\n // shouldUpdateAppIndex =\n // options.components?.length === 1 &&\n // !!options.components[0].match(/\\/chat\\/b\\//)\n // }\n // }\n\n // if (!config) {\n // throw new Error(\n // `Failed to read config at ${highlighter.info(options.cwd)}.`\n // )\n // }\n\n // const { config: updatedConfig } = await ensureRegistriesInConfig(\n // options.components,\n // config,\n // {\n // silent: options.silent || hasNewRegistries,\n // }\n // )\n // config = updatedConfig\n // console.log({\n // config,\n // })\n // if (!initHasRun) {\n // await addComponents(options.components, config, {\n // ...options,\n // baseStyle: shouldInstallBaseStyle,\n // })\n // }\n\n // If we're adding a single component and it's from the v0 registry,\n // let's update the app/page.tsx file to import the component.\n // if (shouldUpdateAppIndex) {\n // await updateAppIndex(options.components[0], config)\n // }\n } catch (error) {\n console.log(\"add error\")\n\n logger.break()\n handleError(error)\n } finally {\n clearRegistryContext()\n }\n })\n\nasync function promptForRegistryComponents(\n options: z.infer<typeof addOptionsSchema>\n) {\n const registryIndex = await getShadcnRegistryIndex()\n if (!registryIndex) {\n logger.break()\n handleError(new Error(\"Failed to fetch registry index.\"))\n return []\n }\n\n if (options.all) {\n return registryIndex\n .map((entry) => entry.name)\n .filter(\n (component) => !DEPRECATED_COMPONENTS.some((c) => c.name === component)\n )\n }\n\n if (options.components?.length) {\n return options.components\n }\n\n const { components } = await prompts({\n type: \"multiselect\",\n name: \"components\",\n message: \"Which components would you like to add?\",\n hint: \"Space to select. A to toggle all. Enter to submit.\",\n instructions: false,\n choices: registryIndex\n .filter(\n (entry) =>\n entry.type === \"registry:ui\" &&\n !DEPRECATED_COMPONENTS.some(\n (component) => component.name === entry.name\n )\n )\n .map((entry) => ({\n title: entry.name,\n value: entry.name,\n selected: options.all ? true : options.components?.includes(entry.name),\n })),\n })\n\n if (!components?.length) {\n logger.warn(\"No components selected. Exiting.\")\n logger.info(\"\")\n process.exit(1)\n }\n\n const result = z.array(z.string()).safeParse(components)\n if (!result.success) {\n logger.error(\"\")\n handleError(new Error(\"Something went wrong. Please try again.\"))\n return []\n }\n return result.data\n}\n","import path from \"path\"\nimport { buildOptionsSchema } from \"@/src/commands/build\"\nimport * as ERRORS from \"@/src/utils/errors\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport fs from \"fs-extra\"\nimport { z } from \"zod\"\n\nexport async function preFlightBuild(\n options: z.infer<typeof buildOptionsSchema>\n) {\n const errors: Record<string, boolean> = {}\n\n const resolvePaths = {\n cwd: options.cwd,\n registryFile: path.resolve(options.cwd, options.registryFile),\n outputDir: path.resolve(options.cwd, options.outputDir),\n }\n\n // Ensure registry file exists.\n if (!fs.existsSync(resolvePaths.registryFile)) {\n errors[ERRORS.BUILD_MISSING_REGISTRY_FILE] = true\n }\n\n // Create output directory if it doesn't exist.\n await fs.mkdir(resolvePaths.outputDir, { recursive: true })\n\n if (Object.keys(errors).length > 0) {\n if (errors[ERRORS.BUILD_MISSING_REGISTRY_FILE]) {\n logger.break()\n logger.error(\n `The path ${highlighter.info(\n resolvePaths.registryFile\n )} does not exist.`\n )\n }\n\n logger.break()\n process.exit(1)\n }\n\n return {\n errors,\n resolvePaths,\n }\n}\n","import * as fs from \"fs/promises\"\nimport * as path from \"path\"\nimport { preFlightBuild } from \"@/src/preflights/preflight-build\"\nimport { registryItemSchema, registrySchema } from \"@/src/schema\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { Command } from \"commander\"\nimport { z } from \"zod\"\n\nexport const buildOptionsSchema = z.object({\n cwd: z.string(),\n registryFile: z.string(),\n outputDir: z.string(),\n})\n\nexport const build = new Command()\n .name(\"build\")\n .description(\"build components for a shadcn registry\")\n .argument(\"[registry]\", \"path to registry.json file\", \"./registry.json\")\n .option(\n \"-o, --output <path>\",\n \"destination directory for json files\",\n \"./public/r\"\n )\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .action(async (registry: string, opts) => {\n try {\n const options = buildOptionsSchema.parse({\n cwd: path.resolve(opts.cwd),\n registryFile: registry,\n outputDir: opts.output,\n })\n\n const { resolvePaths } = await preFlightBuild(options)\n const content = await fs.readFile(resolvePaths.registryFile, \"utf-8\")\n\n const result = registrySchema.safeParse(JSON.parse(content))\n\n if (!result.success) {\n logger.error(\n `Invalid registry file found at ${highlighter.info(\n resolvePaths.registryFile\n )}.`\n )\n process.exit(1)\n }\n\n const buildSpinner = spinner(\"Building registry...\")\n for (const registryItem of result.data.items) {\n buildSpinner.start(`Building ${registryItem.name}...`)\n\n // Add the schema to the registry item.\n registryItem[\"$schema\"] =\n \"https://ui.shadcn.com/schema/registry-item.json\"\n\n // Loop through each file in the files array.\n for (const file of registryItem.files ?? []) {\n file[\"content\"] = await fs.readFile(\n path.resolve(resolvePaths.cwd, file.path),\n \"utf-8\"\n )\n }\n\n // Validate the registry item.\n const result = registryItemSchema.safeParse(registryItem)\n if (!result.success) {\n logger.error(\n `Invalid registry item found for ${highlighter.info(\n registryItem.name\n )}.`\n )\n continue\n }\n\n // Write the registry item to the output directory.\n await fs.writeFile(\n path.resolve(resolvePaths.outputDir, `${result.data.name}.json`),\n JSON.stringify(result.data, null, 2)\n )\n }\n\n // Copy registry.json to the output directory.\n await fs.copyFile(\n resolvePaths.registryFile,\n path.resolve(resolvePaths.outputDir, \"registry.json\")\n )\n\n buildSpinner.succeed(\"Building registry.\")\n } catch (error) {\n logger.break()\n handleError(error)\n }\n })\n","import path from \"path\"\nimport { getPreset, getPresets, getRegistryItems } from \"@/src/registry/api\"\nimport { configWithDefaults } from \"@/src/registry/config\"\nimport { clearRegistryContext } from \"@/src/registry/context\"\nimport { isUrl } from \"@/src/registry/utils\"\nimport { Preset } from \"@/src/schema\"\nimport { addComponents } from \"@/src/utils/add-components\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { ensureRegistriesInConfig } from \"@/src/utils/registries\"\nimport { updateFiles } from \"@/src/utils/updaters/update-files\"\nimport { Command } from \"commander\"\nimport dedent from \"dedent\"\nimport open from \"open\"\nimport prompts from \"prompts\"\n\nimport { initOptionsSchema, runInit } from \"./init\"\n\nconst SHADCN_URL = \"https://ui.shadcn.com\"\n\nconst CREATE_TEMPLATES = {\n next: \"Next.js\",\n vite: \"Vite\",\n start: \"TanStack Start\",\n} as const\n\ntype Template = keyof typeof CREATE_TEMPLATES\n\nexport const create = new Command()\n .name(\"create\")\n .description(\"create a new project with shadcn/ui\")\n .argument(\"[name]\", \"the name of your project\")\n .option(\n \"-t, --template <template>\",\n \"the template to use. e.g. next, start or vite\"\n )\n .option(\"-p, --preset [name]\", \"use a preset configuration\")\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .option(\n \"--src-dir\",\n \"use the src directory when creating a new project.\",\n false\n )\n .option(\n \"--no-src-dir\",\n \"do not use the src directory when creating a new project.\"\n )\n .option(\"-y, --yes\", \"skip confirmation prompt.\", true)\n .action(async (name, opts) => {\n try {\n // If no arguments or options provided, show initial prompt.\n const hasNoArgs = !name && !opts.template && !opts.preset\n if (hasNoArgs) {\n const createUrl = getShadcnCreateUrl()\n logger.log(\"Build your own shadcn/ui.\")\n logger.log(\n `You will be taken to ${highlighter.info(\n createUrl\n )} to build your custom design system.`\n )\n logger.break()\n\n const { proceed } = await prompts({\n type: \"confirm\",\n name: \"proceed\",\n message: \"Open in browser?\",\n initial: true,\n })\n\n if (proceed) {\n await open(createUrl)\n }\n\n process.exit(0)\n }\n\n // Prompt for project name if not provided.\n let projectName = name\n if (!projectName) {\n const { enteredName } = await prompts({\n type: \"text\",\n name: \"enteredName\",\n message: \"What is your project named?\",\n initial: opts.template ? `${opts.template}-app` : \"my-app\",\n format: (value: string) => value.trim(),\n validate: (value: string) =>\n value.length > 128\n ? `Name should be less than 128 characters.`\n : true,\n })\n\n if (!enteredName) {\n process.exit(0)\n }\n\n projectName = enteredName\n }\n\n // Prompt for template if not provided.\n let template = opts.template\n if (!template) {\n const { selectedTemplate } = await prompts({\n type: \"select\",\n name: \"selectedTemplate\",\n message: `Which ${highlighter.info(\n \"template\"\n )} would you like to use?`,\n choices: Object.entries(CREATE_TEMPLATES).map(([key, value]) => ({\n title: value,\n value: key,\n })),\n })\n\n if (!selectedTemplate) {\n process.exit(0)\n }\n\n template = selectedTemplate\n }\n\n // Handle preset selection.\n const presetResult = await handlePresetOption(opts.preset ?? true)\n\n if (!presetResult) {\n process.exit(0)\n }\n\n // Determine initUrl and baseColor based on preset type.\n let initUrl: string\n let baseColor: string\n\n if (\"_isUrl\" in presetResult) {\n // User provided a URL directly.\n initUrl = presetResult.url\n const url = new URL(presetResult.url)\n baseColor = url.searchParams.get(\"baseColor\") ?? \"neutral\"\n } else {\n // User selected a preset by name.\n initUrl = buildInitUrl(presetResult)\n baseColor = presetResult.baseColor\n }\n\n // Fetch the registry:base item to get its config.\n let shadowConfig = configWithDefaults({})\n const { config: updatedConfig } = await ensureRegistriesInConfig(\n [initUrl],\n shadowConfig,\n { silent: true }\n )\n shadowConfig = updatedConfig\n\n const [item] = await getRegistryItems([initUrl], {\n config: shadowConfig,\n })\n\n // Extract config from registry:base item.\n let registryBaseConfig = undefined\n if (item?.type === \"registry:base\" && item.config) {\n registryBaseConfig = item.config\n }\n\n const options = initOptionsSchema.parse({\n cwd: path.resolve(opts.cwd),\n name: projectName,\n components: [initUrl],\n yes: opts.yes,\n defaults: false,\n force: false,\n silent: false,\n isNewProject: true,\n srcDir: opts.srcDir,\n cssVariables: true,\n template,\n baseColor,\n baseStyle: false,\n registryBaseConfig,\n skipPreflight: false,\n })\n\n const config = await runInit(options)\n\n // Add component example.\n if (config) {\n await addComponents([\"component-example\"], config, {\n baseStyle: false,\n silent: true,\n overwrite: true,\n })\n\n const templateFiles = getTemplateFiles(template as Template)\n if (templateFiles.length > 0) {\n await updateFiles(templateFiles, config, {\n overwrite: true,\n silent: true,\n })\n }\n }\n\n logger.log(\n `${highlighter.success(\n \"Success!\"\n )} Project initialization completed.\\nYou may now add components.`\n )\n logger.break()\n } catch (error) {\n logger.break()\n handleError(error)\n } finally {\n clearRegistryContext()\n }\n })\n\nfunction buildInitUrl(preset: Preset) {\n const params = new URLSearchParams({\n base: preset.base,\n style: preset.style,\n baseColor: preset.baseColor,\n theme: preset.theme,\n iconLibrary: preset.iconLibrary,\n font: preset.font,\n menuAccent: preset.menuAccent,\n menuColor: preset.menuColor,\n radius: preset.radius,\n })\n\n return `${getShadcnInitUrl()}?${params.toString()}`\n}\n\nasync function handlePresetOption(presetArg: string | boolean) {\n // If --preset is used without a name, show interactive list.\n if (presetArg === true) {\n const presets = await getPresets()\n\n const { selectedPreset } = await prompts({\n type: \"select\",\n name: \"selectedPreset\",\n message: `Which ${highlighter.info(\"preset\")} would you like to use?`,\n choices: [\n ...presets.map((preset) => ({\n title: preset.title,\n description: preset.description,\n value: preset.name,\n })),\n {\n title: \"Custom\",\n description: \"Build your own on https://ui.shadcn.com\",\n value: \"custom\",\n },\n ],\n })\n\n if (!selectedPreset) {\n return null\n }\n\n if (selectedPreset === \"custom\") {\n const url = getShadcnCreateUrl()\n logger.info(`\\nOpening ${highlighter.info(url)} in your browser...\\n`)\n await open(url)\n return null\n }\n\n return presets.find((p) => p.name === selectedPreset) ?? null\n }\n\n // If --preset NAME or URL is provided.\n if (typeof presetArg === \"string\") {\n // Check if it's a URL.\n if (isUrl(presetArg)) {\n return { _isUrl: true, url: presetArg } as const\n }\n\n // Otherwise, fetch that preset by name.\n const preset = await getPreset(presetArg)\n\n if (!preset) {\n const presets = await getPresets()\n const presetNames = presets.map((p) => p.name).join(\", \")\n logger.error(\n `Preset \"${presetArg}\" not found. Available presets: ${presetNames}`\n )\n process.exit(1)\n }\n\n return preset\n }\n\n return null\n}\n\nfunction getTemplateFiles(template: Template) {\n switch (template) {\n case \"vite\":\n return [\n {\n type: \"registry:file\" as const,\n path: \"src/App.tsx\",\n target: \"src/App.tsx\",\n content: dedent`import { ComponentExample } from \"@/components/component-example\";\n\nexport function App() {\n return <ComponentExample />;\n}\n\nexport default App;\n`,\n },\n ]\n case \"next\":\n return [\n {\n type: \"registry:page\" as const,\n path: \"app/page.tsx\",\n target: \"app/page.tsx\",\n content: dedent`import { ComponentExample } from \"@/components/component-example\";\n\nexport default function Page() {\n return <ComponentExample />;\n}\n`,\n },\n ]\n case \"start\":\n return [\n {\n type: \"registry:file\" as const,\n path: \"src/routes/index.tsx\",\n target: \"src/routes/index.tsx\",\n content: dedent`import { createFileRoute } from \"@tanstack/react-router\";\nimport { ComponentExample } from \"@/components/component-example\";\n\nexport const Route = createFileRoute(\"/\")({ component: App });\n\nfunction App() {\n return (\n <ComponentExample />\n );\n}\n`,\n },\n ]\n default:\n return []\n }\n}\n\nfunction getShadcnCreateUrl() {\n return `${SHADCN_URL}/create`\n}\n\nfunction getShadcnInitUrl() {\n return `${SHADCN_URL}/init`\n}\n","import { existsSync, promises as fs } from \"fs\"\nimport path from \"path\"\nimport {\n fetchTree,\n getItemTargetPath,\n getRegistryBaseColor,\n getShadcnRegistryIndex,\n} from \"@/src/registry/api\"\nimport { registryIndexSchema } from \"@/src/schema\"\nimport { Config, getConfig } from \"@/src/utils/get-config\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { transform } from \"@/src/utils/transformers\"\nimport { Command } from \"commander\"\nimport { diffLines, type Change } from \"diff\"\nimport { z } from \"zod\"\n\nconst updateOptionsSchema = z.object({\n component: z.string().optional(),\n yes: z.boolean(),\n cwd: z.string(),\n path: z.string().optional(),\n})\n\nexport const diff = new Command()\n .name(\"diff\")\n .description(\"check for updates against the registry\")\n .argument(\"[component]\", \"the component name\")\n .option(\"-y, --yes\", \"skip confirmation prompt.\", false)\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .action(async (name, opts) => {\n try {\n const options = updateOptionsSchema.parse({\n component: name,\n ...opts,\n })\n\n const cwd = path.resolve(options.cwd)\n\n if (!existsSync(cwd)) {\n logger.error(`The path ${cwd} does not exist. Please try again.`)\n process.exit(1)\n }\n\n const config = await getConfig(cwd)\n if (!config) {\n logger.warn(\n `Configuration is missing. Please run ${highlighter.success(\n `init`\n )} to create a components.json file.`\n )\n process.exit(1)\n }\n\n const registryIndex = await getShadcnRegistryIndex()\n\n if (!registryIndex) {\n handleError(new Error(\"Failed to fetch registry index.\"))\n process.exit(1)\n }\n\n if (!options.component) {\n const targetDir = config.resolvedPaths.components\n\n // Find all components that exist in the project.\n const projectComponents = registryIndex.filter((item) => {\n for (const file of item.files ?? []) {\n const filePath = path.resolve(\n targetDir,\n typeof file === \"string\" ? file : file.path\n )\n if (existsSync(filePath)) {\n return true\n }\n }\n\n return false\n })\n\n // Check for updates.\n const componentsWithUpdates = []\n for (const component of projectComponents) {\n const changes = await diffComponent(component, config)\n if (changes.length) {\n componentsWithUpdates.push({\n name: component.name,\n changes,\n })\n }\n }\n\n if (!componentsWithUpdates.length) {\n logger.info(\"No updates found.\")\n process.exit(0)\n }\n\n logger.info(\"The following components have updates available:\")\n for (const component of componentsWithUpdates) {\n logger.info(`- ${component.name}`)\n for (const change of component.changes) {\n logger.info(` - ${change.filePath}`)\n }\n }\n logger.break()\n logger.info(\n `Run ${highlighter.success(`diff <component>`)} to see the changes.`\n )\n process.exit(0)\n }\n\n // Show diff for a single component.\n const component = registryIndex.find(\n (item) => item.name === options.component\n )\n\n if (!component) {\n logger.error(\n `The component ${highlighter.success(\n options.component\n )} does not exist.`\n )\n process.exit(1)\n }\n\n const changes = await diffComponent(component, config)\n\n if (!changes.length) {\n logger.info(`No updates found for ${options.component}.`)\n process.exit(0)\n }\n\n for (const change of changes) {\n logger.info(`- ${change.filePath}`)\n await printDiff(change.patch)\n logger.info(\"\")\n }\n } catch (error) {\n handleError(error)\n }\n })\n\nasync function diffComponent(\n component: z.infer<typeof registryIndexSchema>[number],\n config: Config\n) {\n const payload = await fetchTree(config.style, [component])\n const baseColor = await getRegistryBaseColor(config.tailwind.baseColor)\n\n if (!payload) {\n return []\n }\n\n const changes = []\n\n for (const item of payload) {\n const targetDir = await getItemTargetPath(config, item)\n\n if (!targetDir) {\n continue\n }\n\n for (const file of item.files ?? []) {\n const filePath = path.resolve(\n targetDir,\n typeof file === \"string\" ? file : file.path\n )\n\n if (!existsSync(filePath)) {\n continue\n }\n\n const fileContent = await fs.readFile(filePath, \"utf8\")\n\n if (typeof file === \"string\" || !file.content) {\n continue\n }\n\n const registryContent = await transform({\n filename: file.path,\n raw: file.content,\n config,\n baseColor,\n })\n\n const patch = diffLines(registryContent as string, fileContent)\n if (patch.length > 1) {\n changes.push({\n filePath,\n patch,\n })\n }\n }\n }\n\n return changes\n}\n\nasync function printDiff(diff: Change[]) {\n diff.forEach((part) => {\n if (part) {\n if (part.added) {\n return process.stdout.write(highlighter.success(part.value))\n }\n if (part.removed) {\n return process.stdout.write(highlighter.error(part.value))\n }\n\n return process.stdout.write(part.value)\n }\n })\n}\n","import { getConfig } from \"@/src/utils/get-config\"\nimport { getProjectInfo } from \"@/src/utils/get-project-info\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { logger } from \"@/src/utils/logger\"\nimport { Command } from \"commander\"\n\nexport const info = new Command()\n .name(\"info\")\n .description(\"get information about your project\")\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .action(async (opts) => {\n try {\n logger.info(\"> project info\")\n console.log(await getProjectInfo(opts.cwd))\n logger.break()\n logger.info(\"> components.json\")\n console.log(await getConfig(opts.cwd))\n } catch (error) {\n handleError(error)\n }\n })\n","import { promises as fs } from \"fs\"\nimport path from \"path\"\nimport { server } from \"@/src/mcp\"\nimport { loadEnvFiles } from \"@/src/utils/env-loader\"\nimport { getConfig } from \"@/src/utils/get-config\"\nimport { getPackageManager } from \"@/src/utils/get-package-manager\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { updateDependencies } from \"@/src/utils/updaters/update-dependencies\"\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\"\nimport { Command } from \"commander\"\nimport deepmerge from \"deepmerge\"\nimport { execa } from \"execa\"\nimport fsExtra from \"fs-extra\"\nimport prompts from \"prompts\"\nimport z from \"zod\"\n\nconst SHADCN_MCP_VERSION = \"latest\"\n\nconst CLIENTS = [\n {\n name: \"claude\",\n label: \"Claude Code\",\n configPath: \".mcp.json\",\n config: {\n mcpServers: {\n shadcn: {\n command: \"npx\",\n args: [`shadcn@${SHADCN_MCP_VERSION}`, \"mcp\"],\n },\n },\n },\n },\n {\n name: \"cursor\",\n label: \"Cursor\",\n configPath: \".cursor/mcp.json\",\n config: {\n mcpServers: {\n shadcn: {\n command: \"npx\",\n args: [`shadcn@${SHADCN_MCP_VERSION}`, \"mcp\"],\n },\n },\n },\n },\n {\n name: \"vscode\",\n label: \"VS Code\",\n configPath: \".vscode/mcp.json\",\n config: {\n servers: {\n shadcn: {\n command: \"npx\",\n args: [`shadcn@${SHADCN_MCP_VERSION}`, \"mcp\"],\n },\n },\n },\n },\n {\n name: \"codex\",\n label: \"Codex\",\n configPath: \".codex/config.toml\",\n config: `[mcp_servers.shadcn]\ncommand = \"npx\"\nargs = [\"shadcn@${SHADCN_MCP_VERSION}\", \"mcp\"]\n`,\n },\n] as const\n\nconst DEPENDENCIES = [`shadcn@${SHADCN_MCP_VERSION}`]\n\nexport const mcp = new Command()\n .name(\"mcp\")\n .description(\"MCP server and configuration commands\")\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .action(async (options) => {\n try {\n await loadEnvFiles(options.cwd)\n const transport = new StdioServerTransport()\n await server.connect(transport)\n } catch (error) {\n logger.break()\n handleError(error)\n }\n })\n\nconst mcpInitOptionsSchema = z.object({\n client: z.enum([\"claude\", \"cursor\", \"vscode\", \"codex\"]),\n cwd: z.string(),\n})\n\nmcp\n .command(\"init\")\n .description(\"Initialize MCP configuration for your client\")\n .option(\n \"--client <client>\",\n `MCP client (${CLIENTS.map((c) => c.name).join(\", \")})`\n )\n .action(async (opts, command) => {\n try {\n // Get the cwd from parent command.\n const parentOpts = command.parent?.opts() || {}\n const cwd = parentOpts.cwd || process.cwd()\n\n let client = opts.client\n\n if (!client) {\n const response = await prompts({\n type: \"select\",\n name: \"client\",\n message: \"Which MCP client are you using?\",\n choices: CLIENTS.map((c) => ({\n title: c.label,\n value: c.name,\n })),\n })\n\n if (!response.client) {\n logger.break()\n process.exit(1)\n }\n\n client = response.client\n }\n\n const options = mcpInitOptionsSchema.parse({\n client,\n cwd,\n })\n\n const config = await getConfig(options.cwd)\n\n if (options.client === \"codex\") {\n if (config) {\n await updateDependencies([], DEPENDENCIES, config, {\n silent: false,\n })\n } else {\n const packageManager = await getPackageManager(options.cwd)\n const installCommand = packageManager === \"npm\" ? \"install\" : \"add\"\n const devFlag = packageManager === \"npm\" ? \"--save-dev\" : \"-D\"\n\n const installSpinner = spinner(\"Installing dependencies...\").start()\n await execa(\n packageManager,\n [installCommand, devFlag, ...DEPENDENCIES],\n {\n cwd: options.cwd,\n }\n )\n installSpinner.succeed(\"Installing dependencies.\")\n }\n\n logger.break()\n logger.log(\"To configure the shadcn MCP server in Codex:\")\n logger.break()\n logger.log(\n `1. Open or create the file ${highlighter.info(\n \"~/.codex/config.toml\"\n )}`\n )\n logger.log(\"2. Add the following configuration:\")\n logger.log()\n logger.info(`[mcp_servers.shadcn]\ncommand = \"npx\"\nargs = [\"shadcn@${SHADCN_MCP_VERSION}\", \"mcp\"]`)\n logger.break()\n logger.info(\"3. Restart Codex to load the MCP server\")\n logger.break()\n process.exit(0)\n }\n\n const configSpinner = spinner(\"Configuring MCP server...\").start()\n const configPath = await runMcpInit(options)\n configSpinner.succeed(\"Configuring MCP server.\")\n\n if (config) {\n await updateDependencies([], DEPENDENCIES, config, {\n silent: false,\n })\n } else {\n const packageManager = await getPackageManager(options.cwd)\n const installCommand = packageManager === \"npm\" ? \"install\" : \"add\"\n const devFlag = packageManager === \"npm\" ? \"--save-dev\" : \"-D\"\n\n const installSpinner = spinner(\"Installing dependencies...\").start()\n await execa(\n packageManager,\n [installCommand, devFlag, ...DEPENDENCIES],\n {\n cwd: options.cwd,\n }\n )\n installSpinner.succeed(\"Installing dependencies.\")\n }\n\n logger.break()\n logger.success(`Configuration saved to ${configPath}.`)\n logger.break()\n } catch (error) {\n handleError(error)\n }\n })\n\nconst overwriteMerge = (_: any[], sourceArray: any[]) => sourceArray\n\nasync function runMcpInit(options: z.infer<typeof mcpInitOptionsSchema>) {\n const { client, cwd } = options\n\n const clientInfo = CLIENTS.find((c) => c.name === client)\n if (!clientInfo) {\n throw new Error(\n `Unknown client: ${client}. Available clients: ${CLIENTS.map(\n (c) => c.name\n ).join(\", \")}`\n )\n }\n\n const configPath = path.join(cwd, clientInfo.configPath)\n const dir = path.dirname(configPath)\n await fsExtra.ensureDir(dir)\n\n // Handle JSON format.\n let existingConfig = {}\n try {\n const content = await fs.readFile(configPath, \"utf-8\")\n existingConfig = JSON.parse(content)\n } catch {}\n\n const mergedConfig = deepmerge(\n existingConfig,\n clientInfo.config as Record<string, unknown>,\n { arrayMerge: overwriteMerge }\n )\n\n await fs.writeFile(\n configPath,\n JSON.stringify(mergedConfig, null, 2) + \"\\n\",\n \"utf-8\"\n )\n\n return clientInfo.configPath\n}\n","export const LEGACY_ICON_LIBRARIES = {\n lucide: {\n name: \"lucide-react\",\n package: \"lucide-react\",\n import: \"lucide-react\",\n },\n radix: {\n name: \"@radix-ui/react-icons\",\n package: \"@radix-ui/react-icons\",\n import: \"@radix-ui/react-icons\",\n },\n}\n","import { randomBytes } from \"crypto\"\nimport { promises as fs } from \"fs\"\nimport { tmpdir } from \"os\"\nimport path from \"path\"\nimport { getRegistryIcons } from \"@/src/registry/api\"\nimport { iconsSchema } from \"@/src/schema\"\nimport { Config } from \"@/src/utils/get-config\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { LEGACY_ICON_LIBRARIES } from \"@/src/utils/legacy-icon-libraries\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { updateDependencies } from \"@/src/utils/updaters/update-dependencies\"\nimport fg from \"fast-glob\"\nimport prompts from \"prompts\"\nimport { Project, ScriptKind, SyntaxKind } from \"ts-morph\"\nimport { z } from \"zod\"\n\nexport async function migrateIcons(config: Config) {\n if (!config.resolvedPaths.ui) {\n throw new Error(\n \"We could not find a valid `ui` path in your `components.json` file. Please ensure you have a valid `ui` path in your `components.json` file.\"\n )\n }\n\n const uiPath = config.resolvedPaths.ui\n const [files, registryIcons] = await Promise.all([\n fg(\"**/*.{js,ts,jsx,tsx}\", {\n cwd: uiPath,\n }),\n getRegistryIcons(),\n ])\n\n if (Object.keys(registryIcons).length === 0) {\n throw new Error(\"Something went wrong fetching the registry icons.\")\n }\n\n const libraryChoices = Object.entries(LEGACY_ICON_LIBRARIES).map(\n ([name, iconLibrary]) => ({\n title: iconLibrary.name,\n value: name,\n })\n )\n\n const migrateOptions = await prompts([\n {\n type: \"select\",\n name: \"sourceLibrary\",\n message: `Which icon library would you like to ${highlighter.info(\n \"migrate from\"\n )}?`,\n choices: libraryChoices,\n },\n {\n type: \"select\",\n name: \"targetLibrary\",\n message: `Which icon library would you like to ${highlighter.info(\n \"migrate to\"\n )}?`,\n choices: libraryChoices,\n },\n ])\n\n if (migrateOptions.sourceLibrary === migrateOptions.targetLibrary) {\n throw new Error(\n \"You cannot migrate to the same icon library. Please choose a different icon library.\"\n )\n }\n\n if (\n !(\n migrateOptions.sourceLibrary in LEGACY_ICON_LIBRARIES &&\n migrateOptions.targetLibrary in LEGACY_ICON_LIBRARIES\n )\n ) {\n throw new Error(\"Invalid icon library. Please choose a valid icon library.\")\n }\n\n const sourceLibrary =\n LEGACY_ICON_LIBRARIES[\n migrateOptions.sourceLibrary as keyof typeof LEGACY_ICON_LIBRARIES\n ]\n const targetLibrary =\n LEGACY_ICON_LIBRARIES[\n migrateOptions.targetLibrary as keyof typeof LEGACY_ICON_LIBRARIES\n ]\n const { confirm } = await prompts({\n type: \"confirm\",\n name: \"confirm\",\n initial: true,\n message: `We will migrate ${highlighter.info(\n files.length\n )} files in ${highlighter.info(\n `./${path.relative(config.resolvedPaths.cwd, uiPath)}`\n )} from ${highlighter.info(sourceLibrary.name)} to ${highlighter.info(\n targetLibrary.name\n )}. Continue?`,\n })\n\n if (!confirm) {\n logger.info(\"Migration cancelled.\")\n process.exit(0)\n }\n\n if (targetLibrary.package) {\n await updateDependencies([targetLibrary.package], [], config, {\n silent: false,\n })\n }\n\n const migrationSpinner = spinner(`Migrating icons...`)?.start()\n\n await Promise.all(\n files.map(async (file) => {\n migrationSpinner.text = `Migrating ${file}...`\n\n const filePath = path.join(uiPath, file)\n const fileContent = await fs.readFile(filePath, \"utf-8\")\n\n const content = await migrateIconsFile(\n fileContent,\n migrateOptions.sourceLibrary,\n migrateOptions.targetLibrary,\n registryIcons\n )\n\n await fs.writeFile(filePath, content)\n })\n )\n\n migrationSpinner.succeed(\"Migration complete.\")\n}\n\nexport async function migrateIconsFile(\n content: string,\n sourceLibrary: keyof typeof LEGACY_ICON_LIBRARIES,\n targetLibrary: keyof typeof LEGACY_ICON_LIBRARIES,\n iconsMapping: z.infer<typeof iconsSchema>\n) {\n const sourceLibraryImport = LEGACY_ICON_LIBRARIES[sourceLibrary]?.import\n const targetLibraryImport = LEGACY_ICON_LIBRARIES[targetLibrary]?.import\n\n const dir = await fs.mkdtemp(path.join(tmpdir(), \"shadcn-\"))\n const project = new Project({\n compilerOptions: {},\n })\n\n const tempFile = path.join(\n dir,\n `shadcn-icons-${randomBytes(4).toString(\"hex\")}.tsx`\n )\n const sourceFile = project.createSourceFile(tempFile, content, {\n scriptKind: ScriptKind.TSX,\n })\n\n // Find all sourceLibrary imports.\n let targetedIcons: string[] = []\n for (const importDeclaration of sourceFile.getImportDeclarations() ?? []) {\n if (\n importDeclaration.getModuleSpecifier()?.getText() !==\n `\"${sourceLibraryImport}\"`\n ) {\n continue\n }\n\n for (const specifier of importDeclaration.getNamedImports() ?? []) {\n const iconName = specifier.getName()\n\n // TODO: this is O(n^2) but okay for now.\n const targetedIcon = Object.values(iconsMapping).find(\n (icon) => icon[sourceLibrary] === iconName\n )?.[targetLibrary]\n\n if (!targetedIcon || targetedIcons.includes(targetedIcon)) {\n continue\n }\n\n targetedIcons.push(targetedIcon)\n\n // Remove the named import.\n specifier.remove()\n\n // Replace with the targeted icon.\n sourceFile\n .getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement)\n .filter((node) => node.getTagNameNode()?.getText() === iconName)\n .forEach((node) => node.getTagNameNode()?.replaceWithText(targetedIcon))\n }\n\n // If the named import is empty, remove the import declaration.\n if (importDeclaration.getNamedImports()?.length === 0) {\n importDeclaration.remove()\n }\n }\n\n if (targetedIcons.length > 0) {\n sourceFile.addImportDeclaration({\n moduleSpecifier: targetLibraryImport,\n namedImports: targetedIcons.map((icon) => ({\n name: icon,\n })),\n })\n }\n\n return await sourceFile.getText()\n}\n","import { promises as fs } from \"fs\"\nimport path from \"path\"\nimport { Config } from \"@/src/utils/get-config\"\nimport { getPackageInfo } from \"@/src/utils/get-package-info\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { updateDependencies } from \"@/src/utils/updaters/update-dependencies\"\nimport fg from \"fast-glob\"\nimport prompts from \"prompts\"\n\nfunction toPascalCase(str: string): string {\n return str\n .split(\"-\")\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\"\")\n}\n\nfunction processNamedImports(\n namedImports: string,\n isTypeOnly: boolean,\n imports: Array<{ name: string; alias?: string; isType?: boolean }>,\n packageName: string\n) {\n // Clean up multi-line imports.\n // Remove comments and whitespace.\n const cleanedImports = namedImports\n .replace(/\\/\\/.*$/gm, \"\")\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, \"\")\n .replace(/\\s+/g, \" \")\n .trim()\n\n const namedImportList = cleanedImports\n .split(\",\")\n .map((importItem) => importItem.trim())\n .filter(Boolean)\n\n for (const importItem of namedImportList) {\n const inlineTypeMatch = importItem.match(/^type\\s+(\\w+)(?:\\s+as\\s+(\\w+))?$/)\n const aliasMatch = importItem.match(/^(\\w+)\\s+as\\s+(\\w+)$/)\n\n if (inlineTypeMatch) {\n // Inline type: \"type DialogProps\" or \"type DialogProps as Props\"\n const importName = inlineTypeMatch[1]\n const importAlias = inlineTypeMatch[2]\n\n if (packageName === \"slot\" && importName === \"Slot\" && !importAlias) {\n imports.push({\n name: \"Slot\",\n alias: \"SlotPrimitive\",\n isType: true,\n })\n } else {\n imports.push({\n name: importName,\n alias: importAlias,\n isType: true,\n })\n }\n } else if (aliasMatch) {\n // Regular import with alias: \"Root as DialogRoot\"\n const importName = aliasMatch[1]\n const importAlias = aliasMatch[2]\n\n if (\n packageName === \"slot\" &&\n importName === \"Slot\" &&\n importAlias === \"Slot\"\n ) {\n imports.push({\n name: \"Slot\",\n alias: \"SlotPrimitive\",\n isType: isTypeOnly,\n })\n } else {\n imports.push({\n name: importName,\n alias: importAlias,\n isType: isTypeOnly,\n })\n }\n } else {\n // Simple import: \"Root\"\n // Special handling for Slot: always alias it as SlotPrimitive\n if (packageName === \"slot\" && importItem === \"Slot\") {\n imports.push({\n name: \"Slot\",\n alias: \"SlotPrimitive\",\n isType: isTypeOnly,\n })\n } else {\n imports.push({\n name: importItem,\n isType: isTypeOnly,\n })\n }\n }\n }\n}\n\nexport async function migrateRadix(\n config: Config,\n options: { yes?: boolean } = {}\n) {\n if (!config.resolvedPaths.ui) {\n throw new Error(\n \"We could not find a valid `ui` path in your `components.json` file. Please ensure you have a valid `ui` path in your `components.json` file.\"\n )\n }\n\n const uiPath = config.resolvedPaths.ui\n const files = await fg(\"**/*.{js,ts,jsx,tsx}\", {\n cwd: uiPath,\n })\n\n if (!options.yes) {\n const { confirm } = await prompts({\n type: \"confirm\",\n name: \"confirm\",\n initial: true,\n message: `We will migrate ${highlighter.info(\n files.length\n )} files in ${highlighter.info(\n `./${path.relative(config.resolvedPaths.cwd, uiPath)}`\n )} to ${highlighter.info(\"radix-ui\")}. Continue?`,\n })\n\n if (!confirm) {\n logger.info(\"Migration cancelled.\")\n process.exit(0)\n }\n }\n\n const migrationSpinner = spinner(`Migrating imports...`)?.start()\n const foundPackages = new Set<string>()\n\n await Promise.all(\n files.map(async (file) => {\n migrationSpinner.text = `Migrating ${file}...`\n\n const filePath = path.join(uiPath, file)\n const fileContent = await fs.readFile(filePath, \"utf-8\")\n\n const { content, replacedPackages } = await migrateRadixFile(fileContent)\n\n // Track which packages we found\n replacedPackages.forEach((pkg) => foundPackages.add(pkg))\n\n await fs.writeFile(filePath, content)\n })\n )\n\n migrationSpinner.succeed(\"Migrating imports.\")\n\n // Update package.json dependencies\n const packageSpinner = spinner(`Updating package.json...`)?.start()\n\n try {\n const packageJson = getPackageInfo(config.resolvedPaths.cwd, false)\n\n if (!packageJson) {\n packageSpinner.fail(\"Could not read package.json\")\n logger.warn(\n \"Could not update package.json. You may need to manually replace @radix-ui/react-* packages with radix-ui\"\n )\n return\n }\n\n const foundPackagesArray = Array.from(foundPackages)\n\n // Remove packages from both dependencies and devDependencies if found in source files\n const dependencyTypes = [\"dependencies\", \"devDependencies\"] as const\n for (const depType of dependencyTypes) {\n if (packageJson[depType]) {\n for (const pkg of foundPackagesArray) {\n if (packageJson[depType]![pkg]) {\n delete packageJson[depType]![pkg]\n }\n }\n }\n }\n\n // Add radix-ui if we found any Radix packages.\n if (foundPackagesArray.length > 0) {\n if (!packageJson.dependencies) {\n packageJson.dependencies = {}\n }\n packageJson.dependencies[\"radix-ui\"] = \"latest\"\n\n const packageJsonPath = path.join(\n config.resolvedPaths.cwd,\n \"package.json\"\n )\n await fs.writeFile(\n packageJsonPath,\n JSON.stringify(packageJson, null, 2) + \"\\n\"\n )\n\n packageSpinner.succeed(`Updated package.json.`)\n\n // Install radix-ui dependency.\n await updateDependencies([\"radix-ui\"], [], config, { silent: false })\n } else {\n packageSpinner.succeed(\"No packages found in source files.\")\n }\n } catch (error) {\n packageSpinner.fail(\"Failed to update package.json\")\n logger.warn(\n \"You may need to manually replace @radix-ui/react-* packages with radix-ui\"\n )\n }\n}\n\nexport async function migrateRadixFile(\n content: string\n): Promise<{ content: string; replacedPackages: string[] }> {\n // Enhanced regex to handle type-only imports, but exclude react-icons\n // Also capture optional semicolon at the end\n const radixImportPattern =\n /import\\s+(?:(type)\\s+)?(?:\\*\\s+as\\s+(\\w+)|{([^}]+)})\\s+from\\s+([\"'])@radix-ui\\/react-([^\"']+)\\4(;?)/g\n\n const imports: Array<{ name: string; alias?: string; isType?: boolean }> = []\n const linesToRemove: string[] = []\n const replacedPackages: string[] = []\n let quoteStyle = '\"' // Default to double quotes\n let hasSemicolon = false // Track if any import had a semicolon\n\n let result = content\n let match\n\n // Find all Radix imports\n while ((match = radixImportPattern.exec(content)) !== null) {\n const [\n fullMatch,\n typeKeyword,\n namespaceAlias,\n namedImports,\n quote,\n packageName,\n semicolon,\n ] = match\n\n // Skip react-icons package and any sub-paths (like react-icons/dist/types)\n if (packageName === \"icons\" || packageName.startsWith(\"icons/\")) {\n continue\n }\n\n linesToRemove.push(fullMatch)\n\n // Use the quote style and semicolon style from the first import\n if (linesToRemove.length === 1) {\n quoteStyle = quote\n hasSemicolon = semicolon === \";\"\n }\n\n // Track which package we're replacing\n replacedPackages.push(`@radix-ui/react-${packageName}`)\n\n const isTypeOnly = Boolean(typeKeyword)\n\n if (namespaceAlias) {\n // Handle namespace imports: import * as DialogPrimitive from \"@radix-ui/react-dialog\"\n const componentName = toPascalCase(packageName)\n imports.push({\n name: componentName,\n alias: namespaceAlias,\n isType: isTypeOnly,\n })\n } else if (namedImports) {\n // Handle named imports: import { Root, Trigger } from \"@radix-ui/react-dialog\"\n // or import type { DialogProps } from \"@radix-ui/react-dialog\"\n // or import { type DialogProps, Root } from \"@radix-ui/react-dialog\"\n\n processNamedImports(namedImports, isTypeOnly, imports, packageName)\n }\n }\n\n if (imports.length === 0) {\n return {\n content,\n replacedPackages: [],\n }\n }\n\n // Remove duplicates.\n // Considering name, alias, and type status.\n const uniqueImports = imports.filter(\n (importName, index, self) =>\n index ===\n self.findIndex(\n (i) =>\n i.name === importName.name &&\n i.alias === importName.alias &&\n i.isType === importName.isType\n )\n )\n\n // Create the unified import with preserved quote style and type annotations\n const importList = uniqueImports\n .map((imp) => {\n const typePrefix = imp.isType ? \"type \" : \"\"\n return imp.alias\n ? `${typePrefix}${imp.name} as ${imp.alias}`\n : `${typePrefix}${imp.name}`\n })\n .join(\", \")\n\n const unifiedImport = `import { ${importList} } from ${quoteStyle}radix-ui${quoteStyle}${\n hasSemicolon ? \";\" : \"\"\n }`\n\n // Replace first import with unified import, remove the rest\n result = linesToRemove.reduce((acc, line, index) => {\n return acc.replace(line, index === 0 ? unifiedImport : \"\")\n }, result)\n\n // Clean up extra blank lines\n result = result.replace(/\\n\\s*\\n\\s*\\n/g, \"\\n\\n\")\n\n // Handle special case for Slot usage transformation\n // Now that we import { Slot as SlotPrimitive }, we need to:\n // 1. Transform: const Comp = asChild ? Slot : [ANYTHING] -> const Comp = asChild ? SlotPrimitive.Slot : [ANYTHING]\n // 2. Transform: React.ComponentProps<typeof Slot> -> React.ComponentProps<typeof SlotPrimitive.Slot>\n const hasSlotImport = uniqueImports.some(\n (imp) => imp.name === \"Slot\" && imp.alias === \"SlotPrimitive\"\n )\n\n if (hasSlotImport) {\n // Find all lines that are NOT import lines to avoid transforming the import statement itself\n const lines = result.split(\"\\n\")\n const transformedLines = lines.map((line) => {\n // Skip import lines\n if (line.trim().startsWith(\"import \")) {\n return line\n }\n\n let transformedLine = line\n\n // Handle all Slot references in one comprehensive pass\n // Use placeholders to avoid double replacements\n\n // First, mark specific patterns with placeholders\n transformedLine = transformedLine.replace(\n /\\b(asChild\\s*\\?\\s*)Slot(\\s*:)/g,\n \"$1__SLOT_PLACEHOLDER__$2\"\n )\n\n transformedLine = transformedLine.replace(\n /\\bReact\\.ComponentProps<typeof\\s+Slot>/g,\n \"React.ComponentProps<typeof __SLOT_PLACEHOLDER__>\"\n )\n\n transformedLine = transformedLine.replace(\n /\\bComponentProps<typeof\\s+Slot>/g,\n \"ComponentProps<typeof __SLOT_PLACEHOLDER__>\"\n )\n\n transformedLine = transformedLine.replace(\n /(<\\/?)Slot(\\s*\\/?>)/g,\n \"$1__SLOT_PLACEHOLDER__$2\"\n )\n\n // Handle any other standalone Slot usage\n transformedLine = transformedLine.replace(\n /\\bSlot\\b/g,\n (match, offset, string) => {\n // Don't transform if it's inside quotes\n const beforeMatch = string.substring(0, offset)\n const openQuotes = (beforeMatch.match(/\"/g) || []).length\n const openSingleQuotes = (beforeMatch.match(/'/g) || []).length\n\n // If we're inside quotes, don't transform\n if (openQuotes % 2 !== 0 || openSingleQuotes % 2 !== 0) {\n return match\n }\n\n return \"__SLOT_PLACEHOLDER__\"\n }\n )\n\n // Finally, replace all placeholders with SlotPrimitive.Slot\n transformedLine = transformedLine.replace(\n /__SLOT_PLACEHOLDER__/g,\n \"SlotPrimitive.Slot\"\n )\n\n return transformedLine\n })\n\n result = transformedLines.join(\"\\n\")\n }\n\n // Remove duplicate packages\n const uniqueReplacedPackages = Array.from(new Set(replacedPackages))\n\n return {\n content: result,\n replacedPackages: uniqueReplacedPackages,\n }\n}\n","import path from \"path\"\nimport { addOptionsSchema } from \"@/src/commands/add\"\nimport { migrateOptionsSchema } from \"@/src/commands/migrate\"\nimport * as ERRORS from \"@/src/utils/errors\"\nimport { getConfig } from \"@/src/utils/get-config\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport fs from \"fs-extra\"\nimport { z } from \"zod\"\n\nexport async function preFlightMigrate(\n options: z.infer<typeof migrateOptionsSchema>\n) {\n const errors: Record<string, boolean> = {}\n\n // Ensure target directory exists.\n // Check for empty project. We assume if no package.json exists, the project is empty.\n if (\n !fs.existsSync(options.cwd) ||\n !fs.existsSync(path.resolve(options.cwd, \"package.json\"))\n ) {\n errors[ERRORS.MISSING_DIR_OR_EMPTY_PROJECT] = true\n return {\n errors,\n config: null,\n }\n }\n\n // Check for existing components.json file.\n if (!fs.existsSync(path.resolve(options.cwd, \"components.json\"))) {\n errors[ERRORS.MISSING_CONFIG] = true\n return {\n errors,\n config: null,\n }\n }\n\n try {\n const config = await getConfig(options.cwd)\n\n return {\n errors,\n config: config!,\n }\n } catch (error) {\n logger.break()\n logger.error(\n `An invalid ${highlighter.info(\n \"components.json\"\n )} file was found at ${highlighter.info(\n options.cwd\n )}.\\nBefore you can run a migration, you must create a valid ${highlighter.info(\n \"components.json\"\n )} file by running the ${highlighter.info(\"init\")} command.`\n )\n logger.error(\n `Learn more at ${highlighter.info(\n \"https://ui.shadcn.com/docs/components-json\"\n )}.`\n )\n logger.break()\n process.exit(1)\n }\n}\n","import path from \"path\"\nimport { migrateIcons } from \"@/src/migrations/migrate-icons\"\nimport { migrateRadix } from \"@/src/migrations/migrate-radix\"\nimport { preFlightMigrate } from \"@/src/preflights/preflight-migrate\"\nimport * as ERRORS from \"@/src/utils/errors\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { logger } from \"@/src/utils/logger\"\nimport { Command } from \"commander\"\nimport { z } from \"zod\"\n\nexport const migrations = [\n {\n name: \"icons\",\n description: \"migrate your ui components to a different icon library.\",\n },\n {\n name: \"radix\",\n description: \"migrate to radix-ui.\",\n },\n] as const\n\nexport const migrateOptionsSchema = z.object({\n cwd: z.string(),\n list: z.boolean(),\n yes: z.boolean(),\n migration: z\n .string()\n .refine(\n (value) =>\n value && migrations.some((migration) => migration.name === value),\n {\n message:\n \"You must specify a valid migration. Run `shadcn migrate --list` to see available migrations.\",\n }\n )\n .optional(),\n})\n\nexport const migrate = new Command()\n .name(\"migrate\")\n .description(\"run a migration.\")\n .argument(\"[migration]\", \"the migration to run.\")\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .option(\"-l, --list\", \"list all migrations.\", false)\n .option(\"-y, --yes\", \"skip confirmation prompt.\", false)\n .action(async (migration, opts) => {\n try {\n const options = migrateOptionsSchema.parse({\n cwd: path.resolve(opts.cwd),\n migration,\n list: opts.list,\n yes: opts.yes,\n })\n\n if (options.list || !options.migration) {\n logger.info(\"Available migrations:\")\n for (const migration of migrations) {\n logger.info(`- ${migration.name}: ${migration.description}`)\n }\n return\n }\n\n if (!options.migration) {\n throw new Error(\n \"You must specify a migration. Run `shadcn migrate --list` to see available migrations.\"\n )\n }\n\n let { errors, config } = await preFlightMigrate(options)\n\n if (\n errors[ERRORS.MISSING_DIR_OR_EMPTY_PROJECT] ||\n errors[ERRORS.MISSING_CONFIG]\n ) {\n throw new Error(\n \"No `components.json` file found. Ensure you are at the root of your project.\"\n )\n }\n\n if (!config) {\n throw new Error(\n \"Something went wrong reading your `components.json` file. Please ensure you have a valid `components.json` file.\"\n )\n }\n\n if (options.migration === \"icons\") {\n await migrateIcons(config)\n }\n\n if (options.migration === \"radix\") {\n await migrateRadix(config, { yes: options.yes })\n }\n } catch (error) {\n logger.break()\n handleError(error)\n }\n })\n","import path from \"path\"\nimport { buildOptionsSchema } from \"@/src/commands/build\"\nimport * as ERRORS from \"@/src/utils/errors\"\nimport { getConfig } from \"@/src/utils/get-config\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport fs from \"fs-extra\"\nimport { z } from \"zod\"\n\nexport async function preFlightRegistryBuild(\n options: z.infer<typeof buildOptionsSchema>\n) {\n const errors: Record<string, boolean> = {}\n\n const resolvePaths = {\n cwd: options.cwd,\n registryFile: path.resolve(options.cwd, options.registryFile),\n outputDir: path.resolve(options.cwd, options.outputDir),\n }\n\n // Ensure registry file exists.\n if (!fs.existsSync(resolvePaths.registryFile)) {\n errors[ERRORS.BUILD_MISSING_REGISTRY_FILE] = true\n return {\n errors,\n resolvePaths: null,\n config: null,\n }\n }\n\n // Check for existing components.json file.\n if (!fs.existsSync(path.resolve(options.cwd, \"components.json\"))) {\n errors[ERRORS.MISSING_CONFIG] = true\n return {\n errors,\n resolvePaths: null,\n config: null,\n }\n }\n\n // Create output directory if it doesn't exist.\n await fs.mkdir(resolvePaths.outputDir, { recursive: true })\n\n try {\n const config = await getConfig(options.cwd)\n\n return {\n errors,\n config: config!,\n resolvePaths,\n }\n } catch (error) {\n logger.break()\n logger.error(\n `An invalid ${highlighter.info(\n \"components.json\"\n )} file was found at ${highlighter.info(\n options.cwd\n )}.\\nBefore you can build the registry, you must create a valid ${highlighter.info(\n \"components.json\"\n )} file by running the ${highlighter.info(\"init\")} command.`\n )\n logger.break()\n process.exit(1)\n }\n}\n","import * as fs from \"fs/promises\"\nimport * as path from \"path\"\nimport { preFlightRegistryBuild } from \"@/src/preflights/preflight-registry\"\nimport { recursivelyResolveFileImports } from \"@/src/registry/utils\"\nimport { configSchema, registryItemSchema, registrySchema } from \"@/src/schema\"\nimport * as ERRORS from \"@/src/utils/errors\"\nimport { ProjectInfo, getProjectInfo } from \"@/src/utils/get-project-info\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { Command } from \"commander\"\nimport { z } from \"zod\"\n\nexport const buildOptionsSchema = z.object({\n cwd: z.string(),\n registryFile: z.string(),\n outputDir: z.string(),\n verbose: z.boolean().optional().default(false),\n})\n\nexport const build = new Command()\n .name(\"registry:build\")\n .description(\"builds the registry [EXPERIMENTAL]\")\n .argument(\"[registry]\", \"path to registry.json file\", \"./registry.json\")\n .option(\n \"-o, --output <path>\",\n \"destination directory for json files\",\n \"./public/r\"\n )\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .option(\"-v, --verbose\", \"verbose output\")\n .action(async (registry: string, opts) => {\n await buildRegistry({\n cwd: path.resolve(opts.cwd),\n registryFile: registry,\n outputDir: opts.output,\n verbose: opts.verbose,\n })\n })\n\nasync function buildRegistry(opts: z.infer<typeof buildOptionsSchema>) {\n try {\n const options = buildOptionsSchema.parse(opts)\n\n const [{ errors, resolvePaths, config }, projectInfo] = await Promise.all([\n preFlightRegistryBuild(options),\n getProjectInfo(options.cwd),\n ])\n\n if (errors[ERRORS.MISSING_CONFIG] || !config || !projectInfo) {\n logger.error(\n `A ${highlighter.info(\n \"components.json\"\n )} file is required to build the registry. Run ${highlighter.info(\n \"shadcn init\"\n )} to create one.`\n )\n logger.break()\n process.exit(1)\n }\n\n if (errors[ERRORS.BUILD_MISSING_REGISTRY_FILE] || !resolvePaths) {\n logger.error(\n `We could not find a registry file at ${highlighter.info(\n path.resolve(options.cwd, options.registryFile)\n )}.`\n )\n logger.break()\n process.exit(1)\n }\n\n const content = await fs.readFile(resolvePaths.registryFile, \"utf-8\")\n const result = registrySchema.safeParse(JSON.parse(content))\n\n if (!result.success) {\n logger.error(\n `Invalid registry file found at ${highlighter.info(\n resolvePaths.registryFile\n )}.`\n )\n logger.break()\n process.exit(1)\n }\n\n const buildSpinner = spinner(\"Building registry...\")\n\n // Recursively resolve the registry items.\n const resolvedRegistry = await resolveRegistryItems(\n result.data,\n config,\n projectInfo\n )\n\n // Loop through the registry items and remove duplicates files i.e same path.\n for (const registryItem of resolvedRegistry.items) {\n // Deduplicate files\n registryItem.files = registryItem.files?.filter(\n (file, index, self) =>\n index === self.findIndex((t) => t.path === file.path)\n )\n\n // Deduplicate dependencies\n if (registryItem.dependencies) {\n registryItem.dependencies = registryItem.dependencies.filter(\n (dep, index, self) => index === self.findIndex((d) => d === dep)\n )\n }\n }\n\n for (const registryItem of resolvedRegistry.items) {\n if (!registryItem.files) {\n continue\n }\n\n buildSpinner.start(`Building ${registryItem.name}...`)\n\n // Add the schema to the registry item.\n registryItem[\"$schema\"] =\n \"https://ui.shadcn.com/schema/registry-item.json\"\n\n for (const file of registryItem.files) {\n const absPath = path.resolve(resolvePaths.cwd, file.path)\n try {\n const stat = await fs.stat(absPath)\n if (!stat.isFile()) {\n continue\n }\n file[\"content\"] = await fs.readFile(absPath, \"utf-8\")\n } catch (err) {\n console.error(\"Error reading file in registry build:\", absPath, err)\n continue\n }\n }\n\n const result = registryItemSchema.safeParse(registryItem)\n if (!result.success) {\n logger.error(\n `Invalid registry item found for ${highlighter.info(\n registryItem.name\n )}.`\n )\n continue\n }\n\n // Write the registry item to the output directory.\n await fs.writeFile(\n path.resolve(resolvePaths.outputDir, `${result.data.name}.json`),\n JSON.stringify(result.data, null, 2)\n )\n }\n\n // Copy registry.json to the output directory.\n await fs.copyFile(\n resolvePaths.registryFile,\n path.resolve(resolvePaths.outputDir, \"registry.json\")\n )\n\n buildSpinner.succeed(\"Building registry.\")\n\n if (options.verbose) {\n spinner(\n `The registry has ${highlighter.info(\n resolvedRegistry.items.length.toString()\n )} items:`\n ).succeed()\n for (const item of resolvedRegistry.items) {\n logger.log(` - ${item.name} (${highlighter.info(item.type)})`)\n for (const file of item.files ?? []) {\n logger.log(` - ${file.path}`)\n }\n }\n }\n } catch (error) {\n logger.break()\n handleError(error)\n }\n}\n\n// This reads the registry and recursively resolves the file imports.\nasync function resolveRegistryItems(\n registry: z.infer<typeof registrySchema>,\n config: z.infer<typeof configSchema>,\n projectInfo: ProjectInfo\n): Promise<z.infer<typeof registrySchema>> {\n for (const item of registry.items) {\n if (!item.files?.length) {\n continue\n }\n\n // Process all files in the array instead of just the first one\n for (const file of item.files) {\n const results = await recursivelyResolveFileImports(\n file.path,\n config,\n projectInfo\n )\n\n // Remove file from results.files\n results.files = results.files?.filter((f) => f.path !== file.path)\n\n if (results.files) {\n item.files.push(...results.files)\n }\n\n if (results.dependencies) {\n item.dependencies = item.dependencies\n ? item.dependencies.concat(results.dependencies)\n : results.dependencies\n }\n }\n }\n\n return registry\n}\n","import { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { Command } from \"commander\"\n\nexport const mcp = new Command()\n .name(\"registry:mcp\")\n .description(\"starts the registry MCP server [DEPRECATED]\")\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .action(async () => {\n logger.warn(\n `The ${highlighter.info(\n \"shadcn registry:mcp\"\n )} command is deprecated. Use the ${highlighter.info(\n \"shadcn mcp\"\n )} command instead.`\n )\n logger.break()\n })\n","import path from \"path\"\nimport { configWithDefaults } from \"@/src/registry/config\"\nimport { clearRegistryContext } from \"@/src/registry/context\"\nimport { searchRegistries } from \"@/src/registry/search\"\nimport { validateRegistryConfigForItems } from \"@/src/registry/validator\"\nimport { rawConfigSchema } from \"@/src/schema\"\nimport { loadEnvFiles } from \"@/src/utils/env-loader\"\nimport { createConfig, getConfig } from \"@/src/utils/get-config\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { ensureRegistriesInConfig } from \"@/src/utils/registries\"\nimport { Command } from \"commander\"\nimport fsExtra from \"fs-extra\"\nimport { z } from \"zod\"\n\nconst searchOptionsSchema = z.object({\n cwd: z.string(),\n query: z.string().optional(),\n limit: z.number().optional(),\n offset: z.number().optional(),\n})\n\n// TODO: We're duplicating logic for shadowConfig here.\n// Revisit and properly abstract this.\n\nexport const search = new Command()\n .name(\"search\")\n .alias(\"list\")\n .description(\"search items from registries\")\n .argument(\n \"<registries...>\",\n \"the registry names or urls to search items from. Names must be prefixed with @.\"\n )\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .option(\"-q, --query <query>\", \"query string\")\n .option(\n \"-l, --limit <number>\",\n \"maximum number of items to display per registry\",\n \"100\"\n )\n .option(\"-o, --offset <number>\", \"number of items to skip\", \"0\")\n .action(async (registries: string[], opts) => {\n try {\n const options = searchOptionsSchema.parse({\n cwd: path.resolve(opts.cwd),\n query: opts.query,\n limit: opts.limit ? parseInt(opts.limit, 10) : undefined,\n offset: opts.offset ? parseInt(opts.offset, 10) : undefined,\n })\n\n await loadEnvFiles(options.cwd)\n\n // Start with a shadow config to support partial components.json.\n // Use createConfig to get proper default paths\n const defaultConfig = createConfig({\n style: \"new-york\",\n resolvedPaths: {\n cwd: options.cwd,\n },\n })\n let shadowConfig = configWithDefaults(defaultConfig)\n\n // Check if there's a components.json file (partial or complete).\n const componentsJsonPath = path.resolve(options.cwd, \"components.json\")\n if (fsExtra.existsSync(componentsJsonPath)) {\n const existingConfig = await fsExtra.readJson(componentsJsonPath)\n const partialConfig = rawConfigSchema.partial().parse(existingConfig)\n shadowConfig = configWithDefaults({\n ...defaultConfig,\n ...partialConfig,\n })\n }\n\n // Try to get the full config, but fall back to shadow config if it fails.\n let config = shadowConfig\n try {\n const fullConfig = await getConfig(options.cwd)\n if (fullConfig) {\n config = configWithDefaults(fullConfig)\n }\n } catch {\n // Use shadow config if getConfig fails (partial components.json).\n }\n\n const { config: updatedConfig, newRegistries } =\n await ensureRegistriesInConfig(\n registries.map((registry) => `${registry}/registry`),\n config,\n {\n silent: true,\n writeFile: false,\n }\n )\n if (newRegistries.length > 0) {\n config.registries = updatedConfig.registries\n }\n\n // Validate registries early for better error messages.\n validateRegistryConfigForItems(registries, config)\n\n // Use searchRegistries for both search and non-search cases\n const results = await searchRegistries(registries as `@${string}`[], {\n query: options.query,\n limit: options.limit,\n offset: options.offset,\n config,\n })\n\n console.log(JSON.stringify(results, null, 2))\n process.exit(0)\n } catch (error) {\n handleError(error)\n } finally {\n clearRegistryContext()\n }\n })\n","import path from \"path\"\nimport { getRegistryItems } from \"@/src/registry/api\"\nimport { configWithDefaults } from \"@/src/registry/config\"\nimport { clearRegistryContext } from \"@/src/registry/context\"\nimport { validateRegistryConfigForItems } from \"@/src/registry/validator\"\nimport { rawConfigSchema } from \"@/src/schema\"\nimport { loadEnvFiles } from \"@/src/utils/env-loader\"\nimport { getConfig } from \"@/src/utils/get-config\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { ensureRegistriesInConfig } from \"@/src/utils/registries\"\nimport { Command } from \"commander\"\nimport fsExtra from \"fs-extra\"\nimport { z } from \"zod\"\n\nconst viewOptionsSchema = z.object({\n cwd: z.string(),\n})\n\nexport const view = new Command()\n .name(\"view\")\n .description(\"view items from the registry\")\n .argument(\"<items...>\", \"the item names or URLs to view\")\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .action(async (items: string[], opts) => {\n try {\n const options = viewOptionsSchema.parse({\n cwd: path.resolve(opts.cwd),\n })\n\n await loadEnvFiles(options.cwd)\n\n // Start with a shadow config to support partial components.json.\n let shadowConfig = configWithDefaults({})\n\n // Check if there's a components.json file (partial or complete).\n const componentsJsonPath = path.resolve(options.cwd, \"components.json\")\n if (fsExtra.existsSync(componentsJsonPath)) {\n const existingConfig = await fsExtra.readJson(componentsJsonPath)\n const partialConfig = rawConfigSchema.partial().parse(existingConfig)\n shadowConfig = configWithDefaults(partialConfig)\n }\n\n // Try to get the full config, but fall back to shadow config if it fails.\n let config = shadowConfig\n try {\n const fullConfig = await getConfig(options.cwd)\n if (fullConfig) {\n config = configWithDefaults(fullConfig)\n }\n } catch {\n // Use shadow config if getConfig fails (partial components.json).\n }\n\n const { config: updatedConfig, newRegistries } =\n await ensureRegistriesInConfig(items, config, {\n silent: true,\n writeFile: false,\n })\n if (newRegistries.length > 0) {\n config.registries = updatedConfig.registries\n }\n\n // Validate registries early for better error messages.\n validateRegistryConfigForItems(items, config)\n\n const payload = await getRegistryItems(items, { config })\n console.log(JSON.stringify(payload, null, 2))\n process.exit(0)\n } catch (error) {\n handleError(error)\n } finally {\n clearRegistryContext()\n }\n })\n","{\n \"name\": \"hghcn\",\n \"version\": \"3.6.23\",\n \"description\": \"Add components to your apps.\",\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"license\": \"MIT\",\n \"author\": {\n \"name\": \"shadcn\",\n \"url\": \"https://twitter.com/shadcn\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/shadcn-ui/ui.git\",\n \"directory\": \"packages/shadcn\"\n },\n \"files\": [\n \"dist\"\n ],\n \"keywords\": [\n \"components\",\n \"ui\",\n \"tailwind\",\n \"radix-ui\",\n \"shadcn\"\n ],\n \"type\": \"module\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n },\n \"./registry\": {\n \"types\": \"./dist/registry/index.d.ts\",\n \"default\": \"./dist/registry/index.js\"\n },\n \"./schema\": {\n \"types\": \"./dist/schema/index.d.ts\",\n \"default\": \"./dist/schema/index.js\"\n },\n \"./mcp\": {\n \"types\": \"./dist/mcp/index.d.ts\",\n \"default\": \"./dist/mcp/index.js\"\n },\n \"./utils\": {\n \"types\": \"./dist/utils/index.d.ts\",\n \"default\": \"./dist/utils/index.js\"\n },\n \"./icons\": {\n \"types\": \"./dist/icons/index.d.ts\",\n \"default\": \"./dist/icons/index.js\"\n },\n \"./tailwind.css\": {\n \"style\": \"./dist/tailwind.css\"\n }\n },\n \"bin\": \"./dist/index.js\",\n \"scripts\": {\n \"dev\": \"tsup --watch\",\n \"build\": \"tsup\",\n \"typecheck\": \"tsc --noEmit\",\n \"clean\": \"rimraf dist && rimraf components\",\n \"start:dev\": \"cross-env REGISTRY_URL=http://localhost:4000/r node dist/index.js\",\n \"start:prod\": \"cross-env REGISTRY_URL=https://ui.shadcn.com/r node dist/index.js\",\n \"start\": \"node dist/index.js\",\n \"format:write\": \"prettier --write \\\"**/*.{ts,tsx,mdx}\\\" --cache\",\n \"format:check\": \"prettier --check \\\"**/*.{ts,tsx,mdx}\\\" --cache\",\n \"release\": \"changeset version\",\n \"pub:beta\": \"pnpm build && pnpm publish --no-git-checks --access public --tag beta\",\n \"pub:next\": \"pnpm build && pnpm publish --no-git-checks --access public --tag next\",\n \"pub:release\": \"pnpm build && pnpm publish --access public\",\n \"test\": \"vitest run\",\n \"test:dev\": \"REGISTRY_URL=http://localhost:4000/r vitest run\",\n \"mcp:inspect\": \"pnpm dlx @modelcontextprotocol/inspector node dist/index.js mcp\"\n },\n \"dependencies\": {\n \"@antfu/ni\": \"^25.0.0\",\n \"@babel/core\": \"^7.28.0\",\n \"@babel/parser\": \"^7.28.0\",\n \"@babel/plugin-transform-typescript\": \"^7.28.0\",\n \"@babel/preset-typescript\": \"^7.27.1\",\n \"@dotenvx/dotenvx\": \"^1.48.4\",\n \"@modelcontextprotocol/sdk\": \"^1.17.2\",\n \"browserslist\": \"^4.26.2\",\n \"commander\": \"^14.0.0\",\n \"cosmiconfig\": \"^9.0.0\",\n \"dedent\": \"^1.6.0\",\n \"deepmerge\": \"^4.3.1\",\n \"diff\": \"^8.0.2\",\n \"execa\": \"^9.6.0\",\n \"fast-glob\": \"^3.3.3\",\n \"fs-extra\": \"^11.3.1\",\n \"fuzzysort\": \"^3.1.0\",\n \"https-proxy-agent\": \"^7.0.6\",\n \"kleur\": \"^4.1.5\",\n \"msw\": \"^2.10.4\",\n \"node-fetch\": \"^3.3.2\",\n \"open\": \"^11.0.0\",\n \"ora\": \"^8.2.0\",\n \"postcss\": \"^8.5.6\",\n \"postcss-selector-parser\": \"^7.1.0\",\n \"prompts\": \"^2.4.2\",\n \"recast\": \"^0.23.11\",\n \"stringify-object\": \"^5.0.0\",\n \"ts-morph\": \"^26.0.0\",\n \"tsconfig-paths\": \"^4.2.0\",\n \"zod\": \"^3.24.1\",\n \"zod-to-json-schema\": \"^3.24.6\"\n },\n \"devDependencies\": {\n \"@types/babel__core\": \"^7.20.5\",\n \"@types/fs-extra\": \"^11.0.4\",\n \"@types/prompts\": \"^2.4.9\",\n \"@types/stringify-object\": \"^4.0.5\",\n \"rimraf\": \"^6.0.1\",\n \"tsup\": \"^8.5.0\",\n \"type-fest\": \"^4.41.0\",\n \"typescript\": \"^5.9.2\"\n }\n}\n","#!/usr/bin/env node\nimport { add } from \"@/src/commands/add\"\nimport { build } from \"@/src/commands/build\"\nimport { create } from \"@/src/commands/create\"\nimport { diff } from \"@/src/commands/diff\"\nimport { info } from \"@/src/commands/info\"\nimport { init } from \"@/src/commands/init\"\nimport { mcp } from \"@/src/commands/mcp\"\nimport { migrate } from \"@/src/commands/migrate\"\nimport { build as registryBuild } from \"@/src/commands/registry/build\"\nimport { mcp as registryMcp } from \"@/src/commands/registry/mcp\"\nimport { search } from \"@/src/commands/search\"\nimport { view } from \"@/src/commands/view\"\nimport { Command } from \"commander\"\n\nimport packageJson from \"../package.json\"\n\nprocess.on(\"SIGINT\", () => process.exit(0))\nprocess.on(\"SIGTERM\", () => process.exit(0))\n\nasync function main() {\n const program = new Command()\n .name(\"shadcn\")\n .description(\"add items from registries to your project\")\n .version(\n packageJson.version || \"1.0.0\",\n \"-v, --version\",\n \"display the version number\"\n )\n\n program\n .addCommand(init)\n .addCommand(create)\n .addCommand(add)\n .addCommand(diff)\n .addCommand(view)\n .addCommand(search)\n .addCommand(migrate)\n .addCommand(info)\n .addCommand(build)\n .addCommand(mcp)\n // Registry commands\n program.addCommand(registryBuild).addCommand(registryMcp)\n\n program.parse()\n}\n\nmain()\n\nexport * from \"./registry/api\"\n"]}