@jiordikengne/velar 0.1.0

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 (96) hide show
  1. package/README.md +123 -0
  2. package/dist/commands/add.js +85 -0
  3. package/dist/commands/add.js.map +1 -0
  4. package/dist/commands/init-handlers.js +138 -0
  5. package/dist/commands/init-handlers.js.map +1 -0
  6. package/dist/commands/init-new.js +126 -0
  7. package/dist/commands/init-new.js.map +1 -0
  8. package/dist/commands/init-old.js +218 -0
  9. package/dist/commands/init-old.js.map +1 -0
  10. package/dist/commands/init.js +125 -0
  11. package/dist/commands/init.js.map +1 -0
  12. package/dist/commands/list.js +69 -0
  13. package/dist/commands/list.js.map +1 -0
  14. package/dist/config/ConfigManager.js +89 -0
  15. package/dist/config/ConfigManager.js.map +1 -0
  16. package/dist/errors/ErrorHandler.js +42 -0
  17. package/dist/errors/ErrorHandler.js.map +1 -0
  18. package/dist/errors/errors.js +45 -0
  19. package/dist/errors/errors.js.map +1 -0
  20. package/dist/index.js +30 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/registry/blue.css +0 -0
  23. package/dist/registry/green.css +0 -0
  24. package/dist/registry/neutral.css +29 -0
  25. package/dist/registry/orange.css +0 -0
  26. package/dist/registry/red.css +0 -0
  27. package/dist/registry/rose.css +0 -0
  28. package/dist/registry/themes/blue.css +0 -0
  29. package/dist/registry/themes/green.css +0 -0
  30. package/dist/registry/themes/neutral.css +29 -0
  31. package/dist/registry/themes/orange.css +0 -0
  32. package/dist/registry/themes/red.css +0 -0
  33. package/dist/registry/themes/rose.css +0 -0
  34. package/dist/registry/themes/violet.css +0 -0
  35. package/dist/registry/themes/yellow.css +0 -0
  36. package/dist/registry/violet.css +0 -0
  37. package/dist/registry/yellow.css +0 -0
  38. package/dist/services/AddService.js +98 -0
  39. package/dist/services/AddService.js.map +1 -0
  40. package/dist/services/ComponentService.js +167 -0
  41. package/dist/services/ComponentService.js.map +1 -0
  42. package/dist/services/FileSystemService.js +51 -0
  43. package/dist/services/FileSystemService.js.map +1 -0
  44. package/dist/services/HttpService.js +181 -0
  45. package/dist/services/HttpService.js.map +1 -0
  46. package/dist/services/InitService.js +182 -0
  47. package/dist/services/InitService.js.map +1 -0
  48. package/dist/services/ListService.js +52 -0
  49. package/dist/services/ListService.js.map +1 -0
  50. package/dist/services/RegistryService.js +85 -0
  51. package/dist/services/RegistryService.js.map +1 -0
  52. package/dist/types/index.js +2 -0
  53. package/dist/types/index.js.map +1 -0
  54. package/dist/types/interfaces.js +2 -0
  55. package/dist/types/interfaces.js.map +1 -0
  56. package/dist/types/meta.js +2 -0
  57. package/dist/types/meta.js.map +1 -0
  58. package/dist/types/registry.js +2 -0
  59. package/dist/types/registry.js.map +1 -0
  60. package/dist/utils/alpine-installer.js +46 -0
  61. package/dist/utils/alpine-installer.js.map +1 -0
  62. package/dist/utils/config.js +21 -0
  63. package/dist/utils/config.js.map +1 -0
  64. package/dist/utils/css.js +53 -0
  65. package/dist/utils/css.js.map +1 -0
  66. package/dist/utils/deps.js +24 -0
  67. package/dist/utils/deps.js.map +1 -0
  68. package/dist/utils/environment.js +8 -0
  69. package/dist/utils/environment.js.map +1 -0
  70. package/dist/utils/errors.js +21 -0
  71. package/dist/utils/errors.js.map +1 -0
  72. package/dist/utils/filesystem.js +14 -0
  73. package/dist/utils/filesystem.js.map +1 -0
  74. package/dist/utils/js.js +63 -0
  75. package/dist/utils/js.js.map +1 -0
  76. package/dist/utils/laravel.js +9 -0
  77. package/dist/utils/laravel.js.map +1 -0
  78. package/dist/utils/logger.js +47 -0
  79. package/dist/utils/logger.js.map +1 -0
  80. package/dist/utils/package-manager.js +23 -0
  81. package/dist/utils/package-manager.js.map +1 -0
  82. package/dist/utils/registry.js +17 -0
  83. package/dist/utils/registry.js.map +1 -0
  84. package/dist/utils/remote-registry.js +162 -0
  85. package/dist/utils/remote-registry.js.map +1 -0
  86. package/dist/utils/requirements.js +75 -0
  87. package/dist/utils/requirements.js.map +1 -0
  88. package/dist/utils/spinner.js +40 -0
  89. package/dist/utils/spinner.js.map +1 -0
  90. package/dist/utils/tailwind.js +31 -0
  91. package/dist/utils/tailwind.js.map +1 -0
  92. package/dist/utils/theme.js +32 -0
  93. package/dist/utils/theme.js.map +1 -0
  94. package/dist/utils/type-conversion.js +2 -0
  95. package/dist/utils/type-conversion.js.map +1 -0
  96. package/package.json +64 -0
@@ -0,0 +1,182 @@
1
+ import { isLaravelProject } from "../utils/laravel.js";
2
+ import { readPackageJson, detectTailwindV4 } from "../utils/tailwind.js";
3
+ import { hasAlpineJs, hasLivewire, hasInteractivitySupport, } from "../utils/requirements.js";
4
+ import { detectPackageManager } from "../utils/package-manager.js";
5
+ import { findMainCss, hasTailwindImport, injectVelarImport, } from "../utils/css.js";
6
+ import { findMainJs } from "../utils/js.js";
7
+ import { copyTheme } from "../utils/theme.js";
8
+ import { writeVelarConfig } from "../utils/config.js";
9
+ import fs from "fs";
10
+ import { logger } from "../utils/logger.js";
11
+ /**
12
+ * Service for handling Velar initialization
13
+ */
14
+ export class InitService {
15
+ fileSystem;
16
+ /**
17
+ * Create a new InitService instance
18
+ * @param fileSystem - File system service
19
+ */
20
+ constructor(fileSystem) {
21
+ this.fileSystem = fileSystem;
22
+ }
23
+ /**
24
+ * Validate the project environment
25
+ * @returns Environment validation result
26
+ * @throws Error if critical requirements are not met
27
+ */
28
+ validateEnvironment() {
29
+ // Validate Laravel project
30
+ if (!isLaravelProject()) {
31
+ throw new Error("No Laravel project detected");
32
+ }
33
+ // Check Tailwind v4
34
+ const pkg = readPackageJson();
35
+ if (!pkg || !detectTailwindV4(pkg)) {
36
+ throw new Error("Tailwind CSS v4 was not detected");
37
+ }
38
+ // Check interactivity frameworks
39
+ const hasAlpine = hasAlpineJs();
40
+ const hasLivewireSupport = hasLivewire();
41
+ const detectedPm = detectPackageManager();
42
+ // Find CSS and JS files
43
+ const css = findMainCss();
44
+ const js = findMainJs();
45
+ const canInject = css ? hasTailwindImport(css.content) : false;
46
+ return {
47
+ isLaravel: true,
48
+ hasTailwindV4: true,
49
+ hasAlpine,
50
+ hasLivewire: hasLivewireSupport,
51
+ detectedPackageManager: detectedPm,
52
+ cssFile: css,
53
+ jsFile: js,
54
+ canInjectCss: canInject,
55
+ };
56
+ }
57
+ /**
58
+ * Display environment information and warnings
59
+ * @param validation - Environment validation result
60
+ */
61
+ displayEnvironmentInfo(validation) {
62
+ // Display interactivity framework status
63
+ if (!hasInteractivitySupport()) {
64
+ logger.warning("No interactivity framework detected");
65
+ logger.step("Velar components work best with Alpine.js or Livewire");
66
+ logger.step(`Install Alpine.js: ${validation.detectedPackageManager} install alpinejs`);
67
+ logger.step("Or install Livewire: composer require livewire/livewire");
68
+ }
69
+ else if (validation.hasAlpine) {
70
+ logger.success("Alpine.js detected - components will be fully interactive");
71
+ }
72
+ else if (validation.hasLivewire) {
73
+ logger.success("Livewire detected - components will work with Livewire");
74
+ }
75
+ // Display CSS file status
76
+ if (!validation.cssFile) {
77
+ logger.warning("No main CSS file found");
78
+ logger.step("Styles will be created but not auto-imported");
79
+ }
80
+ else if (!validation.canInjectCss) {
81
+ logger.warning("Tailwind import not found in CSS");
82
+ logger.step("Velar styles will not be auto-imported");
83
+ }
84
+ // Display JS file status
85
+ if (!validation.jsFile) {
86
+ logger.warning("No main JS file found");
87
+ logger.step("Component scripts will not be auto-imported");
88
+ }
89
+ }
90
+ /**
91
+ * Create the UI components directory
92
+ * @param path - Directory path (default: "resources/views/components/ui")
93
+ * @returns Promise that resolves when directory is created
94
+ */
95
+ async createComponentsDirectory(path = "resources/views/components/ui") {
96
+ await this.fileSystem.ensureDir(path);
97
+ }
98
+ /**
99
+ * Create the Velar theme CSS file
100
+ * @param theme - Theme to use
101
+ * @param targetPath - Target CSS file path (default: "resources/css/velar.css")
102
+ * @returns Promise that resolves when theme is created
103
+ * @throws Error if theme creation fails
104
+ */
105
+ async createThemeFile(theme, targetPath = "resources/css/velar.css") {
106
+ // Ensure directory exists
107
+ const dirPath = targetPath.split("/").slice(0, -1).join("/");
108
+ await this.fileSystem.ensureDir(dirPath);
109
+ // Create theme file if it doesn't exist
110
+ if (!fs.existsSync(targetPath)) {
111
+ try {
112
+ copyTheme(theme, targetPath);
113
+ logger.success("Velar theme created");
114
+ logger.info(targetPath);
115
+ }
116
+ catch (error) {
117
+ throw new Error(`Failed to create theme file: ${error.message}`);
118
+ }
119
+ }
120
+ else {
121
+ logger.info("velar.css already exists");
122
+ }
123
+ }
124
+ /**
125
+ * Inject Velar styles import into main CSS file
126
+ * @param cssPath - Path to main CSS file
127
+ * @returns Promise that resolves when import is injected
128
+ */
129
+ async injectStylesImport(cssPath) {
130
+ injectVelarImport(cssPath);
131
+ logger.success("Velar styles imported");
132
+ logger.info(cssPath);
133
+ }
134
+ /**
135
+ * Generate and write Velar configuration file
136
+ * @param options - Initialization options
137
+ * @param validation - Environment validation result
138
+ * @returns Promise that resolves when config is written
139
+ */
140
+ async generateConfig(options, validation) {
141
+ const config = {
142
+ version: "0.1",
143
+ theme: options.theme,
144
+ packageManager: options.packageManager,
145
+ css: {
146
+ entry: validation.cssFile?.path ?? "",
147
+ velar: "resources/css/velar.css",
148
+ },
149
+ js: {
150
+ entry: validation.jsFile?.path ?? "",
151
+ },
152
+ components: {
153
+ path: "resources/views/components/ui",
154
+ },
155
+ };
156
+ writeVelarConfig(config);
157
+ logger.success("velar.json config generated");
158
+ }
159
+ /**
160
+ * Display initialization summary
161
+ * @param options - Initialization options
162
+ * @param validation - Environment validation result
163
+ * @param stylesImported - Whether styles were imported
164
+ */
165
+ displaySummary(options, validation, stylesImported) {
166
+ console.log("\n---");
167
+ logger.success("Laravel project detected");
168
+ logger.success("Tailwind CSS v4 detected");
169
+ logger.success(`Theme selected: ${options.theme}`);
170
+ logger.success(`Package manager: ${options.packageManager}`);
171
+ logger.success("UI components directory ready");
172
+ if (validation.jsFile) {
173
+ logger.success("Main JS file detected");
174
+ }
175
+ logger.success(stylesImported ? "Styles import complete" : "Styles import pending");
176
+ logger.success("velar.json created");
177
+ console.log("\nNext steps:");
178
+ console.log(" velar add button");
179
+ console.log("\n💡 Want to customize your Tailwind palette? Try https://tweakcn.com/ — a visual generator for Tailwind-compatible color scales.");
180
+ }
181
+ }
182
+ //# sourceMappingURL=InitService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InitService.js","sourceRoot":"","sources":["../../src/services/InitService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import path from "path";
2
+ import { RegistryService } from "./RegistryService.js";
3
+ import { ConfigManager } from "../config/ConfigManager.js";
4
+ import { FileSystemService } from "./FileSystemService.js";
5
+ /**
6
+ * Service for the business logic of the 'list' command
7
+ */
8
+ export class ListService {
9
+ registryService;
10
+ configManager;
11
+ fileSystem;
12
+ constructor(registryService, configManager, fileSystem) {
13
+ this.registryService = registryService;
14
+ this.configManager = configManager;
15
+ this.fileSystem = fileSystem;
16
+ }
17
+ /**
18
+ * Fetches the component registry
19
+ * @returns Component registry
20
+ */
21
+ async fetchRegistry() {
22
+ return await this.registryService.fetchRegistry();
23
+ }
24
+ /**
25
+ * Checks if a component is already installed in the project
26
+ * @param component - Component metadata
27
+ * @returns True if the component is installed
28
+ */
29
+ async isComponentInstalled(component) {
30
+ try {
31
+ if (!this.configManager.validate()) {
32
+ await this.configManager.load();
33
+ }
34
+ const componentsPath = this.configManager.getComponentsPath();
35
+ // Check if the main blade file exists
36
+ const componentPath = path.join(componentsPath, `${component.name}.blade.php`);
37
+ return await this.fileSystem.fileExists(componentPath);
38
+ }
39
+ catch {
40
+ return false;
41
+ }
42
+ }
43
+ /**
44
+ * Sorts components by name
45
+ * @param components - List of components
46
+ * @returns Sorted list
47
+ */
48
+ sortComponents(components) {
49
+ return [...components].sort((a, b) => a.name.localeCompare(b.name));
50
+ }
51
+ }
52
+ //# sourceMappingURL=ListService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListService.js","sourceRoot":"","sources":["../../src/services/ListService.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAG3D;;GAEG;AACH,MAAM,OAAO,WAAW;IAEH;IACA;IACA;IAHnB,YACmB,eAAgC,EAChC,aAA4B,EAC5B,UAA6B;QAF7B,oBAAe,GAAf,eAAe,CAAiB;QAChC,kBAAa,GAAb,aAAa,CAAe;QAC5B,eAAU,GAAV,UAAU,CAAmB;IAC7C,CAAC;IAEJ;;;OAGG;IACH,KAAK,CAAC,aAAa;QACjB,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC;IACpD,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,oBAAoB,CAAC,SAA6B;QACtD,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,CAAC;gBACnC,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;YAClC,CAAC;YAED,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE,CAAC;YAC9D,sCAAsC;YACtC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAC7B,cAAc,EACd,GAAG,SAAS,CAAC,IAAI,YAAY,CAC9B,CAAC;YAEF,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,cAAc,CAAC,UAAyC;QACtD,OAAO,CAAC,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACtE,CAAC;CACF"}
@@ -0,0 +1,85 @@
1
+ import { fetchComponent, fetchComponentFile, fetchGitHubRegistry, } from "../utils/remote-registry.js";
2
+ import { HttpService } from "./HttpService.js";
3
+ import { spinner } from "../utils/spinner.js";
4
+ /**
5
+ * Service for interacting with the Velar component registry
6
+ */
7
+ export class RegistryService {
8
+ httpService;
9
+ /**
10
+ * Create a new RegistryService instance
11
+ * @param httpService - Optional HTTP service instance (creates new one if not provided)
12
+ */
13
+ constructor(httpService) {
14
+ this.httpService = httpService ?? new HttpService();
15
+ }
16
+ /**
17
+ * Fetch the complete registry data
18
+ * @returns Promise resolving to registry data
19
+ * @throws NetworkError if fetch fails
20
+ */
21
+ async fetchRegistry() {
22
+ return await spinner.withTask("Fetching registry...", () => fetchGitHubRegistry(), undefined, "Failed to fetch registry");
23
+ }
24
+ /**
25
+ * Fetch metadata for a specific component
26
+ * @param name - Component name
27
+ * @returns Promise resolving to component metadata
28
+ * @throws ComponentNotFoundError if component doesn't exist
29
+ * @throws NetworkError if fetch fails
30
+ */
31
+ async fetchComponent(name) {
32
+ const file = await spinner.withTask(`Fetching component "${name}" metadata...`, () => fetchComponent(name), undefined, `Failed to fetch component "${name}"`);
33
+ return await this.parseComponentMeta(file);
34
+ }
35
+ /**
36
+ * Fetch file content for a component
37
+ * @param componentUrl - Component URL or name
38
+ * @param path - File path within component
39
+ * @returns Promise resolving to file content
40
+ * @throws ComponentNotFoundError if component or file doesn't exist
41
+ * @throws NetworkError if fetch fails
42
+ */
43
+ async fetchFile(componentUrl, path) {
44
+ const componentName = componentUrl.split("/").pop() || componentUrl;
45
+ return await spinner.withTask(`Downloading ${path}...`, () => fetchComponentFile(componentName, path), undefined, `Failed to fetch file "${path}"`);
46
+ }
47
+ /**
48
+ * Resolve component dependencies
49
+ * @param component - Component metadata
50
+ * @returns Promise resolving to array of components including dependencies
51
+ */
52
+ async resolveDependencies(component) {
53
+ const visited = new Set();
54
+ const resolved = [];
55
+ const resolve = async (comp) => {
56
+ if (visited.has(comp.name))
57
+ return;
58
+ visited.add(comp.name);
59
+ resolved.push(comp);
60
+ // Component dependencies would be resolved here if they exist
61
+ // For now, just add the component itself
62
+ };
63
+ await resolve(component);
64
+ return resolved;
65
+ }
66
+ /**
67
+ * Parse component metadata from GitHub file
68
+ * @param file - GitHub file metadata
69
+ * @returns Promise resolving to component metadata
70
+ * @throws NetworkError if download or parsing fails
71
+ */
72
+ async parseComponentMeta(file) {
73
+ if (!file.download_url) {
74
+ throw new Error("GitHub file has no download URL");
75
+ }
76
+ try {
77
+ const raw = await this.httpService.fetchText(file.download_url);
78
+ return JSON.parse(raw);
79
+ }
80
+ catch (error) {
81
+ throw new Error(`Failed to parse component meta: ${error.message}`);
82
+ }
83
+ }
84
+ }
85
+ //# sourceMappingURL=RegistryService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RegistryService.js","sourceRoot":"","sources":["../../src/services/RegistryService.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C;;GAEG;AACH,MAAM,OAAO,eAAe;IACT,WAAW,CAAc;IAE1C;;;OAGG;IACH,YAAY,WAAyB;QACnC,IAAI,CAAC,WAAW,GAAG,WAAW,IAAI,IAAI,WAAW,EAAE,CAAC;IACtD,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,aAAa;QACjB,OAAO,MAAM,OAAO,CAAC,QAAQ,CAC3B,sBAAsB,EACtB,GAAG,EAAE,CAAC,mBAAmB,EAAE,EAC3B,SAAS,EACT,0BAA0B,CAC3B,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,cAAc,CAAC,IAAY;QAC/B,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,QAAQ,CACjC,uBAAuB,IAAI,eAAe,EAC1C,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,EAC1B,SAAS,EACT,8BAA8B,IAAI,GAAG,CACtC,CAAC;QACF,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,SAAS,CAAC,YAAoB,EAAE,IAAY;QAChD,MAAM,aAAa,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,YAAY,CAAC;QACpE,OAAO,MAAM,OAAO,CAAC,QAAQ,CAC3B,eAAe,IAAI,KAAK,EACxB,GAAG,EAAE,CAAC,kBAAkB,CAAC,aAAa,EAAE,IAAI,CAAC,EAC7C,SAAS,EACT,yBAAyB,IAAI,GAAG,CACjC,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,mBAAmB,CACvB,SAA6B;QAE7B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,MAAM,QAAQ,GAAyB,EAAE,CAAC;QAE1C,MAAM,OAAO,GAAG,KAAK,EAAE,IAAwB,EAAE,EAAE;YACjD,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,OAAO;YACnC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEpB,8DAA8D;YAC9D,yCAAyC;QAC3C,CAAC,CAAC;QAEF,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;QACzB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,kBAAkB,CAC9B,IAAgB;QAEhB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrD,CAAC;QAED,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAChE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAuB,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,mCAAoC,KAAe,CAAC,OAAO,EAAE,CAC9D,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../src/types/interfaces.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=meta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta.js","sourceRoot":"","sources":["../../src/types/meta.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/types/registry.ts"],"names":[],"mappings":""}
@@ -0,0 +1,46 @@
1
+ import { exec } from "child_process";
2
+ import { promisify } from "util";
3
+ import { logger } from "./logger.js";
4
+ const execAsync = promisify(exec);
5
+ export async function installAlpineJs(packageManager) {
6
+ try {
7
+ logger.info(`Installing Alpine.js with ${packageManager}...`);
8
+ const command = `${packageManager} add alpinejs`;
9
+ await execAsync(command);
10
+ logger.success("Alpine.js installed successfully");
11
+ return true;
12
+ }
13
+ catch (error) {
14
+ logger.error("Failed to install Alpine.js", error.message);
15
+ return false;
16
+ }
17
+ }
18
+ export async function addAlpineToAppJs() {
19
+ try {
20
+ // Check if resources/js/app.js exists
21
+ const fs = await import("fs");
22
+ const appJsPath = "resources/js/app.js";
23
+ if (!fs.existsSync(appJsPath)) {
24
+ logger.warning("resources/js/app.js not found - you'll need to add Alpine.js manually");
25
+ return false;
26
+ }
27
+ // Read current content
28
+ const content = fs.readFileSync(appJsPath, "utf8");
29
+ // Check if Alpine is already imported
30
+ if (content.includes("import 'alpinejs'") ||
31
+ content.includes("from 'alpinejs'")) {
32
+ logger.info("Alpine.js already imported in app.js");
33
+ return true;
34
+ }
35
+ // Add Alpine import after existing imports
36
+ const newContent = `import 'alpinejs';\n\n${content}`;
37
+ fs.writeFileSync(appJsPath, newContent);
38
+ logger.success("Alpine.js added to app.js");
39
+ return true;
40
+ }
41
+ catch (error) {
42
+ logger.error("Failed to add Alpine.js to app.js", error.message);
43
+ return false;
44
+ }
45
+ }
46
+ //# sourceMappingURL=alpine-installer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alpine-installer.js","sourceRoot":"","sources":["../../src/utils/alpine-installer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,cAAsB;IAEtB,IAAI,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,6BAA6B,cAAc,KAAK,CAAC,CAAC;QAE9D,MAAM,OAAO,GAAG,GAAG,cAAc,eAAe,CAAC;QACjD,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;QAEzB,MAAM,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QACtE,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,IAAI,CAAC;QACH,sCAAsC;QACtC,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,SAAS,GAAG,qBAAqB,CAAC;QAExC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,OAAO,CACZ,uEAAuE,CACxE,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC;QAED,uBAAuB;QACvB,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAEnD,sCAAsC;QACtC,IACE,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC;YACrC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EACnC,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YACpD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,2CAA2C;QAC3C,MAAM,UAAU,GAAG,yBAAyB,OAAO,EAAE,CAAC;QAEtD,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACxC,MAAM,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,mCAAmC,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QAC5E,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,21 @@
1
+ import fs from "fs";
2
+ /**
3
+ * Write Velar configuration to velar.json file
4
+ * @param config - Configuration object to write
5
+ * @throws Error if file write fails
6
+ */
7
+ export function writeVelarConfig(config) {
8
+ fs.writeFileSync("velar.json", JSON.stringify(config, null, 2) + "\n", "utf8");
9
+ }
10
+ /**
11
+ * Read Velar configuration from velar.json file
12
+ * @returns Configuration object
13
+ * @throws Error if file doesn't exist or is invalid
14
+ */
15
+ export function readVelarConfig() {
16
+ if (!fs.existsSync("velar.json")) {
17
+ throw new Error("Velar configuration not found.");
18
+ }
19
+ return JSON.parse(fs.readFileSync("velar.json", "utf8"));
20
+ }
21
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAGpB;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAmB;IAClD,EAAE,CAAC,aAAa,CACd,YAAY,EACZ,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EACtC,MAAM,CACP,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe;IAC7B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAgB,CAAC;AAC1E,CAAC"}
@@ -0,0 +1,53 @@
1
+ import fs from "fs";
2
+ /**
3
+ * Common CSS file paths to check for main stylesheet
4
+ */
5
+ export const CSS_CANDIDATES = [
6
+ "resources/css/app.css",
7
+ "resources/css/app.scss",
8
+ "resources/css/main.css",
9
+ "resources/css/style.css",
10
+ "resources/css/styles.css",
11
+ ];
12
+ /**
13
+ * Find the main CSS file in the project
14
+ * @returns CSS file info if found, null otherwise
15
+ */
16
+ export function findMainCss() {
17
+ for (const rel of CSS_CANDIDATES) {
18
+ if (fs.existsSync(rel)) {
19
+ return {
20
+ path: rel,
21
+ content: fs.readFileSync(rel, "utf8"),
22
+ };
23
+ }
24
+ }
25
+ return null;
26
+ }
27
+ /**
28
+ * Check if CSS content has Tailwind import
29
+ * @param css - CSS content to check
30
+ * @returns True if Tailwind import is found
31
+ */
32
+ export function hasTailwindImport(css) {
33
+ return /@import\s+["']tailwindcss["']/.test(css);
34
+ }
35
+ /**
36
+ * Inject Velar CSS import into main CSS file
37
+ * @param cssPath - Path to the CSS file
38
+ * @throws Error if file read/write fails
39
+ */
40
+ export function injectVelarImport(cssPath) {
41
+ let content = fs.readFileSync(cssPath, "utf8");
42
+ if (content.includes('@import "./velar.css"')) {
43
+ return;
44
+ }
45
+ if (hasTailwindImport(content)) {
46
+ content = content.replace(/@import\s+["']tailwindcss["'];?/, (match) => `${match}\n@import "./velar.css";`);
47
+ }
48
+ else {
49
+ content += '\n@import "./velar.css";\n';
50
+ }
51
+ fs.writeFileSync(cssPath, content, "utf8");
52
+ }
53
+ //# sourceMappingURL=css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css.js","sourceRoot":"","sources":["../../src/utils/css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAGpB;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,uBAAuB;IACvB,wBAAwB;IACxB,wBAAwB;IACxB,yBAAyB;IACzB,0BAA0B;CAClB,CAAC;AAEX;;;GAGG;AACH,MAAM,UAAU,WAAW;IACzB,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;QACjC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO;gBACL,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC;aACtC,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,OAAO,+BAA+B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACnD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,IAAI,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC/C,IAAI,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;QAC9C,OAAO;IACT,CAAC;IACD,IAAI,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/B,OAAO,GAAG,OAAO,CAAC,OAAO,CACvB,iCAAiC,EACjC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,0BAA0B,CAC9C,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,IAAI,4BAA4B,CAAC;IAC1C,CAAC;IACD,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { fetchComponentMetaFromUrl } from "./remote-registry.js";
2
+ export async function resolveDependencies(meta) {
3
+ const resolved = [];
4
+ const visited = new Set();
5
+ async function visit(metaUrl, componentName) {
6
+ if (visited.has(componentName))
7
+ return;
8
+ visited.add(componentName);
9
+ const meta = await fetchComponentMetaFromUrl(metaUrl);
10
+ const baseUrl = metaUrl.replace("meta.json?ref=main", "");
11
+ for (const file of meta.files) {
12
+ resolved.push({
13
+ component: meta.name,
14
+ type: file.type,
15
+ url: baseUrl + file.path + "?ref=main",
16
+ path: file.path,
17
+ });
18
+ }
19
+ }
20
+ await visit(meta.url, meta.name);
21
+ // console.log("Resolved dependencies:", resolved);
22
+ return resolved;
23
+ }
24
+ //# sourceMappingURL=deps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deps.js","sourceRoot":"","sources":["../../src/utils/deps.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AASjE,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAAgB;IAEhB,MAAM,QAAQ,GAA0B,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAElC,KAAK,UAAU,KAAK,CAAC,OAAe,EAAE,aAAqB;QACzD,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;YAAE,OAAO;QACvC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAE3B,MAAM,IAAI,GAAuB,MAAM,yBAAyB,CAAC,OAAO,CAAC,CAAC;QAC1E,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;QAE1D,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,QAAQ,CAAC,IAAI,CAAC;gBACZ,SAAS,EAAE,IAAI,CAAC,IAAI;gBACpB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,WAAW;gBACtC,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,mDAAmD;IACnD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Get the GitHub registry API URL
3
+ * @returns GitHub API URL for the Velar registry
4
+ */
5
+ export const getGitHubRegistryUrl = () => {
6
+ return "https://api.github.com/repos/velar-ui/registry/contents";
7
+ };
8
+ //# sourceMappingURL=environment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.js","sourceRoot":"","sources":["../../src/utils/environment.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAW,EAAE;IAC/C,OAAO,yDAAyD,CAAC;AACnE,CAAC,CAAC"}
@@ -0,0 +1,21 @@
1
+ export class RegistryError extends Error {
2
+ cause;
3
+ constructor(message, cause) {
4
+ super(message);
5
+ this.cause = cause;
6
+ this.name = "RegistryError";
7
+ }
8
+ }
9
+ export class NetworkError extends RegistryError {
10
+ constructor(message, cause) {
11
+ super(message, cause);
12
+ this.name = "NetworkError";
13
+ }
14
+ }
15
+ export class ComponentNotFoundError extends RegistryError {
16
+ constructor(componentName, cause) {
17
+ super(`Component "${componentName}" not found`, cause);
18
+ this.name = "ComponentNotFoundError";
19
+ }
20
+ }
21
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,aAAc,SAAQ,KAAK;IAG7B;IAFT,YACE,OAAe,EACR,KAAa;QAEpB,KAAK,CAAC,OAAO,CAAC,CAAC;QAFR,UAAK,GAAL,KAAK,CAAQ;QAGpB,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,aAAa;IAC7C,YAAY,OAAe,EAAE,KAAa;QACxC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,aAAa;IACvD,YAAY,aAAqB,EAAE,KAAa;QAC9C,KAAK,CAAC,cAAc,aAAa,aAAa,EAAE,KAAK,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF"}
@@ -0,0 +1,14 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ export function ensureDir(p) {
4
+ if (!fs.existsSync(p))
5
+ fs.mkdirSync(p, { recursive: true });
6
+ }
7
+ export function fileExists(p) {
8
+ return fs.existsSync(p);
9
+ }
10
+ export function copyFile(src, dest) {
11
+ ensureDir(path.dirname(dest));
12
+ fs.copyFileSync(src, dest, fs.constants.COPYFILE_EXCL);
13
+ }
14
+ //# sourceMappingURL=filesystem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem.js","sourceRoot":"","sources":["../../src/utils/filesystem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,UAAU,SAAS,CAAC,CAAS;IACjC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,CAAS;IAClC,OAAO,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,IAAY;IAChD,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9B,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;AACzD,CAAC"}