zard-cli 1.1.0-alpha.0 → 1.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 (234) hide show
  1. package/README.md +122 -60
  2. package/commands/add/component-installer.d.ts +2 -1
  3. package/commands/add/component-installer.d.ts.map +1 -1
  4. package/commands/add/component-installer.js +25 -7
  5. package/commands/add/component-installer.js.map +1 -1
  6. package/commands/add/component-selector.d.ts +3 -3
  7. package/commands/add/component-selector.js +4 -4
  8. package/commands/add/dark-mode-setup.d.ts +2 -0
  9. package/commands/add/dark-mode-setup.d.ts.map +1 -1
  10. package/commands/add/dark-mode-setup.js +15 -1
  11. package/commands/add/dark-mode-setup.js.map +1 -1
  12. package/commands/add/dependency-resolver.d.ts +8 -1
  13. package/commands/add/dependency-resolver.d.ts.map +1 -1
  14. package/commands/add/dependency-resolver.js +87 -16
  15. package/commands/add/dependency-resolver.js.map +1 -1
  16. package/commands/add/index.d.ts.map +1 -1
  17. package/commands/add/index.js +55 -29
  18. package/commands/add/index.js.map +1 -1
  19. package/commands/add/stylesheet-setup.d.ts +3 -0
  20. package/commands/add/stylesheet-setup.d.ts.map +1 -0
  21. package/commands/add/stylesheet-setup.js +92 -0
  22. package/commands/add/stylesheet-setup.js.map +1 -0
  23. package/commands/add/wizard.d.ts +12 -8
  24. package/commands/add/wizard.d.ts.map +1 -1
  25. package/commands/add/wizard.js +12 -2
  26. package/commands/add/wizard.js.map +1 -1
  27. package/commands/init/config-prompter.d.ts +36 -16
  28. package/commands/init/config-prompter.d.ts.map +1 -1
  29. package/commands/init/config-prompter.js +37 -17
  30. package/commands/init/config-prompter.js.map +1 -1
  31. package/commands/init/dependencies.d.ts.map +1 -1
  32. package/commands/init/dependencies.js +35 -23
  33. package/commands/init/dependencies.js.map +1 -1
  34. package/commands/init/index.d.ts.map +1 -1
  35. package/commands/init/index.js +74 -23
  36. package/commands/init/index.js.map +1 -1
  37. package/commands/init/library-peers.d.ts +28 -0
  38. package/commands/init/library-peers.d.ts.map +1 -0
  39. package/commands/init/library-peers.js +61 -0
  40. package/commands/init/library-peers.js.map +1 -0
  41. package/commands/init/project-kind.d.ts +39 -39
  42. package/commands/init/project-kind.d.ts.map +1 -1
  43. package/commands/init/project-kind.js +45 -45
  44. package/commands/init/project-kind.js.map +1 -1
  45. package/commands/init/rtl-setup.d.ts +12 -0
  46. package/commands/init/rtl-setup.d.ts.map +1 -0
  47. package/commands/init/rtl-setup.js +42 -0
  48. package/commands/init/rtl-setup.js.map +1 -0
  49. package/commands/init/steps.d.ts +3 -4
  50. package/commands/init/steps.d.ts.map +1 -1
  51. package/commands/init/steps.js +100 -39
  52. package/commands/init/steps.js.map +1 -1
  53. package/commands/init/tailwind-setup.d.ts +5 -5
  54. package/commands/init/tailwind-setup.d.ts.map +1 -1
  55. package/commands/init/tailwind-setup.js +29 -15
  56. package/commands/init/tailwind-setup.js.map +1 -1
  57. package/commands/init/tsconfig-updater.d.ts +4 -4
  58. package/commands/init/tsconfig-updater.js +12 -12
  59. package/commands/init/tsconfig-updater.js.map +1 -1
  60. package/commands/init/update-angular-config.js +4 -4
  61. package/commands/init/vite-setup.d.ts +5 -4
  62. package/commands/init/vite-setup.d.ts.map +1 -1
  63. package/commands/init/vite-setup.js +11 -10
  64. package/commands/init/vite-setup.js.map +1 -1
  65. package/commands/init/wizard.d.ts +10 -7
  66. package/commands/init/wizard.d.ts.map +1 -1
  67. package/commands/init/wizard.js +73 -46
  68. package/commands/init/wizard.js.map +1 -1
  69. package/constants/app.constants.d.ts +17 -0
  70. package/constants/app.constants.d.ts.map +1 -1
  71. package/constants/app.constants.js +39 -16
  72. package/constants/app.constants.js.map +1 -1
  73. package/core/icons/families.d.ts +38 -0
  74. package/core/icons/families.d.ts.map +1 -0
  75. package/core/icons/families.js +26 -0
  76. package/core/icons/families.js.map +1 -0
  77. package/core/icons/icon-map.d.ts +24 -0
  78. package/core/icons/icon-map.d.ts.map +1 -0
  79. package/core/icons/icon-map.js +150 -0
  80. package/core/icons/icon-map.js.map +1 -0
  81. package/core/icons/index.d.ts +107 -0
  82. package/core/icons/index.d.ts.map +1 -0
  83. package/core/icons/index.js +183 -0
  84. package/core/icons/index.js.map +1 -0
  85. package/core/registry/registry-data.d.ts.map +1 -1
  86. package/core/registry/registry-data.js +545 -63
  87. package/core/registry/registry-data.js.map +1 -1
  88. package/core/themes/index.d.ts +1 -1
  89. package/core/themes/index.js +1 -1
  90. package/core/themes/theme-definitions.d.ts.map +1 -1
  91. package/core/themes/theme-definitions.js +61 -72
  92. package/core/themes/theme-definitions.js.map +1 -1
  93. package/index.js +3 -2
  94. package/index.js.map +1 -1
  95. package/package.json +56 -58
  96. package/ui/blocks.d.ts +29 -28
  97. package/ui/blocks.d.ts.map +1 -1
  98. package/ui/blocks.js +27 -27
  99. package/ui/blocks.js.map +1 -1
  100. package/ui/brand.d.ts +5 -5
  101. package/ui/brand.d.ts.map +1 -1
  102. package/ui/brand.js +6 -6
  103. package/ui/brand.js.map +1 -1
  104. package/ui/engine/animation/index.d.ts +2 -3
  105. package/ui/engine/animation/index.d.ts.map +1 -1
  106. package/ui/engine/animation/index.js +2 -3
  107. package/ui/engine/animation/index.js.map +1 -1
  108. package/ui/engine/ansi/index.d.ts +10 -11
  109. package/ui/engine/ansi/index.d.ts.map +1 -1
  110. package/ui/engine/ansi/index.js +6 -7
  111. package/ui/engine/ansi/index.js.map +1 -1
  112. package/ui/engine/components/index.d.ts +3 -3
  113. package/ui/engine/components/index.js +4 -4
  114. package/ui/engine/cursor/index.d.ts +3 -4
  115. package/ui/engine/cursor/index.d.ts.map +1 -1
  116. package/ui/engine/cursor/index.js +2 -3
  117. package/ui/engine/cursor/index.js.map +1 -1
  118. package/ui/engine/diff/index.d.ts +2 -3
  119. package/ui/engine/diff/index.d.ts.map +1 -1
  120. package/ui/engine/diff/index.js +5 -6
  121. package/ui/engine/diff/index.js.map +1 -1
  122. package/ui/engine/events/index.d.ts +2 -2
  123. package/ui/engine/events/index.js +3 -3
  124. package/ui/engine/events/index.js.map +1 -1
  125. package/ui/engine/focus/index.d.ts +2 -2
  126. package/ui/engine/focus/index.js +2 -2
  127. package/ui/engine/frame/index.d.ts +4 -4
  128. package/ui/engine/frame/index.js +0 -0
  129. package/ui/engine/index.d.ts +7 -7
  130. package/ui/engine/index.js +7 -7
  131. package/ui/engine/input/index.d.ts +2 -2
  132. package/ui/engine/input/index.js +11 -11
  133. package/ui/engine/input/index.js.map +1 -1
  134. package/ui/engine/layout/index.d.ts +3 -3
  135. package/ui/engine/layout/index.js +7 -7
  136. package/ui/engine/layout/index.js.map +1 -1
  137. package/ui/engine/renderer/index.d.ts +4 -4
  138. package/ui/engine/renderer/index.d.ts.map +1 -1
  139. package/ui/engine/renderer/index.js +3 -3
  140. package/ui/engine/scheduler/index.d.ts +3 -3
  141. package/ui/engine/scheduler/index.js +5 -5
  142. package/ui/engine/scheduler/index.js.map +1 -1
  143. package/ui/engine/screen/index.d.ts +5 -5
  144. package/ui/engine/screen/index.d.ts.map +1 -1
  145. package/ui/engine/screen/index.js +7 -7
  146. package/ui/engine/screen/index.js.map +1 -1
  147. package/ui/engine/terminal/index.d.ts +49 -3
  148. package/ui/engine/terminal/index.d.ts.map +1 -1
  149. package/ui/engine/terminal/index.js +149 -18
  150. package/ui/engine/terminal/index.js.map +1 -1
  151. package/ui/engine/testing/index.d.ts +4 -4
  152. package/ui/engine/testing/index.d.ts.map +1 -1
  153. package/ui/engine/testing/index.js +2 -2
  154. package/ui/engine/theme/index.d.ts +2 -3
  155. package/ui/engine/theme/index.d.ts.map +1 -1
  156. package/ui/engine/theme/index.js +3 -4
  157. package/ui/engine/theme/index.js.map +1 -1
  158. package/ui/engine/utils/index.d.ts +2 -2
  159. package/ui/engine/utils/index.js +4 -4
  160. package/ui/engine/utils/index.js.map +1 -1
  161. package/ui/gate.d.ts +7 -7
  162. package/ui/gate.d.ts.map +1 -1
  163. package/ui/gate.js +5 -5
  164. package/ui/index.d.ts +3 -3
  165. package/ui/index.js +3 -3
  166. package/ui/log-sink.d.ts +9 -9
  167. package/ui/log-sink.d.ts.map +1 -1
  168. package/ui/log-sink.js +9 -9
  169. package/ui/log-sink.js.map +1 -1
  170. package/ui/output.d.ts +6 -6
  171. package/ui/output.d.ts.map +1 -1
  172. package/ui/output.js +6 -6
  173. package/ui/output.js.map +1 -1
  174. package/ui/report.d.ts +8 -8
  175. package/ui/report.d.ts.map +1 -1
  176. package/ui/report.js +7 -7
  177. package/ui/report.js.map +1 -1
  178. package/ui/runner.d.ts +31 -22
  179. package/ui/runner.d.ts.map +1 -1
  180. package/ui/runner.js +41 -25
  181. package/ui/runner.js.map +1 -1
  182. package/ui/style.d.ts +7 -7
  183. package/ui/style.d.ts.map +1 -1
  184. package/ui/style.js +8 -8
  185. package/ui/style.js.map +1 -1
  186. package/ui/testing/fake-tty.d.ts +4 -4
  187. package/ui/testing/fake-tty.js +4 -4
  188. package/ui/text-input.d.ts +15 -14
  189. package/ui/text-input.d.ts.map +1 -1
  190. package/ui/text-input.js +15 -13
  191. package/ui/text-input.js.map +1 -1
  192. package/ui/theme.d.ts +4 -4
  193. package/ui/theme.js +4 -4
  194. package/utils/angular-compat.d.ts +21 -0
  195. package/utils/angular-compat.d.ts.map +1 -0
  196. package/utils/angular-compat.js +52 -0
  197. package/utils/angular-compat.js.map +1 -0
  198. package/utils/config.d.ts +16 -9
  199. package/utils/config.d.ts.map +1 -1
  200. package/utils/config.js +35 -13
  201. package/utils/config.js.map +1 -1
  202. package/utils/errors.d.ts +11 -0
  203. package/utils/errors.d.ts.map +1 -1
  204. package/utils/errors.js +14 -0
  205. package/utils/errors.js.map +1 -1
  206. package/utils/get-project-info.d.ts +6 -6
  207. package/utils/get-project-info.d.ts.map +1 -1
  208. package/utils/get-project-info.js +106 -36
  209. package/utils/get-project-info.js.map +1 -1
  210. package/utils/http-client.d.ts.map +1 -1
  211. package/utils/http-client.js +20 -5
  212. package/utils/http-client.js.map +1 -1
  213. package/utils/icon-catalog.d.ts +34 -0
  214. package/utils/icon-catalog.d.ts.map +1 -0
  215. package/utils/icon-catalog.js +63 -0
  216. package/utils/icon-catalog.js.map +1 -0
  217. package/utils/logger.d.ts +3 -3
  218. package/utils/logger.js +9 -9
  219. package/utils/logger.js.map +1 -1
  220. package/utils/package-manager.d.ts +25 -25
  221. package/utils/package-manager.js +50 -50
  222. package/utils/package-manager.js.map +1 -1
  223. package/utils/registry.d.ts +100 -6
  224. package/utils/registry.d.ts.map +1 -1
  225. package/utils/registry.js +141 -22
  226. package/utils/registry.js.map +1 -1
  227. package/utils/schema-version.d.ts +21 -0
  228. package/utils/schema-version.d.ts.map +1 -0
  229. package/utils/schema-version.js +28 -0
  230. package/utils/schema-version.js.map +1 -0
  231. package/utils/source-file.d.ts +21 -21
  232. package/utils/source-file.d.ts.map +1 -1
  233. package/utils/source-file.js +24 -24
  234. package/utils/source-file.js.map +1 -1
package/README.md CHANGED
@@ -1,60 +1,122 @@
1
- # Zard
2
-
3
- Modern Angular component library inspired by shadcn/ui, built with TailwindCSS and designed for developers who value <b>beautiful</b>, <b>accessible</b>, and <b>completely free</b> open source components.
4
-
5
- <a alt="Zard Ui logo" href="https://www.zardui.com/" target="_blank" rel="noreferrer">
6
- <img align="center" width=100% src="https://www.zardui.com/images/github_banner.png"/>
7
- </a>
8
-
9
- <p align="center">Made with ❤️ from 🇧🇷</p>
10
- <p align="center">
11
- <img src="https://img.shields.io/github/stars/zard-ui/zardui" alt="zard ui repository stars"/>
12
- </p>
13
-
14
- ## Stack
15
-
16
- ![Angular](https://img.shields.io/badge/angular-%23DD0031.svg?style=for-the-badge&logo=angular&logoColor=white)
17
- ![TailwindCSS](https://img.shields.io/badge/tailwindcss-%2338B2AC.svg?style=for-the-badge&logo=tailwind-css&logoColor=white)
18
- ![TypeScript](https://img.shields.io/badge/typescript-%23007ACC.svg?style=for-the-badge&logo=typescript&logoColor=white)
19
-
20
- ## Documentation
21
-
22
- Visit https://www.zardui.com/docs to view the documentation
23
-
24
- ## Contributing
25
-
26
- We follow a **simple GitHub Flow** with automated releases. Please read our [contributing guide](/CONTRIBUTING.md) to get started.
27
-
28
- ### Quick Start for Contributors
29
-
30
- 1. Fork the repository
31
- 2. Create your feature branch: `git checkout -b feat/#123-your-feature`
32
- 3. Develop with as many commits as you want
33
- 4. Open a PR to `master`
34
- 5. After review + merge = automatic release!
35
-
36
- ### Development Commands
37
-
38
- ```bash
39
- npm start # Start dev server (port 4222)
40
- npm test # Run all tests
41
- npm run build # Build production
42
- npm run release # Automated release
43
- ```
44
-
45
- ## License
46
-
47
- Licensed under the [MIT license](/LICENSE.md).
48
-
49
- ## Get In Touch
50
-
51
- <p>Click on one of the icons and Help us on this journey and be part of our community.</p>
52
-
53
- <a href="https://chat.whatsapp.com/Dctdh6Huhvm24OX6js5XKT" target="_blank">
54
- <img src="https://img.shields.io/badge/WhatsApp-25D366?style=for-the-badge&logo=whatsapp&logoColor=white" alt="whatsapp" />
55
- </a>
56
- <img src="https://dcbadge.limes.pink/api/server/https://discord.com/invite/yP8Uj9rAX9" alt="discord" />
57
-
58
- <span>Follow us in</span> <a href="https://x.com/zard_ui" target="_blank">
59
- <img src="https://img.shields.io/badge/X-%23000000.svg?logo=X&logoColor=white" alt="X" />
60
- </a>
1
+ # zard-cli
2
+
3
+ The command line for [zard/ui](https://www.zardui.com): add beautiful, accessible Angular components to your project with a single command. The source lands in your codebase, so every component is yours to read and change.
4
+
5
+ <a alt="zard/ui" href="https://www.zardui.com/docs/cli" target="_blank" rel="noreferrer">
6
+ <img align="center" width="100%" src="https://www.zardui.com/images/github_banner.png" alt="zard/ui"/>
7
+ </a>
8
+
9
+ <p align="center">
10
+ <a href="https://www.npmjs.com/package/zard-cli"><img src="https://img.shields.io/npm/v/zard-cli?label=zard-cli" alt="npm version"/></a>
11
+ <a href="https://github.com/zard-ui/zardui"><img src="https://img.shields.io/github/stars/zard-ui/zardui" alt="GitHub stars"/></a>
12
+ <a href="https://github.com/zard-ui/zardui/blob/master/LICENSE.md"><img src="https://img.shields.io/npm/l/zard-cli" alt="license"/></a>
13
+ </p>
14
+
15
+ ## Quick start
16
+
17
+ ```bash
18
+ # 1. Set up zard/ui in your project
19
+ npx zard-cli@latest init
20
+
21
+ # 2. Add components; whatever they depend on comes along
22
+ npx zard-cli@latest add button card dialog
23
+ ```
24
+
25
+ ```ts
26
+ import { Component } from '@angular/core';
27
+
28
+ import { ZardButtonComponent } from '@/shared/components/button';
29
+
30
+ @Component({
31
+ selector: 'app-root',
32
+ imports: [ZardButtonComponent],
33
+ template: `
34
+ <z-button>Click me</z-button>
35
+ `,
36
+ })
37
+ export class AppComponent {}
38
+ ```
39
+
40
+ Requires Node 20 or newer and an Angular project with Tailwind CSS v4 (`init` installs and wires Tailwind for you).
41
+
42
+ ## Commands
43
+
44
+ ### `init`
45
+
46
+ Sets up your project: installs the dependencies, writes the theme tokens, maps the `@/` import alias, registers `provideZard()` and wires Tailwind into the build. The first question is the kind of project, and everything after it follows from that answer.
47
+
48
+ ```bash
49
+ npx zard-cli init
50
+ ```
51
+
52
+ | Option | Description |
53
+ | ---------------------- | -------------------------------------------------------------------------- |
54
+ | `-y, --yes` | Skip the confirmation prompt |
55
+ | `-c, --cwd <cwd>` | Working directory, defaults to the current one |
56
+ | `-t, --type <type>` | Project type: `angular`, `angular-library`, `nx`, `nx-library` or `analog` |
57
+ | `-p, --project <name>` | Which workspace project to configure, when more than one is compatible |
58
+ | `--css <path>` | The global stylesheet that receives the theme |
59
+ | `--app-config <path>` | The app.config.ts that receives `provideZard()` (ignored for libraries) |
60
+ | `--base-color <color>` | Theme base color: `neutral`, `stone`, `zinc`, `gray` or `slate` |
61
+ | `--components-alias` | Import alias for components, defaults to `@/shared/components` |
62
+ | `--utils-alias` | Import alias for utils, defaults to `@/shared/utils` |
63
+
64
+ Every question the wizard asks has a flag. Outside a terminal (CI, pipes) pass `--yes`, and the flags answer the questions:
65
+
66
+ ```bash
67
+ npx zard-cli init --yes --type nx --project web
68
+ ```
69
+
70
+ ### `add`
71
+
72
+ Adds components, blocks and utilities, resolving their dependencies.
73
+
74
+ ```bash
75
+ npx zard-cli add [components...]
76
+ ```
77
+
78
+ | Option | Description |
79
+ | --------------------- | -------------------------------------------------------------- |
80
+ | `-y, --yes` | Skip the confirmation prompt |
81
+ | `-o, --overwrite` | Overwrite existing files |
82
+ | `-c, --cwd <cwd>` | Working directory, defaults to the current one |
83
+ | `-a, --all` | Add every available component |
84
+ | `-p, --path <path>` | Write the components somewhere other than the configured alias |
85
+ | `--index-html <path>` | The index.html that receives the dark-mode theme script |
86
+
87
+ ```bash
88
+ npx zard-cli add dialog # one component
89
+ npx zard-cli add button card input # several at once
90
+ npx zard-cli add sidebar-07 # a block, with the components it needs
91
+ npx zard-cli add --all # everything
92
+ ```
93
+
94
+ ## Project types
95
+
96
+ The project type decides where the components live and what `init` configures. The paths below are the usual defaults: `init` derives the real ones from the project you pick, so an app outside the workspace root, or an Angular workspace that keeps its paths in `tsconfig.base.json`, gets those instead. Each path is also shown as an editable suggestion before anything is written.
97
+
98
+ | Type | Tailwind | TypeScript paths | Providers |
99
+ | ----------------- | -------------------------------------- | -------------------- | ---------------------------------- |
100
+ | `angular` | `.postcssrc.json` at the root | `tsconfig.json` | `src/app/app.config.ts` |
101
+ | `angular-library` | none: the consuming app owns the build | `tsconfig.json` | none |
102
+ | `nx` | `.postcssrc.json` inside the app | `tsconfig.base.json` | `apps/<app>/src/app/app.config.ts` |
103
+ | `nx-library` | none: the consuming app owns the build | `tsconfig.base.json` | none |
104
+ | `analog` | plugin in `vite.config.ts` | `tsconfig.json` | `src/app/app.config.ts` |
105
+
106
+ ## Custom registry
107
+
108
+ The CLI installs from `https://zardui.com/r`. Point it at your own registry with an environment variable:
109
+
110
+ ```bash
111
+ ZARD_REGISTRY_URL=https://registry.acme.dev/r npx zard-cli add button
112
+ ```
113
+
114
+ ## Documentation
115
+
116
+ - [CLI guide](https://www.zardui.com/docs/cli): every option, the non-interactive mode and troubleshooting
117
+ - [Components](https://www.zardui.com/docs/components)
118
+ - [MCP server](https://www.zardui.com/docs/mcp): let your AI assistant install components through this CLI
119
+
120
+ ## License
121
+
122
+ [MIT](https://github.com/zard-ui/zardui/blob/master/LICENSE.md)
@@ -1,8 +1,9 @@
1
- import { Config } from '../../utils/config';
1
+ import { Config } from '../../utils/config.js';
2
2
  export declare function validateTargetPath(targetDir: string, projectRoot: string): void;
3
3
  export declare function installComponent(componentName: string, targetDir: string, config: Config & {
4
4
  resolvedPaths: any;
5
5
  }, options?: {
6
6
  customPath?: boolean;
7
+ isBlock?: boolean;
7
8
  }): Promise<void>;
8
9
  //# sourceMappingURL=component-installer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"component-installer.d.ts","sourceRoot":"","sources":["../../../src/commands/add/component-installer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAO3C,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAS/E;AAED,wBAAsB,gBAAgB,CACpC,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GAAG;IAAE,aAAa,EAAE,GAAG,CAAA;CAAE,EACvC,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,GACrC,OAAO,CAAC,IAAI,CAAC,CA4Bf"}
1
+ {"version":3,"file":"component-installer.d.ts","sourceRoot":"","sources":["../../../src/commands/add/component-installer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAO3C,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAS/E;AAED,wBAAsB,gBAAgB,CACpC,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GAAG;IAAE,aAAa,EAAE,GAAG,CAAA;CAAE,EACvC,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,GACxD,OAAO,CAAC,IAAI,CAAC,CA6Bf"}
@@ -1,12 +1,13 @@
1
+ import { isPublishableLibrary } from '../init/library-peers.js';
1
2
  import { CliError, InstallError } from '../../utils/errors.js';
2
3
  import { logger } from '../../utils/logger.js';
3
- import { fetchComponent } from '../../utils/registry.js';
4
+ import { fetchComponent, relativizeImports } from '../../utils/registry.js';
4
5
  import { promises as fs } from 'node:fs';
5
6
  import * as path from 'node:path';
6
7
  export function validateTargetPath(targetDir, projectRoot) {
7
- // Comparar prefixo de string deixava passar o diretório vizinho: `/proj-evil`
8
- // começa com `/proj` sem estar dentro dele. O caminho relativo responde a
9
- // pergunta certa — está contido? — e ainda normaliza os `..` do meio.
8
+ // Comparing string prefixes let a sibling directory through: `/proj-evil`
9
+ // starts with `/proj` without being inside it. The relative path answers the
10
+ // right question — is it contained? — and normalizes any `..` along the way.
10
11
  const relative = path.relative(path.resolve(projectRoot), path.resolve(targetDir));
11
12
  if (relative.startsWith('..') || path.isAbsolute(relative)) {
12
13
  throw new CliError('Target path must be within the project directory', 'INVALID_PATH');
@@ -15,12 +16,13 @@ export function validateTargetPath(targetDir, projectRoot) {
15
16
  export async function installComponent(componentName, targetDir, config, options = {}) {
16
17
  const component = await fetchComponent(componentName, config, undefined, {
17
18
  siblingComponents: options.customPath,
19
+ isBlock: options.isBlock,
18
20
  });
19
21
  await fs.mkdir(targetDir, { recursive: true });
20
22
  const writtenFiles = [];
21
23
  try {
22
24
  for (const file of component.files) {
23
- const filePath = await installComponentFile(file, targetDir);
25
+ const filePath = await installComponentFile(file, targetDir, libraryTargets(config));
24
26
  writtenFiles.push(filePath);
25
27
  }
26
28
  }
@@ -35,11 +37,27 @@ export async function installComponent(componentName, targetDir, config, options
35
37
  throw new InstallError(`Failed to install component "${componentName}": ${error instanceof Error ? error.message : error}`, componentName);
36
38
  }
37
39
  }
38
- async function installComponentFile(file, targetDir) {
40
+ /**
41
+ * In a publishable library, the directory each alias stands for — `null` anywhere else.
42
+ *
43
+ * Applications keep the aliases, which their own build resolves. A library is
44
+ * bundled by ng-packagr, which leaves aliased imports external: see
45
+ * `relativizeImports`.
46
+ */
47
+ function libraryTargets(config) {
48
+ if (!isPublishableLibrary(config, config.resolvedPaths['baseUrl']))
49
+ return null;
50
+ return Object.fromEntries(['components', 'utils', 'core', 'services', 'blocks'].map(key => [
51
+ config.aliases[key],
52
+ config.resolvedPaths[key],
53
+ ]));
54
+ }
55
+ async function installComponentFile(file, targetDir, targets) {
39
56
  const filePath = path.join(targetDir, file.name);
40
57
  const fileDir = path.dirname(filePath);
58
+ const content = targets ? relativizeImports(file.content, filePath, targets) : file.content;
41
59
  await fs.mkdir(fileDir, { recursive: true });
42
- await fs.writeFile(filePath, file.content, 'utf8');
60
+ await fs.writeFile(filePath, content, 'utf8');
43
61
  return filePath;
44
62
  }
45
63
  //# sourceMappingURL=component-installer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"component-installer.js","sourceRoot":"","sources":["../../../src/commands/add/component-installer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAgB,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,MAAM,UAAU,kBAAkB,CAAC,SAAiB,EAAE,WAAmB;IACvE,8EAA8E;IAC9E,0EAA0E;IAC1E,sEAAsE;IACtE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAEnF,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,QAAQ,CAAC,kDAAkD,EAAE,cAAc,CAAC,CAAC;IACzF,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,aAAqB,EACrB,SAAiB,EACjB,MAAuC,EACvC,UAAoC,EAAE;IAEtC,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE;QACvE,iBAAiB,EAAE,OAAO,CAAC,UAAU;KACtC,CAAC,CAAC;IAEH,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/C,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,IAAI,CAAC;QACH,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAC7D,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,qCAAqC;QACrC,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;YACpC,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBACnC,2BAA2B;YAC7B,CAAC,CAAC,CAAC;QACL,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,eAAe,YAAY,CAAC,MAAM,2BAA2B,aAAa,GAAG,CAAC,CAAC;QAE5F,MAAM,IAAI,YAAY,CACpB,gCAAgC,aAAa,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,EACnG,aAAa,CACd,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,IAA8B,EAAE,SAAiB;IACnF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEvC,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAEnD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"component-installer.js","sourceRoot":"","sources":["../../../src/commands/add/component-installer.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  /**
2
- * Resolve quais componentes o comando deve instalar a partir dos argumentos.
2
+ * Works out which components the command should install, from its arguments.
3
3
  *
4
- * Devolve uma lista vazia quando não há nada informado: nesse caso quem escolhe
5
- * é o wizard (ou, sem terminal interativo, o comando falha pedindo os nomes).
4
+ * Returns an empty list when nothing was given: the wizard picks in that case
5
+ * (or, with no interactive terminal, the command fails asking for the names).
6
6
  */
7
7
  export declare function selectComponents(components: string[], allFlag: boolean): Promise<string[]>;
8
8
  //# sourceMappingURL=component-selector.d.ts.map
@@ -1,9 +1,9 @@
1
- import { getAllComponentNames } from '../../commands/add/dependency-resolver.js';
1
+ import { getAllComponentNames } from './dependency-resolver.js';
2
2
  /**
3
- * Resolve quais componentes o comando deve instalar a partir dos argumentos.
3
+ * Works out which components the command should install, from its arguments.
4
4
  *
5
- * Devolve uma lista vazia quando não há nada informado: nesse caso quem escolhe
6
- * é o wizard (ou, sem terminal interativo, o comando falha pedindo os nomes).
5
+ * Returns an empty list when nothing was given: the wizard picks in that case
6
+ * (or, with no interactive terminal, the command fails asking for the names).
7
7
  */
8
8
  export async function selectComponents(components, allFlag) {
9
9
  if (allFlag)
@@ -3,7 +3,9 @@ export declare function updateProvideZardWithDarkMode(cwd: string, resolvedConfi
3
3
  resolvedPaths: {
4
4
  core: string;
5
5
  services: string;
6
+ baseUrl: string;
6
7
  };
7
8
  aliases?: Config['aliases'];
9
+ projectType?: Config['projectType'];
8
10
  }): Promise<void>;
9
11
  //# sourceMappingURL=dark-mode-setup.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dark-mode-setup.d.ts","sourceRoot":"","sources":["../../../src/commands/add/dark-mode-setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAanD,wBAAsB,6BAA6B,CACjD,GAAG,EAAE,MAAM,EACX,cAAc,EAAE;IAAE,aAAa,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAA;CAAE,GACjG,OAAO,CAAC,IAAI,CAAC,CAwCf"}
1
+ {"version":3,"file":"dark-mode-setup.d.ts","sourceRoot":"","sources":["../../../src/commands/add/dark-mode-setup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAmCnD,wBAAsB,6BAA6B,CACjD,GAAG,EAAE,MAAM,EACX,cAAc,EAAE;IACd,aAAa,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACnE,OAAO,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;CACrC,GACA,OAAO,CAAC,IAAI,CAAC,CAwCf"}
@@ -1,3 +1,4 @@
1
+ import { isPublishableLibrary } from '../init/library-peers.js';
1
2
  import { logger } from '../../utils/logger.js';
2
3
  import { withImport } from '../../utils/source-file.js';
3
4
  import { existsSync } from 'fs';
@@ -6,6 +7,19 @@ import * as path from 'path';
6
7
  function getDarkModeImport(servicesAlias) {
7
8
  return `import { ZardDarkMode } from '${servicesAlias ?? '@/shared/services'}/dark-mode';`;
8
9
  }
10
+ /**
11
+ * How providezard.ts reaches the services folder.
12
+ *
13
+ * An application keeps the alias. A library imports it relatively: ng-packagr
14
+ * leaves aliased imports external, and the published package would point at a
15
+ * path only the library's workspace maps — see `relativizeImports`.
16
+ */
17
+ function servicesSpecifier(provideZardPath, resolvedConfig) {
18
+ if (!isPublishableLibrary(resolvedConfig, resolvedConfig.resolvedPaths.baseUrl)) {
19
+ return resolvedConfig.aliases?.services;
20
+ }
21
+ return path.relative(path.dirname(provideZardPath), resolvedConfig.resolvedPaths.services).split(path.sep).join('/');
22
+ }
9
23
  const DARK_MODE_INITIALIZER = 'provideAppInitializer(() => inject(ZardDarkMode).init())';
10
24
  export async function updateProvideZardWithDarkMode(cwd, resolvedConfig) {
11
25
  const provideZardPath = path.join(resolvedConfig.resolvedPaths.core, 'provider/providezard.ts');
@@ -24,7 +38,7 @@ export async function updateProvideZardWithDarkMode(cwd, resolvedConfig) {
24
38
  if (!content.includes('provideAppInitializer')) {
25
39
  content = content.replace(/import \{ (.*) \} from '@angular\/core';/, "import { $1, provideAppInitializer } from '@angular/core';");
26
40
  }
27
- content = withImport(content, getDarkModeImport(resolvedConfig.aliases?.services));
41
+ content = withImport(content, getDarkModeImport(servicesSpecifier(provideZardPath, resolvedConfig)));
28
42
  content = content.replace(/return makeEnvironmentProviders\(\[(.*?)\]\);/s, (match, providers) => {
29
43
  const trimmedProviders = providers.trim();
30
44
  if (trimmedProviders) {
@@ -1 +1 @@
1
- {"version":3,"file":"dark-mode-setup.js","sourceRoot":"","sources":["../../../src/commands/add/dark-mode-setup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,KAAK,UAAU,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,SAAS,iBAAiB,CAAC,aAAsB;IAC/C,OAAO,iCAAiC,aAAa,IAAI,mBAAmB,cAAc,CAAC;AAC7F,CAAC;AAED,MAAM,qBAAqB,GAAG,0DAA0D,CAAC;AAEzF,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,GAAW,EACX,cAAkG;IAElG,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAC;IAEhG,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;QAC5E,OAAO;IACT,CAAC;IAED,IAAI,OAAO,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IAEjE,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;QAC9D,OAAO;IACT,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACjC,OAAO,GAAG,OAAO,CAAC,OAAO,CACvB,0CAA0C,EAC1C,6CAA6C,CAC9C,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;QAC/C,OAAO,GAAG,OAAO,CAAC,OAAO,CACvB,0CAA0C,EAC1C,4DAA4D,CAC7D,CAAC;IACJ,CAAC;IAED,OAAO,GAAG,UAAU,CAAC,OAAO,EAAE,iBAAiB,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEnF,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,gDAAgD,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;QAC/F,MAAM,gBAAgB,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;QAC1C,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO,oCAAoC,qBAAqB,KAAK,gBAAgB,KAAK,CAAC;QAC7F,CAAC;QACD,OAAO,oCAAoC,qBAAqB,KAAK,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,MAAM,UAAU,CAAC,SAAS,CAAC,eAAe,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC/D,CAAC"}
1
+ {"version":3,"file":"dark-mode-setup.js","sourceRoot":"","sources":["../../../src/commands/add/dark-mode-setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAE3E,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,KAAK,UAAU,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,SAAS,iBAAiB,CAAC,aAAsB;IAC/C,OAAO,iCAAiC,aAAa,IAAI,mBAAmB,cAAc,CAAC;AAC7F,CAAC;AAED;;;;;;GAMG;AACH,SAAS,iBAAiB,CACxB,eAAuB,EACvB,cAIC;IAED,IAAI,CAAC,oBAAoB,CAAC,cAAc,EAAE,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;QAChF,OAAO,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC1C,CAAC;IAED,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,cAAc,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvH,CAAC;AAED,MAAM,qBAAqB,GAAG,0DAA0D,CAAC;AAEzF,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,GAAW,EACX,cAIC;IAED,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAC;IAEhG,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;QAC5E,OAAO;IACT,CAAC;IAED,IAAI,OAAO,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IAEjE,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;QAC9D,OAAO;IACT,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACjC,OAAO,GAAG,OAAO,CAAC,OAAO,CACvB,0CAA0C,EAC1C,6CAA6C,CAC9C,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;QAC/C,OAAO,GAAG,OAAO,CAAC,OAAO,CACvB,0CAA0C,EAC1C,4DAA4D,CAC7D,CAAC;IACJ,CAAC;IAED,OAAO,GAAG,UAAU,CAAC,OAAO,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IAErG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,gDAAgD,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;QAC/F,MAAM,gBAAgB,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;QAC1C,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO,oCAAoC,qBAAqB,KAAK,gBAAgB,KAAK,CAAC;QAC7F,CAAC;QACD,OAAO,oCAAoC,qBAAqB,KAAK,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,MAAM,UAAU,CAAC,SAAS,CAAC,eAAe,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC/D,CAAC"}
@@ -1,14 +1,19 @@
1
1
  import { Config } from '../../utils/config.js';
2
- import { type RegistryIndex } from '../../utils/registry.js';
2
+ import { type RegistryIcons, type RegistryIndex } from '../../utils/registry.js';
3
+ export declare function isItemInstalled(dir: string, files: readonly string[]): boolean;
3
4
  export declare function getTargetDir(component: ComponentMeta, resolvedConfig: Config & {
4
5
  resolvedPaths: any;
5
6
  }, cwd: string, customPath?: string): string;
6
7
  export interface ComponentMeta {
7
8
  name: string;
8
9
  basePath?: string;
10
+ /** Blocks are fetched from `/blocks/` and written one directory per block. */
11
+ isBlock?: boolean;
12
+ files?: string[];
9
13
  dependencies?: string[];
10
14
  devDependencies?: string[];
11
15
  registryDependencies?: string[];
16
+ icons?: RegistryIcons;
12
17
  }
13
18
  export interface ResolvedDependencies {
14
19
  componentsToInstall: ComponentMeta[];
@@ -17,6 +22,8 @@ export interface ResolvedDependencies {
17
22
  export declare function getRegistryIndex(forceRefresh?: boolean): Promise<RegistryIndex>;
18
23
  export declare function getComponentMeta(name: string): Promise<ComponentMeta | undefined>;
19
24
  export declare function getAllComponentNames(): Promise<string[]>;
25
+ /** Everything `add` accepts by name: components first, then blocks. */
26
+ export declare function getAllInstallableNames(): Promise<string[]>;
20
27
  export declare function resolveDependencies(selectedComponents: string[], resolvedConfig: Config & {
21
28
  resolvedPaths: any;
22
29
  }, cwd: string, options: {
@@ -1 +1 @@
1
- {"version":3,"file":"dependency-resolver.d.ts","sourceRoot":"","sources":["../../../src/commands/add/dependency-resolver.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,OAAO,EAA+C,KAAK,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAa1G,wBAAgB,YAAY,CAC1B,SAAS,EAAE,aAAa,EACxB,cAAc,EAAE,MAAM,GAAG;IAAE,aAAa,EAAE,GAAG,CAAA;CAAE,EAC/C,GAAG,EAAE,MAAM,EACX,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAoBR;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC,mBAAmB,EAAE,aAAa,EAAE,CAAC;IACrC,qBAAqB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACpC;AAED,wBAAsB,gBAAgB,CAAC,YAAY,UAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,CAKnF;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAYvF;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAG9D;AAED,wBAAsB,mBAAmB,CACvC,kBAAkB,EAAE,MAAM,EAAE,EAC5B,cAAc,EAAE,MAAM,GAAG;IAAE,aAAa,EAAE,GAAG,CAAA;CAAE,EAC/C,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7D,OAAO,CAAC,oBAAoB,CAAC,CA4C/B"}
1
+ {"version":3,"file":"dependency-resolver.d.ts","sourceRoot":"","sources":["../../../src/commands/add/dependency-resolver.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAG/C,OAAO,EAKL,KAAK,aAAa,EAClB,KAAK,aAAa,EACnB,MAAM,yBAAyB,CAAC;AAUjC,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAK9E;AAED,wBAAgB,YAAY,CAC1B,SAAS,EAAE,aAAa,EACxB,cAAc,EAAE,MAAM,GAAG;IAAE,aAAa,EAAE,GAAG,CAAA;CAAE,EAC/C,GAAG,EAAE,MAAM,EACX,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CA8CR;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,mBAAmB,EAAE,aAAa,EAAE,CAAC;IACrC,qBAAqB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACpC;AAED,wBAAsB,gBAAgB,CAAC,YAAY,UAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,CAKnF;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAiBvF;AAoBD,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAG9D;AAED,uEAAuE;AACvE,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAGhE;AAED,wBAAsB,mBAAmB,CACvC,kBAAkB,EAAE,MAAM,EAAE,EAC5B,cAAc,EAAE,MAAM,GAAG;IAAE,aAAa,EAAE,GAAG,CAAA;CAAE,EAC/C,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7D,OAAO,CAAC,oBAAoB,CAAC,CA4C/B"}
@@ -1,20 +1,50 @@
1
- import { existsSync, readdirSync } from 'fs';
1
+ import { existsSync } from 'fs';
2
2
  import * as path from 'path';
3
+ import { iconPackagesFor } from '../../core/icons/index.js';
4
+ import { iconCatalog } from '../../utils/icon-catalog.js';
3
5
  import { logger } from '../../utils/logger.js';
4
- import { fetchRegistryIndex, invalidateRegistryCache } from '../../utils/registry.js';
5
- function isComponentInstalled(dir) {
6
+ import { fetchBlocksIndex, fetchRegistryIndex, getAvailableBlocks, invalidateRegistryCache, } from '../../utils/registry.js';
7
+ /*
8
+ * An item is installed when every file it declares already exists.
9
+ *
10
+ * The old question was "does the directory hold any file?", which only works
11
+ * for an item that lives alone. Typeset is written next to the project's
12
+ * global stylesheet, a directory that is never empty — it would be skipped
13
+ * every time. On the way, a half-installed item is now completed, not skipped.
14
+ */
15
+ export function isItemInstalled(dir, files) {
6
16
  if (!existsSync(dir))
7
17
  return false;
8
- try {
9
- const files = readdirSync(dir);
10
- return files.length > 0;
11
- }
12
- catch {
18
+ if (!files.length)
13
19
  return false;
14
- }
20
+ return files.every(file => existsSync(path.join(dir, file)));
15
21
  }
16
22
  export function getTargetDir(component, resolvedConfig, cwd, customPath) {
17
23
  const basePath = component.basePath ?? component.name;
24
+ /*
25
+ * A stylesheet goes next to the global CSS declared in components.json, not
26
+ * inside components/. That is what lets the `@import './typeset.css'` the
27
+ * setup injects resolve without a brittle relative path.
28
+ *
29
+ * It comes before `customPath` on purpose: --path moves components, and a
30
+ * stylesheet that moved with them would be imported from a directory it does
31
+ * not sit in — the install would report success and style nothing.
32
+ */
33
+ if (basePath === 'styles') {
34
+ return path.dirname(resolvedConfig.resolvedPaths.tailwindCss);
35
+ }
36
+ /*
37
+ * A block is a folder, not a file: it brings up to 22 sources that only make
38
+ * sense together, so each one gets a directory of its own under the blocks
39
+ * alias — or under `--path`, for the same reason components honour it.
40
+ *
41
+ * Before the generic `--path` branch: that one appends the basePath, which
42
+ * would drop every block into a shared `<path>/blocks` and mix their files.
43
+ */
44
+ if (basePath === 'blocks') {
45
+ const root = customPath ? path.resolve(cwd, customPath) : resolvedConfig.resolvedPaths.blocks;
46
+ return path.join(root, component.name);
47
+ }
18
48
  if (customPath) {
19
49
  return path.resolve(cwd, customPath, basePath);
20
50
  }
@@ -38,20 +68,46 @@ export async function getRegistryIndex(forceRefresh = false) {
38
68
  export async function getComponentMeta(name) {
39
69
  const index = await getRegistryIndex();
40
70
  const item = index.items.find(i => i.name === name);
71
+ // Blocks live in a separate index, and a block id never collides with a
72
+ // component name — so the component registry answers first and blocks fill in.
41
73
  if (!item)
42
- return undefined;
74
+ return getBlockMeta(name);
43
75
  return {
44
76
  name: item.name,
45
77
  basePath: item.basePath,
78
+ files: item.files,
46
79
  dependencies: item.dependencies,
47
80
  devDependencies: item.devDependencies,
48
81
  registryDependencies: item.registryDependencies,
82
+ icons: item.icons,
83
+ };
84
+ }
85
+ /** The block behind an id, as a `ComponentMeta` the installer can carry. */
86
+ async function getBlockMeta(name) {
87
+ const blocks = await fetchBlocksIndex();
88
+ const block = blocks.blocks.find(entry => entry.id === name);
89
+ if (!block)
90
+ return undefined;
91
+ return {
92
+ name: block.id,
93
+ basePath: 'blocks',
94
+ isBlock: true,
95
+ // The index does not list a block's files, so `isItemInstalled` cannot tell
96
+ // whether it is already there. Re-adding a block rewrites it, which is the
97
+ // safe end of that trade.
98
+ dependencies: block.dependencies,
99
+ registryDependencies: block.registryDependencies,
49
100
  };
50
101
  }
51
102
  export async function getAllComponentNames() {
52
103
  const index = await getRegistryIndex();
53
104
  return index.items.map(item => item.name);
54
105
  }
106
+ /** Everything `add` accepts by name: components first, then blocks. */
107
+ export async function getAllInstallableNames() {
108
+ const [components, blocks] = await Promise.all([getAllComponentNames(), getAvailableBlocks()]);
109
+ return [...components, ...blocks];
110
+ }
55
111
  export async function resolveDependencies(selectedComponents, resolvedConfig, cwd, options) {
56
112
  const componentMetas = [];
57
113
  for (const name of selectedComponents) {
@@ -68,11 +124,11 @@ export async function resolveDependencies(selectedComponents, resolvedConfig, cw
68
124
  const componentsToInstall = [];
69
125
  for (const component of componentMetas) {
70
126
  const targetDir = getTargetDir(component, resolvedConfig, cwd, options.path);
71
- if (isComponentInstalled(targetDir) && !options.overwrite) {
127
+ if (isItemInstalled(targetDir, component.files ?? []) && !options.overwrite) {
72
128
  continue;
73
129
  }
74
130
  componentsToInstall.push(component);
75
- addComponentDependencies(component, dependenciesToInstall);
131
+ addComponentDependencies(component, dependenciesToInstall, resolvedConfig.icons);
76
132
  if (component.registryDependencies && !options.all) {
77
133
  await resolveRegistryDependencies(component, componentsToInstall, dependenciesToInstall, resolvedConfig, cwd, options);
78
134
  }
@@ -82,22 +138,37 @@ export async function resolveDependencies(selectedComponents, resolvedConfig, cw
82
138
  dependenciesToInstall,
83
139
  };
84
140
  }
85
- function addComponentDependencies(component, dependenciesToInstall) {
141
+ /**
142
+ * The npm dependencies the component requires.
143
+ *
144
+ * Beyond the declared ones, anything that draws icons needs ng-icons and the
145
+ * package of the configured family. That does not come from the registry: the
146
+ * registry publishes WHICH icons a component uses, and which family they come
147
+ * from is the installing project's decision. Installing inside `add` also
148
+ * covers anyone who switched family after init.
149
+ */
150
+ function addComponentDependencies(component, dependenciesToInstall, iconFamily) {
86
151
  component.dependencies?.forEach(dep => dependenciesToInstall.add(dep));
152
+ if (component.icons?.symbols?.length) {
153
+ iconPackagesFor(iconFamily, iconCatalog()).forEach(pkg => dependenciesToInstall.add(pkg));
154
+ }
87
155
  }
88
156
  async function resolveRegistryDependencies(component, componentsToInstall, dependenciesToInstall, resolvedConfig, cwd, options) {
89
157
  if (!component.registryDependencies)
90
158
  return;
91
159
  for (const dep of component.registryDependencies) {
92
160
  const depComponent = await getComponentMeta(dep);
93
- if (!depComponent)
161
+ if (!depComponent) {
162
+ logger.warn(`"${component.name}" depends on "${dep}", which the registry does not publish. ` +
163
+ 'The component may not compile — please report it.');
94
164
  continue;
165
+ }
95
166
  if (componentsToInstall.find(c => c.name === dep))
96
167
  continue;
97
168
  const depTargetDir = getTargetDir(depComponent, resolvedConfig, cwd, options.path);
98
- if (!isComponentInstalled(depTargetDir) || options.overwrite) {
169
+ if (!isItemInstalled(depTargetDir, depComponent.files ?? []) || options.overwrite) {
99
170
  componentsToInstall.push(depComponent);
100
- addComponentDependencies(depComponent, dependenciesToInstall);
171
+ addComponentDependencies(depComponent, dependenciesToInstall, resolvedConfig.icons);
101
172
  if (depComponent.registryDependencies) {
102
173
  await resolveRegistryDependencies(depComponent, componentsToInstall, dependenciesToInstall, resolvedConfig, cwd, options);
103
174
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dependency-resolver.js","sourceRoot":"","sources":["../../../src/commands/add/dependency-resolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dependency-resolver.js","sourceRoot":"","sources":["../../../src/commands/add/dependency-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,GAGxB,MAAM,yBAAyB,CAAC;AAEjC;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW,EAAE,KAAwB;IACnE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAEhC,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,SAAwB,EACxB,cAA+C,EAC/C,GAAW,EACX,UAAmB;IAEnB,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,IAAI,CAAC;IAEtD;;;;;;;;OAQG;IACH,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAChE,CAAC;IAED;;;;;;;OAOG;IACH,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,aAAa,CAAC,MAAM,CAAC;QAC9F,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,QAAQ,KAAK,MAAM,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACrD,OAAO,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC;IAC3C,CAAC;IAED,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC5B,OAAO,cAAc,CAAC,aAAa,CAAC,QAAQ,CAAC;IAC/C,CAAC;IAED,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO,cAAc,CAAC,aAAa,CAAC,KAAK,CAAC;IAC5C,CAAC;IAED,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AACzE,CAAC;AAmBD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,YAAY,GAAG,KAAK;IACzD,IAAI,YAAY,EAAE,CAAC;QACjB,uBAAuB,EAAE,CAAC;IAC5B,CAAC;IACD,OAAO,kBAAkB,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAY;IACjD,MAAM,KAAK,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACvC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAEpD,wEAAwE;IACxE,+EAA+E;IAC/E,IAAI,CAAC,IAAI;QAAE,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;IAErC,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,eAAe,EAAE,IAAI,CAAC,eAAe;QACrC,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;QAC/C,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC;AACJ,CAAC;AAED,4EAA4E;AAC5E,KAAK,UAAU,YAAY,CAAC,IAAY;IACtC,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;IAC7D,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAE7B,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,EAAE;QACd,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,IAAI;QACb,4EAA4E;QAC5E,2EAA2E;QAC3E,0BAA0B;QAC1B,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;KACjD,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,MAAM,KAAK,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACvC,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5C,CAAC;AAED,uEAAuE;AACvE,MAAM,CAAC,KAAK,UAAU,sBAAsB;IAC1C,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,oBAAoB,EAAE,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC;IAC/F,OAAO,CAAC,GAAG,UAAU,EAAE,GAAG,MAAM,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,kBAA4B,EAC5B,cAA+C,EAC/C,GAAW,EACX,OAA8D;IAE9D,MAAM,cAAc,GAAoB,EAAE,CAAC;IAE3C,KAAK,MAAM,IAAI,IAAI,kBAAkB,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,IAAI,EAAE,CAAC;YACT,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAAU,CAAC;IAChD,MAAM,mBAAmB,GAAoB,EAAE,CAAC;IAEhD,KAAK,MAAM,SAAS,IAAI,cAAc,EAAE,CAAC;QACvC,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,EAAE,cAAc,EAAE,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAE7E,IAAI,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YAC5E,SAAS;QACX,CAAC;QAED,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpC,wBAAwB,CAAC,SAAS,EAAE,qBAAqB,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC;QAEjF,IAAI,SAAS,CAAC,oBAAoB,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACnD,MAAM,2BAA2B,CAC/B,SAAS,EACT,mBAAmB,EACnB,qBAAqB,EACrB,cAAc,EACd,GAAG,EACH,OAAO,CACR,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO;QACL,mBAAmB;QACnB,qBAAqB;KACtB,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,wBAAwB,CAC/B,SAAwB,EACxB,qBAAkC,EAClC,UAA2B;IAE3B,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAEvE,IAAI,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QACrC,eAAe,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5F,CAAC;AACH,CAAC;AAED,KAAK,UAAU,2BAA2B,CACxC,SAAwB,EACxB,mBAAoC,EACpC,qBAAkC,EAClC,cAA+C,EAC/C,GAAW,EACX,OAA+C;IAE/C,IAAI,CAAC,SAAS,CAAC,oBAAoB;QAAE,OAAO;IAE5C,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,oBAAoB,EAAE,CAAC;QACjD,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAEjD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,CAAC,IAAI,CACT,IAAI,SAAS,CAAC,IAAI,iBAAiB,GAAG,0CAA0C;gBAC9E,mDAAmD,CACtD,CAAC;YACF,SAAS;QACX,CAAC;QACD,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC;YAAE,SAAS;QAE5D,MAAM,YAAY,GAAG,YAAY,CAAC,YAAY,EAAE,cAAc,EAAE,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAEnF,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,YAAY,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YAClF,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACvC,wBAAwB,CAAC,YAAY,EAAE,qBAAqB,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC;YAEpF,IAAI,YAAY,CAAC,oBAAoB,EAAE,CAAC;gBACtC,MAAM,2BAA2B,CAC/B,YAAY,EACZ,mBAAmB,EACnB,qBAAqB,EACrB,cAAc,EACd,GAAG,EACH,OAAO,CACR,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/add/index.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,eAAO,MAAM,GAAG,SAwEZ,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/add/index.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,eAAO,MAAM,GAAG,SAmGZ,CAAC"}