zard-cli 1.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/README.md +188 -0
  2. package/dist/commands/add/component-installer.d.ts +5 -0
  3. package/dist/commands/add/component-installer.d.ts.map +1 -0
  4. package/dist/commands/add/component-installer.js +17 -0
  5. package/dist/commands/add/component-installer.js.map +1 -0
  6. package/dist/commands/add/component-selector.d.ts +2 -0
  7. package/dist/commands/add/component-selector.d.ts.map +1 -0
  8. package/dist/commands/add/component-selector.js +31 -0
  9. package/dist/commands/add/component-selector.js.map +1 -0
  10. package/dist/commands/add/dark-mode-setup.d.ts +7 -0
  11. package/dist/commands/add/dark-mode-setup.d.ts.map +1 -0
  12. package/dist/commands/add/dark-mode-setup.js +43 -0
  13. package/dist/commands/add/dark-mode-setup.js.map +1 -0
  14. package/dist/commands/add/dependency-resolver.d.ts +27 -0
  15. package/dist/commands/add/dependency-resolver.d.ts.map +1 -0
  16. package/dist/commands/add/dependency-resolver.js +108 -0
  17. package/dist/commands/add/dependency-resolver.js.map +1 -0
  18. package/dist/commands/add/index.d.ts +3 -0
  19. package/dist/commands/add/index.d.ts.map +1 -0
  20. package/dist/commands/add/index.js +137 -0
  21. package/dist/commands/add/index.js.map +1 -0
  22. package/dist/commands/init/config-prompter.d.ts +71 -0
  23. package/dist/commands/init/config-prompter.d.ts.map +1 -0
  24. package/dist/commands/init/config-prompter.js +109 -0
  25. package/dist/commands/init/config-prompter.js.map +1 -0
  26. package/dist/commands/init/dependencies.d.ts +11 -0
  27. package/dist/commands/init/dependencies.d.ts.map +1 -0
  28. package/dist/commands/init/dependencies.js +33 -0
  29. package/dist/commands/init/dependencies.js.map +1 -0
  30. package/dist/commands/init/index.d.ts +3 -0
  31. package/dist/commands/init/index.d.ts.map +1 -0
  32. package/dist/commands/init/index.js +121 -0
  33. package/dist/commands/init/index.js.map +1 -0
  34. package/dist/commands/init/tailwind-setup.d.ts +5 -0
  35. package/dist/commands/init/tailwind-setup.d.ts.map +1 -0
  36. package/dist/commands/init/tailwind-setup.js +24 -0
  37. package/dist/commands/init/tailwind-setup.js.map +1 -0
  38. package/dist/commands/init/theme-loader.d.ts +2 -0
  39. package/dist/commands/init/theme-loader.d.ts.map +1 -0
  40. package/dist/commands/init/theme-loader.js +62 -0
  41. package/dist/commands/init/theme-loader.js.map +1 -0
  42. package/dist/commands/init/tsconfig-updater.d.ts +3 -0
  43. package/dist/commands/init/tsconfig-updater.d.ts.map +1 -0
  44. package/dist/commands/init/tsconfig-updater.js +49 -0
  45. package/dist/commands/init/tsconfig-updater.js.map +1 -0
  46. package/dist/commands/init/update-angular-config.d.ts +7 -0
  47. package/dist/commands/init/update-angular-config.d.ts.map +1 -0
  48. package/dist/commands/init/update-angular-config.js +81 -0
  49. package/dist/commands/init/update-angular-config.js.map +1 -0
  50. package/dist/config/registry-config.d.ts +2 -0
  51. package/dist/config/registry-config.d.ts.map +1 -0
  52. package/dist/config/registry-config.js +2 -0
  53. package/dist/config/registry-config.js.map +1 -0
  54. package/dist/constants/app.constants.d.ts +2 -0
  55. package/dist/constants/app.constants.d.ts.map +1 -0
  56. package/dist/constants/app.constants.js +24 -0
  57. package/dist/constants/app.constants.js.map +1 -0
  58. package/dist/core/registry/index.d.ts +6 -0
  59. package/dist/core/registry/index.d.ts.map +1 -0
  60. package/dist/core/registry/index.js +9 -0
  61. package/dist/core/registry/index.js.map +1 -0
  62. package/dist/core/registry/registry-data.d.ts +13 -0
  63. package/dist/core/registry/registry-data.d.ts.map +1 -0
  64. package/dist/core/registry/registry-data.js +854 -0
  65. package/dist/core/registry/registry-data.js.map +1 -0
  66. package/dist/core/themes/index.d.ts +3 -0
  67. package/dist/core/themes/index.d.ts.map +1 -0
  68. package/dist/core/themes/index.js +3 -0
  69. package/dist/core/themes/index.js.map +1 -0
  70. package/dist/core/themes/theme-definitions.d.ts +7 -0
  71. package/dist/core/themes/theme-definitions.d.ts.map +1 -0
  72. package/dist/core/themes/theme-definitions.js +465 -0
  73. package/dist/core/themes/theme-definitions.js.map +1 -0
  74. package/dist/index.d.ts +2 -0
  75. package/dist/index.d.ts.map +1 -0
  76. package/dist/index.js +15 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/utils/config.d.ts +101 -0
  79. package/dist/utils/config.d.ts.map +1 -0
  80. package/dist/utils/config.js +87 -0
  81. package/dist/utils/config.js.map +1 -0
  82. package/dist/utils/fetch-component.d.ts +3 -0
  83. package/dist/utils/fetch-component.d.ts.map +1 -0
  84. package/dist/utils/fetch-component.js +75 -0
  85. package/dist/utils/fetch-component.js.map +1 -0
  86. package/dist/utils/get-package-info.d.ts +9 -0
  87. package/dist/utils/get-package-info.d.ts.map +1 -0
  88. package/dist/utils/get-package-info.js +52 -0
  89. package/dist/utils/get-package-info.js.map +1 -0
  90. package/dist/utils/get-project-info.d.ts +9 -0
  91. package/dist/utils/get-project-info.d.ts.map +1 -0
  92. package/dist/utils/get-project-info.js +43 -0
  93. package/dist/utils/get-project-info.js.map +1 -0
  94. package/dist/utils/logger.d.ts +9 -0
  95. package/dist/utils/logger.d.ts.map +1 -0
  96. package/dist/utils/logger.js +27 -0
  97. package/dist/utils/logger.js.map +1 -0
  98. package/dist/utils/package-manager.d.ts +5 -0
  99. package/dist/utils/package-manager.d.ts.map +1 -0
  100. package/dist/utils/package-manager.js +47 -0
  101. package/dist/utils/package-manager.js.map +1 -0
  102. package/dist/utils/registry.d.ts +36 -0
  103. package/dist/utils/registry.d.ts.map +1 -0
  104. package/dist/utils/registry.js +71 -0
  105. package/dist/utils/registry.js.map +1 -0
  106. package/dist/utils/theme-selector.d.ts +4 -0
  107. package/dist/utils/theme-selector.d.ts.map +1 -0
  108. package/dist/utils/theme-selector.js +33 -0
  109. package/dist/utils/theme-selector.js.map +1 -0
  110. package/package.json +61 -0
@@ -0,0 +1,71 @@
1
+ import { Config } from '../../utils/config.js';
2
+ import { ProjectInfo } from '../../utils/get-project-info';
3
+ import { z } from 'zod';
4
+ export declare const SCHEMA_URL = "https://zardui.com/schema.json";
5
+ export declare const configSchema: z.ZodObject<{
6
+ $schema: z.ZodString;
7
+ style: z.ZodEnum<["css"]>;
8
+ appConfigFile: z.ZodString;
9
+ packageManager: z.ZodEnum<["npm", "yarn", "pnpm", "bun"]>;
10
+ tailwind: z.ZodObject<{
11
+ css: z.ZodString;
12
+ baseColor: z.ZodString;
13
+ }, "strip", z.ZodTypeAny, {
14
+ css?: string;
15
+ baseColor?: string;
16
+ }, {
17
+ css?: string;
18
+ baseColor?: string;
19
+ }>;
20
+ baseUrl: z.ZodString;
21
+ aliases: z.ZodObject<{
22
+ components: z.ZodString;
23
+ utils: z.ZodString;
24
+ core: z.ZodString;
25
+ services: z.ZodString;
26
+ }, "strip", z.ZodTypeAny, {
27
+ components?: string;
28
+ utils?: string;
29
+ core?: string;
30
+ services?: string;
31
+ }, {
32
+ components?: string;
33
+ utils?: string;
34
+ core?: string;
35
+ services?: string;
36
+ }>;
37
+ }, "strip", z.ZodTypeAny, {
38
+ $schema?: string;
39
+ appConfigFile?: string;
40
+ style?: "css";
41
+ packageManager?: "npm" | "yarn" | "pnpm" | "bun";
42
+ tailwind?: {
43
+ css?: string;
44
+ baseColor?: string;
45
+ };
46
+ baseUrl?: string;
47
+ aliases?: {
48
+ components?: string;
49
+ utils?: string;
50
+ core?: string;
51
+ services?: string;
52
+ };
53
+ }, {
54
+ $schema?: string;
55
+ appConfigFile?: string;
56
+ style?: "css";
57
+ packageManager?: "npm" | "yarn" | "pnpm" | "bun";
58
+ tailwind?: {
59
+ css?: string;
60
+ baseColor?: string;
61
+ };
62
+ baseUrl?: string;
63
+ aliases?: {
64
+ components?: string;
65
+ utils?: string;
66
+ core?: string;
67
+ services?: string;
68
+ };
69
+ }>;
70
+ export declare function promptForConfig(cwd: string, projectInfo: ProjectInfo, packageManager: 'npm' | 'yarn' | 'pnpm' | 'bun'): Promise<Config>;
71
+ //# sourceMappingURL=config-prompter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-prompter.d.ts","sourceRoot":"","sources":["../../../src/commands/init/config-prompter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAQ1D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,UAAU,mCAAmC,CAAC;AAE3D,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgBvB,CAAC;AAEH,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAC9C,OAAO,CAAC,MAAM,CAAC,CAiEjB"}
@@ -0,0 +1,109 @@
1
+ import { logger } from '../../utils/logger.js';
2
+ import { getAvailableThemes, getThemeDisplayName } from '../../utils/theme-selector.js';
3
+ import chalk from 'chalk';
4
+ import { existsSync } from 'node:fs';
5
+ import { readFile } from 'node:fs/promises';
6
+ import * as path from 'node:path';
7
+ import prompts from 'prompts';
8
+ import { z } from 'zod';
9
+ export const SCHEMA_URL = 'https://zardui.com/schema.json';
10
+ export const configSchema = z.object({
11
+ $schema: z.string(),
12
+ style: z.enum(['css']),
13
+ appConfigFile: z.string(),
14
+ packageManager: z.enum(['npm', 'yarn', 'pnpm', 'bun']),
15
+ tailwind: z.object({
16
+ css: z.string(),
17
+ baseColor: z.string(),
18
+ }),
19
+ baseUrl: z.string(),
20
+ aliases: z.object({
21
+ components: z.string(),
22
+ utils: z.string(),
23
+ core: z.string(),
24
+ services: z.string(),
25
+ }),
26
+ });
27
+ export async function promptForConfig(cwd, projectInfo, packageManager) {
28
+ const highlight = (text) => chalk.cyan(text);
29
+ const options = await prompts([
30
+ {
31
+ type: 'text',
32
+ name: 'app.config',
33
+ message: `Where is your ${highlight('app.config.ts')} file?`,
34
+ initial: projectInfo.hasNx ? 'apps/[app]/src/app/app.config.ts' : 'src/app/app.config.ts',
35
+ },
36
+ {
37
+ type: 'select',
38
+ name: 'theme',
39
+ message: `Choose a ${highlight('theme')} for your components:`,
40
+ choices: getAvailableThemes().map(theme => ({
41
+ title: getThemeDisplayName(theme),
42
+ value: theme,
43
+ })),
44
+ initial: 0,
45
+ },
46
+ {
47
+ type: 'text',
48
+ name: 'tailwindCss',
49
+ message: `Where is your ${highlight('global CSS')} file?`,
50
+ initial: projectInfo.hasNx ? 'apps/[app]/src/styles.css' : 'src/styles.css',
51
+ },
52
+ {
53
+ type: 'text',
54
+ name: 'components',
55
+ message: `Configure the import alias for ${highlight('components')}:`,
56
+ initial: '@/shared/components',
57
+ },
58
+ {
59
+ type: 'text',
60
+ name: 'utils',
61
+ message: `Configure the import alias for ${highlight('utils')}:`,
62
+ initial: '@/shared/utils',
63
+ },
64
+ ]);
65
+ await validateCssFile(cwd, options.tailwindCss);
66
+ const componentsAlias = options.components;
67
+ const utilsAlias = options.utils;
68
+ const sharedBase = path.dirname(componentsAlias);
69
+ const config = configSchema.parse({
70
+ $schema: SCHEMA_URL,
71
+ style: 'css',
72
+ appConfigFile: options['app.config'],
73
+ packageManager,
74
+ tailwind: {
75
+ css: options.tailwindCss,
76
+ baseColor: options.theme,
77
+ },
78
+ baseUrl: 'src/app',
79
+ aliases: {
80
+ components: componentsAlias,
81
+ utils: utilsAlias,
82
+ core: `${sharedBase}/core`,
83
+ services: `${sharedBase}/services`,
84
+ },
85
+ });
86
+ return config;
87
+ }
88
+ async function validateCssFile(cwd, tailwindCss) {
89
+ const cssPath = path.join(cwd, tailwindCss);
90
+ if (!existsSync(cssPath)) {
91
+ logger.error(`CSS file not found at: ${tailwindCss}`);
92
+ logger.error('Please ensure your CSS file exists before continuing.');
93
+ process.exit(1);
94
+ }
95
+ const existingContent = await readFile(cssPath, 'utf8');
96
+ if (existingContent.trim().length > 0) {
97
+ const { overwrite } = await prompts({
98
+ type: 'confirm',
99
+ name: 'overwrite',
100
+ message: `Your CSS file already has content. This will overwrite everything with ZardUI theme configuration. Continue?`,
101
+ initial: true,
102
+ });
103
+ if (!overwrite) {
104
+ logger.info('Installation cancelled.');
105
+ process.exit(0);
106
+ }
107
+ }
108
+ }
109
+ //# sourceMappingURL=config-prompter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-prompter.js","sourceRoot":"","sources":["../../../src/commands/init/config-prompter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { type Config } from '../../utils/config.js';
2
+ type ProjectInfo = {
3
+ framework: string;
4
+ hasTypeScript: boolean;
5
+ hasTailwind: boolean;
6
+ hasNx: boolean;
7
+ angularVersion: string | null;
8
+ };
9
+ export declare function installDependencies(cwd: string, config: Config, projectInfo?: ProjectInfo): Promise<void>;
10
+ export {};
11
+ //# sourceMappingURL=dependencies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../../../src/commands/init/dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAKnD,KAAK,WAAW,GAAG;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,OAAO,CAAC;IACf,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,CAAC;AAEF,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB/G"}
@@ -0,0 +1,33 @@
1
+ import { getProjectInfo } from '../../utils/get-project-info.js';
2
+ import { logger } from '../../utils/logger.js';
3
+ import { installPackages } from '../../utils/package-manager.js';
4
+ export async function installDependencies(cwd, config, projectInfo) {
5
+ const info = projectInfo || (await getProjectInfo(cwd));
6
+ const cdkVersion = getCdkVersion(info.angularVersion);
7
+ const deps = [cdkVersion, 'class-variance-authority', 'clsx', 'tailwind-merge', 'lucide-angular'];
8
+ const devDeps = info.hasTailwind ? [] : ['tailwindcss', '@tailwindcss/postcss', 'postcss', 'tailwindcss-animate'];
9
+ if (info.hasTailwind) {
10
+ logger.info('Tailwind CSS is already installed. Skipping Tailwind dependencies installation.');
11
+ }
12
+ await installWithRetry(deps, cwd, config.packageManager, false);
13
+ if (devDeps.length > 0) {
14
+ await installWithRetry(devDeps, cwd, config.packageManager, true);
15
+ }
16
+ }
17
+ function getCdkVersion(angularVersion) {
18
+ if (!angularVersion) {
19
+ return '@angular/cdk';
20
+ }
21
+ const majorVersion = Number.parseInt(angularVersion.split('.')[0]);
22
+ return `@angular/cdk@^${majorVersion}`;
23
+ }
24
+ async function installWithRetry(packages, cwd, packageManager, isDev) {
25
+ try {
26
+ await installPackages(packages, cwd, packageManager, isDev);
27
+ }
28
+ catch {
29
+ logger.warn('Installation failed, retrying with --legacy-peer-deps...');
30
+ await installPackages(packages, cwd, packageManager, isDev, true);
31
+ }
32
+ }
33
+ //# sourceMappingURL=dependencies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../../src/commands/init/dependencies.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAUhE,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,GAAW,EAAE,MAAc,EAAE,WAAyB;IAC9F,MAAM,IAAI,GAAG,WAAW,IAAI,CAAC,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;IAExD,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,0BAA0B,EAAE,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;IAElG,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,sBAAsB,EAAE,SAAS,EAAE,qBAAqB,CAAC,CAAC;IAElH,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAC;IACjG,CAAC;IAED,MAAM,gBAAgB,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IAEhE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,cAAuB;IAC5C,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnE,OAAO,iBAAiB,YAAY,EAAE,CAAC;AACzC,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,QAAkB,EAClB,GAAW,EACX,cAA+C,EAC/C,KAAc;IAEd,IAAI,CAAC;QACH,MAAM,eAAe,CAAC,QAAQ,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;QACxE,MAAM,eAAe,CAAC,QAAQ,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACpE,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const init: Command;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/init/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,IAAI,SA2Cb,CAAC"}
@@ -0,0 +1,121 @@
1
+ import { installComponent } from '../../commands/add/component-installer.js';
2
+ import { promptForConfig } from '../../commands/init/config-prompter.js';
3
+ import { installDependencies } from '../../commands/init/dependencies.js';
4
+ import { applyThemeToStyles, createPostCssConfig } from '../../commands/init/tailwind-setup.js';
5
+ import { updateTsConfig } from '../../commands/init/tsconfig-updater.js';
6
+ import { resolveConfigPaths } from '../../utils/config.js';
7
+ import { getProjectInfo } from '../../utils/get-project-info.js';
8
+ import { logger, spinner } from '../../utils/logger.js';
9
+ import { detectPackageManager } from '../../utils/package-manager.js';
10
+ import chalk from 'chalk';
11
+ import { Command } from 'commander';
12
+ import { existsSync } from 'node:fs';
13
+ import { mkdir, writeFile } from 'node:fs/promises';
14
+ import * as path from 'node:path';
15
+ import prompts from 'prompts';
16
+ import { updateAngularConfig } from './update-angular-config.js';
17
+ export const init = new Command()
18
+ .name('init')
19
+ .description('initialize your project and install dependencies')
20
+ .option('-y, --yes', 'skip confirmation prompt.', false)
21
+ .option('-c, --cwd <cwd>', 'the working directory. defaults to the current directory.', process.cwd())
22
+ .action(async (options) => {
23
+ const cwd = path.resolve(options.cwd);
24
+ validateWorkingDirectory(cwd);
25
+ const projectInfo = await getProjectInfo(cwd);
26
+ validateAngularProject(projectInfo);
27
+ const componentsJsonPath = path.resolve(cwd, 'components.json');
28
+ const isReInitializing = existsSync(componentsJsonPath);
29
+ if (isReInitializing) {
30
+ const shouldContinue = await confirmReinitialization();
31
+ if (!shouldContinue) {
32
+ logger.info('Re-initialization cancelled.');
33
+ process.exit(0);
34
+ }
35
+ }
36
+ logger.info(isReInitializing ? 'Re-initializing ZardUI...' : 'Initializing ZardUI...');
37
+ logger.break();
38
+ const detectedPm = await detectPackageManager();
39
+ logger.break();
40
+ const config = await promptForConfig(cwd, projectInfo, detectedPm);
41
+ if (!options.yes) {
42
+ const shouldProceed = await confirmConfiguration();
43
+ if (!shouldProceed) {
44
+ process.exit(0);
45
+ }
46
+ }
47
+ await runInitializationSteps(cwd, config, projectInfo, isReInitializing);
48
+ displaySuccessMessage(config);
49
+ });
50
+ function validateWorkingDirectory(cwd) {
51
+ if (!existsSync(cwd)) {
52
+ logger.error(`The path ${cwd} does not exist. Please try again.`);
53
+ process.exit(1);
54
+ }
55
+ }
56
+ function validateAngularProject(projectInfo) {
57
+ if (projectInfo.framework !== 'angular') {
58
+ logger.error('This project does not appear to be an Angular project.');
59
+ logger.error('Please run this command in an Angular project.');
60
+ process.exit(1);
61
+ }
62
+ }
63
+ async function confirmReinitialization() {
64
+ logger.warn('ZardUI is already initialized in this project.');
65
+ const { reinitialize } = await prompts({
66
+ type: 'confirm',
67
+ name: 'reinitialize',
68
+ message: 'Do you want to re-initialize? This will overwrite your existing configuration and utils.',
69
+ initial: true,
70
+ });
71
+ return reinitialize;
72
+ }
73
+ async function confirmConfiguration() {
74
+ const { proceed } = await prompts({
75
+ type: 'confirm',
76
+ name: 'proceed',
77
+ message: 'Write configuration to components.json?',
78
+ initial: true,
79
+ });
80
+ return proceed;
81
+ }
82
+ async function runInitializationSteps(cwd, config, projectInfo, isReInitializing) {
83
+ const initSpinner = spinner('Initializing project...').start();
84
+ await writeFile(path.resolve(cwd, 'components.json'), JSON.stringify(config, null, 2), 'utf8');
85
+ initSpinner.text = 'Installing dependencies...';
86
+ await installDependencies(cwd, config, projectInfo);
87
+ initSpinner.text = 'Configuring Angular...';
88
+ await updateAngularConfig(cwd, config);
89
+ if (!projectInfo.hasTailwind || isReInitializing) {
90
+ initSpinner.text = 'Setting up PostCSS...';
91
+ await createPostCssConfig(cwd);
92
+ }
93
+ initSpinner.text = 'Applying theme...';
94
+ await applyThemeToStyles(cwd, config);
95
+ initSpinner.text = 'Updating TypeScript config...';
96
+ await updateTsConfig(cwd, config);
97
+ initSpinner.text = 'Installing core dependencies...';
98
+ await installCoreDependencies(cwd, config);
99
+ initSpinner.succeed('Project initialized');
100
+ }
101
+ async function installCoreDependencies(cwd, config) {
102
+ const resolvedConfig = await resolveConfigPaths(cwd, config);
103
+ await mkdir(resolvedConfig.resolvedPaths.core, { recursive: true });
104
+ await mkdir(resolvedConfig.resolvedPaths.utils, { recursive: true });
105
+ await installComponent('core', resolvedConfig.resolvedPaths.core, resolvedConfig);
106
+ await installComponent('utils', resolvedConfig.resolvedPaths.utils, resolvedConfig);
107
+ }
108
+ function displaySuccessMessage(config) {
109
+ logger.break();
110
+ logger.success('ZardUI has been initialized successfully!');
111
+ logger.break();
112
+ const runCommand = config.packageManager === 'npm'
113
+ ? 'npx'
114
+ : config.packageManager === 'yarn'
115
+ ? 'yarn dlx'
116
+ : `${config.packageManager}x`;
117
+ logger.info('You can now add components using:');
118
+ logger.info(chalk.bold(` ${runCommand} @ngzard/ui add [component]`));
119
+ logger.break();
120
+ }
121
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/init/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { type Config } from '../../utils/config.js';
2
+ export declare function setupTailwind(cwd: string, config: Config): Promise<void>;
3
+ export declare function createPostCssConfig(cwd: string): Promise<void>;
4
+ export declare function applyThemeToStyles(cwd: string, config: Config): Promise<void>;
5
+ //# sourceMappingURL=tailwind-setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tailwind-setup.d.ts","sourceRoot":"","sources":["../../../src/commands/init/tailwind-setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAYnD,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG9E;AAED,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpE;AAED,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMnF"}
@@ -0,0 +1,24 @@
1
+ import { getThemeContent } from '../../utils/theme-selector.js';
2
+ import { writeFile } from 'node:fs/promises';
3
+ import * as path from 'path';
4
+ const POSTCSS_CONFIG = `{
5
+ "plugins": {
6
+ "@tailwindcss/postcss": {}
7
+ }
8
+ }
9
+ `;
10
+ export async function setupTailwind(cwd, config) {
11
+ await createPostCssConfig(cwd);
12
+ await applyThemeToStyles(cwd, config);
13
+ }
14
+ export async function createPostCssConfig(cwd) {
15
+ const postcssConfigPath = path.join(cwd, '.postcssrc.json');
16
+ await writeFile(postcssConfigPath, POSTCSS_CONFIG, 'utf8');
17
+ }
18
+ export async function applyThemeToStyles(cwd, config) {
19
+ const stylesPath = path.join(cwd, config.tailwind.css);
20
+ const selectedTheme = config.tailwind.baseColor;
21
+ const themeContent = getThemeContent(selectedTheme);
22
+ await writeFile(stylesPath, themeContent, 'utf8');
23
+ }
24
+ //# sourceMappingURL=tailwind-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tailwind-setup.js","sourceRoot":"","sources":["../../../src/commands/init/tailwind-setup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,MAAM,cAAc,GAAG;;;;;CAKtB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAW,EAAE,MAAc;IAC7D,MAAM,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,GAAW;IACnD,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;IAC5D,MAAM,SAAS,CAAC,iBAAiB,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,GAAW,EAAE,MAAc;IAClE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACvD,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;IAChD,MAAM,YAAY,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC;IAEpD,MAAM,SAAS,CAAC,UAAU,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function injectThemeScript(cwd: string, indexFile: string): Promise<void>;
2
+ //# sourceMappingURL=theme-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-loader.d.ts","sourceRoot":"","sources":["../../../src/commands/init/theme-loader.ts"],"names":[],"mappings":"AA2BA,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuCrF"}
@@ -0,0 +1,62 @@
1
+ import { logger } from '../../utils/logger.js';
2
+ import * as fsPromises from 'fs/promises';
3
+ import * as path from 'path';
4
+ const HEAD_CLOSE_TAG = '</head>';
5
+ const THEME_SCRIPT_CONTENT = `
6
+ <script>
7
+ (function () {
8
+ const html = document.documentElement;
9
+
10
+ try {
11
+ const theme = localStorage.theme;
12
+ const prefersDark = window.matchMedia?.('(prefers-color-scheme: dark)').matches ?? false;
13
+
14
+ const isSystem = theme === 'system' || !('theme' in localStorage);
15
+ const isDark = theme === 'dark' || (isSystem && prefersDark);
16
+ const resolvedTheme = isDark ? 'dark' : 'light';
17
+ html.classList.toggle('dark', isDark);
18
+ html.classList.toggle('dark-theme', isDark);
19
+ html.setAttribute('data-theme', theme ?? 'system');
20
+ html.style.colorScheme = resolvedTheme;
21
+ } catch (_) {}
22
+ })();
23
+ </script>
24
+ `;
25
+ export async function injectThemeScript(cwd, indexFile) {
26
+ const indexConfigPath = path.join(cwd, indexFile);
27
+ try {
28
+ await fsPromises.access(indexConfigPath);
29
+ let content = await fsPromises.readFile(indexConfigPath, 'utf8');
30
+ const identifier = 'localStorage.theme';
31
+ if (content.includes(identifier)) {
32
+ logger.info('Theme script already detected in index.html. Skipping injection.');
33
+ return;
34
+ }
35
+ const headCloseIndex = content.toLowerCase().indexOf(HEAD_CLOSE_TAG);
36
+ if (headCloseIndex !== -1) {
37
+ const insertionIndex = headCloseIndex;
38
+ content = content.slice(0, insertionIndex) + THEME_SCRIPT_CONTENT + '\n ' + content.slice(insertionIndex);
39
+ logger.info('✔ Successfully inserted theme script before </head> tag.');
40
+ }
41
+ else {
42
+ logger.error('Could not find the closing </head> tag in index.html.');
43
+ return;
44
+ }
45
+ // 4. Write the updated content back to the file
46
+ await fsPromises.writeFile(indexConfigPath, content, 'utf8');
47
+ }
48
+ catch (e) {
49
+ if (e && typeof e === 'object' && 'code' in e && e.code === 'ENOENT') {
50
+ logger.error(`Error: index.html file not found at ${indexConfigPath}. Please check the path.`);
51
+ }
52
+ else if (e instanceof Error) {
53
+ logger.error('An error occurred during file operation:', e.message);
54
+ }
55
+ else {
56
+ logger.error('An unknown error occurred:', e);
57
+ }
58
+ // Exit process with error status
59
+ process.exit(1);
60
+ }
61
+ }
62
+ //# sourceMappingURL=theme-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-loader.js","sourceRoot":"","sources":["../../../src/commands/init/theme-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,KAAK,UAAU,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,MAAM,cAAc,GAAG,SAAS,CAAC;AAEjC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;CAmB5B,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,GAAW,EAAE,SAAiB;IACpE,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAElD,IAAI,CAAC;QACH,MAAM,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QACzC,IAAI,OAAO,GAAW,MAAM,UAAU,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QAEzE,MAAM,UAAU,GAAG,oBAAoB,CAAC;QACxC,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;YAChF,OAAO;QACT,CAAC;QAED,MAAM,cAAc,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAErE,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC;YAC1B,MAAM,cAAc,GAAG,cAAc,CAAC;YAEtC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,GAAG,oBAAoB,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAE3G,MAAM,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;QAC1E,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;YACtE,OAAO;QACT,CAAC;QAED,gDAAgD;QAChD,MAAM,UAAU,CAAC,SAAS,CAAC,eAAe,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC/D,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrE,MAAM,CAAC,KAAK,CAAC,uCAAuC,eAAe,0BAA0B,CAAC,CAAC;QACjG,CAAC;aAAM,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC;YAC9B,MAAM,CAAC,KAAK,CAAC,0CAA0C,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;QACtE,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE,CAAC,CAAC,CAAC;QAChD,CAAC;QACD,iCAAiC;QACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type Config } from '../../utils/config.js';
2
+ export declare function updateTsConfig(cwd: string, config: Config): Promise<void>;
3
+ //# sourceMappingURL=tsconfig-updater.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tsconfig-updater.d.ts","sourceRoot":"","sources":["../../../src/commands/init/tsconfig-updater.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAOnD,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB/E"}
@@ -0,0 +1,49 @@
1
+ import { logger } from '../../utils/logger.js';
2
+ import * as commentJson from 'comment-json';
3
+ import { existsSync } from 'fs';
4
+ import { writeFile, readFile } from 'node:fs/promises';
5
+ import * as path from 'path';
6
+ export async function updateTsConfig(cwd, config) {
7
+ const tsconfigPath = path.join(cwd, 'tsconfig.json');
8
+ if (!existsSync(tsconfigPath)) {
9
+ logger.warn('tsconfig.json not found, skipping path configuration');
10
+ return;
11
+ }
12
+ try {
13
+ const tsconfig = await readTsConfig(tsconfigPath);
14
+ const updatedTsConfig = updatePaths(tsconfig, config);
15
+ await writeTsConfig(tsconfigPath, updatedTsConfig);
16
+ }
17
+ catch (error) {
18
+ logger.warn('Failed to update tsconfig.json paths');
19
+ logger.error(error);
20
+ }
21
+ }
22
+ async function readTsConfig(tsconfigPath) {
23
+ const tsconfigContent = await readFile(tsconfigPath, 'utf8');
24
+ return commentJson.parse(tsconfigContent);
25
+ }
26
+ function updatePaths(tsconfig, config) {
27
+ if (!tsconfig.compilerOptions) {
28
+ tsconfig.compilerOptions = {};
29
+ }
30
+ if (!tsconfig.compilerOptions.baseUrl) {
31
+ tsconfig.compilerOptions.baseUrl = './';
32
+ }
33
+ if (!tsconfig.compilerOptions.paths) {
34
+ tsconfig.compilerOptions.paths = {};
35
+ }
36
+ const pathMappings = {
37
+ '@/*': [`${config.baseUrl}/*`],
38
+ };
39
+ tsconfig.compilerOptions.paths = {
40
+ ...tsconfig.compilerOptions.paths,
41
+ ...pathMappings,
42
+ };
43
+ return tsconfig;
44
+ }
45
+ async function writeTsConfig(tsconfigPath, tsconfig) {
46
+ const updatedContent = commentJson.stringify(tsconfig, null, 2);
47
+ await writeFile(tsconfigPath, updatedContent, 'utf8');
48
+ }
49
+ //# sourceMappingURL=tsconfig-updater.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tsconfig-updater.js","sourceRoot":"","sources":["../../../src/commands/init/tsconfig-updater.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,KAAK,WAAW,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAW,EAAE,MAAc;IAC9D,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IAErD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;QACpE,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC,CAAC;QAClD,MAAM,eAAe,GAAG,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACtD,MAAM,aAAa,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;IACrD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACpD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,YAAoB;IAC9C,MAAM,eAAe,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAC7D,OAAO,WAAW,CAAC,KAAK,CAAC,eAAe,CAAQ,CAAC;AACnD,CAAC;AAED,SAAS,WAAW,CAAC,QAAa,EAAE,MAAc;IAChD,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;QAC9B,QAAQ,CAAC,eAAe,GAAG,EAAE,CAAC;IAChC,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;QACtC,QAAQ,CAAC,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC;IAC1C,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QACpC,QAAQ,CAAC,eAAe,CAAC,KAAK,GAAG,EAAE,CAAC;IACtC,CAAC;IAED,MAAM,YAAY,GAAG;QACnB,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC;KAC/B,CAAC;IAEF,QAAQ,CAAC,eAAe,CAAC,KAAK,GAAG;QAC/B,GAAG,QAAQ,CAAC,eAAe,CAAC,KAAK;QACjC,GAAG,YAAY;KAChB,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,YAAoB,EAAE,QAAa;IAC9D,MAAM,cAAc,GAAG,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAChE,MAAM,SAAS,CAAC,YAAY,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;AACxD,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { Config } from '../../utils/config.js';
2
+ /**
3
+ * Asynchronously reads, modifies, and writes the Angular application configuration file.
4
+ * @returns {Promise<void>} A promise that resolves when the file operation is complete.
5
+ */
6
+ export declare function updateAngularConfig(cwd: string, config: Config): Promise<void>;
7
+ //# sourceMappingURL=update-angular-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-angular-config.d.ts","sourceRoot":"","sources":["../../../src/commands/init/update-angular-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AASnD;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4EpF"}